Skip to content
Blog Screen : 10 Window Settings

Screen : 10 Window Settings

10.1 Naming Windows (Titles)

You can customize each window’s name in the window display by setting it with one of the title commands. Normally the name displayed is the actual command name of the program created in the window. However, it is sometimes useful to distinguish various programs of the same name or to change the name on-the-fly to reflect the current state of the window.

The default name for all shell windows can be set with the shelltitle command. You can specify the name you want for a window with the `-t’ option to the screen command when the window is created. To change the name after the window has been created you can use the title-string escape-sequence (ESC k name ESC \) and the title command (C-a A). The former can be output from an application to control the window’s name under software control, and the latter will prompt for a name when typed. You can also bind predefined names to keys with the title command to set things quickly without prompting.

10.1.1 Title Command

Command: title [windowtitle]
(C-a A)
Set the name of the current window to windowalias. If no name is specified, screen prompts for one.

10.1.2 Dynamic Titles

screen has a shell-specific heuristic that is enabled by setting the window’s name to search|name and arranging to have a null title escape-sequence output as a part of your prompt. The search portion specifies an end-of-prompt search string, while the name portion specifies the default shell name for the window. If the name ends in a `:’ screen will add what it believes to be the current command running in the window to the end of the specified name (e.g. name:cmd). Otherwise the current command name supersedes the shell name while it is running.

Here’s how it works: you must modify your shell prompt to output a null title-escape-sequence (ESC k ESC \) as a part of your prompt. The last part of your prompt must be the same as the string you specified for the search portion of the title. Once this is set up, screen will use the title-escape-sequence to clear the previous command name and get ready for the next command. Then, when a newline is received from the shell, a search is made for the end of the prompt. If found, it will grab the first word after the matched string and use it as the command name. If the command name begins with `!’, `%’, or `^’, screen will use the first word on the following line (if found) in preference to the just-found name. This helps csh users get more accurate titles when using job control or history recall commands.

10.1.3 Setting up your prompt for shell titles

One thing to keep in mind when adding a null title-escape-sequence to your prompt is that some shells (like the csh) count all the non-control characters as part of the prompt’s length. If these invisible characters aren’t a multiple of 8 then backspacing over a tab will result in an incorrect display. One way to get around this is to use a prompt like this:

set prompt='[0000mk\% '

The escape-sequence `[0000m’ not only normalizes the character attributes, but all the zeros round the length of the invisible characters up to 8.

Tcsh handles escape codes in the prompt more intelligently, so you can specify your prompt like this:

set prompt=”%{\ek\e\\%}\% “

Bash users will probably want to echo the escape sequence in the PROMPT_COMMAND:

PROMPT_COMMAND=’echo -n -e “33k33\134″‘

(I used `\134′ to output a `\’ because of a bug in v1.04).
10.1.4 Setting up shell titles in your `.screenrc’

Here are some .screenrc examples:

screen -t top 2 nice top

Adding this line to your .screenrc would start a niced version of the top command in window 2 named `top’ rather than `nice’.

shelltitle ‘> |csh’
screen 1

This file would start a shell using the given shelltitle. The title specified is an auto-title that would expect the prompt and the typed command to look something like the following:

/usr/joe/src/dir> trn

(it looks after the ‘> ‘ for the command name). The window status would show the name `trn’ while the command was running, and revert to `csh’ upon completion.

bind R screen -t ‘% |root:’ su

Having this command in your .screenrc would bind the key sequence C-a R to the su command and give it an auto-title name of `root:’. For this auto-title to work, the screen could look something like this:

% !em
emacs file.c

Here the user typed the csh history command !em which ran the previously entered emacs command. The window status would show `root:emacs’ during the execution of the command, and revert to simply `root:’ at its completion.

bind o title
bind E title “”
bind u title (unknown)

The first binding doesn’t have any arguments, so it would prompt you for a title when you type C-a o. The second binding would clear an auto-titles current setting (C-a E). The third binding would set the current window’s title to ‘(unknown)’ (C-a u).

10.2 Console

Command: console [state]
(none)
Grabs or un-grabs the machines console output to a window. When the argument is omitted the current state is displayed. Note: Only the owner of `/dev/console’ can grab the console output. This command is only available if the host supports the ioctl TIOCCONS.

10.3 Kill

Command: kill
(C-a k, C-a C-k)
Kill the current window.
If there is an exec command running then it is killed. Otherwise the process (e.g. shell) running in the window receives a HANGUP condition, the window structure is removed and screen (your display) switches to another window. When the last window is destroyed, screen exits. After a kill screen switches to the previously displayed window.
Caution: emacs users may find themselves killing their emacs session when trying to delete the current line. For this reason, it is probably wise to use a different command character or rebind kill to another key sequence, such as C-a K.

10.4 Login

Command: deflogin state
(none)
Same as the login command except that the default setting for new windows is changed. This defaults to `on’ unless otherwise specified at compile time. Both commands are only present when screen has been compiled with utmp support.

Command: login [state]
(C-a L)
Adds or removes the entry in `/etc/utmp’ for the current window. This controls whether or not the window is logged in. In addition to this toggle, it is convenient to have “log in” and “log out” keys. For instance, bind I login on and bind O login off will map these keys to be C-a I and C-a O.

10.5 Mode

Command: defmode mode
(none)
The mode of each newly allocated pseudo-tty is set to mode. mode is an octal number as used by chmod(1). Defaults to 0622 for windows which are logged in, 0600 for others (e.g. when -ln was specified for creation.

10.6 Monitoring

Command: activity message
(none)
When any activity occurs in a background window that is being monitored, screen displays a notification in the message line. The notification message can be redefined by means of the activity command. Each occurrence of `%’ in message is replaced by the number of the window in which activity has occurred, and each occurrence of ‘~’ is replaced by the definition for bell in your termcap (usually an audible bell). The default message is

‘Activity in window %’

Note that monitoring is off for all windows by default, but can be altered by use of the monitor command (C-a M).

Command: defmonitor state
(none)
Same as the monitor command except that the default setting for new windows is changed. Initial setting is `off’.

Command: monitor [state]
(C-a M)
Toggles monitoring of the current window. When monitoring is turned on and the affected window is switched into the background, the activity notification message will be displayed in the status line at the first sign of output, and the window will also be marked with an `@’ in the window-status display. Monitoring defaults to `off’ for all windows.

10.7 Windows

Command: windows
(C-a w, C-a C-w)
Uses the message line to display a list of all the windows. Each window is listed by number with the name of the program running in the window (or its title).

The current window is marked with a `*’; the previous window is marked with a `-‘; all the windows that are logged in are marked with a `$’ a background window that has received a bell is marked with a `!’; a background window that is being monitored and has had activity occur is marked with an `@’; a window which has output logging turned on is marked with `(L)’; windows occupied by other users are marked with `&’ or `&&’ if the window is shared by other users; windows in the zombie state are marked with `Z’.

If this list is too long to fit on the terminal’s status line only the portion around the current window is displayed.

10.8 Hardstatus

Screen maintains a hardstatus line for every window. If a window gets selected, the display’s hardstatus will be updated to match the window’s hardstatus line. The hardstatus line can be changed with the ANSI Application Program Command (APC): `ESC_<string>ESC\’. As a convenience for xterm users the sequence `ESC]0..2;<string>^G’ is also accepted.

Command: defhstatus [status]
(none)
The hardstatus line that all new windows will get is set to status. This command is useful to make the hardstatus of every window display the window number or title or the like. status may contain the same directives as in the window messages, but the directive escape character is `^E’ (octal 005) instead of `%’. This was done to make a misinterpretation of program generated hardstatus lines impossible. If the parameter status is omitted, the current default string is displayed. Per default the hardstatus line of new windows is empty.

Command: hstatus status
(none)
Changes the current window’s hardstatus line to status. (see section 10.4 Login); a background window that has received a bell is marked with a `!’; a background window that is being monitored and has had activity occur is marked with an `@’ (see section 10.6 Monitoring); a window which has output logging turned on is marked with `(L)’; windows occupied by other users are marked with `&’ or `&&’ if the window is shared by other users; windows in the zombie state are marked with `Z’.

If this list is too long to fit on the terminal’s status line only the portion around the current window is displayed.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.