diff options
author | Axel Beckert <abe@deuxchevaux.org> | 2011-09-03 14:05:19 +0200 |
---|---|---|
committer | Axel Beckert <abe@deuxchevaux.org> | 2011-09-03 14:05:19 +0200 |
commit | 0636e9ecb5a32db4d4520f50a20652faa825feaf (patch) | |
tree | b94df9221e8ae0de0dc3afac301d5b63b136a7b4 /doc | |
download | screen-0636e9ecb5a32db4d4520f50a20652faa825feaf.tar.gz |
Imported Upstream version 3.7.2upstream/3.7.2
Diffstat (limited to 'doc')
-rw-r--r-- | doc/FAQ | 253 | ||||
-rw-r--r-- | doc/Makefile.in | 54 | ||||
-rw-r--r-- | doc/fdpat.ps | 6501 | ||||
-rwxr-xr-x | doc/install.sh | 119 | ||||
-rw-r--r-- | doc/screen.1 | 3349 | ||||
-rw-r--r-- | doc/screen.info | 167 | ||||
-rw-r--r-- | doc/screen.info-1 | 1514 | ||||
-rw-r--r-- | doc/screen.info-2 | 1255 | ||||
-rw-r--r-- | doc/screen.info-3 | 1381 | ||||
-rw-r--r-- | doc/screen.info-4 | 375 | ||||
-rw-r--r-- | doc/screen.texinfo | 4061 |
11 files changed, 19029 insertions, 0 deletions
@@ -0,0 +1,253 @@ + jw 21.10.93 + 05.05.94 + + screen: frequently asked questions -- known problems -- unimplemented bugs +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + + +Q: Why is it impossible to download a file with Kermit/sz/rz when + screen is running? Do I need to set some special variables? + +A: Screen always interprets control-sequences sent by the + applications and translates/optimizes them for the current + terminal type. Screen always parses the user input for its + escape character (CTRL-A). Both are basic screen features and + cannot be switched off. Even if it were possible to switch + screen into a completely transparent mode, you could never switch + between windows, while kermit/sz/rz is downloading a file. You + must wait til the end as kermit/sz/rz will not transmit your + input during a file transfer and as kermit/sz/rz would be very + confused if screen switched away the window containing the + other kermit/sz/rz. Simply detach your screen session for each + file transfer and start the transfer program only from the shell + where you started screen. + +Q: I am using screen with a YYY terminal, which supports the XXX + graphic language. I am very happy with it, except one thing: I + cannot render graphics into screen windows. + +A: You are out of luck there. Screen provides a fixed set of escape + sequences in order to make it possible to switch terminal types. + Screen has to know exactly what the escape sequences do to the + terminal because it must hold an image in memory. Otherwise + screen could not restore the image if you switch to another + window. Because of this you have to change screens escape + sequence parser (ansi.c) to pass the XXX graphics sequences to + the terminal. Of course the graphics will be lost if you switch + to another window. Screen will only honour graphics sequences + that are demanded by an overwhelming majority. + +Q: For some unknown reason, the fifo in /tmp/screens/S-myname is + gone, and i can't resume my screen session. Is there a way to + recreate the fifo? + +A: Screen checks the fifo/socket whenever it receives a SIGCHLD + signal. If missing, the fifo/socket is recreated then. If screen + is running non set-uid the user can issue a 'kill -CHLD + screenpid' directly (it is -CHILD on some systems). Screenpid is + the process-id of the screen process found in a 'ps -x' listing. + But usually this won't work, as screen should be installed set- + uid root. In this case you will not be able to send it a signal, + but the kernel will. It does so, whenever a child of screen + changes its state. Find the process-id (shellpid below) of the + "least important" shell running inside screen. The try 'kill + -STOP shellpid'. If the fifo/socket does not reappear, destroy + the shell process. You sacrify one shell to save the rest. If + nothing works, please do not forget to remove all processes + running in the lost screen session. + +Q: When you start "screen" a page of text comes up to start you + off. Is there a way to get rid of this text as a command line + argument or by using a switch of some sort. + +A: Just put the following line in your ~/.screenrc: + startup_message off + Many peole ask this, although it is in the man page, too :-) + +Q: Start "screen emacs" and run emacs function suspend-emacs + (ctrl-z). The window containing emacs vanishes. + +A: This is a known bug. Unfortunatly there is no easy fix + because this is specified in the POSIX standard. When a new + window is created Screen opens up a new session because the + window has to get the pty as a controlling terminal (a + session can only have one controlling terminal). With the + setsid() call the process also creates a new process + group. This process group is orphaned, because there is no + process in the session which is not in the process + group. Now if the process group leader (i.e. your program) + gets a TTIN/TTOU/TSTP, POSIX states that the kernel must + send a KILL signal to the process group because there is no + one left to continue the process. Even if screen would + try to restart the program, that would be after it received the + KILL signal which cannot be caught or ignored. + + tromey@klab.caltech.edu (Tom Tromey): I've noticed this exact + same problem. I put this in my .emacs file. It seems to work: + + ;; If running under screen, disable C-z. + (if (and (getenv "STY") (not window-system)) + (global-unset-key "\C-z")) + +Q: Screen gets the terminal size wrong and messes up. + +A: Before you start screen: Check with 'stty -a' what the terminal + driver thinks about rows and columns. Check the environment + variables LINES and COLUMNS. Then from within screen check with + the info command (CTRL-A i) what size screen thinks your terminal + is. If correcting tty driver setting and environment variables + does not help, look up the terminal capability definition. First + the TERMCAP environment variable. If this is not set, look up the + terminals name as defined in the environment variable TERM in + /etc/termcap or in the terminfo database with untic or infocmp. + There may be :li=...: and :co=...: or even :ll=...: entries + (cols#... and lines#... when it's terminfo) defined incorrectly. + Either construct your own TERMCAP environment variables with + correct settings, use screens terminfo/termcap command in your + .screenrc file or have the database corrected by the system + administrator. + +Q: Screen messes up the terminal output when I use my favourite ap- + plication. Setting the terminal size does not help. + +A: Probably you got the termcap/terminfo entries wrong. Fixing this + is a three stage procedure. First, find out if terminfo or + termcap is used. If your system only has /etc/termcap, + but not /usr/lib/terminfo/... then you are using termcap. + Easy. But if your system has both, then it depends how the appli- + cation and how screen were linked. Beware, if your applica- + tion runs on another host via rlogin, telnet or the like, you + should check the terminfo/termcap databases there. If you cannot + tell if terminfo or termcap is used (or you just want to be + save), the do all steps in stage 3 in parallel for both + systems (on all envolved hosts). Second: Understand the basic + rules how screen does its terminal emulation. When screen is + started or reattached, it relies on the TERM environment variable + to correctly reflect the terminal type you have physically + in front of you. And the entry should either exist in the system + terminfo/termcap database or be specified via the TERMCAP en- + vironment variable (if screen is using the termcap system). On + the other end, screen understands one set of control codes. It + relies on the application using these codes. This means applica- + tions that run under screen must be able to adapt their con- + trol codes to screen. The application should use the TERM vari- + able and termcap or terminfo library to find out how to drive + its terminal. When running under screen, the terminal is virtual + and is only defined by the set of control codes that screen + understands. The TERM variable is automatically set to + "screen" and the "screen"-entries should exist in the data- + bases. If your application uses hardcoded control codes rather + than a database, you are on your own. Hint: The codes under- + stood by screen are a superset of the very common definition + named "vt100". Look at the documentation of screen. The + codes are listed there. Third: Have the entry "screen" in- + stalled on all hosts or make sure you can live with "vt100". + Check the codes sent by your application, when the TERM variable + is set to "screen". Do not try to set the TERM variable inside + screen to anything other than "screen" or "vt100" or compati- + ble. Thus your application can drive screen correctly. Also take + care that a good entry is installed for your physical terminal + that screen has to drive. Even if the entry was good enough + for your application to drive the terminal directly, screen may + find flaws, as it tries to use other capabilities while op- + timizing the screen output. The screenrc commands + "termcap" and/or "terminfo" may help to fine-tune capabilities + without calling the supervisor to change the database. + +Q: I cannot configure screen. Sed does not work. + +A: The regular expressions used in our configure scrip are too + complicated for GNU sed version 2.03. In this regard it is bug + compatible with Ultrix 3.1 "sed": GNU sed version 2.03 dumps + core with our configure script. Try an older release. E.g. from + ftp.uni-erlangen.de:/pub/utilities/screen/sed-2.02b.tar.gz + +Q: When reattaching a session from a different Workstation, the + DISPLAY environment variable should be updated. Even ``CTLR-A + : setenv DISPLAY newhost:0'' does not work as expected. + +A: Under unix every process has its own environment. The environ- + ment of the SCREEN process can be changed with the `setenv' com- + mand. This however cannot affect the environment of the + shells or applications already running under screen. Subsequently + spawned processes will reflect the changes. One should be aware + of this problem when running applications from very old shells. + Screen is a means for keeping processes alive. + +Q: About once every 5 times I ran the program, rather than getting + a "screen," I got someone elses IRC output/input. + +A: What probably happened is that an IRC process was left running on + a pseudo tty in such a way that the kernel thought the tty was + available for reallocation. You can fix this behaviour by + applying the SunOS 4.1.x tty jumbo patch (100513-04). + +Q: Screen compiled on SunOS 5.3 cannot reattach a detached session. + +A: You are using /usr/ucb/cc, this compiler is wrong. Actually it + links with a C-library that mis-interprets dirent. Try again + with /opt/SUNWspro/bin/cc! + +Q: The "talk" command does not work when Screen is active. + +A: Talk and several other programs rely on entries in the Utmp- + Database (/etc/utmp). On some systems this Database is world + writable, on others it is not. If it is not, screen must be + installed with the appropriate permissions (user or group s-bit) + just like any program that uses PTYs (rlogin, xterm, ...). When + screen cannot write to utmp, you will see messages on you display + which do not belong to any screen window. + When screen can update utmp, it is not guaranteed that it does as + you expect. First this depends on the config.h file defining + UTMPOK, LOGINDEFAULT, and perhaps CAREFULUTMP. Second it depends + on the screenrc files (system wide and per user), if utmp entries + are done. Third, you can control whether windows are logged in + with screens ``login'' command. + +Q: Seteuid() does not work as expected in AIX. Attempting a multi- + user-attach results in a screen-panic: "seteuid: not owner". + +A: This is not a screen problem. According to Kay Nettle + (pkn@cs.utexas.edu) you need the AIX patch PTF 423674. + +Q: When I type cd directory (any directory or just blank) from + within one of the windows in screen, the whole thing just freezes + up. + +A: You display the current working directory in xterm's title bar, + This may be caused by hardcoded ESC-sequences in the shell prompt + or in an cd alias. In Xterm the coding is + ESC ] n ; string_to_display ^G + where n = 1, 2, 3 selects the location of the displayed string. + Screen misinterprets this as the ansi operating system comment + sequence: + ESC ] osc_string + and waits (according to ansi) for the string terminator + ESC \ + Screen versions after 3.5.12 may provide a workaround. + +Q: Mesg or biff cannot be turned on or off while running screen. + +A: Screen failed to change the owner of the pty it uses. You need to + install screen setuid-root. See the file INSTALL for details. + +Q: The cursor left key deletes the characters instead of just moving the + cursor. A redisplay (^Al) brings everything back. + +A: Your terminal emulator treats the backspace as "destructive". You + can probably change this somewhere in the setup. We can't think + of a reason why anybody would want a destructive backspace, but + if you really must have it, add the lines + termcap <TERM> 'bc@:bs@' + terminfo <TERM> 'bc@:bs@' + to your ~/.screenrc (replace <TERM> with the terminal type your + emulator uses). + +Q: I have an old SysV OS (like Motorola SysV68) and sometimes screen + doesn't reset the attributes correctly. A redisplay (^Al) doesn't + make things better. + +A: The libcurses library has a bug if attributes are cleared with + the special ue/se capabilities. As a workaround (other than upgrading + your system) modify 'rmul' (and 'rmso'?) in screen's terminfo entry: + rmul=\E[m, rmso=\E[m diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..ce1930b --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,54 @@ +# Makefile for Screen documentation + +srcdir = @srcdir@ +VPATH = @srcdir@ + +prefix = /usr/local +mandir = $(prefix)/man +infodir = $(prefix)/info + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MAKEINFO = makeinfo +TEXI2DVI = texi2dvi + +SHELL = /bin/sh + +all: screen.info + +dvi screen.dvi: screen.texinfo mostlyclean + $(TEXI2DVI) $(srcdir)/screen.texinfo + +info screen.info: screen.texinfo + $(MAKEINFO) $(srcdir)/screen.texinfo -o screen.info + +install: installdirs + $(INSTALL_DATA) $(srcdir)/screen.1 $(mandir)/man1/screen.1 + -$(MAKE) screen.info + -if test -f screen.info; then d=.; else d=$(srcdir); fi; \ + if test -f $$d/screen.info; then \ + for f in $$d/screen.info*; do $(INSTALL_DATA) $$f $(infodir);done; \ + if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + install-info --infodir=$(infodir) $$d/screen.info; \ + else true; fi; \ + fi + +uninstall: + rm -f $(mandir)/man1/screen.1 + rm -f $(infodir)/screen.info* + +installdirs: + $(srcdir)/../etc/mkinstalldirs $(mandir)/man1 $(infodir) + +mostlyclean: + -rm -f *.cp *.cps *.fn *.fns *.ky *.kys *.pg *.tp *.vr + -rm -f *.log *.aux *.toc *~ + +clean distclean clobber: mostlyclean + -rm -f *.dvi + +realclean: clean + -rm -f *.info* + +check installcheck: + diff --git a/doc/fdpat.ps b/doc/fdpat.ps new file mode 100644 index 0000000..6b10099 --- /dev/null +++ b/doc/fdpat.ps @@ -0,0 +1,6501 @@ +%!PS-Adobe-2.0 EPSF-1.2 +%%DocumentFonts: Courier Helvetica-Bold Times-Roman +%%Pages: 1 +%%BoundingBox: 5 34 589 773 +%%EndComments + +/arrowHeight 10 def +/arrowWidth 5 def + +/IdrawDict 53 dict def +IdrawDict begin + +/reencodeISO { +dup dup findfont dup length dict begin +{ 1 index /FID ne { def }{ pop pop } ifelse } forall +/Encoding ISOLatin1Encoding def +currentdict end definefont +} def + +/ISOLatin1Encoding [ +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright +/parenleft/parenright/asterisk/plus/comma/minus/period/slash +/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon +/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N +/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright +/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m +/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef +/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve +/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut +/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar +/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior +/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine +/guillemotright/onequarter/onehalf/threequarters/questiondown +/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex +/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis +/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute +/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis +/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave +/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex +/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis +/yacute/thorn/ydieresis +] def +/Courier reencodeISO def +/Helvetica-Bold reencodeISO def +/Times-Roman reencodeISO def + +/none null def +/numGraphicParameters 17 def +/stringLimit 65535 def + +/Begin { +save +numGraphicParameters dict begin +} def + +/End { +end +restore +} def + +/SetB { +dup type /nulltype eq { +pop +false /brushRightArrow idef +false /brushLeftArrow idef +true /brushNone idef +} { +/brushDashOffset idef +/brushDashArray idef +0 ne /brushRightArrow idef +0 ne /brushLeftArrow idef +/brushWidth idef +false /brushNone idef +} ifelse +} def + +/SetCFg { +/fgblue idef +/fggreen idef +/fgred idef +} def + +/SetCBg { +/bgblue idef +/bggreen idef +/bgred idef +} def + +/SetF { +/printSize idef +/printFont idef +} def + +/SetP { +dup type /nulltype eq { +pop true /patternNone idef +} { +dup -1 eq { +/patternGrayLevel idef +/patternString idef +} { +/patternGrayLevel idef +} ifelse +false /patternNone idef +} ifelse +} def + +/BSpl { +0 begin +storexyn +newpath +n 1 gt { +0 0 0 0 0 0 1 1 true subspline +n 2 gt { +0 0 0 0 1 1 2 2 false subspline +1 1 n 3 sub { +/i exch def +i 1 sub dup i dup i 1 add dup i 2 add dup false subspline +} for +n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline +} if +n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline +patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if +brushNone not { istroke } if +0 0 1 1 leftarrow +n 2 sub dup n 1 sub dup rightarrow +} if +end +} dup 0 4 dict put def + +/Circ { +newpath +0 360 arc +patternNone not { ifill } if +brushNone not { istroke } if +} def + +/CBSpl { +0 begin +dup 2 gt { +storexyn +newpath +n 1 sub dup 0 0 1 1 2 2 true subspline +1 1 n 3 sub { +/i exch def +i 1 sub dup i dup i 1 add dup i 2 add dup false subspline +} for +n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline +n 2 sub dup n 1 sub dup 0 0 1 1 false subspline +patternNone not { ifill } if +brushNone not { istroke } if +} { +Poly +} ifelse +end +} dup 0 4 dict put def + +/Elli { +0 begin +newpath +4 2 roll +translate +scale +0 0 1 0 360 arc +patternNone not { ifill } if +brushNone not { istroke } if +end +} dup 0 1 dict put def + +/Line { +0 begin +2 storexyn +newpath +x 0 get y 0 get moveto +x 1 get y 1 get lineto +brushNone not { istroke } if +0 0 1 1 leftarrow +0 0 1 1 rightarrow +end +} dup 0 4 dict put def + +/MLine { +0 begin +storexyn +newpath +n 1 gt { +x 0 get y 0 get moveto +1 1 n 1 sub { +/i exch def +x i get y i get lineto +} for +patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if +brushNone not { istroke } if +0 0 1 1 leftarrow +n 2 sub dup n 1 sub dup rightarrow +} if +end +} dup 0 4 dict put def + +/Poly { +3 1 roll +newpath +moveto +-1 add +{ lineto } repeat +closepath +patternNone not { ifill } if +brushNone not { istroke } if +} def + +/Rect { +0 begin +/t exch def +/r exch def +/b exch def +/l exch def +newpath +l b moveto +l t lineto +r t lineto +r b lineto +closepath +patternNone not { ifill } if +brushNone not { istroke } if +end +} dup 0 4 dict put def + +/Text { +ishow +} def + +/idef { +dup where { pop pop pop } { exch def } ifelse +} def + +/ifill { +0 begin +gsave +patternGrayLevel -1 ne { +fgred bgred fgred sub patternGrayLevel mul add +fggreen bggreen fggreen sub patternGrayLevel mul add +fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor +eofill +} { +eoclip +originalCTM setmatrix +pathbbox /t exch def /r exch def /b exch def /l exch def +/w r l sub ceiling cvi def +/h t b sub ceiling cvi def +/imageByteWidth w 8 div ceiling cvi def +/imageHeight h def +bgred bggreen bgblue setrgbcolor +eofill +fgred fggreen fgblue setrgbcolor +w 0 gt h 0 gt and { +l b translate w h scale +w h true [w 0 0 h neg 0 h] { patternproc } imagemask +} if +} ifelse +grestore +end +} dup 0 8 dict put def + +/istroke { +gsave +brushDashOffset -1 eq { +[] 0 setdash +1 setgray +} { +brushDashArray brushDashOffset setdash +fgred fggreen fgblue setrgbcolor +} ifelse +brushWidth setlinewidth +originalCTM setmatrix +stroke +grestore +} def + +/ishow { +0 begin +gsave +fgred fggreen fgblue setrgbcolor +printFont printSize scalefont setfont +/descender 0 printFont /FontBBox get 1 get printFont /FontMatrix +get transform exch pop def +/vertoffset 1 printSize sub descender sub def { +0 vertoffset moveto show +/vertoffset vertoffset printSize sub def +} forall +grestore +end +} dup 0 2 dict put def + +/patternproc { +0 begin +/patternByteLength patternString length def +/patternHeight patternByteLength 8 mul sqrt cvi def +/patternWidth patternHeight def +/patternByteWidth patternWidth 8 idiv def +/imageByteMaxLength imageByteWidth imageHeight mul +stringLimit patternByteWidth sub min def +/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv +patternHeight mul patternHeight max def +/imageHeight imageHeight imageMaxHeight sub store +/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def +0 1 imageMaxHeight 1 sub { +/y exch def +/patternRow y patternByteWidth mul patternByteLength mod def +/patternRowString patternString patternRow patternByteWidth getinterval def +/imageRow y imageByteWidth mul def +0 patternByteWidth imageByteWidth 1 sub { +/x exch def +imageString imageRow x add patternRowString putinterval +} for +} for +imageString +end +} dup 0 12 dict put def + +/min { +dup 3 2 roll dup 4 3 roll lt { exch } if pop +} def + +/max { +dup 3 2 roll dup 4 3 roll gt { exch } if pop +} def + +/midpoint { +0 begin +/y1 exch def +/x1 exch def +/y0 exch def +/x0 exch def +x0 x1 add 2 div +y0 y1 add 2 div +end +} dup 0 4 dict put def + +/thirdpoint { +0 begin +/y1 exch def +/x1 exch def +/y0 exch def +/x0 exch def +x0 2 mul x1 add 3 div +y0 2 mul y1 add 3 div +end +} dup 0 4 dict put def + +/subspline { +0 begin +/movetoNeeded exch def +y exch get /y3 exch def +x exch get /x3 exch def +y exch get /y2 exch def +x exch get /x2 exch def +y exch get /y1 exch def +x exch get /x1 exch def +y exch get /y0 exch def +x exch get /x0 exch def +x1 y1 x2 y2 thirdpoint +/p1y exch def +/p1x exch def +x2 y2 x1 y1 thirdpoint +/p2y exch def +/p2x exch def +x1 y1 x0 y0 thirdpoint +p1x p1y midpoint +/p0y exch def +/p0x exch def +x2 y2 x3 y3 thirdpoint +p2x p2y midpoint +/p3y exch def +/p3x exch def +movetoNeeded { p0x p0y moveto } if +p1x p1y p2x p2y p3x p3y curveto +end +} dup 0 17 dict put def + +/storexyn { +/n exch def +/y n array def +/x n array def +n 1 sub -1 0 { +/i exch def +y i 3 2 roll put +x i 3 2 roll put +} for +} def + +%%EndProlog + +%%BeginIdrawPrologue +/arrowhead { +0 begin +transform originalCTM itransform +/taily exch def +/tailx exch def +transform originalCTM itransform +/tipy exch def +/tipx exch def +/dy tipy taily sub def +/dx tipx tailx sub def +/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def +gsave +originalCTM setmatrix +tipx tipy translate +angle rotate +newpath +arrowHeight neg arrowWidth 2 div moveto +0 0 lineto +arrowHeight neg arrowWidth 2 div neg lineto +patternNone not { +originalCTM setmatrix +/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul +arrowWidth div def +/padtail brushWidth 2 div def +tipx tipy translate +angle rotate +padtip 0 translate +arrowHeight padtip add padtail add arrowHeight div dup scale +arrowheadpath +ifill +} if +brushNone not { +originalCTM setmatrix +tipx tipy translate +angle rotate +arrowheadpath +istroke +} if +grestore +end +} dup 0 9 dict put def + +/arrowheadpath { +newpath +arrowHeight neg arrowWidth 2 div moveto +0 0 lineto +arrowHeight neg arrowWidth 2 div neg lineto +} def + +/leftarrow { +0 begin +y exch get /taily exch def +x exch get /tailx exch def +y exch get /tipy exch def +x exch get /tipx exch def +brushLeftArrow { tipx tipy tailx taily arrowhead } if +end +} dup 0 4 dict put def + +/rightarrow { +0 begin +y exch get /tipy exch def +x exch get /tipx exch def +y exch get /taily exch def +x exch get /tailx exch def +brushRightArrow { tipx tipy tailx taily arrowhead } if +end +} dup 0 4 dict put def + +%%EndIdrawPrologue + +%I Idraw 10 Grid 8.86154 8.86154 + +%%Page: 1 1 + +Begin +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ .959646 0 0 .959646 0 0 ] concat +/originalCTM matrix currentmatrix def + +Begin %I Line +%I b 65535 +0 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +none SetP %I p n +%I t +[ .833333 -0 -0 .833333 -23.3333 378.333 ] concat +%I +37 397 764 397 Line +%I 1 +End + +Begin %I Line +%I b 65535 +0 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +none SetP %I p n +%I t +[ .833333 -0 -0 .833333 -23.3333 282.5 ] concat +%I +37 397 764 397 Line +%I 1 +End + +Begin %I Line +%I b 65535 +0 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +none SetP %I p n +%I t +[ .833333 -0 -0 .833333 -24.1667 185.833 ] concat +%I +37 397 764 397 Line +%I 1 +End + +Begin %I Line +%I b 65535 +0 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +none SetP %I p n +%I t +[ .833333 -0 -0 .833333 -23.3333 -5.83331 ] concat +%I +37 397 764 397 Line +%I 1 +End + +Begin %I Line +%I b 65535 +0 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +none SetP %I p n +%I t +[ .833333 -0 -0 .833333 -23.3333 -101.667 ] concat +%I +37 397 764 397 Line +%I 1 +End + +Begin %I Line +%I b 65535 +0 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +none SetP %I p n +%I t +[ .833333 -0 -0 .833333 -23.3333 -197.5 ] concat +%I +37 397 764 397 Line +%I 1 +End + +Begin %I Line +%I b 65535 +0 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +none SetP %I p n +%I t +[ .833333 -0 -0 .833333 -23.3333 392.5 ] concat +%I +37 34 764 34 Line +%I 1 +End + +Begin %I Line +%I b 65535 +0 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +none SetP %I p n +%I t +[ .833333 -0 -0 .833333 -15.8333 2.5 ] concat +%I +258 963 258 41 Line +%I 1 +End + +Begin %I Line +%I b 65535 +0 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +none SetP %I p n +%I t +[ .833333 -0 -0 .833333 198.833 3 ] concat +%I +258 963 258 41 Line +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 213.667 797 ] concat +%I +[ +(Subshell, error back) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 428 797 ] concat +%I +[ +(Input echo filter) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 22.8333 704.333 ] concat +%I +[ +(Input filter) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 214.833 704.333 ] concat +%I +[ +(Input Filter, error back) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 428.833 704.333 ] concat +%I +[ +(input filter, error echo) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 214 607.5 ] concat +%I +[ +(Output filter) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 428 607.5 ] concat +%I +[ +(Error robot) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 15 729.966 ] concat +%I +[ +(...) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 15 57.4667 ] concat +%I +[ +(...) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 214.167 57.4667 ] concat +%I +[ +(...) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 428.333 57.4667 ] concat +%I +[ +(...) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 45.8332 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 45.8332 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 45.8332 ] concat +%I 2 +55 743 +143 743 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -50.0001 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -50.0001 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -57.5001 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -50.0001 ] concat +%I 2 +55 743 +143 743 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -50.0001 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -50.0001 ] concat +%I 5 +489 760 +471 760 +462 760 +462 752 +462 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 134.167 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 2 +55 743 +143 743 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -145.833 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -153.333 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 0 -671.666 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 -214.167 -671.666 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 199.166 -671.666 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 5 +444 707 +444 760 +444 778 +471 778 +489 778 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 141.667 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 141.667 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 134.167 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 141.667 ] concat +%I 2 +55 743 +143 743 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 141.667 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 428.333 729.966 ] concat +%I +[ +(..: .:. .::) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 45.8332 ] concat +%I 2 +55 743 +143 743 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 30.8334 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 45 ] concat +%I 5 +444 707 +444 760 +444 778 +471 778 +489 778 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 141.667 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 141.667 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 141.667 ] concat +%I 2 +55 743 +143 743 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 141.667 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 134.167 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 175.833 237.5 ] concat +%I 6 +400 619 +391 619 +365 619 +365 645 +391 645 +489 645 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 141.667 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 15 633.3 ] concat +%I +[ +(.!.) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 45.8333 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 38.3334 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -237.5 45.8332 ] concat +%I 5 +453 707 +453 752 +453 769 +471 769 +489 769 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 45.8333 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 214.167 633.3 ] concat +%I +[ +(.!!) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 45.8332 ] concat +%I 5 +453 707 +453 752 +453 769 +471 769 +489 769 +5 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 214.167 729.966 ] concat +%I +[ +(..!) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 45.8332 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 45.8332 ] concat +%I 2 +55 743 +143 743 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 45.8334 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 175.833 45.8332 ] concat +%I 5 +453 707 +453 752 +453 769 +471 769 +489 769 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 175.833 141.667 ] concat +%I 6 +400 619 +391 619 +365 619 +365 645 +391 645 +489 645 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 45.8333 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 428.333 633.3 ] concat +%I +[ +(.!:) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 15 537.466 ] concat +%I +[ +(.:!) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -236.667 -50.8333 ] concat +%I 5 +444 707 +444 760 +444 778 +471 778 +489 778 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -237.5 45.8333 ] concat +%I 6 +400 619 +391 619 +365 619 +365 645 +391 645 +489 645 +6 BSpl +%I 1 +End + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t u + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 -214.167 6.10352e-05 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 199.166 7.62939e-05 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 0 -95.8334 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 -214.167 -95.8333 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 199.166 -95.8333 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 214.167 537.466 ] concat +%I +[ +(!..) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 189.167 -50 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 -57.5 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 -50.8333 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 175.833 -50.0001 ] concat +%I 5 +489 760 +471 760 +462 760 +462 752 +462 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -50 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -57.5 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -50.8333 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 176.667 -50 ] concat +%I 5 +444 707 +444 760 +444 778 +471 778 +489 778 +5 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 428.333 537.466 ] concat +%I +[ +(!.!) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 22 607.5 ] concat +%I +[ +(Input echo filter, error back) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 21.1667 510.833 ] concat +%I +[ +(Robot) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 15 441.633 ] concat +%I +[ +(!!.) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -237.5 -145.833 ] concat +%I 5 +489 760 +471 760 +462 760 +462 752 +462 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -237.5 -145.833 ] concat +%I 5 +453 707 +453 752 +453 769 +471 769 +489 769 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -145.833 ] concat +%I 5 +489 760 +471 760 +462 760 +462 752 +462 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -145.833 ] concat +%I 5 +453 707 +453 752 +453 769 +471 769 +489 769 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -145.833 ] concat +%I 5 +444 707 +444 760 +444 778 +471 778 +489 778 +5 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 214.167 441.633 ] concat +%I +[ +(!!!) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 427.167 510.833 ] concat +%I +[ +(Full robot, error echo) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 175.833 -145.833 ] concat +%I 5 +489 760 +471 760 +462 760 +462 752 +462 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 175.833 -145.833 ] concat +%I 5 +453 707 +453 752 +453 769 +471 769 +489 769 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -146.667 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 6 +639 388 +630 388 +586 388 +586 433 +631 433 +728 433 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 5 +684 361 +684 379 +684 388 +675 388 +657 388 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 334.167 ] concat +%I 5 +684 361 +684 379 +684 388 +675 388 +657 388 +5 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 428.333 441.633 ] concat +%I +[ +(!!:) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -237.5 -241.667 ] concat +%I 5 +489 760 +471 760 +462 760 +462 752 +462 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -242.5 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 6 +143 273 +134 273 +99 273 +99 309 +134 309 +232 309 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -242.5 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 -214.167 -191.667 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 0 -191.667 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 199.166 -191.667 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 15 345.8 ] concat +%I +[ +(!:!) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 213.167 510.833 ] concat +%I +[ +(Full robot) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 214.167 345.8 ] concat +%I +[ +(!:: !:. !.:) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 213.167 415 ] concat +%I +[ +(Full robot, out & error echo) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -241.667 ] concat +%I 5 +489 760 +471 760 +462 760 +462 752 +462 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 -242.5 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 141.667 ] concat +%I 6 +143 273 +134 273 +99 273 +99 309 +134 309 +232 309 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 -242.5 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -38.3333 -4.16667 ] concat +%I 5 +471 652 +471 661 +471 679 +454 679 +436 679 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 189.167 -242.5 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 199.166 -287.5 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 0 -287.5 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 -214.167 -287.5 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 428.333 345.8 ] concat +%I +[ +(:..) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 427.167 415 ] concat +%I +[ +(Output echo filter) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -242.5 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -242.5 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -242.5 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -242.5 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -249.167 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -242.5 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 199.166 -383.333 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 0 -383.333 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 -214.167 -383.333 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -38.3333 -4.16667 ] concat +%I 6 +657 484 +649 484 +622 484 +622 457 +649 457 +657 457 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -339.167 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -339.167 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -345.833 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -339.167 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -451.667 -100.833 ] concat +%I 6 +657 484 +649 484 +622 484 +622 457 +649 457 +657 457 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -236.667 -338.333 ] concat +%I 5 +444 707 +444 752 +444 778 +471 778 +489 778 +5 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 21.1667 415 ] concat +%I +[ +(Full Robot, output echo) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 21.1667 319.167 ] concat +%I +[ +(Output echo filter, error back) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 15 249.967 ] concat +%I +[ +(:.!) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190 -339.167 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190 -339.167 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 427.167 319.167 ] concat +%I +[ +(Robot, input echo) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 21.1667 223.333 ] concat +%I +[ +(Full robot, input echo) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 427.167 223.333 ] concat +%I +[ +(Full robot, input & output echo) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 213.167 223.333 ] concat +%I +[ +(Full robot, input & error echo) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 213.167 319.167 ] concat +%I +[ +(Full robot, full echo) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 214.167 249.967 ] concat +%I +[ +(::: ::. :.:) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 428.333 249.967 ] concat +%I +[ +(:!.) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 15 154.133 ] concat +%I +[ +(:!!) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 214.167 154.133 ] concat +%I +[ +(:!:) +] Text +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-helvetica-bold-r-*-140-* +Helvetica-Bold 14 SetF +%I t +[ 1.6 0 0 1.6 428.333 154.133 ] concat +%I +[ +(::!) +] Text +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190 -338.333 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -15.8333 .833333 ] concat +%I 6 +391 353 +382 353 +365 353 +365 336 +382 336 +391 336 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 .833333 ] concat +%I 6 +400 327 +391 327 +356 327 +356 363 +391 363 +489 362 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 .833364 ] concat +%I 2 +489 353 +312 353 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 .833364 ] concat +%I 2 +400 327 +312 327 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -339.167 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -338.333 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 184.167 .833333 ] concat +%I 6 +391 353 +382 353 +365 353 +365 336 +382 336 +391 336 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 176.667 .833364 ] concat +%I 2 +489 353 +312 353 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 175.833 -337.5 ] concat +%I 5 +453 707 +453 752 +453 769 +471 769 +489 769 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -345.833 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -435 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -229.167 -95 ] concat +%I 6 +391 353 +382 353 +365 353 +365 336 +382 336 +391 336 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -236.667 -94.9999 ] concat +%I 2 +489 353 +312 353 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -237.5 -433.333 ] concat +%I 5 +453 707 +453 752 +453 769 +471 769 +489 769 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3332 -441.667 ] concat +%I 2 +143 734 +55 734 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -236.667 -434.166 ] concat +%I 5 +444 707 +444 752 +444 778 +471 778 +489 778 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190 -435 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190 -434.167 ] concat +%I 5 +188 707 +188 716 +188 725 +179 725 +161 725 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -15.8333 -95 ] concat +%I 6 +391 353 +382 353 +365 353 +365 336 +382 336 +391 336 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -94.9999 ] concat +%I 2 +489 353 +312 353 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 -94.9999 ] concat +%I 2 +400 327 +312 327 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -24.1669 -434.166 ] concat +%I 5 +453 707 +453 752 +453 769 +471 769 +489 769 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 .833333 ] concat +%I 5 +188 415 +188 460 +188 486 +214 486 +233 486 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 -338.333 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 -242.5 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3332 -145.833 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3332 -353.333 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -338.333 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3332 -434.167 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3332 -249.167 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 190.833 -145.833 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390.833 -145.833 ] concat +%I 2 +232 778 +55 778 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 389.167 -435 ] concat +%I 5 +161 743 +179 743 +205 743 +205 716 +205 707 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 183.333 -95 ] concat +%I 6 +391 353 +382 353 +365 353 +365 336 +382 336 +391 336 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 175.833 -94.9999 ] concat +%I 2 +489 353 +312 353 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 175.833 -94.9999 ] concat +%I 2 +400 327 +312 327 +2 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 390 -434.167 ] concat +%I 5 +196 707 +196 716 +196 734 +179 734 +161 734 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 176.667 -434.167 ] concat +%I 5 +444 707 +444 760 +444 778 +471 778 +489 778 +5 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 .833333 ] concat +%I 2 +728 247 +551 247 +2 BSpl +%I 1 +End + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 -214.167 -480 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 0 -480 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 199.166 -480 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 199.166 -575.833 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 -0.000432014 -575.833 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I Pict +%I b 65535 +1 0 0 [] 0 SetB +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 -214.167 -575.833 ] concat + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 214.167 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +143 716 +161 716 +161 752 +143 752 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 99.8333 758.833 ] concat +%I +[ +(P) +] Text +End + +End %I eop + +Begin %I Pict +%I b u +%I cfg u +%I cbg u +%I f u +%I p u +%I t +[ 1 0 0 1 221.667 -0.000366211 ] concat + +Begin %I Poly +%I b 65535 +2 0 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 -23.3333 141.667 ] concat +%I 4 +223 752 +241 752 +241 787 +223 787 +4 Poly +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 164 788.416 ] concat +%I +[ +(W) +] Text +End + +End %I eop + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f *-times-medium-r-*-140-* +Times-Roman 14 SetF +%I t +[ 1 0 0 1 344.333 725.833 ] concat +%I +[ +(210) +] Text +End + +End %I eop + +Begin %I BSpl +%I b 65535 +1 0 1 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 125 181.667 ] concat +%I 6 +222 -5 +213 -5 +169 -5 +169 39 +240 39 +311 39 +6 BSpl +%I 1 +End + +Begin %I BSpl +%I b 65535 +1 1 0 [] 0 SetB +%I cfg Black +0 0 0 SetCFg +%I cbg White +1 1 1 SetCBg +%I p +1 SetP +%I t +[ .833333 -0 -0 .833333 125 181.667 ] concat +%I 2 +222 39 +134 39 +2 BSpl +%I 1 +End + +Begin %I Text +%I cfg Black +0 0 0 SetCFg +%I f -*-courier-medium-r-normal-*-8-*-*-*-*-*-*-* +Courier 8 SetF +%I t +[ 1 0 0 1 22 797 ] concat +%I +[ +(Subshell) +] Text +End + +End %I eop + +showpage + +%%Trailer + +end diff --git a/doc/install.sh b/doc/install.sh new file mode 100755 index 0000000..8c07c50 --- /dev/null +++ b/doc/install.sh @@ -0,0 +1,119 @@ +#! /bin/sh + +# +# install - install a program, script, or datafile +# This comes from X11R5; it is not part of GNU. +# +# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ +# +# This script is compatible with the BSD install script, but was written +# from scratch. +# + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" + +instcmd="$mvprog" +chmodcmd="" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +fi + +if [ x"$dst" = x ] +then + echo "install: no destination specified" + exit 1 +fi + + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + +if [ -d $dst ] +then + dst="$dst"/`basename $src` +fi + +# Make a temp file name in the proper directory. + +dstdir=`dirname $dst` +dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + +$doit $instcmd $src $dsttmp + +# and set any options; do chmod last to preserve setuid bits + +if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi +if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi +if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi +if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi + +# Now rename the file to the real destination. + +$doit $rmcmd $dst +$doit $mvcmd $dsttmp $dst + + +exit 0 diff --git a/doc/screen.1 b/doc/screen.1 new file mode 100644 index 0000000..558e314 --- /dev/null +++ b/doc/screen.1 @@ -0,0 +1,3349 @@ +.\" vi:set wm=5 +.TH SCREEN 1 "15 Oct 1995" +.if n .ds Q \&" +.if n .ds U \&" +.if t .ds Q `` +.if t .ds U '' +.UC 4 +.SH NAME +screen \- screen manager with VT100/ANSI terminal emulation + + +.SH SYNOPSIS +.B screen +[ +.B \-\fIoptions\fP +] [ +.B \fIcmd\fP +[ +.B \fIargs\fP +] ] +.br +.B screen \-r +[ [\fIpid.\fP]\fItty\fP[\fI.host\fP] ] +.ta .5i 1.8i + + +.SH DESCRIPTION +.I Screen +is a full-screen window manager that +multiplexes a physical terminal between several processes (typically +interactive shells). +Each virtual terminal provides the functions +of a DEC VT100 terminal and, in addition, several control functions +from the ANSI X3.64 (ISO 6429) and ISO 2022 standards +(e.\|g. insert/delete line and support for multiple character sets). +There is a scrollback history buffer for each virtual terminal and a +copy-and-paste mechanism that allows moving text regions between +windows. +.PP +When +.I screen +is called, it creates a single window with a shell in it (or the specified +command) and then gets out of your way so that you can use the program as you +normally would. +Then, at any time, you can create new (full-screen) windows with other programs +in them (including more shells), kill existing windows, view a list of +windows, turn output logging on and off, copy-and-paste text between +windows, view the scrollback history, switch between windows +in whatever manner you wish, etc. +When a program terminates, +.I screen +(per default) kills the window that contained it. +If this window was in the foreground, the display switches to the previous +window; if none are left, +.I screen +exits. +.PP +Everything you type is sent to the program running in the current window. +The only exception to this is the one keystroke that is used to initiate +a command to the window manager. +By default, each command begins with a control-a (abbreviated C-a from +now on), and is followed by one other keystroke. +The command character and all the key bindings can be fully customized +to be anything you like, though they are always two characters in length. +.PP +The standard way to create a new window is to type \*QC-a c\*U. +This creates a new window running a shell and switches to that +window immediately, regardless of the state of the process running +in the current window. +Similarly, you can create a new window with a custom command in it by +first binding the command to a keystroke (in your .screenrc file or at the +\*QC-a :\*U command line) and +then using it just like the \*QC-a c\*U command. +In addition, new windows can be created by running a command like: +.IP +screen emacs prog.c +.PP +from a shell prompt within a previously created window. +This will not run another copy of +.IR screen , +but will instead supply the command name and its arguments to the window +manager (specified in the $STY environment variable) who will use it to +create the new window. +The above example would start the emacs editor (editing prog.c) and switch +to its window. +.PP +If \*Q/etc/utmp\*U is writable by +.IR screen , +an appropriate record will be written to this file for each window, and +removed when the window is terminated. +This is useful for working with \*Qtalk\*U, \*Qscript\*U, \*Qshutdown\*U, +\*Qrsend\*U, \*Qsccs\*U and other similar programs that use the utmp +file to determine who you are. As long as +.I screen +is active on your terminal, +the terminal's own record is removed from the utmp file. See also \*QC-a L\*U. + + +.SH GETTING STARTED +Before you begin to use +.I screen +you'll need to make sure you have correctly selected your terminal type, +just as you would for any other termcap/terminfo program. +(You can do this by using +.IR tset +for example.) +.PP +If you're impatient and want to get started without doing a lot more reading, +you should remember this one command: \*QC-a ?\*U. +Typing these two characters will display a list of the available +.I screen +commands and their bindings. Each keystroke is discussed in +the section \*QDEFAULT KEY BINDINGS\*U. The manual section \*QCUSTOMIZATION\*U +deals with the contents of your .screenrc. +.PP +If your terminal is a \*Qtrue\*U auto-margin terminal (it doesn't allow +the last position on the screen to be updated without scrolling the +screen) consider to use a version of your terminal's termcap that has +automatic margins turned \fIoff\fP. This will ensure an accurate and +optimal update of the screen in all circumstances. Most terminals +nowadays have \*Qmagic\*U margins (automatic margins plus usable last +column). This is the VT100 style type and perfectly suited for +\fIscreen\fP. +If all you've got is a \*Qtrue\*U auto-margin terminal \fIscreen\fP +will be content to use it, but updating a character put into the last +position on the screen may not be possible until the screen scrolls or +the character is moved into a safe position in some other way. This +delay can be shortened by using a terminal with insert-character +capability. + + +.SH "COMMAND-LINE OPTIONS" +Screen has the following command-line options: +.TP 5 +.B \-a +include \fIall\fP capabilities (with some minor exceptions) in each +window's termcap, even if +.I screen +must redraw parts of the display in order to implement a function. +.TP 5 +.B \-A +Adapt the sizes of all windows to the size of the current terminal. +By default, +.I screen +tries to restore its old window sizes when attaching to resizable terminals +(those with \*QWS\*U in its description, e.g. suncmd or some xterm). +.TP 5 +.BI "\-c " file +override the default configuration file from \*Q$HOME/.screenrc\*U +to \fIfile\fP. +.TP 5 +.BR \-d | \-D " [" \fIpid.tty.host ] +does not start +.IR screen , +but detaches the elsewhere running +.I screen +session. It has the same effect as typing \*QC-a d\*U from +.I screen's +controlling terminal. \fB\-D\fP is the equivalent to the power detach key. +If no session can be detached, this option is ignored. +The combination \*Qscreen \-D \-r\*U can be used to `transport' the elsewhere +running session to this terminal and logout there. +Note: It is a good idea to have the status of your sessions checked by means of +\*Qscreen \-list\*U. +.TP 5 +.BI "\-e " xy +specifies the command character to be \fIx\fP and the character generating a +literal command character to \fIy\fP (when typed after the command character). +The default is \*QC-a\*U and `a', which can be specified as \*Q-e^Aa\*U. +When creating a +.I screen +session, this option sets the default command character. In a multiuser +session all users added will start off with this command character. But +when attaching to an already running session, this option changes only +the command character of the attaching user. +This option is equivalent to either the commands \*Qdefescape\*U or +\*Qescape\*U respectively. +.TP 5 +.BR \-f\fP ", " \-fn ", and " \-fa +turns flow-control on, off, or \*Qautomatic switching mode\*U. +This can also be defined through the \*Qdefflow\*U .screenrc command. +.TP 5 +.BI "\-h " num +Specifies the history scrollback buffer to be \fInum\fP lines high. +.TP 5 +.B \-i +will cause the interrupt key (usually C-c) to interrupt the display +immediately when flow-control is on. +See the \*Qdefflow\*U .screenrc command for details. +The use of this option is discouraged. +.TP 5 +.BR \-l " and " \-ln +turns login mode on or off (for /etc/utmp updating). +This can also be defined through the \*Qdeflogin\*U .screenrc command. +.TP 5 +.BR \-ls " and " \-list +does not start +.IR screen , +but prints a list of +.I pid.tty.host +strings identifying your +.I screen +sessions. +Sessions marked `detached' can be resumed with \*Qscreen -r\*U. Those marked +`attached' are running and have a controlling terminal. Sessions marked as +`dead' should be thoroughly checked and removed. Ask your system administrator +if you are not sure. Remove sessions with the \fB-wipe\fP option. +.TP 5 +.B \-L +tells +.I screen +your auto-margin terminal has a writable last-position on +the screen. +This can also be set in your .screenrc by specifying `LP' in a \*Qtermcap\*U +command. +.TP 5 +.B \-m +causes +.I screen +to ignore the $STY environment variable. With \*Qscreen -m\*U creation of +a new session is enforced, regardless whether +.I screen +is called from within another +.I screen +session or not. +.TP 5 +.B \-O +selects a more optimal output mode for your terminal rather than true VT100 +emulation (only affects auto-margin terminals without `LP'). +This can also be set in your .screenrc by specifying `OP' in a \*Qtermcap\*U +command. +.TP 5 +.BR \-r " [" \fIpid.tty.host ] +resumes a detached +.I screen +session. +No other options (except \*Q-d -r\*U or \*Q-D -r\*U) may be specified, though +an optional prefix of [\fIpid.\fP]\fItty.host\fP +may be needed to distinguish between multiple detached +.I screen +sessions. +.TP 5 +.B \-R +attempts to resume the first detached +.I screen +session it finds. +If successful, all other command-line options are ignored. +If no detached session exists, starts a new session using the specified +options, just as if +.B \-R +had not been specified. The option is set by default if +.I screen +is run as a login-shell. +.TP 5 +.B \-s +sets the default shell to the program specified, instead of the value +in the environment variable $SHELL (or \*Q/bin/sh\*U if not defined). +This can also be defined through the \*Qshell\*U .screenrc command. +.TP 5 +.BI "\-S " sessionname +When creating a new session, this option can be used to specify a +meaningful name for the session. This name identifies the session for +\*Qscreen -list\*U and \*Qscreen -r\*U actions. It substitutes the +default [\fItty.host\fP] suffix. +.TP 5 +.BI "\-t " name +sets the title (a.\|k.\|a.) for the default shell or specified program. +See also the \*Qshelltitle\*U .screenrc command. +.TP 5 +.B \-v +Print version number. +.TP 5 +.B \-wipe +does the same as \*Qscreen -ls\*U, but removes destroyed sessions instead of +marking them as `dead'. +.TP 5 +.B \-x +Attach to a not detached +.I screen +session. (Multi display mode). + + +.SH "DEFAULT KEY BINDINGS" +.ta 12n 26n +As mentioned, each +.I screen +command consists of a +\*QC-a\*U followed by one other character. +For your convenience, all commands that are bound to lower-case letters are +also bound to their control character counterparts (with the exception +of \*QC-a a\*U; see below), thus, \*QC-a c\*U as well as \*QC-a C-c\*U can +be used to create a window. See section \*QCUSTOMIZATION\*U for a description +of the command. +.PP +.TP 26n +The following table shows the default key bindings: +.IP "\fBC-a '\fP" +.PD 0 +.IP "\fBC-a ""\fP (select)" +.PD +Prompt for a window name or number to switch to. +.IP "\fBC-a 0\fP (select 0)" +.PD 0 +.IP "\fB ... \fP ..." +.IP "\fBC-a 9\fP (select 9)" +.PD +Switch to window number 0 \- 9. +.IP "\fBC-a C-a\fP (other)" +Toggle to the window displayed previously. +Note that this binding defaults to the command character typed twice, +unless overridden; for instance, if you use the option \*Q\fB\-e]x\fP\*U, +this command becomes \*Q]]\*U, not \*Q]C-a\*U. +.IP "\fBC-a a\fP (meta)" +Send the command character (C-a) to window. See \fIescape\fP command. +.IP "\fBC-a A\fP (title)" +Allow the user to enter a name for the current window. +.IP "\fBC-a b\fP" +.PD 0 +.IP "\fBC-a C-b\fP (break)" +.PD +Send a break to window. +.IP "\fBC-a B\fP (pow_break)" +Reopen the terminal line and send a break. +.IP "\fBC-a c\fP" +.PD 0 +.IP "\fBC-a C-c\fP (screen)" +.PD +Create a new window with a shell and switch to that window. +.IP "\fBC-a C\fP (clear)" +Clear the screen. +.IP "\fBC-a d\fP" +.PD 0 +.IP "\fBC-a C-d\fP (detach)" +.PD +Detach +.I screen +from this terminal. +.IP "\fBC-a D D\fP (pow_detach)" +Detach and logout. +.IP "\fBC-a f\fP" +.PD 0 +.IP "\fBC-a C-f\fP (flow)" +.PD +Toggle flow \fIon\fP, \fIoff\fP or \fIauto\fP. +.IP "\fBC-a C-g\fP (vbell)" +Toggles +.I screen's +visual bell mode. +.IP "\fBC-a h\fP (hardcopy)" +.PD +Write a hardcopy of the current window to the file \*Qhardcopy.\fIn\fP\*U. +.IP "\fBC-a H\fP (log)" +Begins/ends logging of the current window to the file \*Qscreenlog.\fIn\fP\*U. +.IP "\fBC-a i\fP" +.PD 0 +.IP "\fBC-a C-i\fP (info)" +.PD +Show info about this window. +.IP "\fBC-a k\fP" +.PD 0 +.IP "\fBC-a C-k\fP (kill)" +.PD +Destroy current window. +.IP "\fBC-a l\fP" +.PD 0 +.IP "\fBC-a C-l\fP (redisplay)" +.PD +Fully refresh current window. +.IP "\fBC-a L\fP (login)" +Toggle this windows login slot. Available only if +.I screen +is configured to update the utmp database. +.IP "\fBC-a m\fP" +.PD 0 +.IP "\fBC-a C-m\fP (lastmsg)" +.PD +Repeat the last message displayed in the message line. +.IP "\fBC-a M\fP (monitor)" +Toggles monitoring of the current window. +.IP "\fBC-a space\fP" +.PD 0 +.IP "\fBC-a n\fP" +.IP "\fBC-a C-n\fP (next)" +.PD +Switch to the next window. +.IP "\fBC-a N\fP (number)" +Show the number (and title) of the current window. +.IP "\fBC-a backspace\fP" +.PD 0 +.IP "\fBC-a h\fP" +.IP "\fBC-a p\fP" +.IP "\fBC-a C-p\fP (prev)" +.PD +Switch to the previous window (opposite of \fBC-a n\fP). +.IP "\fBC-a q\fP" +.PD 0 +.IP "\fBC-a C-q\fP (xon)" +.PD +Send a control-q to the current window. +.IP "\fBC-a r\fP" +.PD 0 +.IP "\fBC-a C-r\fP (wrap)" +.PD +Toggle the current window's line-wrap setting (turn the current window's +automatic margins on and off). +.IP "\fBC-a s\fP" +.PD 0 +.IP "\fBC-a C-s\fP (xoff)" +.PD +Send a control-s to the current window. +.IP "\fBC-a t\fP" +.PD 0 +.IP "\fBC-a C-t\fP (time)" +.PD +Show system information. +.IP "\fBC-a v\fP (version)" +.PD +Display the version and compilation date. +.IP "\fBC-a C-v\fP (digraph)" +.PD +Enter digraph. +.IP "\fBC-a w\fP" +.PD 0 +.IP "\fBC-a C-w\fP (windows)" +.PD +Show a list of window. +.IP "\fBC-a W\fP (width)" +Toggle 80/132 columns. +.IP "\fBC-a x\fP" +.PD 0 +.IP "\fBC-a C-x\fP (lockscreen)" +.PD +Lock this terminal. +.IP "\fBC-a z\fP" +.PD 0 +.IP "\fBC-a C-z\fP (suspend)" +.PD +Suspend +.IR screen . +Your system must support BSD-style job-control. +.IP "\fBC-a Z\fP (reset)" +Reset the virtual terminal to its \*Qpower-on\*U values. +.IP "\fBC-a .\fP (dumptermcap)" +Write out a \*Q.termcap\*U file. +.IP "\fBC-a ?\fP (help)" +Show key bindings. +.IP "\fBC-a C-\e\fP (quit)" +Kill all windows and terminate +.IR screen . +.IP "\fBC-a :\fP (colon)" +Enter command line mode. +.IP "\fBC-a [\fP" +.PD 0 +.IP "\fBC-a C-[\fP" +.IP "\fBC-a esc\fP (copy)" +.PD +Enter copy/scrollback mode. +.IP "\fBC-a ]\fP (paste .)" +.PD +Write the contents of the paste buffer to the stdin queue of the +current window. +.IP "\fBC-a {\fP +.PD 0 +.IP "\fBC-a }\fP (history)" +.PD +Copy and paste a previous (command) line. +.IP "\fBC-a >\fP (writebuf)" +Write paste buffer to a file. +.IP "\fBC-a <\fP (readbuf)" +Reads the screen-exchange file into the paste buffer. +.IP "\fBC-a =\fP (removebuf)" +Removes the file used by \fBC-a <\fP and \fPC-a >\fP. +.IP "\fBC-a ,\fP (license)" +Shows where +.I screen +comes from, where it went to and why you can use it. +.IP "\fBC-a _\fP (silence)" +Start/stop monitoring the current window for inactivity. + + +.SH CUSTOMIZATION +The \*Qsocket directory\*U defaults either to $HOME/.screen or simply to +/tmp/screens or preferably to /usr/local/screens chosen at compile-time. If +.I screen +is installed setuid-root, then the administrator +should compile +.I screen +with an adequate (not NFS mounted) socket directory. If +.I screen +is not running setuid-root, the user can specify any mode 777 directory +in the environment variable $SCREENDIR. +.PP +When +.I screen +is invoked, it executes initialization commands from the files +\*Q/usr/local/etc/screenrc\*U and +\*Q.screenrc\*U in the user's home directory. These are the \*Qprogrammer's +defaults\*U that can be overridden in the following ways: for the +global screenrc file +.I screen +searches for the environment variable $SYSSCREENRC (this override feature +may be disabled at compile-time). The user specific +screenrc file is searched in $ISCREENRC, then $SCREENRC, then $HOME/.iscreenrc +and finally defaults to $HOME/.screenrc. The command line option \fB-c\fP takes +precedence over the above user screenrc files. +.PP +Commands in these files are used to set options, bind functions to +keys, and to automatically establish one or more windows at the +beginning of your +.I screen +session. +Commands are listed one per line, with empty lines being ignored. +A command's arguments are separated by tabs or spaces, and may be +surrounded by single or double quotes. +A `#' turns the rest of the line into a comment, except in quotes. +Unintelligible lines are warned about and ignored. +Commands may contain references to environment variables. The +syntax is the shell-like "$VAR " or "${VAR}". Note that this causes +incompatibility with previous +.I screen +versions, as now the '$'-character has to be protected with '\e' if no +variable substitution shall be performed. A string in single-quotes is also +protected from variable substitution. +.PP +Customization can also be done 'on-line'. To enter the command mode type +`C-a :'. Note that commands starting with \*Qdef\*U change default values, +while others change current settings. +.PP +The following commands are available: +.sp +.ne 3 +.BI acladd " usernames" +.PP +Enable users to fully access this screen session. \fIUsernames\fP can be one +user or a comma seperated list of users. This command enables to attach to the +.I screen +session and performs the equivalent of `aclchg \fIusernames\fP +rwx \&"#?\&"'. +executed. To add a user with restricted access, use the `aclchg' command below. +Multi user mode only. +.sp +.ne 3 +.BI aclchg " usernames permbits list" +.PP +Change permissions for a comma seperated list of users. Permission bits are +represented as `r', `w' and `x'. Prefixing `+' grants the permission, `-' +removes it. The third parameter is a comma seperated list of commands and/or +windows (specified either by number or title). The special list `#' refers to +all windows, `?' to all commands. if \fIusernames\fP consists of a single `*', +all known users are affected. +A command can be executed when the user has the `x' bit for it. +The user can type input to a window when he has its `w' bit set and no other +user obtains a writelock for this window. +Other bits are currently ignored. +To withdraw the writelock from another user in window 2: +`aclchg \fIusername\fP -w+w 2'. +To allow readonly access to the session: `aclchg \fIusername\fP +-w \&"#\&"'. As soon as a user's name is known to +.I screen +he can attach to the session and (per default) has full permissions for all +command and windows. Execution permission for the acl commands, `at' and others +should also be removed or the user may be able to regain write permission. +Multi user mode only. +.sp +.ne 3 +.BI acldel " username" +.PP +Remove a user from +.IR screen 's +access control list. If currently attached, all the +user's displays are detached from the session. He cannot attach again. +Multi user mode only. +.sp +.ne 3 +.BI activity " message" +.PP +When any activity occurs in a background window that is being monitored, +.I screen +displays a notification in the message line. +The notification message can be re-defined by means of the \*Qactivity\*U +command. +Each occurrence of `%' in \fImessage\fP 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 +.sp + 'Activity in window %' +.sp +Note that monitoring is off for all windows by default, but can be altered +by use of the \*Qmonitor\*U command (C-a M). +.sp +.ne 3 +.BR "allpartial on" | off +.PP +If set to on, only the current cursor line is refreshed on window change. +This affects all windows and is useful for slow terminal lines. The +previous setting of full/partial refresh for each window is restored +with \*Qallpartial off\*U. This is a global flag that immediately takes effect +on all windows overriding the \*Qpartial\*U settings. It does not change the +default redraw behaviour of newly created windows. +.sp +.ne 3 +.BR "at " "[\fIidentifier\fP][" "#\fP|\fP*\fP|\fP%\fP] " +.IR "command " [ args " ... ]" +.PP +Execute a command at other displays or windows as if it had been entered there. +\*QAt\*U changes the context (the `current window' or `current display' +setting) of the command. If the first parameter describes a +non-unique context, the command will be executed multiple times. If the first +parameter is of the form `\fIidentifier\fP*' then identifier is matched against +user names. The command is executed once for each display of the selected +user(s). If the first parameter is of the form `\fIidentifier\fP%' identifier +is matched against displays. Displays are named after the ttys they +attach. The prefix `/dev/' or `/dev/tty' may be omitted from the identifier. +If \fIidentifier\fP has a `#' or nothing appended it is matched against +window numbers and titles. Omitting an identifier in front of the `#', `*' or +`%'-character selects all users, displays or windows because a prefix-match is +performed. Note that on the affected display(s) a short message will describe +what happened. Caution: Permission is checked for the owners or the +affected display(s), not for the initiator of the `at' command. +.sp +.ne 3 +.BR "autodetach on" | off +.PP +Sets whether +.I screen +will automatically detach upon hangup, which +saves all your running programs until they are resumed with a +.B "screen -r" +command. +When turned off, a hangup signal will terminate +.I screen +and all the processes it contains. Autodetach is on by default. +.sp +.ne 3 +.BR "autonuke on" | off +.PP +Sets whether a clear screen sequence should nuke all the output +that has not been written to the terminal. See also +\*Qobuflimit\*U. +.sp +.ne 3 +.BI "bell " message +.PP +When a bell character is sent to a background window, +.I screen +displays a notification in the message line. +The notification message can be re-defined by means of the \*Qbell\*U +command. +Each occurrence of `%' in \fImessage\fP is replaced by +the number of the window to which a bell has been sent, +and each occurrence of `~' is replaced by the definition for bell +in your termcap (usually an audible bell). +The default message is +.sp + 'Bell in window %' +.sp +An empty message can be supplied to the \*Qbell\*U command to suppress +output of a message line (bell ""). +.sp +.ne 3 +.BI "bind " key +.RI [ command " [" args ]] +.PP +Bind a command to a key. +By default, most of the commands provided by +.I screen +are bound to one or more keys as indicated in the \*QDEFAULT KEY BINDINGS\*U +section, e.\|g. the +command to create a new window is bound to \*QC-c\*U and \*Qc\*U. +The \*Qbind\*U command can be used to redefine the key bindings and to +define new bindings. +The \fIkey\fP argument is either a single character, a two-character sequence +of the form \*Q^x\*U (meaning \*QC-x\*U), a backslash followed by an octal +number (specifying the ASCII code of the character), or a backslash followed +by a second character, such as \*Q\e^\*U or \*Q\e\e\*U. +The argument can also be quoted, if you like. +If no further argument is given, any previously established binding +for this key is removed. +The \fIcommand\fP argument can be any command listed in this section. +.PP +Some examples: +.PP +.nf + bind ' ' windows + bind ^f screen telnet foobar + bind \e033 screen -ln -t root -h 1000 9 su +.fi +.PP +would bind the space key to the command that displays a list +of windows (so that the command usually invoked by \*QC-a C-w\*U +would also be available as \*QC-a space\*U), +bind \*QC-f\*U to the command \*Qcreate a window with a TELNET +connection to foobar\*U, and bind \*Qescape\*U to the command +that creates an non-login window with a.\|k.\|a. \*Qroot\*U in slot #9, with +a super-user shell and a scrollback buffer of 1000 lines. +.sp +.ne 3 +.B bindkey +.RB [ -d ] +.RB [ -m ] +.RB [ -a ] +.RB [[ -k | -t ] +.I string +.RI [ "cmd args" ]] +.PP +This command manages screen's input translation tables. Every +entry in one of the tables tells screen how to react if a certain +sequence of characters is encountered. There are three tables: +one that should contain actions programmed by the user, one for +the default actions used for terminal emulation and one for +screen's copy mode to do cursor movement. See section +\*QINPUT TRANSLATION\*U for a list of default key bindings. +.br +If the +.B -d +option is given, bindkey modifies the default table, +.B -m +changes the copy mode table +and with neither option the user table is selected. +The argument +.I string +is the sequence of characters to which an action is bound. This +can either be a fixed string or a termcap keyboard capability +name (selectable with the +.B -k +option). +.br +Some keys on a VT100 terminal can send a different +string if application mode is turned on (e.g the cursor keys). +Such keys have two entries in the translation table. You can +select the application mode entry by specifying the +.B -a +option. +.br +The +.B -t +option tells screen not to do intercharacter timing. One cannot +turn off the timing if a termcap capabilty is used. +.br +.I Cmd +can be any of screen's commands with an arbitrary number of +.IR args . +If +.I cmd +is omitted the keybinding is removed from the table. +.br +Here are some examples of keyboard bindings: +.sp +.nf + bindkey -d +.fi +Show all of the default key bindings. The application mode entries +are marked with [A]. +.sp +.nf + bindkey -k k1 select 1 +.fi +Make the "F1" key switch to window one. +.sp +.nf + bindkey -t foo stuff barfoo +.fi +Make "foo" an abrevation of the word "barfoo". Timeout is disabled +so that users can type slowly. +.sp +.nf + bindkey "\e024" mapdefault +.fi +This keybinding makes \*Q^T\*U an escape character for keybindings. If +you did the above \*Qstuff barfoo\*U binding, you can enter the word +\*Qfoo\*U by typing \*Q^Tfoo\*U. If you want to insert a \*Q^T\*U +you have to press the key twice (i.e. escape the escape binding). +.sp +.nf + bindkey -k F1 command +.fi +Make the F11 (not F1!) key an alternative screen +escape (besides ^A). +.sp +.ne 3 +.B break +.RI [ duration ] +.PP +Send a break signal for \fIduration\fP*0.25 seconds to this window. +Most useful if a character device is +attached to the window rather than a shell process. +.sp +.ne 3 +.B bufferfile +.RI [ exchange-file ] +.PP +Change the filename used for reading and writing with the paste buffer. +If the optional argument to the \*Qbufferfile\*U command is omitted, +the default setting (\*Q/tmp/screen-exchange\*U) is reactivated. +The following example will paste the system's password file into +the +.I screen +window (using the paste buffer, where a copy remains): +.PP +.nf + C-a : bufferfile /etc/passwd + C-a < C-a ] + C-a : bufferfile +.fi +.sp +.ne 3 +.BR "c1 " [ on | off ] +.PP +Change c1 code processing. \*QC1 on\*U tells screen to treat +the input characters between 128 and 159 as control functions. +Such an 8-bit code is normally the same as ESC followed by the +corresponding 7-bit code. The default setting is to process c1 +codes and can be changed with the \*Qdefc1\*U command. +Users with fonts that have usable characters in the +c1 positions may want to turn this off. +.sp +.ne 3 +.BI "charset " set +.PP +Change the current character set slot designation and charset +mapping. The first four character of +.I set +are treated as charset designators while the fifth and sixth +character must be in range '0' to '3' and set the GL/GR charset +mapping. On every position a '.' may be used to indicate that +the corresponding charset/mapping should not be changed +(\fIset\fP is padded to six characters internally by appending '.' +chars). New windows have "BBBB02" as default charset, unless a +\*Qkanji\*U command is active. +.br +The current setting can be viewed with the \*Qinfo\*U command. +.sp +.ne 3 +.B chdir +.RI [ directory ] +.PP +Change the \fIcurrent directory\fP of +.I screen +to the specified directory or, if called without an argument, +to your home directory (the value of the environment variable $HOME). +All windows that are created by means of the \*Qscreen\*U command +from within \*Q.screenrc\*U or by means of \*QC-a : screen ...\*U +or \*QC-a c\*U use this as their default directory. +Without a chdir command, this would be the directory from which +.I screen +was invoked. +Hardcopy and log files are always written to the \fIwindow's\fP default +directory, \fInot\fP the current directory of the process running in the +window. +You can use this command multiple times in your .screenrc to start various +windows in different default directories, but the last chdir value will +affect all the windows you create interactively. +.sp +.ne 3 +.B clear +.PP +Clears the current window and saves its image to the scrollback buffer. +.sp +.ne 3 +.B colon +.PP +Allows you to enter \*Q.screenrc\*U command lines. Useful +for on-the-fly modification of key bindings, +specific window creation and changing settings. Note that the \*Qset\*U +keyword no longer exists! Usually commands affect the current window rather +than default settings for future windows. Change defaults with commands +starting with 'def...'. + +If you consider this as the `Ex command mode' of +.IR screen , +you may regard \*QC-a esc\*U (copy mode) as its `Vi command mode'. +.sp +.ne 3 +.B command +.PP +This command has the same effect as typing the screen escape +character (^A). It is probably only useful for key bindings. +See also \*Qbindkey\*U. +.sp +.ne 3 +.BR "console " [ on | off ] +.PP +Grabs or ungrabs the machines console output to a window. +.sp +.ne 3 +.B copy +.PP +Enter copy/scrollback mode. This allows you to copy text from the current +window and its history into the paste buffer. In this mode a vi-like +`full screen editor' is active: +.br +.IR "Movement keys" : +.br +.in +4n +.ti -2n +\fBh\fP, \fBj\fP, \fBk\fP, \fBl\fP move the cursor line by line or +column by column. +.br +.ti -2n +\fB0\fP, \fB^\fP and \fB$\fP move to the leftmost column, to the first or last +non-whitespace character on the line. +.br +.ti -2n +\fBH\fP, \fBM\fP and \fBL\fP move the cursor to the leftmost column +of the top, center or bottom line of the window. +.br +.ti -2n +\fB+\fP and \fB\-\fP positions one line up and down. +.br +.ti -2n +\fBG\fP moves to the specified absolute line (default: end of buffer). +.br +.ti -2n +\fB|\fP moves to the specified absolute column. +.br +.ti -2n +\fBw\fP, \fBb\fP, \fBe\fP move the cursor word by word. +.br +.ti -2n +\fBC-u\fP and \fBC-d\fP scroll the display up/down by the specified amount of +lines while preserving the cursor position. (Default: half screen-full). +.br +.ti -2n +\fBC-b\fP and \fBC-f\fP scroll the display up/down a full screen. +.br +.ti -2n +\fBg\fP moves to the beginning of the buffer. +.br +.ti -2n +\fB%\fP jumps to the specified percentage of the buffer. +.br +.ti -4n + +.IR Note : +.br +Emacs style movement keys can be customized by a .screenrc command. +(E.\|g. markkeys "h=^B:l=^F:$=^E") There is no simple method for a full +emacs-style keymap, as this involves multi-character codes. + +.br +.ti -4n +.IR Marking : +.br +The copy range is specified by setting two marks. The text between these marks +will be highlighted. Press +.br +.ti -2n +\fBspace\fP to set the first or second mark +respectively. +.br +.ti -2n +\fBY\fP and \fBy\fP used to mark one whole line or to mark from +start of line. +.br +.ti -2n +\fBW\fP marks exactly one word. +.br +.ti -4n +.IR "Repeat count" : +.br +Any of these commands can be prefixed with a repeat count number by pressing +digits +.br +.ti -2n +\fB0\fP..\fB9\fP which +is taken as a repeat count. +.br +Example: \*QC-a C-[ H 10 j 5 Y\*U will copy lines +11 to 15 into the paste buffer. +.br +.ti -4n +.IR Searching : +.ti -2n +\fB/\fP \fIVi\fP-like search forward. +.ti -2n +\fB?\fP \fIVi\fP-like search backward. +.ti -2n +\fBC-a s\fP \fIEmacs\fP style incremental search forward. +.ti -2n +\fBC-r\fP \fIEmacs\fP style reverse i-search. +.ti -4n +.IR Specials : +.br +There are however some keys that act differently than in +.IR vi . +.I Vi +does not allow one to yank rectangular blocks of text, but +.I screen +does. Press +.br +.ti -2n +\fBc\fP or \fBC\fP to set the left or right margin respectively. If no repeat count is +given, both default to the current cursor position. +.br +Example: Try this on a rather full text screen: +\*QC-a [ M 20 l SPACE c 10 l 5 j C SPACE\*U. + +This moves one to the middle line of the screen, moves in 20 columns left, +marks the beginning of the paste buffer, sets the left column, moves 5 columns +down, sets the right column, and then marks the end of +the paste buffer. Now try: +.br +\*QC-a [ M 20 l SPACE 10 l 5 j SPACE\*U + +and notice the difference in the amount of text copied. +.br +.ti -2n +\fBJ\fP joins lines. It toggles between +3 modes: lines separated by a newline character (012), lines glued seamless, +lines separated by a single whitespace. Note that you can prepend the newline +character with a carriage return character, by issuing a \*Qcrlf on\*U. +.br +.ti -2n +\fBv\fP is for all the +.I vi +users with \*Q:set numbers\*U \- it toggles the left margin between column 9 +and 1. Press +.br +.ti -2n +\fBa\fP before the final space key to toggle in append mode. Thus +the contents of the paste buffer will not be overwritten, but is appended to. +.br +.ti -2n +\fBA\fP toggles in append mode and sets a (second) mark. +.br +.ti -2n +\fB>\fP sets the (second) mark and writes the contents of the paste buffer to +the screen-exchange file (/tmp/screen-exchange per default) once copy-mode is +finished. +.br +This example demonstrates how to dump the whole scrollback buffer +to that file: \*QC-A [ g SPACE G $ >\*U. +.br +.ti -2n +\fBC-g\fP gives information about the current line and column. +.br +.ti -2n +\fBx\fP exchanges the first mark and the current cursor position. You +can use this to adjust an already placed mark. +.br +.ti -2n +\fB@\fP does nothing. Does not even exit copy mode. +.br +.ti -2n +All keys not described here exit copy mode. +.in -4n +.sp +.ne 3 +.B copy_reg +.RI [ key ] +.PP +No longer exists, use \*Qreadreg\*U instead. +.sp +.ne 3 +.BR "crlf on" | off +.PP +This affects the copying of text regions with the `C-a [' command. If it is set +to `on', lines will be separated by the two character sequence `CR' - `LF'. +Otherwise (default) only `LF' is used. +.sp +.ne 3 +.BR "debug on" | off +.PP +Turns runtime debugging on or off. If +.I screen +has been compiled with option -DDEBUG debugging available and is turned on per +default. Note that this command only affects debugging output from the main +\*QSCREEN\*U process. +.sp +.ne 3 +.BR "defc1 on" | off +.PP +Same as the \fBc1\fP command except that the default setting for new +windows is changed. Initial setting is `on'. +.sp +.ne 3 +.BR "defautonuke on" | off +.PP +Same as the \fBautonuke\fP command except that the default setting for new displays is changed. Initial setting is `off'. +Note that you can use the special `AN' terminal capability if you +want to have a dependency on the terminal type. +.sp +.ne 3 +.BR "defcharset " [ \fIset ] +.PP +Like the \fBcharset\fP command except that the default setting for +new windows is changed. Shows current default if called without +argument. +.sp +.ne 3 +.BI "defescape " xy +.PP +Set the default command characters. This is equivalent to the +\*Qescape\*U except that it is useful multiuser sessions only. In a +multiuser session \*Qescape\*U changes the command character of the +calling user, where \*Qdefescape\*U changes the default command +characters for users that will be added later. +.sp +.ne 3 +.BR "defflow on" | off | auto +.RB [ interrupt ] +.PP +Same as the \fBflow\fP command except that the default setting for new windows +is changed. Initial setting is `auto'. +Specifying \*Qdefflow auto interrupt\*U is the same as the command-line options +.B \-fa +and +.BR \-i . +.sp +.ne 3 +.BR "defgr on" | off +.PP +Same as the \fBgr\fP command except that the default setting for new +windows is changed. Initial setting is `off'. +.sp +.ne 3 +.BR "defhstatus " [ \fIstatus ] +.PP +The hardstatus line that all new windows will get is set to +.I status\fR. +This command is useful to make the hardstatus of every window +display the window number or title or the like. +.I 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 misinterpretion of program generated +hardstatus lines impossible. +If the parameter +.I status +is omitted, the current default string is displayed. +Per default the hardstatus line of new windows is empty. +.sp +.ne 3 +.BR "defkanji jis" | sjis | euc +.PP +Same as the \fBkanji\fP command except that the default setting for new +windows is changed. Initial setting is `off', i.e. `jis'. +.sp +.ne 3 +.BR "deflogin on" | off +.PP +Same as the \fBlogin\fP command except that the default setting for new windows +is changed. This is initialized with `on' as distributed (see config.h.in). +.sp +.ne 3 +.BI "defmode " mode +.PP +The mode of each newly allocated pseudo-tty is set to \fImode\fP. +\fIMode\fP is an octal number. +When no \*Qdefmode\*U command is given, mode 0622 is used. +.sp +.ne 3 +.BR "defmonitor on" | off +.PP +Same as the \fBmonitor\fP command except that the default setting for new +windows is changed. Initial setting is `off'. +.sp +.ne 3 +.BI "defobuflimit " limit +.PP +Same as the \fBobuflimit\fP command except that the default setting for new displays is changed. Initial setting is 256 bytes. +Note that you can use the special 'OL' terminal capability if you +want to have a dependency on the terminal type. +.sp +.ne 3 +.BI "defscrollback " num +.PP +Same as the \fBscrollback\fP command except that the default setting for new +windows is changed. Initial setting is 100. +.sp +.ne 3 +.BR "defwrap on" | off +.PP +Same as the \fBwrap\fP command except that the default setting for new +windows is changed. Initially line-wrap is on and can be toggled with the +\*Qwrap\*U command (\*QC-a r\*U) or by means of "C-a : wrap on|off". +.sp +.ne 3 +.BR "defwritelock on" | off | auto +.PP +Same as the \fBwritelock\fP command except that the default setting for new +windows is changed. Initially writelocks will operate in automatic mode. +.sp +.ne 3 +.BR "defzombie " [\fIkeys\fP] +.PP +Synonym to the \fBzombie\fP command. Both currently change the default. +See there. +.sp +.ne 3 +.B detach +.PP +Detach the +.I screen +session (disconnect it from the terminal and put it into the background). +This returns you to the shell where you invoked +.IR screen . +A detached +.I screen +can be resumed by invoking +.I screen +with the +.B \-r +option. (See also section \*QCOMMAND-LINE OPTIONS\*U.) +.sp +.ne 3 +.BR "digraph " [ \fIpreset ] +.PP +This command prompts the user for a digraph sequence. The next +two characters typed are looked up in a builtin table and the +resulting character is inserted in the input stream. For example, +if the user enters 'a"', an a-umlaut will be inserted. If the +first character entered is a 0 (zero), +.I screen +will treat the following charcters (up to three) as an octal +number instead. The optional argument +.I preset +is treated as user input, thus one can create an \*Qumlaut\*U key. +For example the command "bindkey ^K digraph '"'" enables the user +to generate an a-umlaut by typing CTRL-K a. +.sp +.ne 3 +.B dumptermcap +.PP +Write the termcap entry for the virtual terminal optimized for the currently +active window to the file \*Q.termcap\*U in the user's +\*Q$HOME/.screen\*U directory (or wherever +.I screen +stores its sockets. See the \*QFILES\*U section below). +This termcap entry is identical to the value of the environment variable +$TERMCAP that is set up by +.I screen +for each window. For terminfo based systems you will need to run a converter +like +.IR captoinfo +and then compile the entry with +.IR tic . +.sp +.ne 3 +.BR "echo " [ -n ] +.I message +.PP +The echo command may be used to annoy +.I screen +users with a 'message of the +day'. Typically installed in a global /local/etc/screenrc. See also +\*Qsleep\*U. +Echo is also useful for online checking of environment variables. +.sp +.ne 3 +.BI "escape " xy +.PP +Set the command character to \fIx\fP and the character generating a literal +command character to \fIy\fP (just like in the \-e option). +Each argument is either a single character, a two-character sequence +of the form \*Q^x\*U (meaning \*QC-x\*U), a backslash followed by an octal +number (specifying the ASCII code of the character), or a backslash followed +by a second character, such as \*Q\e^\*U or \*Q\e\e\*U. +The default is \*Q^Aa\*U. +.sp +.ne 3 +.B exec +.RI [[ fdpat ] +.IR "newcommand " [ "args ..." ]] +.PP +Run a subprocess (newcommand) in the current window. The flow of data between +newcommand's stdin/stdout/stderr, the process already running (shell) and +screen itself (window) is controlled by the filedescriptor pattern fdpat. +This pattern is basically a three character sequence representing stdin, stdout +and stderr of newcommand. A dot (.) connects the file descriptor +to +.IR screen . +An exclamation mark (!) causes the file +descriptor to be connected to the already running process. A colon (:) combines +both. +User input will go to newcommand unless newcommand requests the old process' +output (fdpats first character is `!' or `:') or a pipe (|) is added to +the end of fdpat. +.br +Invoking `exec' without arguments shows name and arguments of the currently +running subprocess in this window. +.br +When a subprocess is running the `kill' command will affect it instead of the +windows process. +.br +Refer to the postscript file `fdpat.ips' for a confusing illustration +of all 21 possible combinations. Each drawing shows the digits 2,1,0 +representing the three file descriptors of newcommand. The box marked +`W' is usual pty that has the application-process on its slave side. +The box marked `P' is the secondary pty that now has +.I screen +at its master side. +.sp +Abbreviations: +.br +Whitespace between the word `exec' and fdpat and the command +can be omitted. Trailing dots and a fdpat consisting only of dots can be +omitted. A simple `|' is synonymous for the pattern `!..|'; the word exec can +be omitted here and can always be replaced by `!'. +.sp +Examples: +.IP +exec ... /bin/sh +.br +exec /bin/sh +.br +!/bin/sh +.PP +Creates another shell in the same window, while the original shell is still +running. Output of both shells is displayed and user input is sent to the new +/bin/sh. +.IP +exec !.. stty 19200 +.br +exec ! stty 19200 +.br +!!stty 19200 +.PP +Set the speed of the window's tty. If your stty command operates on stdout, then +add another `!'. +.IP +exec !..| less +.br +|less +.PP +This adds a pager to the window output. The special character `|' is needed to +give the user control over the pager although it gets its input from the +window's process. This works, because +.I less +listens on stderr (a behavior that +.I screen +would not expect without the `|') +when its stdin is not a tty. +.I Less +versions newer than 177 fail miserably here; good old +.I pg +still works. +.IP +!:sed -n s/.*Error.*/\e007/p +.PP +Sends window output to both, the user and the sed command. The sed inserts an +additional bell character (oct. 007) to the window output seen by +.IR screen . +This will cause "Bell in window x" messages, whenever the string "Error" +appears in the window. +.sp +.ne 3 +.B flow +.RB [ on | off | "auto\fR]\fP" +.PP +Sets the flow-control mode for this window. +Without parameters it cycles the current window's flow-control setting from +"automatic" to "on" to "off". +See the discussion on \*QFLOW-CONTROL\*U later on in this document for full +details and note, that this is subject to change in future releases. +Default is set by `defflow'. +.sp +.ne 3 +.BR "gr " [ on | off ] +.PP +Turn GR charset switching on/off. Whenever screens sees an input +char with an 8th bit set, it will use the charset stored in the +GR slot and print the character with the 8th bit stripped. The +default (see also \*Qdefgr\*U) is not to process GR switching because +otherwise the ISO88591 charset would not work. +.sp +.ne 3 +.B hardcopy +.PP +Writes out the currently displayed image to a file \fIhardcopy.n\fP +in the window's default directory, where \fIn\fP is the number +of the current window. +This either appends or overwrites the file if it exists. See below. +.sp +.ne 3 +.BR "hardcopy_append on" | off +.PP +If set to "on", +.I screen +will append to the "hardcopy.n" files created by the command \*QC-a h\*U, +otherwise these files are overwritten each time. +Default is `off'. +.sp +.ne 3 +.BI "hardcopydir "directory +.PP +Defines a directory where hardcopy files will be placed. If unset, hardcopys +are dumped in +.IR screen 's +current working directory. +.sp +.ne 3 +.BR "hardstatus " [ on | off ] +.PP +Toggles the use of the terminal's hardware status line. If "on", +.I screen +will use this facility to display one line messages. Otherwise these messages +are overlayed in reverse video mode at the display line. Note that the +hardstatus feature can only be used if the termcap/terminfo capabilities +"hs", "ts", "fs" and "ds" are set properly. Default is `on' whenever the "hs" +capability is present. +.sp +.ne 3 +.BR "height " [ \fIlines\fP ] +.PP +Set the display height to a specified number of lines. When no argument +is given it toggles between 24 and 42 lines display. +.sp +.ne 3 +.B help +.PP +Not really a online help, but +displays a help screen showing you all the key bindings. +The first pages list all the internal commands followed by their current +bindings. +Subsequent pages will display the custom commands, one command per key. +Press space when you're done reading each page, or return to exit early. +All other characters are ignored. +See also \*QDEFAULT KEY BINDINGS\*U section. +.sp +.ne 3 +.B history +.PP +Usually users work with a shell that allows easy access to previous commands. +For example csh has the command \*Q!!\*U to repeat the last command executed. +.I Screen +allows you to have a primitive way of re-calling \*Qthe command that +started ...\*U: You just type the first letter of that command, then hit +`C-a {' and +.I screen +tries to find a previous line that matches with the `prompt character' +to the left of the cursor. This line is pasted into this window's input queue. +Thus you have a crude command history (made up by the visible window and its +scrollback buffer). +.sp +.ne 3 +.B info +.PP +Uses the message line to display some information about the current window: +the cursor position in the form \*Q(column,row)\*U starting with \*Q(1,1)\*U, +the terminal width and height plus the size of the scrollback buffer in lines, +like in \*U(80,24)+50\*U, various flag settings (flow-control, insert mode, +origin mode, wrap mode, application-keypad mode, output logging, activity +monitoring and redraw (`+' indicates enabled, `\-' not)), +the currently active character set (\fIG0\fP, \fIG1\fP, \fIG2\fP, +or \fIG3\fP), and in square brackets the terminal character sets that are +currently designated as \fIG0\fP through \fIG3\fP. +For system information use the \*Qtime\*U command. +.sp +.ne 3 +.BR ins_reg " [" \fIkey ] +.PP +No longer exists, use \*Qpaste\*U instead. +.sp +.ne 3 +.B kanji +.BR jis | euc | sjis +.RB [ jis | euc | sjis\fR] +.PP +Tell screen how to process kanji input/output. The first argument +sets the kanji type of the current window. Each window can emulate +a different type. The optional second parameter tells screen +how to write the kanji codes to the connected terminal. The preferred +method of setting the display type is to use the \*QKJ\*U termcap +entry. +See also \*Qdefkanji\*U, which changes the default setting of a new +window. +.sp +.ne 3 +.B kill +.PP +Kill current window. +.br +If there is an `exec' command running then it is killed. Otherwise the process +(shell) running in the window receives a HANGUP condition, the window structure +is removed and +.I screen +switches to the previously displayed window. +When the last window is destroyed, +.I screen +exits. +Note: +.I Emacs +users should keep this command in mind, when killing a line. +It is recommended not to use \*QC-a\*U as the +.I screen +escape key or to rebind kill to \*QC-a K\*U. +.sp +.ne 3 +.B lastmsg +.PP +Redisplay the last contents of the message/status line. +Useful if you're typing when a message appears, because the message goes +away when you press a key (unless your terminal has a hardware status line). +Refer to the commands \*Qmsgwait\*U and \*Qmsgminwait\*U for fine tuning. +.sp +.ne 3 +.B license +.PP +Display the disclaimer page. This is done whenever +.I screen +is started without options, which should be often enough. See also +the \*Qstartup_message\*U command. +.sp +.ne 3 +.B lockscreen +.PP +Lock this display. +Call a screenlock program (/local/bin/lck or /usr/bin/lock or a builtin if no +other is available). Screen does not accept any command keys until this program +terminates. Meanwhile processes in the windows may continue, as the windows +are in the `detached' state. The screenlock program may be changed through the +environment variable $LOCKPRG (which must be set in the shell from which +.I screen +is started) and is executed with the user's uid and gid. +.sp +.ne 3 +.BR "log " [ on | off ] +.PP +Start/stop writing output of the current window to a file +\*Qscreenlog.\fIn\fP\*U in the window's default directory, where \fIn\fP +is the number of the current window. This filename can be changed with +the `logfile' command. If no parameter is given, the state +of logging is toggled. The session log is appended to the previous contents +of the file if it already exists. The current contents and the contents +of the scrollback history are not included in the session log. +Default is `off'. +.sp +.ne 3 +.BI "logfile " filename +.PP +Defines the name the logfiles will get. The default is +\*Qscreenlog.%n\*U. +.sp +.ne 3 +.BR "login " [ on | off ] +.PP +Adds or removes the entry in the utmp database file for the current window. +This controls if the window is `logged in'. +When no parameter is given, the login state of the window is toggled. +Additionally to that toggle, it is convenient having a `log in' and a `log out' +key. E.\|g. `bind I login on' and `bind O login off' will map these +keys to be C-a I and C-a O. +The default setting (in config.h.in) should be \*Qon\*U for a +.I screen +that runs under suid-root. +Use the \*Qdeflogin\*U command to change the default login state for new +windows. Both commands are only present when +.I screen +has been compiled with utmp support. +.sp +.ne 3 +.B mapdefault +.PP +Tell screen that the next input character should only be looked up +in the default bindkey table. See also \*Qbindkey\*U. +.sp +.ne 3 +.B mapnotnext +.PP +Like mapdefault, but don't even look in the default bindkey table. +.sp +.ne 3 +.B maptimeout +.RI [ timo ] +.PP +Set the intercharacter timer for input sequence detection to a timeout +of +.I timo +ms. The default timeout is 300ms. Maptimeout with no arguments shows +the current setting. +See also \*Qbindkey\*U. +.sp +.ne 3 +.BI "markkeys " string +.PP +This is a method of changing the keymap used for copy/history mode. +The string is made up of \fIoldchar\fP=\fInewchar\fP pairs which are +separated by `:'. Example: The string \*QB=^B:F=^F\*U will change the +keys `C-b' and `C-f' to the vi style binding (scroll up/down fill page). +This happens to be the default binding for `B' and `F'. +The command \*Qmarkkeys h=^B:l=^F:$=^E\*U would set the mode for an emacs-style +binding. +.sp +.ne 3 +.B meta +.PP +Insert the command character (C-a) in the current window's input stream. +.sp +.ne 3 +.BR "monitor " [ on | off ] +.PP +Toggles activity monitoring of windows. +When monitoring is turned on and an affected window is switched into the +background, you will receive the activity notification message 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 is initially off for all windows. +.sp +.ne 3 +.BI "msgminwait " sec +.PP +Defines the time +.I screen +delays a new message when one message is currently displayed. +The default is 1 second. +.sp +.ne 3 +.BI "msgwait " sec +.PP +Defines the time a message is displayed if +.I screen +is not disturbed by other activity. The default is 5 seconds. +.sp +.ne 3 +.BR "multiuser on" | off +.PP +Switch between singleuser and multiuser mode. Standard +.I screen +operation is singleuser. In multiuser mode the commands `acladd', +`aclchg' and `acldel' +can be used to enable (and disable) other users accessing this screen. +.sp +.ne 3 +.BR "nethack on" | off +.PP +Changes the kind of error messages used by +.IR screen . +When you are familiar with the game \*Qnethack\*U, you may enjoy the +nethack-style messages which will often blur the facts a little, but are +much funnier to read. Anyway, standard messages often tend to be unclear as +well. +.br +This option is only +available if +.I screen +was compiled with the NETHACK flag defined. The +default setting is then determined by the presence of the environment +variable $NETHACKOPTIONS. +.sp +.ne 3 +.B next +.PP +Switch to the next window. +This command can be used repeatedly to cycle through the list of windows. +.sp +.ne 3 +.BR "number " [ \fIn ] +.PP +Change the current windows number. If the given number \fIn\fP is already +used by another window, both windows exchange their numbers. If no argument is +specified, the current window number (and title) is shown. +.sp +.ne 3 +.BR "obuflimit " [ \fIlimit ] +.PP +If the output buffer contains more bytes than the specified limit, no +more data will be +read from the windows. The default value is 256. If you have a fast +display (like xterm), you can set it to some higher value. If no +argument is specified, the current setting is displayed. +.sp +.ne 3 +.B other +.PP +Switch to the window displayed previously. +.sp +.ne 3 +.BR "partial on" | off +.PP +Defines whether the display should be refreshed (as with \fIredisplay\fP) after +switching to the current window. This command only affects the current window. +To immediately affect all windows use the \fIallpartial\fP command. +Default is `off', of course. This default is fixed, as there is currently no +\fIdefpartial\fP command. +.sp +.ne 3 +.BR "password " [ \fIcrypted_pw ] +.PP +Present a crypted password in your \*Q.screenrc\*U file and +.I screen +will ask +for it, whenever someone attempts to resume a detached. This is useful +if you have privileged programs running under +.I screen +and you want to protect your session from reattach attempts by another user +masquerading as your uid (i.e. any superuser.) +If no crypted password is specified, +.I screen +prompts twice for typing a +password and places its encryption in the paste buffer. +Default is `none', this disables password checking. +.sp +.ne 3 +.BR paste +.RI [ registers " [" dest_reg ]] +.PP +Write the (concatenated) contents of the specified registers to the stdin queue +of the current window. The register '.' is treated as the +paste buffer. If no parameter is given the user is prompted for a single +register to paste. +The paste buffer can be filled with the \fIcopy\fP, \fIhistory\fP and +\fIreadbuf\fP commands. +Other registers can be filled with the \fIregister\fP, \fIreadreg\fP and +\fIpaste\fP commands. +If \fIpaste\fP is called with a second argument, the contents of the specified +registers is pasted into the named destination register rather than +the window. If '.' is used as the second argument, the displays paste buffer is +the destination. +Note, that \*Qpaste\*U uses a wide variety of resources: Whenever a second +argument is specified no current window is needed. When the source specification +only contains registers (not the paste buffer) then there need not be a current +display (terminal attached), as the registers are a global resource. The +paste buffer exists once for every user. +.sp +.ne 3 +.BR "pastefont " [ on | off ] +.PP +Tell screen to include font information in the paste buffer. The +default is not to do so. This command is especially usefull for +multi character fonts like kanji. +.sp +.ne 3 +.B pow_break +.PP +Reopen the window's terminal line and send a break condition. See `break'. +.sp +.ne 3 +.B pow_detach +.PP +Power detach. +Mainly the same as \fIdetach\fP, but also sends a HANGUP signal to +the parent process of +.IR screen . +CAUTION: This will result in a logout, when +.I screen +was started from your login shell. +.sp +.ne 3 +.BI "pow_detach_msg " message +.PP +The \fImessage\fP specified here is output whenever a `Power detach' was +performed. It may be used as a replacement for a logout message or to reset +baud rate, etc. +.sp +.ne 3 +.B prev +.PP +Switch to the window with the next lower number. +This command can be used repeatedly to cycle through the list of windows. +.sp +.ne 3 +.B printcmd +.RI [ cmd ] +.PP +If +.I cmd +is not an empty string, screen will not use the terminal capabilities +\*Qpo/pf\*U if it detects an ansi print sequence +.BR "ESC [ 5 i" , +but pipe the output into +.IR cmd . +This should normally be a command like \*Qlpr\*U or +\*Q'cat > /tmp/scrprint'\*U. +.B printcmd +without a command displays the current setting. +The ansi sequence +.B "ESC \e" +ends printing and closes the pipe. +.br +Warning: Be careful with this command! If other user have write +access to your terminal, they will be able to fire off print commands. +.sp +.ne 3 +.BR process " [" \fIkey ] +.PP +Stuff the contents of the specified register into \fIscreen\fP's +input queue. If no argument is given you are prompted for a +register name. The text is parsed as if it had been typed in from the user's +keyboard. This command can be used to bind multiple actions to a single key. +.sp +.ne 3 +.B quit +.PP +Kill all windows and terminate +.IR screen . +Note that on VT100-style terminals the keys C-4 and C-\e are identical. +This makes the default bindings dangerous: +Be careful not to type C-a C-4 when selecting window no. 4. +Use the empty bind command (as in \*Qbind '^\e'\*U) to remove a key binding. +.sp +.ne 3 +.B readbuf +.PP +Reads the contents of the current screen-exchange file into the paste buffer. +See also \*Qbufferfile\*U command. +.sp +.ne 3 +.B readreg +.RI [ register " [" filename ]] +.PP +Does one of two things, dependent on number of arguments: with zero or one +arguments it it duplicates the paste buffer contents into the register specified +or entered at the prompt. With two arguments it reads the contents of the named +file into the register, just as \fIreadbuf\fP reads the screen-exchange file +into the paste buffer. +The following example will paste the system's password file into +the screen window (using register p, where a copy remains): +.PP +.nf + C-a : readreg p /etc/passwd + C-a : paste p +.fi +.sp +.ne 3 +.B redisplay +.PP +Redisplay the current window. Needed to get a full redisplay when in +partial redraw mode. +.sp +.ne 3 +.BI "register " "key string" +.PP +Save the specified \fIstring\fP to the register \fIkey\fP. See also the +\*Qpaste\*U command. +.sp +.ne 3 +.B "removebuf" +.PP +Unlinks the screen-exchange file used by the commands \*Qwritebuf\*U and +\*Qreadbuf\*U. +.sp +.ne 3 +.B "reset" +.PP +Reset the virtual terminal to its \*Qpower-on\*U values. Useful when strange +settings (like scroll regions or graphics character set) are left over from +an application. +.sp +.ne 3 +.B "screen \fP[\fI-opts\fP] [\fIn\fP] [\fIcmd\fP [\fIargs\fP]]" +.PP +Establish a new window. +The flow-control options (\fB\-f\fP, \fB\-fn\fP and \fB\-fa\fP), +title (a.\|k.\|a.) option (\fB\-t\fP), login options (\fB-l\fP and \fB-ln\fP) +, terminal type option (\fB-T <term>\fP) and scrollback option (\fB-h\fP <num>) +may be specified for each command. +If an optional number \fIn\fP in the range 0..9 is given, the window +number \fIn\fP is assigned to the newly created window (or, if this +number is already in-use, the next available number). +If a command is specified after \*Qscreen\*U, this command (with the given +arguments) is started in the window; otherwise, a shell is created. +Thus, if your \*Q.screenrc\*U contains the lines +.sp +.nf + # example for .screenrc: + screen 1 + screen -fn -t foobar 2 telnet foobar +.fi +.sp +.I screen +creates a shell window (in window #1) and a window with a TELNET connection +to the machine foobar (with no flow-control using the title \*Qfoobar\*U +in window #2). Note, that unlike previous versions of +.I screen +no additional default window is created when \*Qscreen\*U commands are +included in your \*Q.screenrc\*U file. When the initialization is completed, +.I screen +switches to the last window specified in your .screenrc file or, if none, +opens a default window #0. +.sp +.ne 3 +.B "scrollback \fP\fInum\fP" +.PP +Set the size of the scrollback buffer for the current windows to \fInum\fP +lines. The default scrollback is 100 lines. +See also the \*Qdefscrollback\*U command and use \*QC-a i\*U to view the +current setting. +.sp +.ne 3 +.BR "select " [ \fIn ] +.PP +Switch to the window with the number \fIn\fP. +If no window number is specified, you get prompted for an +identifier. This can be title (alphanumeric window name) or a number. +When a new window is established, the first available number +is assigned to this window. +Thus, the first window can be activated by \*Qselect 0\*U (there can be no more +than 10 windows present simultaneously unless +.I screen +was compiled with a higher MAXWIN setting). +.sp +.ne +.BR "sessionname " [ \fIname ] +.PP +Rename the current session. Note, that for \*Qscreen -list\*U the +name shows up with the process-id prepended. If the argument \*Qname\*U +is omitted, the name of this session is displayed. Caution: The $STY +environment variables still reflects the old name. This may result in +confusion. +The default is constructed from the tty and host names. +.sp +.ne 3 +.B "setenv " +.RI [ var " [" string ]] +.PP +Set the environment variable \fIvar\fP to value \fIstring\fP. +If only \fIvar\fP is specified, the user will be prompted to enter a value. +If no parameters are specified, the user will be prompted for both variable +and value. The environment is inherited by all subsequently forked shells. +.sp +.ne 3 +.B "shell \fIcommand\fP" +.PP +Set the command to be used to create a new shell. +This overrides the value of the environment variable $SHELL. +This is useful if you'd like to run a tty-enhancer which is expecting to +execute the program specified in $SHELL. If the command begins with +a '-' character, the shell will be started as a login-shell. +.sp +.ne 3 +.B "shelltitle \fItitle\fP" +.PP +Set the title for all shells created during startup or by +the C-A C-c command. +For details about what a title is, see the discussion +entitled \*QTITLES (naming windows)\*U. +.sp +.ne 3 +.BR "silence " [ on | off "|\fIsec\fP]" +.PP +Toggles silence monitoring of windows. +When silence is turned on and an affected window is switched into the +background, you will receive the silence notification message in the +status line after a specified period of inactivity (silence). The default +timeout can be changed with the `silencewait' command or by specifying a +number of seconds instead of `on' or `off'. +Silence is initially off for all windows. +.sp +.ne 3 +.BI "silencewait " sec +.PP +Define the time that all windows monitored for silence should wait before +displaying a message. Default 30 seconds. +.sp +.ne +.B "sleep \fP\fInum\fP" +.PP +This command will pause the execution of a .screenrc file for \fInum\fP seconds. +Keyboard activity will end the sleep. +It may be used to give users a chance to read the messages output by \*Qecho\*U. +.sp +.ne 3 +.B "slowpaste \fIusec\fP" +.PP +Define the speed at which text is inserted by the paste ("C-a ]") command. +If the slowpaste value is nonzero text is written character by character. +.I screen +will make a pause of \fIusec\fP milliseconds after each single character write +to allow the application to process its input. Only use slowpaste if your +underlying system exposes flow control problems while pasting large amounts of +text. +.sp +.ne 3 +.B sorendition +.RB [ "\fIattr\fR " [ \fIcolor ]] +.PP +Change the way screen does highlighting for text marking and printing +messages. +.I Attr +is a hexadecimal number and describes the attributes (inverse, +underline, ...) the text will get. +.I Color +is a 2 digit number and changes the +forground/background of the highlighted text. +Some knowledge of screen's internal character representation is +needed to make the characters appear in the desired way. The default +is currently 10 99 (standout, default colors). +.sp +.ne 3 +.B "startup_message on\fP|\fBoff" +.PP +Select whether you want to see the copyright notice during startup. +Default is `on', as you probably noticed. +.sp +.ne 3 +.B stuff +.I string +.PP +Stuff the string +.I string +in the input buffer of the current window. +This is like the \*Qpaste\*U command but with much less overhead. +You cannot paste +large buffers with the \*stuff\*U command. It is most useful for key +bindings. See also \*Qbindkey\*U. +.sp +.ne 3 +.B "suspend" +.PP +Suspend +.IR screen . +The windows are in the `detached' state, while +.IR screen +is suspended. This feature relies on the shell being able to do job control. +.sp +.ne 3 +.B "term \fIterm\fP" +.PP +In each window's environment +.I screen +opens, the $TERM variable is set to \*Qscreen\*U by default. +But when no description for \*Qscreen\*U is installed in the local termcap +or terminfo data base, you set $TERM to \- say \- +\*Qvt100\*U. This won't do much harm, as +.I screen +is VT100/ANSI compatible. +The use of the \*Qterm\*U command is discouraged for non-default purpose. +That is, one may want to specify special $TERM settings (e.g. vt100) for the +next \*Qscreen rlogin othermachine\*U command. Use the command \*Qscreen -T vt100 +rlogin othermachine\*U rather than setting and resetting the default. +.sp +.ne 3 +.BI termcap " term terminal-tweaks" +.RI [ window-tweaks ] +.br +.BI terminfo " term terminal-tweaks" +.RI [ window-tweaks ] +.br +.BI termcapinfo " term terminal-tweaks" +.RI [ window-tweaks ] +.PP +Use this command to modify your terminal's termcap entry without going through +all the hassles involved in creating a custom termcap entry. +Plus, you can optionally customize the termcap generated for the windows. +If your system works with terminfo-database rather than with +termcap, +.I screen +will understand the `terminfo' command, which has the same effects as +the `termcap' command. Two separate commands are provided, as there are subtle +syntactic differences, e.g. when parameter interpolation (using `%') is +required. Note that termcap names of the capabilities have to be used +with the `terminfo' command. +.br +In many cases, where the arguments are valid in both terminfo and termcap +syntax, you can use the command `termcapinfo', which is just a shorthand +for a pair of `termcap' and `terminfo' commands with identical arguments. +.PP +The first argument specifies which terminal(s) should be affected by this +definition. +You can specify multiple terminal names by separating them with `|'s. +Use `*' to match all terminals and `vt*' to match all terminals that begin +with \*Qvt\*U. +.PP +Each \fItweak\fP argument contains one or more termcap defines (separated +by `:'s) to be inserted at the start of the appropriate termcap entry, +enhancing it or overriding existing values. +The first tweak modifies your terminal's termcap, and contains definitions +that your terminal uses to perform certain functions. +Specify a null string to leave this unchanged (e.\|g. ''). +The second (optional) tweak modifies all the window termcaps, and should +contain definitions that +.I screen +understands (see the \*QVIRTUAL TERMINAL\*U +section). +.PP +Some examples: +.IP +termcap xterm* LP:hs@ +.PP +Informs +.I screen +that all terminals that begin with `xterm' have firm auto-margins that +allow the last position on the screen to be updated (LP), but they don't +really have a status line (no 'hs' \- append `@' to turn entries off). +Note that we assume `LP' for all terminal names that start with \*Qvt\*U, +but only if you don't specify a termcap command for that terminal. +.IP +termcap vt* LP +.br +termcap vt102|vt220 Z0=\eE[?3h:Z1=\eE[?3l +.PP +Specifies the firm-margined `LP' capability for all terminals that begin with +`vt', and the second line will also add the escape-sequences to switch +into (Z0) and back out of (Z1) 132-character-per-line mode if this is +a VT102 or VT220. +(You must specify Z0 and Z1 in your termcap to use the width-changing +commands.) +.IP +termcap vt100 "" l0=PF1:l1=PF2:l2=PF3:l3=PF4 +.PP +This leaves your vt100 termcap alone and adds the function key labels to +each window's termcap entry. +.IP +termcap h19|z19 am@:im=\eE@:ei=\eEO dc=\eE[P +.PP +Takes a h19 or z19 termcap and turns off auto-margins (am@) and enables the +insert mode (im) and end-insert (ei) capabilities (the `@' in the `im' +string is after the `=', so it is part of the string). +Having the `im' and `ei' definitions put into your terminal's termcap will +cause +.I screen +to automatically advertise the character-insert capability in +each window's termcap. +Each window will also get the delete-character capability (dc) added to its +termcap, which +.I screen +will translate into a line-update for the terminal +(we're pretending it doesn't support character deletion). +.PP +If you would like to fully specify each window's termcap entry, you should +instead set the $SCREENCAP variable prior to running +.IR screen . +See the discussion on the \*QVIRTUAL TERMINAL\*U in this manual, and the termcap(5) +man page for more information on termcap definitions. +.sp +.ne 3 +.B time +.PP +Uses the message line to display the time of day, the host name, and the load +averages over 1, 5, and 15 minutes (if this is available on your system). +For window specific information use \*Qinfo\*U. +.sp +.ne 3 +.BR "title " [ \fIwindowalias ] +.PP +Set the name of the current window to \fIwindowalias\fP. If no name is +specified, +.I screen +prompts for one. This command was known as `aka' in previous +releases. +.sp +.ne 3 +.BI "unsetenv " var +.PP +Unset an environment variable. +.sp +.ne 3 +.BR "vbell on" | off +.PP +If your terminal does not support +a visual bell, a `vbell-message' is displayed in the status line. +Sets the visual bell setting for this window. If your terminal does not support +a visual bell, a `vbell-message' is displayed in the status line. +Refer to the termcap variable `vb' (terminfo: 'flash'). +.sp +.ne 3 +.BI "vbell_msg " message +.PP +Sets the visual bell message. \fImessage\fP is printed to the status line if +the window receives a bell character (^G) and vbell is set to \*Qon\*U. +The default message is \*QWuff, Wuff!!\*U. +.sp +.ne 3 +.BI "vbellwait " sec +.PP +Define a delay in seconds after each display of +.IR screen 's +visual bell message. The default is 1 second. +.sp +.ne 3 +.B version +.PP +Print the current version and the compile date in the status line. +.sp +.ne 3 +.BI "wall " "message" +.PP +Write a message to all displays. The message will appear in the terminal's +status line. +.sp +.ne 3 +.BR "width " [ \fInum ] +.PP +Toggle the window width between 80 and 132 columns or set it to \fInum\fP +columns if an argument is specified. +This requires a capable terminal and the termcap entries \*QZ0\*U and \*QZ1\*U. +See the \*Qtermcap\*U command for more information. +.sp +.ne 3 +.B windows +.PP +Uses the message line to display a list of all the windows. +Each window is listed by number with the name of process that has been +started 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 \*Qlogged in\*U 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 `&'; +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. +.sp +.ne 3 +.BR "wrap " [ on | off ] +.PP +Sets the line-wrap setting for the current window. +When line-wrap is on, the second consecutive printable character output at +the last column of a line will wrap to the start of the following line. +As an added feature, backspace (^H) will also wrap through the left margin +to the previous line. +Default is `on'. +.sp +.ne 3 +.B writebuf +.PP +Writes the contents of the paste buffer to a public accessible screen-exchange +file. This is thought of as a primitive means of communication between +.I screen +users on the same host. The filename can be set with the \fIbufferfile\fP +command and defaults to \*Q/tmp/screen-exchange\*U. +.sp +.ne 3 +.BR "writelock " [ on | "off\fR|\fBauto\fR]" +.PP +In addition to access control lists, not all users may be able to write to +the same window at once. Per default, writelock is in `auto' mode and +grants exclusive input permission to the user who is the first to switch +to the particular window. When he leaves the window, other users may obtain +the writelock (automatically). The writelock of the current window is disabled +by the command \*Qwritelock off\*U. If the user issues the command +\*Qwritelock on\*U he keeps the exclusive write permission while switching +to other windows. +.sp +.ne 3 +.B xoff +.br +.B xon +.PP +Insert a CTRL-s / CTRL-q character to the stdin queue of the +current window. +.sp +.ne 3 +.BR "zombie " [\fIkeys\fP] +.br +.BR "defzombie " [\fIkeys\fP] +.PP +Per default +.I screen +windows are removed from the window list as soon as +the windows process (e.g. shell) exits. When a string of two keys is +specified to the zombie command, `dead' windows will remain in the list. +The \fBkill\fP kommand may be used to remove such a window. Pressing the +first key in the dead window has the same effect. When pressing the second +key, screen will attempt to resurrect the window. The process that was +initially running in the window will be launched again. Calling \fBzombie\fP +without parameters will clear the zombie setting, thus making windows disappear +when their process exits. + +As the zombie-setting is manipulated globally for all windows, this command +should only be called \fBdefzombie\fP. Until we need this as a per window +setting, the commands \fBzombie\fP and \fBdefzombie\fP are synonymous. + +.SH "THE MESSAGE LINE" +.I Screen +displays informational messages and other diagnostics in a \fImessage line\fP. +While this line is distributed to appear at the bottom of the screen, +it can be defined to appear at the top of the screen during compilation. +If your terminal has a status line defined in its termcap, +.I screen +will use this for displaying its messages, otherwise a line of the +current screen will +be temporarily overwritten and output will be momentarily interrupted. The +message line is automatically removed after a few seconds delay, but it +can also be removed early (on terminals without a status line) by beginning +to type. +.PP +The message line facility can be used by an application running in +the current window by means of the ANSI \fIPrivacy message\fP +control sequence. +For instance, from within the shell, try something like: +.IP +echo '<esc>^Hello world from window '$WINDOW'<esc>\e\e' +.PP +where '<esc>' is an \fIescape\fP, '^' is a literal up-arrow, +and '\e\e' turns into a single backslash. + + +.SH "FLOW-CONTROL" +Each window has a flow-control setting that determines how +.I screen +deals with +the XON and XOFF characters (and perhaps the interrupt character). +When flow-control is turned off, +.I screen +ignores the XON and XOFF characters, +which allows the user to send them to the current program by simply typing +them (useful for the \fIemacs\fP editor, for instance). +The trade-off is that it will take longer for output from a \*Qnormal\*U +program to pause in response to an XOFF. +With flow-control turned on, XON and XOFF characters are used to immediately +pause the output of the current window. +You can still send these characters to the current program, but you must use +the appropriate two-character +.I screen +commands (typically \*QC-a q\*U (xon) +and \*QC-a s\*U (xoff)). +The xon/xoff commands are also useful for typing C-s and C-q past a terminal +that intercepts these characters. +.PP +Each window has an initial flow-control value set with either the +.B \-f +option or the \*Qdefflow\*U .screenrc command. Per default the windows +are set to automatic flow-switching. +It can then be toggled between the three states 'fixed on', 'fixed off' and +'automatic' interactively with the \*Qflow\*U command bound to "C-a f". +.PP +The automatic flow-switching mode deals with +flow control using the TIOCPKT mode (like \*Qrlogin\*U does). If +the tty driver does not support TIOCPKT, +.I screen +tries to find out +the right mode based on the current setting of the application +keypad \- when it is enabled, flow-control is turned off and visa versa. +Of course, you can still manipulate flow-control manually when needed. +.PP +If you're running with flow-control enabled and find that pressing the +interrupt key (usually C-c) does not interrupt the display until another +6-8 lines have scrolled by, try running +.I screen +with the \*Qinterrupt\*U +option (add the \*Qinterrupt\*U flag to the \*Qflow\*U command in +your .screenrc, or use the +.B \-i +command-line option). +This causes the output that +.I screen +has accumulated from the interrupted program to be flushed. +One disadvantage is that the virtual terminal's memory contains the +non-flushed version of the output, which in rare cases can cause +minor inaccuracies in the output. +For example, if you switch screens and return, or update the screen +with \*QC-a l\*U you would see the version of the output you would +have gotten without \*Qinterrupt\*U being on. +Also, you might need to turn off flow-control (or use auto-flow mode to turn +it off automatically) when running a program that expects you to type the +interrupt character as input, as it is possible to interrupt +the output of the virtual terminal to your physical terminal when flow-control +is enabled. +If this happens, a simple refresh of the screen with \*QC-a l\*U will +restore it. +Give each mode a try, and use whichever mode you find more comfortable. + + +.SH "TITLES (naming windows)" +You can customize each window's name in the window display (viewed with the +\*Qwindows\*U command (C-a w)) 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. +.PP +The default name for all shell windows can be set with the \*Qshelltitle\*U +command in the .screenrc file, while all other windows are created with +a \*Qscreen\*U command and thus can have their name set with the +.B \-t +option. +Interactively, there is the title-string escape-sequence +(<esc>k\fIname\fP<esc>\e) and the \*Qtitle\*U 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 pre-defined names to keys with the \*Qtitle\*U command +to set things quickly without prompting. +.PP +Finally, +.I screen +has a shell-specific heuristic that is enabled by setting the window's name +to \*Q\fIsearch|name\fP\*U and arranging to have a null title escape-sequence +output as a part of your prompt. +The \fIsearch\fP portion specifies an end-of-prompt search string, while +the \fIname\fP portion specifies the default shell name for the window. +If the \fIname\fP ends in a `:' +.I screen +will add what it believes to be the current command running in the window +to the end of the window's shell name (e.\|g. \*Q\fIname:cmd\fP\*U). +Otherwise the current command name supersedes the shell name while it is +running. +.PP +Here's how it works: you must modify your shell prompt to output a null +title-escape-sequence (<esc>k<esc>\e) as a part of your prompt. +The last part of your prompt must be the same as the string you specified +for the \fIsearch\fP portion of the title. +Once this is set up, +.I 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 either '!', '%', or '^' +.I screen +will use the first word on the following line (if found) in preference to +the just-found name. +This helps csh users get better command names when using job control or +history recall commands. +.PP +Here's some .screenrc examples: +.IP +screen -t top 2 nice top +.PP +Adding this line to your .screenrc would start a nice-d version of the +\*Qtop\*U command in window 2 named \*Qtop\*U rather than \*Qnice\*U. +.sp +.nf + shelltitle '> |csh' + screen 1 +.fi +.sp +These commands would start a shell with 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: +.IP +/usr/joe/src/dir> trn +.PP +(it looks after the '> ' for the command name). +The window status would show the name \*Qtrn\*U while the command was +running, and revert to \*Qcsh\*U upon completion. +.IP +bind R screen -t '% |root:' su +.PP +Having this command in your .screenrc would bind the key +sequence \*QC-a R\*U to the \*Qsu\*U command and give it an +auto-title name of \*Qroot:\*U. +For this auto-title to work, the screen could look something +like this: +.sp +.nf + % !em + emacs file.c +.fi +.sp +Here the user typed the csh history command \*Q!em\*U which ran the +previously entered \*Qemacs\*U command. +The window status would show \*Qroot:emacs\*U during the execution +of the command, and revert to simply \*Qroot:\*U at its completion. +.PP +.nf + bind o title + bind E title "" + bind u title (unknown) +.fi +.sp +The first binding doesn't have any arguments, so it would prompt you +for a title. when you type \*QC-a o\*U. +The second binding would clear an auto-title's current setting (C-a E). +The third binding would set the current window's title to \*Q(unknown)\*U +(C-a u). +.PP +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: +.IP +set prompt='^[[0000m^[k^[\e% ' +.PP +The escape-sequence \*Q<esc>[0000m\*U not only normalizes the character +attributes, but all the zeros round the length of the invisible characters +up to 8. +Bash users will probably want to echo the escape sequence in the +PROMPT_COMMAND: +.IP +PROMPT_COMMAND='echo -n -e "\e033k\e033\e134"' +.PP +(I used \*Q\134\*U to output a `\e' because of a bug in bash v1.04). + + +.SH "THE VIRTUAL TERMINAL" +Each window in a +.I screen +session emulates a VT100 terminal, with some extra functions added. The +VT100 emulator is hardcoded, no other terminal types can be emulated. +.br +Usually +.I screen +tries to emulate as much of the VT100/ANSI standard +as possible. But if your terminal lacks certain capabilities, +the emulation may not be complete. In these cases +.I screen +has to tell the applications that some of the features +are missing. This is no problem on machines using termcap, +because +.I screen +can use the $TERMCAP variable to +customize the standard +.I screen +termcap. +.PP +But if you do a +rlogin on another machine or your machine supports only +terminfo this method fails. Because of this, +.I screen +offers a way to deal with these cases. +Here is how it works: +.PP +When +.I screen +tries to figure out a terminal name for itself, +it first looks +for an entry named \*Qscreen.<term>\*U, where <term> is +the contents of your $TERM variable. +If no such entry exists, +.I screen +tries \*Qscreen\*U (or \*Qscreen-w\*U if the terminal is wide +(132 cols or more)). +If even this entry cannot be found, \*Qvt100\*U is used as a +substitute. +.PP +The idea is that if you have a terminal which doesn't +support an important feature (e.g. delete char or clear to EOS) +you can build a new termcap/terminfo entry for +.I screen +(named \*Qscreen.<dumbterm>\*U) in which this capability +has been disabled. If this entry is installed on your +machines you are able to do +a rlogin and still keep the correct termcap/terminfo entry. +The terminal name is put in the $TERM variable +of all new windows. +.I Screen +also sets the $TERMCAP variable reflecting the capabilities +of the virtual terminal emulated. Notice that, however, on machines +using the terminfo database this variable has no effect. +Furthermore, the variable $WINDOW is set to the window number +of each window. +.PP +The actual set of capabilities supported by the virtual terminal +depends on the capabilities supported by the physical terminal. +If, for instance, the physical terminal does not support underscore mode, +.I screen +does not put the `us' and `ue' capabilities into the window's $TERMCAP +variable, accordingly. +However, a minimum number of capabilities must be supported by a +terminal in order to run +.IR screen ; +namely scrolling, clear screen, and direct cursor addressing +(in addition, +.I screen +does not run on hardcopy terminals or on terminals that over-strike). +.PP +Also, you can customize the $TERMCAP value used by +.I screen +by using the \*Qtermcap\*U .screenrc command, or +by defining the variable $SCREENCAP prior to startup. +When the is latter defined, its value will be copied verbatim into each +window's $TERMCAP variable. +This can either be the full terminal definition, or a filename where the +terminal \*Qscreen\*U (and/or \*Qscreen-w\*U) is defined. +.PP +Note that +.I screen +honors the \*Qterminfo\*U .screenrc command if the system uses the +terminfo database rather than termcap. +.PP +When the boolean `G0' capability is present in the termcap entry +for the terminal on which +.I screen +has been called, the terminal emulation of +.I screen +supports multiple character sets. +This allows an application to make use of, for instance, +the VT100 graphics character set or national character sets. +The following control functions from ISO 2022 are supported: +\fIlock shift G0\fP (\fISI\fP), \fIlock shift G1\fP (\fISO\fP), +\fIlock shift G2\fP, \fIlock shift G3\fP, \fIsingle shift G2\fP, +and \fIsingle shift G3\fP. +When a virtual terminal is created or reset, the ASCII character +set is designated as \fIG0\fP through \fIG3\fP. +When the `G0' capability is present, +.I screen +evaluates the capabilities +`S0', `E0', and `C0' if present. `S0' is the sequence the terminal uses +to enable and start the graphics character set rather than \fISI\fP. +`E0' is the corresponding replacement for \fISO\fP. `C0' gives a character +by character translation string that is used during semi-graphics mode. This +string is built like the `acsc' terminfo capability. +.PP +When the `po' and `pf' capabilities are present in the terminal's +termcap entry, applications running in a +.I screen +window can send output to the printer port of the terminal. +This allows a user to have an application in one window +sending output to a printer connected to the terminal, while all +other windows are still active (the printer port is enabled +and disabled again for each chunk of output). +As a side-effect, programs running in different windows can +send output to the printer simultaneously. +Data sent to the printer is not displayed in the window. +.PP +.I 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. If the display has no hardstatus +the line will be displayed as a standard screen message. +The hardstatus line can be changed with the ANSI Application +Program Command (APC): \*QESC_<string>ESC\e\*U. As a convenience +for xterm users the sequence \*QESC]0..2;<string>^G\*U is +also accepted. +.PP +Some capabilities are only put into the $TERMCAP +variable of the virtual terminal if they can be efficiently +implemented by the physical terminal. +For instance, `dl' (delete line) is only put into the $TERMCAP +variable if the terminal supports either delete line itself or +scrolling regions. Note that this may provoke confusion, when +the session is reattached on a different terminal, as the value +of $TERMCAP cannot be modified by parent processes. +.PP +The following is a list of control sequences recognized by +.IR screen . +\*Q(V)\*U and \*Q(A)\*U indicate VT100-specific and ANSI- or +ISO-specific functions, respectively. +.PP +.ta 22n +.TP 27 +.B "ESC E" +Next Line +.TP 27 +.B "ESC D" +Index +.TP 27 +.B "ESC M" +Reverse Index +.TP 27 +.B "ESC H" +Horizontal Tab Set +.TP 27 +.B "ESC Z" +Send VT100 Identification String +.TP 27 +.BR "ESC 7" " (V)" +Save Cursor and Attributes +.TP 27 +.BR "ESC 8" " (V)" +Restore Cursor and Attributes +.TP 27 +.BR "ESC [s" " (A)" +Save Cursor and Attributes +.TP 27 +.BR "ESC [u" " (A)" +Restore Cursor and Attributes +.TP 27 +.B "ESC c" +Reset to Initial State +.TP 27 +.B "ESC g" +Visual Bell +.TP 27 +.B "ESC \fPPn\fB p" +Cursor Visibility (97801) +.TP 27 +\h'\w'ESC 'u'Pn = \fB6\fP +Invisible +.TP 27 +\h'\w'ESC Pn = 'u'\fB7\fP +Visible +.TP 27 +.BR "ESC =" " (V)" +Application Keypad Mode +.TP 27 +.BR "ESC >" " (V)" +Numeric Keypad Mode +.TP 27 +.BR "ESC # 8" " (V)" +Fill Screen with E's +.TP 27 +.BR "ESC \e" " (A)" +String Terminator +.TP 27 +.BR "ESC ^" " (A)" +Privacy Message String (Message Line) +.TP 27 +.B "ESC !" +Global Message String (Message Line) +.TP 27 +.B "ESC k" +A.\|k.\|a. Definition String +.TP 27 +.BR "ESC P" " (A)" +Device Control String. +Outputs a string directly to the host +terminal without interpretation. +.TP 27 +.BR "ESC _" " (A)" +Application Program Command (Hardstatus) +.TP 27 +.BR "ESC ]" " (A)" +Operating System Command (Hardstatus, xterm title hack) +.TP 27 +.BR "Control-N" " (A)" +Lock Shift G1 (SO) +.TP 27 +.BR "Control-O" " (A)" +Lock Shift G0 (SI) +.TP 27 +.BR "ESC n" " (A)" +Lock Shift G2 +.TP 27 +.BR "ESC o" " (A)" +Lock Shift G3 +.TP 27 +.BR "ESC N" " (A)" +Single Shift G2 +.TP 27 +.BR "ESC O" " (A)" +Single Shift G3 +.TP 27 +.BR "ESC ( \fPPcs" " (A)" +Designate character set as G0 +.TP 27 +.BR "ESC ) \fPPcs" " (A)" +Designate character set as G1 +.TP 27 +.BR "ESC * \fPPcs" " (A)" +Designate character set as G2 +.TP 27 +.BR "ESC + \fPPcs" " (A)" +Designate character set as G3 +.TP 27 +.B "ESC [ \fPPn\fB ; \fPPn\fB H" +Direct Cursor Addressing +.TP 27 +.B "ESC [ \fPPn\fB ; \fPPn\fB f" +Direct Cursor Addressing +.TP 27 +.B "ESC [ \fPPn\fB J" +Erase in Display +.TP 27 +\h'\w'ESC [ 'u'Pn = None or \fB0\fP +From Cursor to End of Screen +.TP 27 +\h'\w'ESC [ Pn = 'u'\fB1\fP +From Beginning of Screen to Cursor +.TP 27 +\h'\w'ESC [ Pn = 'u'\fB2\fP +Entire Screen +.TP 27 +.B "ESC [ \fPPn\fB K" +Erase in Line +.TP 27 +\h'\w'ESC [ 'u'Pn = None or \fB0\fP +From Cursor to End of Line +.TP 27 +\h'\w'ESC [ Pn = 'u'\fB1\fP +From Beginning of Line to Cursor +.TP 27 +\h'\w'ESC [ Pn = 'u'\fB2\fP +Entire Line +.TP 27 +.B "ESC [ \fPPn\fB A" +Cursor Up +.TP 27 +.B "ESC [ \fPPn\fB B" +Cursor Down +.TP 27 +.B "ESC [ \fPPn\fB C" +Cursor Right +.TP 27 +.B "ESC [ \fPPn\fB D" +Cursor Left +.TP 27 +.B "ESC [ \fPPs\fB ;\fP...\fB; \fPPs\fB m" +Select Graphic Rendition +.TP 27 +\h'\w'ESC [ 'u'Ps = None or \fB0\fP +Default Rendition +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB1\fP +Bold +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB2\fP (A) +Faint +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB3\fP (A) +\fIStandout\fP Mode (ANSI: Italicized) +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB4\fP +Underlined +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB5\fP +Blinking +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB7\fP +Negative Image +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB22\fP (A) +Normal Intensity +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB23\fP (A) +\fIStandout\fP Mode off (ANSI: Italicized off) +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB24\fP (A) +Not Underlined +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB25\fP (A) +Not Blinking +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB27\fP (A) +Positive Image +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB30\fP (A) +Foreground Black +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB31\fP (A) +Foreground Red +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB32\fP (A) +Foreground Green +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB33\fP (A) +Foreground Yellow +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB34\fP (A) +Foreground Blue +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB35\fP (A) +Foreground Magenta +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB36\fP (A) +Foreground Cyan +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB37\fP (A) +Foreground White +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB39\fP (A) +Foreground Default +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB40\fP (A) +Background Black +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB...\fP +... +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB49\fP (A) +Background Default +.TP 27 +.B "ESC [ \fPPn\fB g" +Tab Clear +.TP 27 +\h'\w'ESC [ 'u'Pn = None or \fB0\fP +Clear Tab at Current Position +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB3\fP +Clear All Tabs +.TP 27 +.BR "ESC [ \fPPn\fB ; \fPPn\fB r" " (V)" +Set Scrolling Region +.TP 27 +.BR "ESC [ \fPPn\fB I" " (A)" +Horizontal Tab +.TP 27 +.BR "ESC [ \fPPn\fB Z" " (A)" +Backward Tab +.TP 27 +.BR "ESC [ \fPPn\fB L" " (A)" +Insert Line +.TP 27 +.BR "ESC [ \fPPn\fB M" " (A)" +Delete Line +.TP 27 +.BR "ESC [ \fPPn\fB @" " (A)" +Insert Character +.TP 27 +.BR "ESC [ \fPPn\fB P" " (A)" +Delete Character +.TP 27 +.B "ESC [ \fPPn\fB S" +Scroll Scrolling Region Up +.TP 27 +.B "ESC [ \fPPn\fB T" +Scroll Scrolling Region Down +.TP 27 +.B "ESC [ \fPPs\fB ;\fP...\fB; \fPPs\fB h" +Set Mode +.TP 27 +.B "ESC [ \fPPs\fB ;\fP...\fB; \fPPs\fB l" +Reset Mode +.TP 27 +\h'\w'ESC [ 'u'Ps = \fB4\fP (A) +Insert Mode +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB20\fP (A) +\fIAutomatic Linefeed\fP Mode +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB34\fP +Normal Cursor Visibility +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB?1\fP (V) +Application Cursor Keys +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB?3\fP (V) +Change Terminal Width to 132 columns +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB?5\fP (V) +Reverse Video +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB?6\fP (V) +\fIOrigin\fP Mode +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB?7\fP (V) +\fIWrap\fP Mode +.TP 27 +\h'\w'ESC [ Ps = 'u'\fB?25\fP (V) +Visible Cursor +.TP 27 +.BR "ESC [ 5 i" " (A)" +Start relay to printer (ANSI Media Copy) +.TP 27 +.BR "ESC [ 4 i" " (A)" +Stop relay to printer (ANSI Media Copy) +.TP 27 +.B "ESC [ 8 ; \fPPh\fB ; \fPPw\fB t" +Resize the window to `Ph' lines and `Pw' columns (SunView special) +.TP 27 +.B "ESC [ c" +Send VT100 Identification String +.TP 27 +.B "ESC [ x" +Send Terminal Parameter Report +.TP 27 +.B "ESC [ > c" +Send VT220 Secondary Device Attributes String +.TP 27 +.B "ESC [ 6 n" +Send Cursor Position Report + + +.SH "INPUT TRANSLATION" +In order to do a full VT100 emulation \fIscreen\fP has to detect +that a sequence of characters in the input stream was generated +by a keypress on the user's keyboard and insert the VT100 +style escape sequence. \fIScreen\fP has a very flexible way of doing +this by making it posible to map arbitrary commands on arbitrary +sequences of characters. For standard VT100 emulation the command +will always insert a string in the input buffer of the window +(see also command \fBstuff\fP in the command table). +Because the sequences generated by a keypress can +change after a reattach from a different terminal type, it is +possible to bind commands to the termcap name of the keys. +\fIScreen\fP will insert the correct binding after each +reattach. See the \fBbindkey\fP command for further details on the +syntax and examples. +.PP +Here is the table of the default key bindings. (A) means that the +command is executed if the keyboard is switched into application +mode. +.PP +.ta 18n 34n 50n +.nf +Key name Termcap name Command +\l'54n' +.ta 22n 34n 50n +Cursor up ku stuff \e033[A + stuff \e033OA (A) +Cursor down kd stuff \e033[B + stuff \e033OB (A) +Cursor right kr stuff \e033[C + stuff \e033OC (A) +Cursor left kl stuff \e033[D + stuff \e033OD (A) +Function key 0 k0 stuff \e033[10~ +Function key 1 k1 stuff \e033OP +Function key 2 k2 stuff \e033OQ +Function key 3 k3 stuff \e033OR +Function key 4 k4 stuff \e033OS +Function key 5 k5 stuff \e033[15~ +Function key 6 k6 stuff \e033[17~ +Function key 7 k7 stuff \e033[18~ +Function key 8 k8 stuff \e033[19~ +Function key 9 k9 stuff \e033[20~ +Function key 10 k; stuff \e033[21~ +Function key 11 F1 stuff \e033[22~ +Function key 12 F2 stuff \e033[23~ +Backspace kb stuff \e010 +Home kh stuff \e033[1~ +End kH stuff \e033[4~ +Insert kI stuff \e033[2~ +Delete kD stuff \e033[3~ +Page up kP stuff \e033[5~ +Page down kN stuff \e033[6~ +Keypad 0 f0 stuff 0 + stuff \e033Op (A) +Keypad 1 f1 stuff 1 + stuff \e033Oq (A) +Keypad 2 f2 stuff 2 + stuff \e033Or (A) +Keypad 3 f3 stuff 3 + stuff \e033Os (A) +Keypad 4 f4 stuff 4 + stuff \e033Ot (A) +Keypad 5 f5 stuff 5 + stuff \e033Ou (A) +Keypad 6 f6 stuff 6 + stuff \e033Ov (A) +Keypad 7 f7 stuff 7 + stuff \e033Ow (A) +Keypad 8 f8 stuff 8 + stuff \e033Ox (A) +Keypad 9 f9 stuff 9 + stuff \e033Oy (A) +Keypad + f+ stuff + + stuff \e033Ok (A) +Keypad - f- stuff - + stuff \e033Om (A) +Keypad * f* stuff * + stuff \e033Oj (A) +Keypad / f/ stuff / + stuff \e033Oo (A) +Keypad = fq stuff = + stuff \e033OX (A) +Keypad . f. stuff . + stuff \e033On (A) +Keypad , f, stuff , + stuff \e033Ol (A) +Keypad enter fe stuff \e015 + stuff \e033OM (A) +.fi + + +.SH SPECIAL TERMINAL CAPABILITIES +The following table describes all terminal capabilities +that are recognized by \fIscreen\fP and are not in the +termcap(5) manual. +You can place these capabilities in your termcap entries (in +`/etc/termcap') or use them with the commands `termcap', `terminfo' and +`termcapinfo' in your screenrc files. It is often not possible to place +these capabilities in the terminfo database. +.PP +.ta 5n +.TP 13 +.BI LP " (bool)" +Terminal has VT100 style margins (`magic margins'). Note that +this capability is obsolete because \fIscreen\fP uses the standard 'xn' +instead. +.TP 13 +.BI Z0 " (str)" +Change width to 132 columns. +.TP 13 +.BI Z1 " (str)" +Change width to 80 columns. +.TP 13 +.BI WS " (str)" +Resize display. This capability has the desired width and height as +arguments. \fISunView(tm)\fP example: '\eE[8;%d;%dt'. +.TP 13 +.BI NF " (bool)" +Terminal doesn't need flow control. Send ^S and ^Q direct to +the application. Same as 'flow off'. The opposite of this +capability is 'nx'. +.TP 13 +.BI G0 " (bool)" +Terminal can deal with ISO 2022 font selection sequences. +.TP 13 +.BI S0 " (str)" +Switch charset 'G0' to the specified charset. Default +is '\eE(%.'. +.TP 13 +.BI E0 " (str)" +Switch charset 'G0' back to standard charset. Default +is '\eE(B'. +.TP 13 +.BI C0 " (str)" +Use the string as a conversion table for font '0'. See +the 'ac' capability for more details. +.TP 13 +.BI CS " (str)" +Switch cursorkeys to application mode. +.TP 13 +.BI CE " (str)" +Switch cursorkeys back to normal mode. +.TP 13 +.BI AN " (bool)" +Turn on autonuke. See the 'autonuke' command for more details. +.TP 13 +.BI OL " (num)" +Set the output buffer limit. See the 'obuflimit' command for more details. +.TP 13 +.BI KJ " (str)" +Set the kanji type of the terminal. Valid strings are \*Qjis\*U, +\*Qeuc\*U and \*Qsjis\*U. +.TP 13 +.BI AF " (str)" +Change character forground color in an ANSI conform way. This +capability will almost always be set to '\eE[3%dm' ('\eE[3%p1%dm' +on terminfo machines). +.TP 13 +.BI AB " (str)" +Same as 'AF', but change background color. +.TP 13 +.BI AX " (bool)" +Does understand ANSI set default fg/bg color (\eE[39m / \eE[49m). +.TP 13 +.BI XC " (str)" +Describe a translation of characters to strings depending on the +current font. More details follow in the next section. + +.SH CHARACTER TRANSLATION +\fIScreen\fP has a powerful mechanism to translate characters to arbitrary +strings depending on the current font and terminal type. +Use this feature if you want to work with a common standard character +set (say ISO8851-latin1) even on terminals that scatter the more +unusual characters over several national language font pages. + +Syntax: +.nf + \fBXC=\fP\fI<charset-mapping>\fP{\fB,,\fP\fI<charset-mapping>\fP} + \fI<charset-mapping>\fP := \fI<designator><template>\fP{\fB,\fP\fI<mapping>\fP} + \fI<mapping>\fP := \fI<char-to-be-mapped><template-arg>\fP +.fi + +The things in braces may be repeated any number of times. + +A \fI<charset-mapping>\fP tells \fIscreen\fP how to map characters +in font \fI<designator>\fP ('B': Ascii, 'A': UK, 'K': german, etc.) +to strings. Every \fI<mapping>\fP describes to what string a single +character will be translated. A template mechanism is used, as +most of the time the codes have a lot in common (for example +strings to switch to and from another charset). Each occurence +of '%' in \fI<template>\fP gets substituted with the \fI<template-arg>\fP +specified together with the character. If your strings are not +similar at all, then use '%' as a template and place the full +string in \fI<template-arg>\fP. A quoting mechanism was added to make +it possible to use a real '%'. The '\e' character quotes the +special characters '\e', '%', and ','. + +Here is an example: + + termcap hp700 'XC=B\eE(K%\eE(B,\e304[,\e326\e\e\e\e,\e334]' + +This tells \fIscreen\fP, how to translate ISOlatin1 (charset 'B') +upper case umlaut characters on a hp700 terminal that has a +german charset. '\e304' gets translated to '\eE(K[\eE(B' and so on. +Note that this line gets parsed *three* times before the internal +lookup table is built, therefore a lot of quoting is needed to +create a single '\e'. + +Another extension was added to allow more emulation: If a mapping +translates the unquoted '%' char, it will be sent to the terminal +whenever \fIscreen\fP switches to the corresponding \fI<designator>\fP. In this +special case the template is assumed to be just '%' because +the charset switch sequence and the character mappings normaly +haven't much in common. + +This example shows one use of the extension: + + termcap xterm 'XC=K%,%\eE(B,[\e304,\e\e\e\e\e326,]\e334' + +Here, a part of the german ('K') charset is emulated on an xterm. +If \fIscreen\fP has to change to the 'K' charset, '\eE(B' will be sent +to the terminal, i.e. the ASCII charset is used instead. The +template is just '%', so the mapping is straightforward: '[' +to '\e304', '\e' to '\e326', and ']' to '\e334'. + +.SH ENVIRONMENT +.PD 0 +.IP COLUMNS 15 +Number of columns on the terminal (overrides termcap entry). +.IP HOME +Directory in which to look for .screenrc. +.IP ISCREENRC +Alternate user screenrc file. +.IP LINES +Number of lines on the terminal (overrides termcap entry). +.IP LOCKPRG +Screen lock program. +.IP NETHACKOPTIONS +Turns on nethack option. +.IP PATH +Used for locating programs to run. +.IP SCREENCAP +For customizing a terminal's TERMCAP value. +.IP SCREENDIR +Alternate socket directory. +.IP SCREENRC +Alternate user screenrc file. +.IP SHELL +Default shell program for opening windows (default \*Q/bin/sh\*U). +.IP STY +Alternate socket name. +.IP SYSSCREENRC +Alternate system screenrc file. +.IP TERM +Terminal name. +.IP TERMCAP +Terminal description. + + +.SH FILES +.PD 0 +.IP $SYSSCREENRC 28 +.IP /local/etc/screenrc +\fIscreen\fP initialization commands +.IP $ISCREENRC +.IP $SCREENRC +.IP $HOME/.iscreenrc +.IP $HOME/.screenrc +Read in after /local/etc/screenrc +.IP $ISCREENDIR/S-<login> +.IP $SCREENDIR/S-<login> +.IP /local/screens/S-<login> +Socket directories (default) +.IP /usr/tmp/screens/S-<login> +Alternate socket directories. +.IP "<socket directory>/.termcap" +Written by the "termcap" output function +.IP /usr/tmp/screens/screen-exchange +or +.IP /tmp/screen-exchange +\fIscreen\fP `interprocess communication buffer' +.IP hardcopy.[0-9] +Screen images created by the hardcopy function +.IP screenlog.[0-9] +Output log files created by the log function +.IP /usr/lib/terminfo/?/* +or +.IP /etc/termcap +Terminal capability databases +.IP /etc/utmp +Login records +.IP $LOCKPRG +Program that locks a terminal. + + +.SH "SEE ALSO" +termcap(5), utmp(5), vi(1), captoinfo(1), tic(1) + + +.SH AUTHORS +Originally created by Oliver Laumann, this latest version was +produced by Wayne Davison, Juergen Weigert and Michael Schroeder. + +.SH COPYLEFT +.nf +Copyright (C) 1993 + Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) + Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) +Copyright (C) 1987 Oliver Laumann +.fi +.PP +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. +.PP +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +.PP +You should have received a copy of the GNU General Public License +along with this program (see the file COPYING); if not, write to the +Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +.SH CONTRIBUTORS +.nf +Ken Beal (kbeal@amber.ssd.csd.harris.com), +Rudolf Koenig (rfkoenig@immd4.informatik.uni-erlangen.de), +Toerless Eckert (eckert@immd4.informatik.uni-erlangen.de), +Wayne Davison (davison@borland.com), +Patrick Wolfe (pat@kai.com, kailand!pat), +Bart Schaefer (schaefer@cse.ogi.edu), +Nathan Glasser (nathan@brokaw.lcs.mit.edu), +Larry W. Virden (lvirden@cas.org), +Howard Chu (hyc@hanauma.jpl.nasa.gov), +Tim MacKenzie (tym@dibbler.cs.monash.edu.au), +Markku Jarvinen (mta@{cc,cs,ee}.tut.fi), +Marc Boucher (marc@CAM.ORG), +Doug Siebert (dsiebert@isca.uiowa.edu), +Ken Stillson (stillson@tsfsrv.mitre.org), +Ian Frechett (frechett@spot.Colorado.EDU), +Brian Koehmstedt (bpk@gnu.ai.mit.edu), +Don Smith (djs6015@ultb.isc.rit.edu), +Frank van der Linden (vdlinden@fwi.uva.nl), +Martin Schweikert (schweik@cpp.ob.open.de), +David Vrona (dave@sashimi.lcu.com), +E. Tye McQueen (tye%spillman.UUCP@uunet.uu.net), +Matthew Green (mrgreen@mame.mu.oz.au), +Christopher Williams (cgw@unt.edu), +Matt Mosley (mattm@access.digex.net), +Gregory Neil Shapiro (gshapiro@wpi.WPI.EDU). +.fi + + +.SH VERSION +This is version 3.7.0. Its roots are a merge of a custom version +2.3PR7 by Wayne Davison +and several enhancements to Oliver Laumann's version 2.0. Note that all versions +numbered 2.x are copyright by Oliver Laumann. + + +.SH BUGS +.PD +.IP \(bu 3 +`dm' (delete mode) and `xs' are not handled +correctly (they are ignored). `xn' is treated as a magic-margin +indicator. +.IP \(bu +.I Screen +has no clue about double-high or double-wide characters. +But this is the only area where +.I vttest +is allowed to fail. +.IP \(bu +It is not possible to change the environment variable $TERMCAP when +reattaching under a different terminal type. +.IP \(bu +The support of terminfo based systems is very limited. Adding extra +capabilities to $TERMCAP may not have any effects. +.IP \(bu +.I Screen +does not make use of hardware tabs. +.IP \(bu +.I Screen +must be installed as set-uid with owner root in order to be able +to correctly change the owner of the tty device file for each +window. +Special permission may also be required to write the file \*Q/etc/utmp\*U. +.IP \(bu +Entries in \*Q/etc/utmp\*U are not removed when +.I screen +is killed with SIGKILL. +This will cause some programs (like "w" or "rwho") +to advertise that a user is logged on who really isn't. +.IP \(bu +.I Screen +may give a strange warning when your tty has no utmp entry. +.IP \(bu +When the modem line was hung up, +.I screen +may not automatically detach (or quit) +unless the device driver is configured to send a HANGUP signal. +To detach a +.I screen +session use the -D or -d command line option. +.IP \(bu +A weird imagination is most useful to gain full advantage of all the features. +.IP \(bu +Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to +.BR screen@uni-erlangen.de . + diff --git a/doc/screen.info b/doc/screen.info new file mode 100644 index 0000000..06243df --- /dev/null +++ b/doc/screen.info @@ -0,0 +1,167 @@ +This is Info file screen.info, produced by Makeinfo-1.55 from the input +file ./screen.texinfo. + + This file documents the `Screen' virtual terminal manager. + + Copyright (c) 1993 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +Indirect: +screen.info-1: 873 +screen.info-2: 50135 +screen.info-3: 99940 +screen.info-4: 149859 + +Tag Table: +(Indirect) +Node: Top873 +Node: Overview2756 +Node: Getting Started6129 +Node: Invoking Screen7887 +Node: Customization13559 +Node: Startup Files14046 +Node: Colon15692 +Node: Commands16314 +Node: Default Key Bindings17272 +Node: Command Summary22227 +Node: New Window32611 +Node: Chdir33374 +Node: Screen Command34345 +Node: Setenv35983 +Node: Shell36503 +Node: Term37176 +Node: Selecting37936 +Node: Next and Previous38473 +Node: Other Window38999 +Node: Select39408 +Node: Session Management40011 +Node: Detach40848 +Node: Power Detach42133 +Node: Lock42772 +Node: Multiuser Session43658 +Node: Multiuser44416 +Node: Acladd44803 +Node: Aclchg45298 +Node: Acldel46621 +Node: Wall46954 +Node: Writelock47192 +Node: Session Name48085 +Node: Suspend48632 +Node: Quit48964 +Node: Window Settings49389 +Node: Naming Windows50135 +Node: Title Command51635 +Node: Dynamic Titles51909 +Node: Title Prompts53443 +Node: Title Screenrc54524 +Node: Console56163 +Node: Kill56605 +Node: Login57428 +Node: Mode58247 +Node: Monitor58645 +Node: Windows60056 +Node: Hardstatus61065 +Node: Virtual Terminal62236 +Node: Control Sequences63293 +Node: Input Translation69794 +Node: Digraph74310 +Node: Bell75102 +Node: Clear76940 +Node: Info77143 +Node: Redisplay77969 +Node: Wrap79101 +Node: Reset79852 +Node: Window Size80170 +Node: Character Processing80785 +Node: Copy and Paste83657 +Node: Copy84262 +Node: Line Termination85107 +Node: Scrollback85516 +Node: Copy Mode Keys86005 +Node: Movement86820 +Node: Marking87974 +Node: Repeat count88349 +Node: Searching88663 +Node: Specials88925 +Node: Paste90857 +Node: Registers93418 +Node: Screen-Exchange94424 +Node: History95507 +Node: Subprocess Execution96247 +Node: Exec96611 +Node: Using Exec98201 +Node: Key Binding99940 +Node: Bind100583 +Node: Bind Examples101570 +Node: Command Character102250 +Node: Help103758 +Node: Bindkey104271 +Node: Bindkey Examples105814 +Node: Bindkey Control106699 +Node: Flow Control107296 +Node: Flow Control Summary107872 +Node: Flow110806 +Node: XON/XOFF111580 +Node: Termcap111953 +Node: Window Termcap112810 +Node: Dump Termcap117968 +Node: Termcap Syntax118683 +Node: Termcap Examples120843 +Node: Special Capabilities122884 +Node: Autonuke125348 +Node: Obuflimit125998 +Node: Character Translation126827 +Node: Message Line129438 +Node: Privacy Message130349 +Node: Hardware Status Line130846 +Node: Last Message131475 +Node: Message Wait131902 +Node: Logging132328 +Node: Hardcopy132652 +Node: Log133448 +Node: Startup134196 +Node: echo134603 +Node: sleep135009 +Node: Startup Message135350 +Node: Miscellaneous135623 +Node: At136612 +Node: Break137920 +Node: Debug138323 +Node: License138707 +Node: Nethack138972 +Node: Number139648 +Node: Silence140017 +Node: Time140784 +Node: Version141158 +Node: Zombie141364 +Node: Printcmd142418 +Node: Sorendition143124 +Node: Environment143775 +Node: Files144857 +Node: Credits145983 +Node: Bugs147900 +Node: Known Bugs148370 +Node: Reporting Bugs149859 +Node: Availability150635 +Node: Installation151081 +Node: Socket Directory151471 +Node: Compiling Screen152001 +Node: Concept Index153393 +Node: Command Index155173 +Node: Keystroke Index162058 + +End Tag Table diff --git a/doc/screen.info-1 b/doc/screen.info-1 new file mode 100644 index 0000000..6d39c2c --- /dev/null +++ b/doc/screen.info-1 @@ -0,0 +1,1514 @@ +This is Info file screen.info, produced by Makeinfo-1.55 from the input +file ./screen.texinfo. + + This file documents the `Screen' virtual terminal manager. + + Copyright (c) 1993 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: screen.info, Node: Top, Next: Overview, Prev: (dir), Up: (dir) + +Screen +****** + + This file documents the `Screen' virtual terminal manager, version +3.7.0. + +* Menu: + +* Overview:: Preliminary information. +* Getting Started:: An introduction to `screen'. +* Invoking Screen:: Command line options for `screen'. +* Customization:: The `.screenrc' file. +* Commands:: List all of the commands. +* New Window:: Running a program in a new window. +* Selecting:: Selecting a window to display. +* Session Management:: Suspending or detaching a session. +* Window Settings:: titles, logging, etc. +* Virtual Terminal:: Controlling the `screen' VT100 emulation. +* Copy and Paste:: Exchanging text between windows and sessions. +* Subprocess Execution:: I/O filtering with `exec'. +* Key Binding:: Binding commands to keys. +* Flow Control:: Trap or pass flow control characters. +* Termcap:: Tweaking your terminal's termcap entry. +* Message Line:: The `screen' message line. +* Logging:: Keeping a record of your session. +* Startup:: Functions only useful at `screen' startup. +* Miscellaneous:: Various other commands. +* Environment:: Environment variables used by `screen'. +* Files:: Files used by `screen'. +* Credits:: Who's who of `screen'. +* Bugs:: What to do if you find a bug. +* Installation:: Getting `screen' running on your system. +* Concept Index:: Index of concepts. +* Command Index:: Index of all `screen' commands. +* Keystroke Index:: Index of default key bindings. + + +File: screen.info, Node: Overview, Next: Getting Started, Prev: Top, Up: Top + +Overview +******** + + Screen is a full-screen window manager that multiplexes a physical +terminal between several processes, typically interactive shells. Each +virtual terminal provides the functions of the DEC VT100 terminal and, +in addition, several control functions from the ANSI X3.64 (ISO 6429) +and ISO 2022 standards (e.g. insert/delete line and support for multiple +character sets). There is a scrollback history buffer for each virtual +terminal and a copy-and-paste mechanism that allows the user to move +text regions between windows. + + When `screen' is called, it creates a single window with a shell in +it (or the specified command) and then gets out of your way so that you +can use the program as you normally would. Then, at any time, you can +create new (full-screen) windows with other programs in them (including +more shells), kill the current window, view a list of the active +windows, turn output logging on and off, copy text between windows, view +the scrollback history, switch between windows, etc. All windows run +their programs completely independent of each other. Programs continue +to run when their window is currently not visible and even when the +whole screen session is detached from the users terminal. + + When a program terminates, `screen' (per default) kills the window +that contained it. If this window was in the foreground, the display +switches to the previously displayed window; if none are left, `screen' +exits. + + Everything you type is sent to the program running in the current +window. The only exception to this is the one keystroke that is used to +initiate a command to the window manager. By default, each command +begins with a control-a (abbreviated `C-a' from now on), and is +followed by one other keystroke. The command character (*note Command +Character::.) and all the key bindings (*note Key Binding::.) can be +fully customized to be anything you like, though they are always two +characters in length. + + The standard way to create a new window is to type `C-a c'. This +creates a new window running a shell and switches to that window +immediately, regardless of the state of the process running in the +current window. Similarly, you can create a new window with a custom +command in it by first binding the command to a keystroke (in your +`.screenrc' file or at the `C-a :' command line) and then using it just +like the `C-a c' command. In addition, new windows can be created by +running a command like: + + screen emacs prog.c + +from a shell prompt within a previously created window. This will not +run another copy of `screen', but will instead supply the command name +and its arguments to the window manager (specified in the $STY +environment variable) who will use it to create the new window. The +above example would start the `emacs' editor (editing `prog.c') and +switch to its window. + + If `/etc/utmp' is writable by `screen', an appropriate record will +be written to this file for each window, and removed when the window is +closed. This is useful for working with `talk', `script', `shutdown', +`rsend', `sccs' and other similar programs that use the utmp file to +determine who you are. As long as `screen' is active on your terminal, +the terminal's own record is removed from the utmp file. *Note Login::. + + +File: screen.info, Node: Getting Started, Next: Invoking Screen, Prev: Overview, Up: Top + +Getting Started +*************** + + Before you begin to use `screen' you'll need to make sure you have +correctly selected your terminal type, just as you would for any other +termcap/terminfo program. (You can do this by using `tset', `qterm', +or just `set term=mytermtype', for example.) + + If you're impatient and want to get started without doing a lot more +reading, you should remember this one command: `C-a ?' (*note Key +Binding::.). Typing these two characters will display a list of the +available `screen' commands and their bindings. Each keystroke is +discussed in the section on keystrokes (*note Default Key Bindings::.). +Another section (*note Customization::.) deals with the contents of your +`.screenrc'. + + If your terminal is a "true" auto-margin terminal (it doesn't allow +the last position on the screen to be updated without scrolling the +screen) consider to use a version of your terminal's termcap that has +automatic margins turned *off*. This will ensure an accurate and +optimal update of the screen in all circumstances. Most terminals +nowadays have "magic" margins (automatic margins plus usable last +column). This is the VT100 style type and perfectly suited for +`screen'. If all you've got is a "true" auto-margin terminal `screen' +will be content to use it, but updating a character put into the last +position on the screen may not be possible until the screen scrolls or +the character is moved into a safe position in some other way. This +delay can be shortened by using a terminal with insert-character +capability. + + *Note Special Capabilities::, for more information about telling +`screen' what kind of terminal you have. + + +File: screen.info, Node: Invoking Screen, Next: Customization, Prev: Getting Started, Up: Top + +Invoking `Screen' +***************** + + Screen has the following command-line options: + +`-a' + Include *all* capabilities (with some minor exceptions) in each + window's termcap, even if `screen' must redraw parts of the display + in order to implement a function. + +`-A' + Adapt the sizes of all windows to the size of the display. By + default, `screen' may try to restore its old window sizes when + attaching to resizable terminals (those with `WS' in their + descriptions, e.g. `suncmd' or some varieties of `xterm'). + +`-c FILE' + Use FILE as the user's configuration file instead of the default + of `$HOME/.screenrc'. + +`-d [PID.SESSIONNAME]' +`-D [PID.SESSIONNAME]' + Do not start `screen', but instead detach a `screen' session + running elsewhere (*note Detach::.). `-d' has the same effect as + typing `C-a d' from the controlling terminal for the session. + `-D' is the equivalent to the power detach key. If no session can + be detached, this option is ignored. The combination `screen -D + -r' can be used to log out from a remote terminal and transport the + session running there to your current terminal. *Note*: It is a + good idea to check the status of your sessions with `screen -list' + before using this option. + +`-e XY' + Set the command character to X, and the character generating a + literal command character (when typed after the command character) + to Y. The defaults are `C-a' and `a', which can be specified as + `-e^Aa'. When creating a `screen' session, this option sets the + default command caracter. In a multiuser session all users added + will start off with this command character. But when attaching to + an already running session, this option only changes the command + character of the attaching user. This option is equivalent to the + commands `defescape' or `escape' respectively. (*note Command + Character::.). + +`-f' +`-fn' +`-fa' + Set flow-control to on, off, or automatic switching mode, + respectively. This option is equivalent to the `defflow' command + (*note Flow Control::.). + +`-h NUM' + Set the history scrollback buffer to be NUM lines high. + Equivalent to the `defscrollback' command (*note Copy::.). + +`-i' + Cause the interrupt key (usually `C-c') to interrupt the display + immediately when flow control is on. This option is equivalent to + the `interrupt' argument to the `defflow' command (*note Flow + Control::.). Its use is discouraged. + +`-l' +`-ln' + Turn login mode on or off (for `/etc/utmp' updating). This option + is equivalent to the `deflogin' command (*note Login::.). + +`-ls' +`-list' + Do not start `screen', but instead print a list of session + identification strings (usually of the form PID.TTY.HOST; *note + Session Name::.). Sessions marked `detached' can be resumed with + `screen -r'. Those marked `attached' are running and have a + controlling terminal. Sessions marked as `dead' should be + thoroughly checked and removed. Ask your system administrator if + you are not sure why they died. Remove sessions with the `-wipe' + option. + +`-L' + Tell `screen' that your auto-margin terminal allows programs to + write to the last column of the last row of the screen without + scrolling. This can also be set in your `.screenrc' by specifying + `xn' in a `termcap' command (*note Termcap::.). + +`-m' + Tell `screen' to ignore the `$STY' environment variable. When + this option is used, a new session will always be created, + regardless of whether `screen' is being called from within another + `screen' session or not. + +`-r [PID.SESSIONNAME]' +`-r SESSIONOWNER/[PID.SESSIONNAME]' + Resume a detached `screen' session. No other options (except `-d' + or `-D') may be specified, though the session name (*note Session + Name::.) may be needed to distinguish between multiple detached + `screen' sessions. The second form is used to connect to another + users screen session which runs in multi-user mode. This indicates + that screen should look for sessions in another users directory. + This requires setuid-root. + +`-R' + Resume the first appropriate detached `screen' session. If + successful, all other command-line options are ignored. If no + detached session exists, start a new session using the specified + options, just as if `-R' had not been specified. This option is + set by default if screen is run as a login-shell. + +`-s PROGRAM' + Set the default shell to be PROGRAM. By default, `screen' uses + the value of the environment variable `$SHELL', or `/bin/sh' if it + is not defined. This option is equivalent to the `shell' command + (*note Shell::.). + +`-S SESSIONNAME' + Set the name of the new session to SESSIONNAME. This option can + be used to specify a meaningful name for the session in place of + the default TTY.HOST suffix. This name identifies the session for + the `screen -list' and `screen -r' commands. This option is + equivalent to the `sessionname' command (*note Session Name::.). + +`-t NAME' + Set the title (name) for the default shell or specified program. + This option is equivalent to the `shelltitle' command (*note + Shell::.). + +`-v' + Print the version number. + +`-wipe' + List available screens like `screen -ls', but remove destroyed + sessions instead of marking them as `dead'. + +`-x' + Attach to a session which is already attached elsewhere + (multi-display mode). + + +File: screen.info, Node: Customization, Next: Commands, Prev: Invoking Screen, Up: Top + +Customizing `Screen' +******************** + + You can modify the default settings for `screen' to fit your tastes +either through a personal `.screenrc' file which contains commands to +be executed at startup, or on the fly using the `colon' command. + +* Menu: + +* Startup Files:: The `.screenrc' file. +* Colon:: Entering customization commands interactively. + + +File: screen.info, Node: Startup Files, Next: Colon, Up: Customization + +The `.screenrc' file +==================== + + When `screen' is invoked, it executes initialization commands from +the files `.screenrc' in the user's home directory and +`/usr/local/etc/screenrc'. These defaults can be overridden in the +following ways: For the global screenrc file `screen' searches for the +environment variable `$SYSSCREENRC' (this override feature may be +disabled at compile-time). The user specific screenrc file is searched +for in `$SCREENRC', then ``$HOME'/.screenrc'. The command line option +`-c' specifies which file to use (*note Invoking Screen::.. Commands +in these files are used to set options, bind commands to keys, and to +automatically establish one or more windows at the beginning of your +`screen' session. Commands are listed one per line, with empty lines +being ignored. A command's arguments are separated by tabs or spaces, +and may be surrounded by single or double quotes. A `#' turns the rest +of the line into a comment, except in quotes. Unintelligible lines are +warned about and ignored. Commands may contain references to +environment variables. The syntax is the shell-like `$VAR' or +`${VAR}'. Note that this causes incompatibility with previous `screen' +versions, as now the '$'-character has to be protected with '\' if no +variable substitution is intended. A string in single-quotes is also +protected from variable substitution. + + Two configuration files are shipped as examples with your screen +distribution: `etc/screenrc' and `etc/etcscreenrc'. They contain a +number of useful examples for various commands. + + +File: screen.info, Node: Colon, Prev: Startup Files, Up: Customization + +Colon +===== + + Customization can also be done online, with this command: + + - Command: colon + (`C-a :') + Allows you to enter `.screenrc' command lines. Useful for + on-the-fly modification of key bindings, specific window creation + and changing settings. Note that the `set' keyword no longer + exists, as of version 3.3. Change default settings with commands + starting with `def'. You might think of this as the `ex' command + mode of `screen', with `copy' as its `vi' command mode (*note Copy + and Paste::.). + + +File: screen.info, Node: Commands, Next: New Window, Prev: Customization, Up: Top + +Commands +******** + + A command in `screen' can either be bound to a key, invoked from a +screenrc file, or called from the `colon' prompt (*note +Customization::.). As of version 3.3, all commands can be bound to +keys, although some may be less useful than others. For a number of +real life working examples of the most important commands see the files +`etc/screenrc' and `etc/etcscreenrc' of your screen distribution. + + In this manual, a command definition looks like this: + +- Command: command [-n] ARG1 [ARG2] ... + (KEYBINDINGS) + This command does something, but I can't remember what. + + An argument in square brackets (`[]') is optional. Many commands +take an argument of `on' or `off', which is indicated as STATE in the +definition. + +* Menu: + +* Default Key Bindings:: `screen' keyboard commands. +* Command Summary:: List of all commands. + + +File: screen.info, Node: Default Key Bindings, Next: Command Summary, Up: Commands + +Default Key Bindings +==================== + + As mentioned previously, each keyboard command consists of a `C-a' +followed by one other character. For your convenience, all commands +that are bound to lower-case letters are also bound to their control +character counterparts (with the exception of `C-a a'; see below). +Thus, both `C-a c' and `C-a C-c' can be used to create a window. + + The following table shows the default key bindings: + +`C-a '' +`C-a "' + (select) + Prompt for a window identifier and switch. *Note Selecting::. + +`C-a 0...9' + (select 0...select 9) + Switch to window number 0...9. *Note Selecting::. + +`C-a C-a' + (other) + Toggle to the window displayed previously. *Note Selecting::. + +`C-a a' + (meta) + Send the command character (C-a) to window. See `escape' command. + *Note Command Character::. + +`C-a A' + (title) + Allow the user to enter a title for the current window. *Note + Naming Windows::. + +`C-a b' + itemx `C-a C-b' (break) + Send a break to the tty. *Note Break::. + +`C-a B' + (pow_break) + Close and reopen the tty-line. *Note Break::. + +`C-a c' +`C-a C-c' + (screen) + Create a new window with a shell and switch to that window. *Note + Screen Command::. + +`C-a C' + (clear) + Clear the screen. *Note Clear::. + +`C-a d' +`C-a C-d' + (detach) + Detach `screen' from this terminal. *Note Detach::. + +`C-a D D' + (pow_detach) + Detach and logout. *Note Power Detach::. + +`C-a f' +`C-a C-f' + (flow) + Cycle flow among `on', `off' or `auto'. *Note Flow::. + +`C-a C-g' + (vbell) + Toggle visual bell mode. *Note Bell::. + +`C-a h' + (hardcopy) + Write a hardcopy of the current window to the file "hardcopy.N". + *Note Hardcopy::. + +`C-a H' + (log) + Toggle logging of the current window to the file "screenlog.N". + *Note Log::. + +`C-a i' +`C-a C-i' + (info) + Show info about the current window. *Note Info::. + +`C-a k' +`C-a C-k' + (kill) + Destroy the current window. *Note Kill::. + +`C-a l' +`C-a C-l' + (redisplay) + Fully refresh the current window. *Note Redisplay::. + +`C-a L' + (login) + Toggle the current window's login state. *Note Login::. + +`C-a m' +`C-a C-m' + (lastmsg) + Repeat the last message displayed in the message line. *Note Last + Message::. + +`C-a M' + (monitor) Toggle monitoring of the current window. *Note + Monitor::. + +`C-a SPC' +`C-a n' +`C-a C-n' + (next) + Switch to the next window. *Note Selecting::. + +`C-a N' + (number) + Show the number (and title) of the current window. *Note Number::. + +`C-a p' +`C-a C-p' +`C-a C-h' +`C-a BackSpace' + (prev) + Switch to the previous window (opposite of `C-a n'). *Note + Selecting::. + +`C-a q' +`C-a C-q' + (xon) + Send a ^Q (ASCII XON) to the current window. *Note XON/XOFF::. + +`C-a r' +`C-a C-r' + (wrap) + Toggle the current window's line-wrap setting (turn the current + window's automatic margins on or off). *Note Wrap::. + +`C-a s' +`C-a C-s' + (xoff) + Send a ^S (ASCII XOFF) to the current window. *Note XON/XOFF::. + +`C-a t' +`C-a C-t' + (time) + Show the load average and xref. *Note Time::. + +`C-a v' + (version) + Display the version and compilation date. *Note Version::. + +`C-a C-v' + (digraph) + Enter digraph. *Note Digraph::. + +`C-a w' +`C-a C-w' + (windows) + Show a list of active windows. *Note Windows::. + +`C-a W' + (width) + Toggle between 80 and 132 columns. *Note Window Size::. + +`C-a x' +`C-a C-x' + (lockscreen) + Lock your terminal. *Note Lock::. + +`C-a z' +`C-a C-z' + (suspend) + Suspend `screen'. *Note Suspend::. + +`C-a Z' + (reset) + Reset the virtual terminal to its "power-on" values. *Note + Reset::. + +`C-a .' + (dumptermcap) + Write out a `.termcap' file. *Note Dump Termcap::. + +`C-a ?' + (help) + Show key bindings. *Note Help::. + +`C-a C-\' + (quit) + Kill all windows and terminate `screen'. *Note Quit::. + +`C-a :' + (colon) + Enter a command line. *Note Colon::. + +`C-a [' +`C-a C-[' +`C-a ESC' + (copy) + Enter copy/scrollback mode. *Note Copy::. + +`C-a ]' +`C-a C-]' + (paste .) + Write the contents of the paste buffer to the stdin queue of the + current window. *Note Paste::. + +`C-a {' + (history) + Copy and paste a previous (command) line. *Note History::. + +`C-a >' + (writebuf) + Write the paste buffer out to the screen-exchange file. *Note + Screen-Exchange::. + +`C-a <' + (readbuf) + Read the screen-exchange file into the paste buffer. *Note + Screen-Exchange::. + +`C-a =' + (removebuf) + Delete the screen-exchange file. *Note Screen-Exchange::. + +`C-a _' + (silence) + Start/stop monitoring the current window for inactivity. *Note + Silence::, + +`C-a ,' + (license) + Show the copyright page. + + +File: screen.info, Node: Command Summary, Prev: Default Key Bindings, Up: Commands + +Command Summary +=============== + +`acladd USERNAMES' + Allow other users in this session. *Note Multiuser Session::. + +`aclchg USERNAMES PERMBITS LIST' + Change a user's permissions. *Note Multiuser Session::. + +`acldel USERNAME' + Disallow other user in this session. *Note Multiuser Session::. + +`activity MESSAGE' + Set the activity notification message. *Note Monitor::. + +`allpartial STATE' + Set all windows to partial refresh. *Note Redisplay::. + +`at [IDENT][`#'|`*'|`%'] COMMAND [ARGS]' + Execute a command at other displays or windows. *Note At::. + +`autodetach STATE' + Automatically detach the session on SIGHUP. *Note Detach::. + +`autonuke STATE' + Enable a clear screen to discard unwritten output. *Note + Autonuke::. + +`bell_msg MESSAGE' + Set the bell notification message. *Note Bell::. + +`bind KEY [COMMAND [ARGS]]' + Bind a command to a key. *Note Bind::. + +`bindkey [OPTS] [STRING [CMD ARGS]]' + Bind a string to a series of keystrokes. *Note Bindkey::. + +`break [DURATION]' + Send a break signal to the current window. *Note Break::. + +`bufferfile [EXCHANGE-FILE]' + Select a file for screen-exchange. *Note Screen-Exchange::. + +`c1 [STATE]' + Change c1 code processing. *Note Character Processing::. + +`charset SET' + Change character set slot designation. *Note Character + Processing::. + +`chdir [DIRECTORY]' + Change the current directory for future windows. *Note Chdir::. + +`clear' + Clear the window screen. *Note Clear::. + +`colon' + Enter a `screen' command. *Note Colon::. + +`command' + Simulate the screen escape key. *Note Command Character::. + +`console [STATE]' + Grab or ungrab console output. *Note Console::. + +`copy' + Enter copy mode. *Note Copy::. + +`copy_reg [KEY]' + Removed. Use `paste' instead. *Note Registers::. + +`crlf STATE' + Select line break behavior for copying. *Note Line Termination::. + +`debug STATE' + Suppress/allow debugging output. *Note Debug::. + +`defautonuke STATE' + Select default autonuke behavior. *Note Autonuke::. + +`defc1 STATE' + Select default c1 processing behavior. *Note Character + Processing::. + +`defcharset [SET]' + Change defaul character set slot designation. *Note Character + Processing::. + +`defescape XY' + Set the default command and `meta' characters. *Note Command + Character::. + +`defflow FSTATE' + Select default flow control behavior. *Note Flow::. + +`defgr STATE' + Select default GR processing behavior. *Note Character + Processing::. + +`defhstatus [STATUS]' + Select default window hardstatus line. *Note Hardstatus::. + +`defkanji WTYPE' + Select default GR processing behavior. *Note Character + Processing::. + +`deflogin STATE' + Select default utmp logging behavior. *Note Login::. + +`defmode MODE' + Select default file mode for ptys. *Note Mode::. + +`defmonitor STATE' + Select default activity monitoring behavior. *Note Monitor::. + +`defobuflimit LIMIT' + Select default output buffer limit. *Note Obuflimit::. + +`defscrollback NUM' + Set default lines of scrollback. *Note Scrollback::. + +`defwrap STATE' + Set default line-wrapping behavior. *Note Wrap::. + +`defwritelock ON|OFF|AUTO' + Set default writelock behavior. *Note Multiuser::. + +`defzombie [KEYS]' + Keep dead windows. *Note Zombie::. + +`detach' + Disconnect `screen' from the terminal. *Note Detach::. + +`digraph' + Enter digraph sequence. *Note Digraph::. + +`dumptermcap' + Write the window's termcap entry to a file. *Note Dump Termcap::. + +`echo [-n] MESSAGE' + Display a message on startup. *Note Startup::. + +`escape XY' + Set the command and `meta' characters. *Note Command Character::. + +`exec [[FDPAT] COMMAND [ARGS ...]]' + Run a subprocess (filter). *Note Exec::. + +`flow [FSTATE]' + Set flow control behavior. *Note Flow::. + +`gr [STATE]' + Change GR charset processing. *Note Character Processing::. + +`hardcopy' + Write out the contents of the current window. *Note Hardcopy::. + +`hardcopy_append STATE' + Append to hardcopy files. *Note Hardcopy::. + +`hardcopydir DIRECTORY' + Place, where to dump hardcopy files. *Note Hardcopy::. + +`hardstatus [STATE]' + Use the hardware status line. *Note Hardware Status Line::. + +`height [LINES]' + Set display height. *Note Window Size::. + +`help' + Display current key bindings. *Note Help::. + +`history' + Find previous command beginning .... *Note History::. + +`info' + Display terminal settings. *Note Info::. + +`ins_reg [KEY]' + Removed, use `paste' instead. *Note Registers::. + +`kanji WTYPE [DTYPE]' + Set the kanji type of a window. *Note Character Processing::. + +`kill' + Destroy the current window. *Note Kill::. + +`lastmsg' + Redisplay the last message. *Note Last Message::. + +`license' + Display licensing information. *Note Startup::. + +`lockscreen' + Lock the controlling terminal. *Note Lock::. + +`log [STATE]' + Log all output in the current window. *Note Log::. + +`logfile FILENAME' + Place where to collect logfiles. *Note Log::. + +`login [STATE]' + Log the window in `/etc/utmp'. *Note Login::. + +`mapdefault' + Use only the default mapping table for the next keystroke. *Note + Bindkey Control::. + +`mapnotnext' + Don't try to do keymapping on the next keystroke. *Note Bindkey + Control::. + +`maptimeout TIMO' + Set the intercharacter timeout used for keymapping. *Note Bindkey + Control::. + +`markkeys STRING' + Rebind keys in copy mode. *Note Copy Mode Keys::. + +`meta' + Insert the command character. *Note Command Character::. + +`monitor [STATE]' + Monitor activity in window. *Note Monitor::. + +`msgminwait SEC' + Set minimum message wait. *Note Message Wait::. + +`msgwait SEC' + Set default message wait. *Note Message Wait::. + +`multiuser STATE' + Go into single or multi user mode. *Note Multiuser Session::. + +`nethack STATE' + Use `nethack'-like error messages. *Note Nethack::. + +`next' + Switch to the next window. *Note Selecting::. + +`number [N]' + Change/display the current window's number. *Note Number::. + +`obuflimit [LIMIT]' + Select output buffer limit. *Note Obuflimit::. + +`other' + Switch to the window you were in last. *Note Selecting::. + +`partial STATE' + Set window to partial refresh. *Note Redisplay::. + +`password [CRYPTED_PW]' + Set reattach password. *Note Detach::. + +`paste [SRC_REGS [DEST_REG]]' + Paste contents of paste buffer or registers somewhere. *Note + Paste::. + +`pastefont [STATE]' + Include font information in the paste buffer. *Note Paste::. + +`pow_break' + Close and Reopen the window's terminal. *Note Break::. + +`pow_detach' + Detach and hang up. *Note Power Detach::. + +`pow_detach_msg [MESSAGE]' + Set message displayed on `pow_detach'. *Note Power Detach::. + +`prev' + Switch to the previous window. *Note Selecting::. + +`printcmd [CMD]' + Set a command for VT100 printer port emulation. *Note Printcmd::. + +`process [KEY]' + Treat a register as input to `screen'. *Note Registers::. + +`quit' + Kill all windows and exit. *Note Quit::. + +`readbuf' + Read the paste buffer from the screen-exchange file. *Note + Screen-Exchange::. + +`readreg [REG [FILE]]' + Load a register from paste buffer or file. *Note Registers::. + +`redisplay' + Redisplay the current window. *Note Redisplay::. + +`register KEY STRING' + Store a string to a register. *Note Registers::. + +`removebuf' + Delete the screen-exchange file. *Note Screen-Exchange::. + +`reset' + Reset the terminal settings for the window. *Note Reset::. + +`screen [OPTS] [N] [CMD [ARGS]]' + Create a new window. *Note Screen Command::. + +`scrollback NUM' + Set size of scrollback buffer. *Note Scrollback::. + +`select [N]' + Switch to a specified window. *Note Selecting::. + +`sessionname [NAME]' + Name this session. *Note Session Name::. + +`setenv [VAR [STRING]]' + Set an environment variable for new windows. *Note Setenv::. + +`shell COMMAND' + Set the default program for new windows. *Note Shell::. + +`shelltitle TITLE' + Set the default name for new windows. *Note Shell::. + +`silence [STATE|SECONDS]' + Monitor a window for inactivity. *Note Silence::. + +`silencewait SECONDS' + Default timeout to trigger an inactivity notify. *Note Silence::. + +`sleep NUM' + Pause during startup. *Note Startup::. + +`slowpaste MSEC' + Slow down pasting in windows. *Note Paste::. + +`sorendition [ATTR [COLOR]]' + Change text highlighting. *Note Sorendition::. + +`startup_message STATE' + Display copyright notice on startup. *Note Startup::. + +`stuff STRING' + Stuff a string in the input buffer of a window. *Note Paste::. + +`suspend' + Put session in background. *Note Suspend::. + +`term TERM' + Set `$TERM' for new windows. *Note Term::. + +`termcap TERM TERMINAL-TWEAKS [WINDOW-TWEAKS]' + Tweak termcap entries for best performance. *Note Termcap + Syntax::. + +`terminfo TERM TERMINAL-TWEAKS [WINDOW-TWEAKS]' + Ditto, for terminfo systems. *Note Termcap Syntax::. + +`termcapinfo TERM TERMINAL-TWEAKS [WINDOW-TWEAKS]' + Ditto, for both systems. *Note Termcap Syntax::. + +`time' + Display time and load average. *Note Time::. + +`title [WINDOWTITLE]' + Set the name of the current window. *Note Title Command::. + +`unsetenv VAR' + Unset environment variable for new windows. *Note Setenv::. + +`vbell [STATE]' + Use visual bell. *Note Bell::. + +`vbell_msg [MESSAGE]' + Set vbell message. *Note Bell::. + +`vbellwait SEC' + Set delay for vbell message. *Note Bell::. + +`version' + Display `screen' version. *Note Version::. + +`wall MESSAGE' + Write a message to all displays. *Note Multiuser Session::. + +`width [NUM]' + Set the width of the window. *Note Window Size::. + +`windows' + List active windows. *Note Windows::. + +`wrap [STATE]' + Control line-wrap behavior. *Note Wrap::. + +`writebuf' + Write paste buffer to screen-exchange file. *Note + Screen-Exchange::. + +`writelock ON|OFF|AUTO' + Grant exclusive write permission. *Note Multiuser Session::. + +`xoff' + Send an XOFF character. *Note XON/XOFF::. + +`xon' + Send an XON character. *Note XON/XOFF::. + +`zombie [KEYS]' + Keep dead windows. *Note Zombie::. + + +File: screen.info, Node: New Window, Next: Selecting, Prev: Commands, Up: Top + +New Window +********** + + This section describes the commands for creating a new window for +running programs. When a new window is created, the first available +number from the range 0...9 is assigned to it. There can be no more +than 10 windows active at any one time unless `screen' was compiled +with a higher MAXWIN setting. + +* Menu: + +* Chdir:: Change the working directory for new windows. +* Screen Command:: Create a new window. +* Setenv:: Set environment variables for new windows. +* Shell:: Parameters for shell windows. +* Term:: Set the terminal type for new windows. + + +File: screen.info, Node: Chdir, Next: Screen Command, Up: New Window + +Chdir +===== + + - Command: chdir [DIRECTORY] + (none) + Change the current directory of `screen' to the specified directory + or, if called without an argument, to your home directory (the + value of the environment variable `$HOME'). All windows that are + created by means of the `screen' command from within `.screenrc' + or by means of `C-a : screen ...' or `C-a c' use this as their + default directory. Without a `chdir' command, this would be the + directory from which `screen' was invoked. Hardcopy and log files + are always written to the *window's* default directory, *not* the + current directory of the process running in the window. You can + use this command multiple times in your `.screenrc' to start + various windows in different default directories, but the last + `chdir' value will affect all the windows you create interactively. + + +File: screen.info, Node: Screen Command, Next: Setenv, Prev: Chdir, Up: New Window + +Screen Command +============== + + - Command: screen [OPTS] [N] [CMD [ARGS]] + (`C-a c', `C-a C-c') + Establish a new window. The flow-control options (`-f', `-fn' and + `-fa'), title option (`-t'), login options (`-l' and `-ln') , + terminal type option (`-T TERM') and scrollback option (`-h NUM') + may be specified for each command. If an optional number N in the + range 0...9 is given, the window number N is assigned to the newly + created window (or, if this number is already in-use, the next + available number). If a command is specified after `screen', this + command (with the given arguments) is started in the window; + otherwise, a shell is created. + + If a tty (character special device) name (e.g. `/dev/ttyS0') is + specified as cmd, then the window is directly connected to this + device. This is similar to the cmd `kermit -l /dev/ttyS0 -c' but + saves resources and is more efficient. + + Thus, if your `.screenrc' contains the lines + + # example for .screenrc: + screen 1 + screen -fn -t foobar 2 telnet foobar + +`screen' creates a shell window (in window #1) and a window with a +TELNET connection to the machine foobar (with no flow-control using the +title `foobar' in window #2). If you do not include any `screen' +commands in your `.screenrc' file, then `screen' defaults to creating a +single shell window, number zero. When the initialization is +completed, `screen' switches to the last window specified in your +.screenrc file or, if none, it opens default window #0. + + +File: screen.info, Node: Setenv, Next: Shell, Prev: Screen Command, Up: New Window + +Setenv +====== + + - Command: setenv VAR STRING + (none) + Set the environment variable VAR to value STRING. If only VAR is + specified, the user will be prompted to enter a value. If no + parameters are specified, the user will be prompted for both + variable and value. The environment is inherited by all + subsequently forked shells. + + - Command: unsetenv VAR + (none) + Unset an environment variable. + + +File: screen.info, Node: Shell, Next: Term, Prev: Setenv, Up: New Window + +Shell +===== + + - Command: shell COMMAND + (none) + Set the command to be used to create a new shell. This overrides + the value of the environment variable `$SHELL'. This is useful if + you'd like to run a tty-enhancer which is expecting to execute the + program specified in `$SHELL'. If the command begins with a `-' + character, the shell will be started as a login-shell. + + - Command: shelltitle TITLE + (none) + Set the title for all shells created during startup or by the C-a + C-c command. *Note Naming Windows::, for details about what + titles are. + + +File: screen.info, Node: Term, Prev: Shell, Up: New Window + +Term +==== + + - Command: term TERM + (none) + In each window `screen' opens, it sets the `$TERM' variable to + `screen' by default, unless no description for `screen' is + installed in the local termcap or terminfo data base. In that + case it pretends that the terminal emulator is `vt100'. This + won't do much harm, as `screen' is VT100/ANSI compatible. The use + of the `term' command is discouraged for non-default purpose. + That is, one may want to specify special `$TERM' settings (e.g. + vt100) for the next `screen rlogin othermachine' command. Use the + command `screen -T vt100 rlogin othermachine' rather than setting + and resetting the default. + + +File: screen.info, Node: Selecting, Next: Session Management, Prev: New Window, Up: Top + +Selecting a Window +****************** + + This section describes the commands for switching between windows in +an `screen' session. The windows are numbered from 0 to 9, and are +created in that order by default (*note New Window::.). + +* Menu: + +* Next and Previous:: Forward or back one window. +* Other Window:: Switch back and forth between two windows. +* Select:: Specify a particular window. + + +File: screen.info, Node: Next and Previous, Next: Other Window, Up: Selecting + +Moving Back and Forth +===================== + + - Command: next + (`C-a SPC', `C-a n', `C-a C-n') + Switch to the next window. This command can be used repeatedly to + cycle through the list of windows. (On some terminals, C-SPC + generates a NUL character, so you must release the control key + before pressing space.) + + - Command: prev + (`C-a p', `C-a C-p') + Switch to the previous window (the opposite of `C-a n'). + + +File: screen.info, Node: Other Window, Next: Select, Prev: Next and Previous, Up: Selecting + +Other Window +============ + + - Command: other + (`C-a C-a') + Switch to the last window displayed. Note that this command + defaults to the command character typed twice, unless overridden. + For instance, if you use the option `-e]x', this command becomes + `]]' (*note Command Character::.). + + +File: screen.info, Node: Select, Prev: Other Window, Up: Selecting + +Select +====== + + - Command: select [N] + (`C-a N', `C-a '', `C-a "') + Switch to the window with the number N. If no window number is + specified, you get prompted for an identifier. This can be a + window name (title) or a number. When a new window is + established, the lowest available number is assigned to this + window. Thus, the first window can be activated by `select 0'; + there can be no more than 10 windows present simultaneously + (unless screen is compiled with a higher MAXWIN setting). + + +File: screen.info, Node: Session Management, Next: Window Settings, Prev: Selecting, Up: Top + +Session Management Commands +*************************** + + Perhaps the most useful feature of `screen' is the way it allows the +user to move a session between terminals, by detaching and reattaching. +This also makes life easier for modem users who have to deal with +unexpected loss of carrier. + +* Menu: + +* Detach:: Disconnect `screen' from your terminal. +* Power Detach:: Detach and log out. +* Lock:: Lock your terminal temporarily. +* Multiuser Session:: Changing number of allowed users. +* Session Name:: Rename your session for later reattachment. +* Suspend:: Suspend your session. +* Quit:: Terminate your session. + + +File: screen.info, Node: Detach, Next: Power Detach, Up: Session Management + +Detach +====== + + - Command: autodetach STATE + (none) + Sets whether `screen' will automatically detach upon hangup, which + saves all your running programs until they are resumed with a + `screen -r' command. When turned off, a hangup signal will + terminate `screen' and all the processes it contains. Autodetach is + on by default. + + - Command: detach + (`C-a d', `C-a C-d') + Detach the `screen' session (disconnect it from the terminal and + put it into the background). A detached `screen' can be resumed by + invoking `screen' with the `-r' option. (*note Invoking Screen::.) + + - Command: password [CRYPTED_PW] + (none) + Present a crypted password in your `.screenrc' file and screen will + ask for it, whenever someone attempts to resume a detached + session. This is useful, if you have privileged programs running + under `screen' and you want to protect your session from reattach + attempts by users that managed to assume your uid. (I.e. any + superuser.) If no crypted password is specified, screen prompts + twice a password and places its encryption in the paste buffer. + Default is `none', which disables password checking. + + +File: screen.info, Node: Power Detach, Next: Lock, Prev: Detach, Up: Session Management + +Power Detach +============ + + - Command: pow_detach + (`C-a D') + Mainly the same as `detach', but also sends a HANGUP signal to the + parent process of `screen'. + *Caution*: This will result in a logout if `screen' was started + from your login shell. + + - Command: pow_detach_msg [MESSAGE] + (none) + The MESSAGE specified here is output whenever a power detach is + performed. It may be used as a replacement for a logout message or + to reset baud rate, etc. Without parameter, the current message + is shown. + + +File: screen.info, Node: Lock, Next: Multiuser Session, Prev: Power Detach, Up: Session Management + +Lock +==== + + - Command: lockscreen + (`C-a x', `C-a C-x') + Call a screenlock program (`/local/bin/lck' or `/usr/bin/lock' or + a builtin, if no other is available). Screen does not accept any + command keys until this program terminates. Meanwhile processes in + the windows may continue, as the windows are in the detached state. + The screenlock program may be changed through the environment + variable `$LOCKPRG' (which must be set in the shell from which + `screen' is started) and is executed with the user's uid and gid. + + Warning: When you leave other shells unlocked and have no password + set on `screen', the lock is void: One could easily re-attach from + an unlocked shell. This feature should rather be called + `lockterminal'. + + +File: screen.info, Node: Multiuser Session, Next: Session Name, Prev: Lock, Up: Session Management + +Multiuser Session +================= + + These commands allow other users to gain access to one single +`screen' session. When attaching to a multiuser `screen' the +sessionname is specified as `username/sessionname' to the `-S' command +line option. `Screen' must be compiled with multiuser support to +enable features described here. + +* Menu: + +* Multiuser:: Enable / Disable multiuser mode. +* Acladd:: Enable a specific user. +* Aclchg:: Change a users permissions. +* Acldel:: Disable a specific user. +* Wall:: Write a message to all users. +* Writelock:: Grant exclusive window access. + + +File: screen.info, Node: Multiuser, Next: Acladd, Up: Multiuser Session + +Multiuser +--------- + + - Command: multiuser STATE + (none) + Switch between single-user and multi-user mode. Standard screen + operation is single-user. In multi-user mode the commands + `acladd', `aclchg' and `acldel' can be used to enable (and + disable) other users accessing this `screen'. + + +File: screen.info, Node: Acladd, Next: Aclchg, Prev: Multiuser, Up: Multiuser Session + +Acladd +------ + + - Command: acladd USERNAMES + (none) + Enable users to fully access this screen session. USERNAMES can be + one user or a comma seperated list of users. This command enables + to attach to the `screen' session and performs the equivalent of + `aclchg USERNAMES +rwx "#?"'. To add a user with restricted access, + use the `aclchg' command below. Multi-user mode only. + + +File: screen.info, Node: Aclchg, Next: Acldel, Prev: Acladd, Up: Multiuser Session + +Aclchg +------ + + - Command: aclchg USERNAMES PERMBITS LIST + (none) + Change permissions for a comma seperated list of users. + Permission bits are represented as `r', `w' and `x'. Prefixing + `+' grants the permission, `-' removes it. The third parameter is + a comma seperated list of commands or windows (specified either by + number or title). The special list `#' refers to all windows, `?' + to all commands. If USERNAMES consists of a single `*', all known + users is affected. A command can be executed when the user has + the `x' bit for it. The user can type input to a window when he + has its `w' bit set and no other user obtains a writelock for this + window. Other bits are currently ignored. To withdraw the + writelock from another user in e.g. window 2: `aclchg USERNAME + -w+w 2'. To allow readonly access to the session: `aclchg USERNAME + -w "#"'. As soon as a user's name is known to screen, he can + attach to the session and (per default) has full permissions for + all command and windows. Execution permission for the acl + commands, `at' and others should also be removed or the user may + be able to regain write permission. Multi-user mode only. + + +File: screen.info, Node: Acldel, Next: Wall, Prev: Aclchg, Up: Multiuser Session + +Acldel +------ + + - Command: acldel USERNAME + (none) + Remove a user from screen's access control list. If currently + attached, all the user's displays are detached from the session. + He cannot attach again. Multi-user mode only. + + +File: screen.info, Node: Wall, Next: Writelock, Prev: Acldel, Up: Multiuser Session + +Wall +---- + + - Command: wall MESSAGE + (none) + Write a message to all displays. The message will appear in the + terminal's status line. + + +File: screen.info, Node: Writelock, Prev: Wall, Up: Multiuser Session + +Writelock +--------- + + - Command: writelock ON|OFF|AUTO + (none) + In addition to access control lists, not all users may be able to + write to the same window at once. Per default, writelock is in + `auto' mode and grants exclusive input permission to the user who + is the first to switch to the particular window. When he leaves + the window, other users may obtain the writelock (automatically). + The writelock of the current window is disabled by the command + `writelock off'. If the user issues the command `writelock on' he + keeps the exclusive write permission while switching to other + windows. + + - Command: defwritelock ON|OFF|AUTO + (none) + Sets the default writelock behaviour for new windows. Initially + all windows will be created with automatic writelocks. + + +File: screen.info, Node: Session Name, Next: Suspend, Prev: Multiuser Session, Up: Session Management + +Session Name +============ + + - Command: sessionname [NAME] + (none) + Rename the current session. Note that for `screen -list' the name + shows up with the process-id prepended. If the argument NAME is + omitted, the name of this session is displayed. + *Caution*: The `$STY' environment variable still reflects the old + name. This may result in confusion. The default is constructed + from the tty and host names. + + +File: screen.info, Node: Suspend, Next: Quit, Prev: Session Name, Up: Session Management + +Suspend +======= + + - Command: suspend + (`C-a z', `C-a C-z') + Suspend `screen'. The windows are in the detached state while + `screen' is suspended. This feature relies on the parent shell + being able to do job control. + + +File: screen.info, Node: Quit, Prev: Suspend, Up: Session Management + +Quit +==== + + - Command: quit + (`C-a C-\') + Kill all windows and terminate `screen'. Note that on VT100-style + terminals the keys `C-4' and `C-\' are identical. So be careful + not to type `C-a C-4' when selecting window no. 4. Use the empty + bind command (as in `bind "^\"') to remove a key binding (*note + Key Binding::.). + + +File: screen.info, Node: Window Settings, Next: Virtual Terminal, Prev: Session Management, Up: Top + +Window Settings +*************** + + These commands control the way `screen' treats individual windows in +a session. *Note Virtual Terminal::, for commands to control the +terminal emulation itself. + +* Menu: + +* Naming Windows:: Control the name of the window +* Console:: See the host's console messages +* Kill:: Destroy an unwanted window +* Login:: Control `/etc/utmp' logging +* Mode:: Control the file mode of the pty +* Monitor:: Watch for activity in a window +* Windows:: List the active windows +* Hardstatus:: Set a window's hardstatus line + diff --git a/doc/screen.info-2 b/doc/screen.info-2 new file mode 100644 index 0000000..dfeec60 --- /dev/null +++ b/doc/screen.info-2 @@ -0,0 +1,1255 @@ +This is Info file screen.info, produced by Makeinfo-1.55 from the input +file ./screen.texinfo. + + This file documents the `Screen' virtual terminal manager. + + Copyright (c) 1993 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: screen.info, Node: Naming Windows, Next: Console, Up: Window Settings + +Naming Windows (Titles) +======================= + + You can customize each window's name in the window display (viewed +with the `windows' command (*note Windows::.) 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 (*note Shell::.). You can specify the name you +want for a window with the `-t' option to the `screen' command when the +window is created (*note Screen Command::.). 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. + +* Menu: + +* Title Command:: The `title' command. +* Dynamic Titles:: Make shell windows change titles dynamically. +* Title Prompts:: Set up your shell prompt for dynamic Titles. +* Title Screenrc:: Set up Titles in your `.screenrc'. + + +File: screen.info, Node: Title Command, Next: Dynamic Titles, Up: Naming Windows + +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. + + +File: screen.info, Node: Dynamic Titles, Next: Title Prompts, Prev: Title Command, Up: Naming Windows + +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. + + +File: screen.info, Node: Title Prompts, Next: Title Screenrc, Prev: Dynamic Titles, Up: Naming Windows + +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 "\033k\033\134"' + + (I used `\134' to output a `\' because of a bug in v1.04). + + +File: screen.info, Node: Title Screenrc, Prev: Title Prompts, Up: Naming Windows + +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). + + +File: screen.info, Node: Console, Next: Kill, Prev: Naming Windows, Up: Window Settings + +Console +======= + + - Command: console [STATE] + (none) + Grabs or ungrabs 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'. + + +File: screen.info, Node: Kill, Next: Login, Prev: Console, Up: Window Settings + +Kill +==== + + - Command: kill + (`C-a k', `C-a C-k') + Kill the current window. + If there is an `exec' command running (*note Exec::.) 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 switches to the previously displayed window. When the last + window is destroyed, `screen' exits. + *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 (*note + Command Character::.) or rebind `kill' to another key sequence, + such as `C-a K' (*note Key Binding::.). + + +File: screen.info, Node: Login, Next: Mode, Prev: Kill, Up: Window Settings + +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 (*note Installation::.). 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' (*note Key + Binding::.). + + +File: screen.info, Node: Mode, Next: Monitor, Prev: Login, Up: Window Settings + +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. *Note Screen Command::). + + +File: screen.info, Node: Monitor, Next: Windows, Prev: Mode, Up: Window Settings + +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 (*note + Windows::.). Monitoring defaults to `off' for all windows. + + +File: screen.info, Node: Windows, Next: Hardstatus, Prev: Monitor, Up: Window Settings + +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 `$' (*note 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 `@' (*note Monitor::.); a window which has output + logging turned on is marked with `(L)'; windows occupied by other + users are marked with `&'; 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. + + +File: screen.info, Node: Hardstatus, Prev: Windows, Up: Window Settings + +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. If the display has no hardstatus the line +will be displayed as a standard screen message. 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 + (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 misinterpretion 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. + + +File: screen.info, Node: Virtual Terminal, Next: Copy and Paste, Prev: Window Settings, Up: Top + +Virtual Terminal +**************** + + Each window in a `screen' session emulates a VT100 terminal, with +some extra functions added. The VT100 emulator is hardcoded, no other +terminal types can be emulated. The commands described here modify the +terminal emulation. + +* Menu: + +* Control Sequences:: Details of the internal VT100 emulation. +* Input Translation:: How keystrokes are remapped. +* Digraph:: Entering digraph sequences. +* Bell:: Getting your attention. +* Clear:: Clear the window display. +* Info:: Terminal emulation statistics. +* Redisplay:: When the display gets confusing. +* Wrap:: Automatic margins. +* Reset:: Recovering from ill-behaved applications. +* Window Size:: Changing the size of your terminal. +* Character Processing:: Change the effect of special characters. + + +File: screen.info, Node: Control Sequences, Next: Input Translation, Up: Virtual Terminal + +Control Sequences +================= + + The following is a list of control sequences recognized by `screen'. +`(V)' and `(A)' indicate VT100-specific and ANSI- or ISO-specific +functions, respectively. + + ESC E Next Line + ESC D Index + ESC M Reverse Index + ESC H Horizontal Tab Set + ESC Z Send VT100 Identification String + ESC 7 (V) Save Cursor and Attributes + ESC 8 (V) Restore Cursor and Attributes + ESC [s (A) Save Cursor and Attributes + ESC [u (A) Restore Cursor and Attributes + ESC c Reset to Initial State + ESC g Visual Bell + ESC Pn p Cursor Visibility (97801) + Pn = 6 Invisible + 7 Visible + ESC = (V) Application Keypad Mode + ESC > (V) Numeric Keypad Mode + ESC # 8 (V) Fill Screen with E's + ESC \ (A) String Terminator + ESC ^ (A) Privacy Message String (Message Line) + ESC ! Global Message String (Message Line) + ESC k Title Definition String + ESC P (A) Device Control String + Outputs a string directly to the host + terminal without interpretation. + ESC _ (A) Application Program Command (Hardstatus) + ESC ] (A) Operating System Command (Hardstatus, xterm + title hack) + Control-N (A) Lock Shift G1 (SO) + Control-O (A) Lock Shift G0 (SI) + ESC n (A) Lock Shift G2 + ESC o (A) Lock Shift G3 + ESC N (A) Single Shift G2 + ESC O (A) Single Shift G3 + ESC ( Pcs (A) Designate character set as G0 + ESC ) Pcs (A) Designate character set as G1 + ESC * Pcs (A) Designate character set as G2 + ESC + Pcs (A) Designate character set as G3 + ESC [ Pn ; Pn H Direct Cursor Addressing + ESC [ Pn ; Pn f Direct Cursor Addressing + ESC [ Pn J Erase in Display + Pn = None or 0 From Cursor to End of Screen + 1 From Beginning of Screen to Cursor + 2 Entire Screen + ESC [ Pn K Erase in Line + Pn = None or 0 From Cursor to End of Line + 1 From Beginning of Line to Cursor + 2 Entire Line + ESC [ Pn A Cursor Up + ESC [ Pn B Cursor Down + ESC [ Pn C Cursor Right + ESC [ Pn D Cursor Left + ESC [ Ps ;...; Ps m Select Graphic Rendition + Ps = None or 0 Default Rendition + 1 Bold + 2 (A) Faint + 3 (A) Standout Mode (ANSI: Italicized) + 4 Underlined + 5 Blinking + 7 Negative Image + 22 (A) Normal Intensity + 23 (A) Standout Mode off (ANSI: Italicized off) + 24 (A) Not Underlined + 25 (A) Not Blinking + 27 (A) Positive Image + 30 (A) Foreground Black + 31 (A) Foreground Red + 32 (A) Foreground Green + 33 (A) Foreground Yellow + 34 (A) Foreground Blue + 35 (A) Foreground Magenta + 36 (A) Foreground Cyan + 37 (A) Foreground White + 39 (A) Foreground Default + 40 (A) Background Black + ... ... + 49 (A) Background Default + ESC [ Pn g Tab Clear + Pn = None or 0 Clear Tab at Current Position + 3 Clear All Tabs + ESC [ Pn ; Pn r (V) Set Scrolling Region + ESC [ Pn I (A) Horizontal Tab + ESC [ Pn Z (A) Backward Tab + ESC [ Pn L (A) Insert Line + ESC [ Pn M (A) Delete Line + ESC [ Pn @ (A) Insert Character + ESC [ Pn P (A) Delete Character + ESC [ Pn S Scroll Scrolling Region Up + ESC [ Pn T Scroll Scrolling Region Down + ESC [ Ps ;...; Ps h Set Mode + ESC [ Ps ;...; Ps l Reset Mode + Ps = 4 (A) Insert Mode + 20 (A) `Automatic Linefeed' Mode. + 34 Normal Cursor Visibility + ?1 (V) Application Cursor Keys + ?3 (V) Change Terminal Width to 132 columns + ?5 (V) Reverse Video + ?6 (V) `Origin' Mode + ?7 (V) `Wrap' Mode + ?25 (V) Visible Cursor + ESC [ 5 i (A) Start relay to printer (ANSI Media Copy) + ESC [ 4 i (A) Stop relay to printer (ANSI Media Copy) + ESC [ 8 ; Ph ; Pw t Resize the window to `Ph' lines and + `Pw' columns (SunView special) + ESC [ c Send VT100 Identification String + ESC [ x (V) Send Terminal Parameter Report + ESC [ > c Send Secondary Device Attributes String + ESC [ 6 n Send Cursor Position Report + + +File: screen.info, Node: Input Translation, Next: Digraph, Prev: Control Sequences, Up: Virtual Terminal + +Input Translation +================= + + In order to do a full VT100 emulation `screen' has to detect that a +sequence of characters in the input stream was generated by a keypress +on the user's keyboard and insert the VT100 style escape sequence. +`Screen' has a very flexible way of doing this by making it possible to +map arbitrary commands on arbitrary sequences of characters. For +standard VT100 emulation the command will always insert a string in the +input buffer of the window (see also command `stuff', *note Paste::.). +Because the sequences generated by a keypress can change after a +reattach from a different terminal type, it is possible to bind +commands to the termcap name of the keys. `Screen' will insert the +correct binding after each reattach. *Note Bindkey:: for further +details on the syntax and examples. + + Here is the table of the default key bindings. (A) means that the +command is executed if the keyboard is switched into application mode. + + Key name Termcap name Command + ----------------------------------------------------- + Cursor up ku stuff \033[A + stuff \033OA (A) + Cursor down kd stuff \033[B + stuff \033OB (A) + Cursor right kr stuff \033[C + stuff \033OC (A) + Cursor left kl stuff \033[D + stuff \033OD (A) + Function key 0 k0 stuff \033[10~ + Function key 1 k1 stuff \033OP + Function key 2 k2 stuff \033OQ + Function key 3 k3 stuff \033OR + Function key 4 k4 stuff \033OS + Function key 5 k5 stuff \033[15~ + Function key 6 k6 stuff \033[17~ + Function key 7 k7 stuff \033[18~ + Function key 8 k8 stuff \033[19~ + Function key 9 k9 stuff \033[20~ + Function key 10 k; stuff \033[21~ + Function key 11 F1 stuff \033[22~ + Function key 12 F2 stuff \033[23~ + Backspace kb stuff \010 + Home kh stuff \033[1~ + End kH stuff \033[4~ + Insert kI stuff \033[2~ + Delete kD stuff \033[3~ + Page up kP stuff \033[5~ + Page down kN stuff \033[6~ + Keypad 0 f0 stuff 0 + stuff \033Op (A) + Keypad 1 f1 stuff 1 + stuff \033Oq (A) + Keypad 2 f2 stuff 2 + stuff \033Or (A) + Keypad 3 f3 stuff 3 + stuff \033Os (A) + Keypad 4 f4 stuff 4 + stuff \033Ot (A) + Keypad 5 f5 stuff 5 + stuff \033Ou (A) + Keypad 6 f6 stuff 6 + stuff \033Ov (A) + Keypad 7 f7 stuff 7 + stuff \033Ow (A) + Keypad 8 f8 stuff 8 + stuff \033Ox (A) + Keypad 9 f9 stuff 9 + stuff \033Oy (A) + Keypad + f+ stuff + + stuff \033Ok (A) + Keypad - f- stuff - + stuff \033Om (A) + Keypad * f* stuff * + stuff \033Oj (A) + Keypad / f/ stuff / + stuff \033Oo (A) + Keypad = fq stuff = + stuff \033OX (A) + Keypad . f. stuff . + stuff \033On (A) + Keypad , f, stuff , + stuff \033Ol (A) + Keypad enter fe stuff \015 + stuff \033OM (A) + + +File: screen.info, Node: Digraph, Next: Bell, Prev: Input Translation, Up: Virtual Terminal + +Digraph +======= + + - Command: digraph [PRESET] + (none) + This command prompts the user for a digraph sequence. The next two + characters typed are looked up in a builtin table and the + resulting character is inserted in the input stream. For example, + if the user enters `a"', an a-umlaut will be inserted. If the + first character entered is a 0 (zero), `screen' will treat the + following charcters (up to three) as an octal number instead. The + optional argument PRESET is treated as user input, thus one can + create an "umlaut" key. For example the command `bindkey ^K + digraph '"'' enables the user to generate an a-umlaut by typing + `CTRL-K a'. + + +File: screen.info, Node: Bell, Next: Clear, Prev: Digraph, Up: Virtual Terminal + +Bell +==== + + - Command: bell_msg [MESSAGE] + (none) + When a bell character is sent to a background window, `screen' + displays a notification in the message line. The notification + message can be re-defined by means of the `bell' command. Each + occurrence of `%' in MESSAGE is replaced by the number of the + window to which a bell has been sent, and each occurrence of `~' + is replaced by the definition for bell in your termcap (usually an + audible bell). The default message is + + 'Bell in window %' + + An empty message can be supplied to the `bell_msg' command to + suppress output of a message line (`bell_msg ""'). + + - Command: vbell [STATE] + (`C-a C-g') + Sets or toggles the visual bell setting for the current window. If + `vbell' is switched to `on', but your terminal does not support a + visual bell, the visual bell message is displayed in the status + line when the bell character is received. Visual bell support of + a terminal is defined by the termcap variable `vb'. *Note Visual + Bell: (termcap)Bell, for more information on visual bells. The + equivalent terminfo capability is `flash'. + + Per default, `vbell' is `off', thus the audible bell is used. + + - Command: vbell_msg [MESSAGE] + (none) + Sets the visual bell message. MESSAGE is printed to the status + line if the window receives a bell character (^G), `vbell' is set + to `on' and the terminal does not support a visual bell. The + default message is `Wuff, Wuff!!'. Without parameter, the current + message is shown. + + - Command: vbellwait SEC + (none) + Define a delay in seconds after each display of `screen' 's visual + bell message. The default is 1 second. + + +File: screen.info, Node: Clear, Next: Info, Prev: Bell, Up: Virtual Terminal + +Clear +===== + + - Command: clear + (`C-a C') + Clears the screen and saves its contents to the scrollback buffer. + + +File: screen.info, Node: Info, Next: Redisplay, Prev: Clear, Up: Virtual Terminal + +Info +==== + + - Command: info + (`C-a i', `C-a C-i') + Uses the message line to display some information about the current + window: the cursor position in the form `(COLUMN,ROW)' starting + with `(1,1)', the terminal width and height plus the size of the + scrollback buffer in lines, like in `(80,24)+50', various flag + settings (flow-control, insert mode, origin mode, wrap mode, + application-keypad mode, output logging, activity monitoring, and + redraw (`+' indicates enabled, `-' not)), the currently active + character set (`G0', `G1', `G2', or `G3'), and in square brackets + the terminal character sets that are currently designated as `G0' + through `G3'. For system information use `time'. + + +File: screen.info, Node: Redisplay, Next: Wrap, Prev: Info, Up: Virtual Terminal + +Redisplay +========= + + - Command: allpartial STATE + (none) + If set to on, only the current cursor line is refreshed on window + change. This affects all windows and is useful for slow terminal + lines. The previous setting of full/partial refresh for each + window is restored with `allpartial off'. This is a global flag + that immediately takes effect on all windows overriding the + `partial' settings. It does not change the default redraw + behaviour of newly created windows. + + - Command: partial STATE + (none) + Defines whether the display should be refreshed (as with + `redisplay') after switching to the current window. This command + only affects the current window. To immediately affect all + windows use the `allpartial' command. Default is `off', of + course. This default is fixed, as there is currently no + `defpartial' command. + + - Command: redisplay + (`C-a l', `C-a C-l') + Redisplay the current window. Needed to get a full redisplay in + partial redraw mode. + + +File: screen.info, Node: Wrap, Next: Reset, Prev: Redisplay, Up: Virtual Terminal + +Wrap +==== + + - Command: wrap STATE + (`C-a r', `C-a C-r') + Sets the line-wrap setting for the current window. When line-wrap + is on, the second consecutive printable character output at the + last column of a line will wrap to the start of the following + line. As an added feature, backspace (^H) will also wrap through + the left margin to the previous line. Default is `on'. + + - Command: defwrap STATE + (none) + Same as the `wrap' command except that the default setting for new + windows is changed. Initially line-wrap is on and can be toggled + with the `wrap' command (`C-a r') or by means of "C-a : wrap + on|off". + + +File: screen.info, Node: Reset, Next: Window Size, Prev: Wrap, Up: Virtual Terminal + +Reset +===== + + - Command: reset + (`C-a Z') + Reset the virtual terminal to its "power-on" values. Useful when + strange settings (like scroll regions or graphics character set) + are left over from an application. + + +File: screen.info, Node: Window Size, Next: Character Processing, Prev: Reset, Up: Virtual Terminal + +Window Size +=========== + + - Command: width [NUM] + (`C-a W') + Toggle the window width between 80 and 132 columns, or set it to + NUM columns if an argument is specified. This requires a capable + terminal and the termcap entries `Z0' and `Z1'. See the `termcap' + command (*note Termcap::.), for more information. + + - Command: height [LINES] + (none) + Set the display height to a specified number of lines. When no + argument is given it toggles between 24 and 42 lines display. + + +File: screen.info, Node: Character Processing, Prev: Window Size, Up: Virtual Terminal + +Character Processing +==================== + + - Command: c1 [STATE] + (none) + Change c1 code processing. `c1 on' tells screen to treat the input + characters between 128 and 159 as control functions. Such an + 8-bit code is normally the same as ESC followed by the + corresponding 7-bit code. The default setting is to process c1 + codes and can be changed with the `defc1' command. Users with + fonts that have usable characters in the c1 positions may want to + turn this off. + + + - Command: gr [STATE] + (none) + Turn GR charset switching on/off. Whenever screens sees an input + char with an 8th bit set, it will use the charset stored in the GR + slot and print the character with the 8th bit stripped. The + default (see also `defgr') is not to process GR switching because + otherwise the ISO88591 charset would not work. + + - Command: kanji WTYPE [DTYPE] + (none) + Tell screen how to process kanji input/output. WTYPE and DTYPE + must be one of the strings `jis', `euc' or `sjis'. The first + argument sets the kanji type of the current window. Each window + can emulate a different type. The optional second parameter tells + screen how to write the kanji codes to the connected terminal. The + preferred method of setting the display type is to use the `KJ' + termcap entry. *Note Special Capabilities::. See also `defkanji', + which changes the default setting of a new window. + + - Command: charset SET + (none) + Change the current character set slot designation and charset + mapping. The first four character of SET are treated as charset + designators while the fifth and sixth character must be in range + `0' to `3' and set the GL/GR charset mapping. On every position a + `.' may be used to indicate that the corresponding charset/mapping + should not be changed (SET is padded to six characters internally + by appending `.' chars). New windows have `BBBB02' as default + charset, unless a `kanji' command is active. + + The current setting can be viewed with the *Note Info:: command. + + - Command: defc1 STATE + (none) + Same as the `c1' command except that the default setting for new + windows is changed. Initial setting is `on'. + + - Command: defgr STATE + (none) + Same as the `gr' command except that the default setting for new + windows is changed. Initial setting is `off'. + + - Command: defkanji WTYPE + (none) + Same as the `kanji' command except that the default setting for + new windows is changed. Initial setting is `off', i.e. `jis'. + + - Command: defcharset [SET] + Like the `charset' command except that the default setting for new + windows is changed. Shows current default if called without + argument. + + +File: screen.info, Node: Copy and Paste, Next: Subprocess Execution, Prev: Virtual Terminal, Up: Top + +Copy and Paste +************** + + For those confined to a hardware terminal, these commands provide a +cut and paste facility more powerful than those provided by most +windowing systems. + +* Menu: + +* Copy:: Copy from scrollback to buffer +* Paste:: Paste from buffer into window +* Registers:: Longer-term storage +* Screen-Exchange:: Sharing data between screen users +* History:: Recalling previous input + + +File: screen.info, Node: Copy, Next: Paste, Up: Copy and Paste + +Copying +======= + + - Command: copy + (`C-a [', `C-a C-[', `C-a ESC') + Enter copy/scrollback mode. This allows you to copy text from the + current window and its history into the paste buffer. In this mode + a `vi'-like full screen editor is active, with controls as + outlined below. + +* Menu: + +* Line Termination:: End copied lines with CR/LF +* Scrollback:: Set the size of the scrollback buffer +* Copy Mode Keys:: Remap keys in copy mode +* Movement:: Move around in the scrollback buffer +* Marking:: Select the text you want +* Repeat count:: Repeat a command +* Searching:: Find the text you want +* Specials:: Other random keys + + +File: screen.info, Node: Line Termination, Next: Scrollback, Up: Copy + +CR/LF +----- + + - Command: crlf [STATE] + (none) + This affects the copying of text regions with the `C-a [' command. + If it is set to `on', lines will be separated by the two character + sequence `CR'/`LF'. Otherwise only `LF' is used. `crlf' is off + by default. When no parameter is given, the state is toggled. + + +File: screen.info, Node: Scrollback, Next: Copy Mode Keys, Prev: Line Termination, Up: Copy + +Scrollback +---------- + + - Command: defscrollback NUM + (none) + Same as the `scrollback' command except that the default setting + for new windows is changed. Defaults to 100. + + - Command: scrollback NUM + (none) + Set the size of the scrollback buffer for new windows to NUM + lines. The default scrollback is 100 lines. Use `C-a i' to view + the current setting. + + +File: screen.info, Node: Copy Mode Keys, Next: Movement, Prev: Scrollback, Up: Copy + +markkeys +-------- + + - Command: markkeys STRING + (none) + This is a method of changing the keymap used for copy/history + mode. The string is made up of OLDCHAR=NEWCHAR pairs which are + separated by `:'. Example: The command `markkeys h=^B:l=^F:$=^E' + would set some keys to be more familiar to `emacs' users. If your + terminal sends characters, that cause you to abort copy mode, then + this command may help by binding these characters to do nothing. + The no-op character is `' and is used like this: `markkeys @=L=H' + if you do not want to use the `H' or `L' commands any longer. As + shown in this example, multiple keys can be assigned to one + function in a single statement. + + +File: screen.info, Node: Movement, Next: Marking, Prev: Copy Mode Keys, Up: Copy + +Movement Keys +------------- + +`h', `j', `k', `l' move the cursor line by line or column by column. + +`0', `^' and `$' move to the leftmost column or to the first or last +non-whitespace character on the line. + +`H', `M' and `L' move the cursor to the leftmost column of the top, +center or bottom line of the window. + +`+' and `-' move the cursor to the leftmost column of the next or +previous line. + +`G' moves to the specified absolute line (default: end of buffer). + +`|' moves to the specified absolute column. + +`w', `b', `e' move the cursor word by word. + +`C-u' and `C-d' scroll the display up/down by the specified amount of +lines while preserving the cursor position. (Default: half screenfull). + +`C-b' and `C-f' move the cursor up/down a full screen. + +`g' moves to the beginning of the buffer. + +`%' jumps to the specified percentage of the buffer. + + Note that Emacs-style movement keys can be specified by a .screenrc +command. (`markkeys "h=^B:l=^F:$=^E"') There is no simple method for a +full emacs-style keymap, however, as this involves multi-character +codes. + + +File: screen.info, Node: Marking, Next: Repeat count, Prev: Movement, Up: Copy + +Marking +------- + + The copy range is specified by setting two marks. The text between +these marks will be highlighted. Press `space' to set the first or +second mark respectively. + +`Y' and `y' can be used to mark one whole line or to mark from start of +line. + +`W' marks exactly one word. + + +File: screen.info, Node: Repeat count, Next: Searching, Prev: Marking, Up: Copy + +Repeat Count +------------ + + Any command in copy mode can be prefixed with a number (by pressing +digits `0...9') which is taken as a repeat count. Example: `C-a C-[ H +10 j 5 Y' will copy lines 11 to 15 into the paste buffer. + + +File: screen.info, Node: Searching, Next: Specials, Prev: Repeat count, Up: Copy + +Searching +--------- + +`/' `vi'-like search forward. + +`?' `vi'-like search backward. + +`C-a s' `emacs' style incremental search forward. + +`C-r' `emacs' style reverse i-search. + + +File: screen.info, Node: Specials, Prev: Searching, Up: Copy + +Specials +-------- + + There are, however, some keys that act differently here from in +`vi'. `Vi' does not allow to yank rectangular blocks of text, but +`screen' does. Press + +`c' or `C' to set the left or right margin respectively. If no repeat +count is given, both default to the current cursor position. +Example: Try this on a rather full text screen: `C-a [ M 20 l SPACE c +10 l 5 j C SPACE'. + +This moves one to the middle line of the screen, moves in 20 columns +left, marks the beginning of the paste buffer, sets the left column, +moves 5 columns down, sets the right column, and then marks the end of +the paste buffer. Now try: +`C-a [ M 20 l SPACE 10 l 5 j SPACE' + +and notice the difference in the amount of text copied. + +`J' joins lines. It toggles between 3 modes: lines separated by a +newline character (012), lines glued seamless, or lines separated by a +single space. Note that you can prepend the newline character with a +carriage return character, by issuing a `set crlf on'. + +`v' is for all the `vi' users who use `:set numbers' - it toggles the +left margin between column 9 and 1. + +`a' before the final space key turns on append mode. Thus the contents +of the paste buffer will not be overwritten, but appended to. + +`A' turns on append mode and sets a (second) mark. + +`>' sets the (second) mark and writes the contents of the paste buffer +to the screen-exchange file (`/tmp/screen-exchange' per default) once +copy-mode is finished. *Note Screen-Exchange::. +This example demonstrates how to dump the whole scrollback buffer to +that file: +`C-a [ g SPACE G $ >'. + +`C-g' gives information about the current line and column. + +`x' exchanges the first mark and the current cursor position. You can +use this to adjust an already placed mark. + +`@' does nothing. Absolutely nothing. Does not even exit copy mode. + +All keys not described here exit copy mode. + + +File: screen.info, Node: Paste, Next: Registers, Prev: Copy, Up: Copy and Paste + +Paste +===== + + - Command: paste [REGISTERS [DESTINATION]] + (`C-a ]', `C-a C-]') + Write the (concatenated) contents of the specified registers to + the stdin stream of the current window. The register `.' is + treated as the paste buffer. If no parameter is specified the user + is prompted to enter a single register. The paste buffer can be + filled with the `copy', `history' and `readbuf' commands. Other + registers can be filled with the `register', `readreg' and `paste' + commands. If `paste' is called with a second argument, the + contents of the specified registers is pasted into the named + destination register rather than the window. If `.' is used as the + second argument, the display's paste buffer is the destination. + Note, that `paste' uses a wide variety of resources: Usually both, + a current window and a current display are required. But whenever + a second argument is specified no current window is needed. When + the source specification only contains registers (not the paste + buffer) then there need not be a current display (terminal + attached), as the registers are a global resource. The paste + buffer exists once for every user. + + - Command: pastefont [STATE] + Tell screen to include font information in the paste buffer. The + default is not to do so. This command is especially usefull for + multi character fonts like kanji. + + - Command: slowpaste MSEC + (none) + Define the speed text is inserted by the `paste' command. If the + slowpaste value is nonzero text is written character by character. + `screen' will pause for MSEC milliseconds after each write to + allow the application to process the input. only use `slowpaste' if + your underlying system exposes flow control problems while pasting + large amounts of text. + + - Command: readreg [REGISTER [FILENAME]] + (none) + Does one of two things, dependent on number of arguments: with + zero or one arguments it it duplicates the paste buffer contents + into the register specified or entered at the prompt. With two + arguments it reads the contents of the named file into the + register, just as `readbuf' reads the screen-exchange file into + the paste buffer. The following example will paste the system's + password file into the screen window (using register p, where a + copy remains): + + C-a : readreg p /etc/passwd + C-a : paste p + + +File: screen.info, Node: Registers, Next: Screen-Exchange, Prev: Paste, Up: Copy and Paste + +Registers +========= + + - Command: copy_reg [KEY] + (none) + Removed. Use `readreg' instead. + + - Command: ins_reg [KEY] + (none) + Removed. Use `paste' instead. + + - Command: process [KEY] + (none) + Stuff the contents of the specified register into the `screen' + input queue. If no argument is given you are prompted for a + register name. The text is parsed as if it had been typed in from + the user's keyboard. This command can be used to bind multiple + actions to a single key. + + - Command: register KEY STRING + (none) + Save the specified STRING to the register KEY. + + - Command: stuff STRING + (none) + Stuff the string STRING in the input buffer of the current window. + This is like the `paste' command, but with much less overhead. + You cannot paste large buffers with the `stuff' command. It is most + useful for key bindings. *Note Bindkey:: + + + +File: screen.info, Node: Screen-Exchange, Next: History, Prev: Registers, Up: Copy and Paste + +Screen-Exchange +=============== + + - Command: bufferfile [EXCHANGE-FILE] + (none) + Change the filename used for reading and writing with the paste + buffer. If the EXCHANGE-FILE parameter is omitted, `screen' + reverts to the default of `/tmp/screen-exchange'. The following + example will paste the system's password file into the screen + window (using the paste buffer, where a copy remains): + + C-a : bufferfile /etc/passwd + C-a < C-a ] + C-a : bufferfile + + - Command: readbuf + (`C-a <') + Reads the contents of the current screen-exchange file into the + paste buffer. + + - Command: removebuf + (`C-a =') + Unlinks the screen-exchange file. + + - Command: writebuf + (`C-a >') + Writes the contents of the paste buffer to a public accessible + screen-exchange file. This is thought of as a primitive means of + communication between `screen' users on the same host. See also + `C-a ESC' (*note Copy::.). + + +File: screen.info, Node: History, Prev: Screen-Exchange, Up: Copy and Paste + +History +======= + + - Command: history + (`C-a {') + Usually users work with a shell that allows easy access to previous + commands. For example, `csh' has the command `!!' to repeat the + last command executed. `screen' provides a primitive way of + recalling "the command that started ...": You just type the first + letter of that command, then hit `C-a {' and `screen' tries to + find a previous line that matches with the prompt character to the + left of the cursor. This line is pasted into this window's input + queue. Thus you have a crude command history (made up by the + visible window and its scrollback buffer). + + +File: screen.info, Node: Subprocess Execution, Next: Key Binding, Prev: Copy and Paste, Up: Top + +Subprocess Execution +******************** + + Control Input or Output of a window by another filter process. Use +with care! + +* Menu: + +* Exec:: The `exec' command syntax. +* Using Exec:: Weird things that filters can do. + + +File: screen.info, Node: Exec, Next: Using Exec, Up: Subprocess Execution + +Exec +==== + + - Command: exec [[FDPAT] NEWCOMMAND [ARGS ... ]] + (none) + Run a unix subprocess (specified by an executable path NEWCOMMAND + and its optional arguments) in the current window. The flow of + data between newcommand's stdin/stdout/stderr, the process already + running (shell) and screen itself (window) is controlled by the + filedescriptor pattern FDPAT. This pattern is basically a three + character sequence representing stdin, stdout and stderr of + newcommand. A dot (`.') connects the file descriptor to screen. An + exclamation mark (`!') causes the file descriptor to be connected + to the already running process. A colon (`:') combines both. + User input will go to newcommand unless newcommand requests the + old process' output (FDPATs first character is `!' or `:') or a + pipe symbol (`|') is added to the end of FDPAT. + Invoking `exec' without arguments shows name and arguments of the + currently running subprocess in this window. + When a subprocess is running the `kill' command will affect it + instead of the window's process. + Refer to the postscript file `doc/fdpat.ps' for a confusing + illustration of all 21 possible combinations. Each drawing shows + the digits 2, 1, 0 representing the three file descriptors of + newcommand. The box marked `W' is usual pty that has the + application-process on its slave side. The box marked `P' is the + secondary pty that now has screen at its master side. + + +File: screen.info, Node: Using Exec, Prev: Exec, Up: Subprocess Execution + +Using Exec +========== + +Abbreviations: + + * Whitespace between the word `exec' and FDPAT and the command name + can be omitted. + + * Trailing dots and a FDPAT consisting only of dots can be omitted. + + * A simple `|' is synonymous for the `!..|' pattern. + + * The word `exec' can be omitted when the `|' abbreviation is used. + + * The word `exec' can always be replaced by leading `!'. + +Examples: + +`!/bin/sh' +`exec /bin/sh' +`exec ... /bin/sh' + Creates another shell in the same window, while the original shell + is still running. Output of both shells is displayed and user + input is sent to the new `/bin/sh'. + +`!!stty 19200' +`exec!stty 19200' +`exec !.. stty 19200' + Set the speed of the window's tty. If your stty command operates + on stdout, then add another `!'. This is a useful command, when a + screen window is directly connected to a serial line that needs to + be configured. + +`|less' +`exec !..| less' + This adds a pager to the window output. The special character `|' + is needed to give the user control over the pager although it gets + its input from the window's process. This works, because `less' + listens on stderr (a behavior that `screen' would not expect + without the `|') when its stdin is not a tty. `Less' versions + newer than 177 fail miserably here; good old `pg' still works. + +`!:sed -n s/.*Error.*/\007/p' + Sends window output to both, the user and the sed command. The sed + inserts an additional bell character (oct. 007) to the window + output seen by screen. This will cause 'Bell in window x' + messages, whenever the string `Error' appears in the window. + diff --git a/doc/screen.info-3 b/doc/screen.info-3 new file mode 100644 index 0000000..66f750a --- /dev/null +++ b/doc/screen.info-3 @@ -0,0 +1,1381 @@ +This is Info file screen.info, produced by Makeinfo-1.55 from the input +file ./screen.texinfo. + + This file documents the `Screen' virtual terminal manager. + + Copyright (c) 1993 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: screen.info, Node: Key Binding, Next: Flow Control, Prev: Subprocess Execution, Up: Top + +Key Binding +*********** + + You may disagree with some of the default bindings (I know I do). +The `bind' command allows you to redefine them to suit your preferences. + +* Menu: + +* Bind:: `bind' syntax. +* Bind Examples:: Using `bind'. +* Command Character:: The character used to start keyboard commands. +* Help:: Show current key bindings. +* Bindkey:: `bindkey' syntax. +* Bindkey Examples:: Some easy examples. +* Bindkey Control:: How to control the bindkey mechanism. + + +File: screen.info, Node: Bind, Next: Bind Examples, Up: Key Binding + +The `bind' command +================== + + - Command: bind KEY [COMMAND [ARGS]] + (none) + Bind a command to a key. The KEY argument is either a single + character, a two-character sequence of the form `^x' (meaning + `C-x'), a backslash followed by an octal number (specifying the + ASCII code of the character), or a backslash followed by a second + character, such as `\^' or `\\'. The argument can also be quoted, + if you like. If no further argument is given, any previously + established binding for this key is removed. The COMMAND argument + can be any command (*note Command Index::.). + + By default, most suitable commands are bound to one or more keys + (*note Default Key Bindings::.; for instance, the command to + create a new window is bound to `C-c' and `c'. The `bind' command + can be used to redefine the key bindings and to define new + bindings. + + +File: screen.info, Node: Bind Examples, Next: Command Character, Prev: Bind, Up: Key Binding + +Examples of the `bind' command +============================== + +Some examples: + + bind ' ' windows + bind ^f screen telnet foobar + bind \033 screen -ln -t root -h 1000 9 su + +would bind the space key to the command that displays a list of windows +(so that the command usually invoked by `C-a C-w' would also be +available as `C-a space'), bind `C-f' to the command "create a window +with a TELNET connection to foobar", and bind ESC to the command that +creates an non-login window with title `root' in slot #9, with a +super-user shell and a scrollbackbuffer of 1000 lines. + + +File: screen.info, Node: Command Character, Next: Help, Prev: Bind Examples, Up: Key Binding + +Command Character +================= + + - Command: escape XY + (none) + Set the command character to X and the character generating a + literal command character to Y (just like with the `-e' option). + Each argument is either a single character, a two-character + sequence of the form `^x' (meaning `C-x'), a backslash followed by + an octal number (specifying the ASCII code of the character), or a + backslash followed by a second character, such as `\^' or `\\'. + The default is `^Aa', but ```' is recommended by one of the + authors. + + - Command: defescape XY + (none) + Set the default command characters. This is equivalent to the + command `escape' except that it is useful for multiuser sessions + only. In a multiuser session `escape' changes the command + character of the calling user, where `defescape' changes the + default command characters for users that will be added later. + + - Command: meta + (`C-a a') + Send the command character (`C-a') to the process in the current + window. The keystroke for this command is the second parameter to + the `-e' command line switch (*note Invoking Screen::.), or the + `escape' .screenrc directive. + + - Command: command + (none) + This command has the same effect as typing the screen escape + character (`C-a'). It is probably only useful for key bindings. + *Note Bindkey::. + + +File: screen.info, Node: Help, Next: Bindkey, Prev: Command Character, Up: Key Binding + +Help +==== + + - Command: help + (`C-a ?') + Displays a help screen showing you all the key bindings. The first + pages list all the internal commands followed by their bindings. + Subsequent pages will display the custom commands, one command per + key. Press space when you're done reading each page, or return to + exit early. All other characters are ignored. *Note Default Key + Bindings::. + + +File: screen.info, Node: Bindkey, Next: Bindkey Examples, Prev: Help, Up: Key Binding + +Bindkey +======= + + - Command: bindkey [OPTS] [STRING [CMD ARGS]] + (none) + This command manages screen's input translation tables. Every + entry in one of the tables tells screen how to react if a certain + sequence of characters is encountered. There are three tables: one + that should contain actions programmed by the user, one for the + default actions used for terminal emulation and one for screen's + copy mode to do cursor movement. *Note Input Translation:: for a + list of default key bindings. + + If the `-d' option is given, bindkey modifies the default table, + `-m' changes the copy mode table and with neither option the user + table is selected. The argument `string' is the sequence of + characters to which an action is bound. This can either be a fixed + tring or a termcap keyboard capability name (selectable with the + `-k' option). + + Some keys on a VT100 terminal can send a different string if + application mode is turned on (e.g. the cursor keys). Such keys + have two entries in the translation table. You can select the + application mode entry by specifying the `-a' option. + + The `-t' option tells screen not to do intercharacter timing. One + cannot turn off the timing if a termcap capabilty is used. + + `cmd' can be any of screen's commands with an arbitrary number of + `args'. If `cmd' is omitted the keybinding is removed from the + table. + + +File: screen.info, Node: Bindkey Examples, Next: Bindkey Control, Prev: Bindkey, Up: Key Binding + +Bindkey Examples +================ + +Here are some examples of keyboard bindings: + + bindkey -d + +Show all of the default key bindings. The application mode entries are +marked with [A]. + + bindkey -k k1 select 1 + +Make the "F1" key switch to window one. + + bindkey -t foo stuff barfoo + +Make `foo' an abrevation of the word `barfoo'. Timeout is disabled so +that users can type slowly. + + bindkey "\024" mapdefault + +This keybinding makes `C-t' an escape character for keybindings. If you +did the above `stuff barfoo' binding, you can enter the word `foo' by +typing `C-t foo'. If you want to insert a `C-t' you have to press the +key twice (i.e. escape the escape binding). + + bindkey -k F1 command + +Make the F11 (not F1!) key an alternative screen escape (besides `C-a'). + + +File: screen.info, Node: Bindkey Control, Prev: Bindkey Examples, Up: Key Binding + +Bindkey Control +=============== + + - Command: mapdefault + (none) + Tell screen that the next input character should only be looked up + in the default bindkey table. + + - Command: mapnotnext + (none) + Like mapdefault, but don't even look in the default bindkey table. + + - Command: maptimeout TIMO + (none) + Set the intercharacter timer for input sequence detection to a + timeout of TIMO ms. The default timeout is 300ms. Maptimeout with + no arguments shows the current setting. + + +File: screen.info, Node: Flow Control, Next: Termcap, Prev: Key Binding, Up: Top + +Flow Control +************ + + `screen' can trap flow control characters or pass them to the +program, as you see fit. This is useful when your terminal wants to use +XON/XOFF flow control and you are running a program which wants to use +^S/^Q for other purposes (i.e. `emacs'). + +* Menu: + +* Flow Control Summary:: The effect of `screen' flow control +* Flow:: Setting the flow control behavior +* XON/XOFF:: Sending XON or XOFF to the window + + +File: screen.info, Node: Flow Control Summary, Next: Flow, Up: Flow Control + +About `screen' flow control settings +==================================== + + Each window has a flow-control setting that determines how screen +deals with the XON and XOFF characters (and perhaps the interrupt +character). When flow-control is turned off, screen ignores the XON +and XOFF characters, which allows the user to send them to the current +program by simply typing them (useful for the `emacs' editor, for +instance). The trade-off is that it will take longer for output from a +"normal" program to pause in response to an XOFF. With flow-control +turned on, XON and XOFF characters are used to immediately pause the +output of the current window. You can still send these characters to +the current program, but you must use the appropriate two-character +screen commands (typically `C-a q' (xon) and `C-a s' (xoff)). The +xon/xoff commands are also useful for typing C-s and C-q past a +terminal that intercepts these characters. + + Each window has an initial flow-control value set with either the +`-f' option or the `defflow' command. By default the windows are set +to automatic flow-switching. It can then be toggled between the three +states 'fixed on', 'fixed off' and 'automatic' interactively with the +`flow' command bound to `C-a f'. + + The automatic flow-switching mode deals with flow control using the +TIOCPKT mode (like `rlogin' does). If the tty driver does not support +TIOCPKT, screen tries to determine the right mode based on the current +setting of the application keypad -- when it is enabled, flow-control +is turned off and visa versa. Of course, you can still manipulate +flow-control manually when needed. + + If you're running with flow-control enabled and find that pressing +the interrupt key (usually C-c) does not interrupt the display until +another 6-8 lines have scrolled by, try running screen with the +`interrupt' option (add the `interrupt' flag to the `flow' command in +your .screenrc, or use the `-i' command-line option). This causes the +output that `screen' has accumulated from the interrupted program to be +flushed. One disadvantage is that the virtual terminal's memory +contains the non-flushed version of the output, which in rare cases can +cause minor inaccuracies in the output. For example, if you switch +screens and return, or update the screen with `C-a l' you would see the +version of the output you would have gotten without `interrupt' being +on. Also, you might need to turn off flow-control (or use auto-flow +mode to turn it off automatically) when running a program that expects +you to type the interrupt character as input, as the `interrupt' +parameter only takes effect when flow-control is enabled. If your +program's output is interrupted by mistake, a simple refresh of the +screen with `C-a l' will restore it. Give each mode a try, and use +whichever mode you find more comfortable. + + +File: screen.info, Node: Flow, Next: XON/XOFF, Prev: Flow Control Summary, Up: Flow Control + +Flow +==== + + - Command: defflow FSTATE [INTERRUPT] + (none) + Same as the `flow' command except that the default setting for new + windows is changed. Initial setting is `auto'. Specifying `flow + auto interrupt' has the same effect as the command-line options + `-fa' and `-i'. Note that if `interrupt' is enabled, all existing + displays are changed immediately to forward interrupt signals. + + - Command: flow [FSTATE] + (`C-a f', `C-a C-f') + Sets the flow-control mode for this window to FSTATE, which can be + `on', `off' or `auto'. Without parameters it cycles the current + window's flow-control setting. Default is set by `defflow'. + + +File: screen.info, Node: XON/XOFF, Prev: Flow, Up: Flow Control + +XON and XOFF +============ + + - Command: xon + (`C-a q', `C-a C-q') + Send a ^Q (ASCII XON) to the program in the current window. + Redundant if flow control is set to `off' or `auto'. + + - Command: xoff + (`C-a s', `C-a C-s') + Send a ^S (ASCII XOFF) to the program in the current window. + + +File: screen.info, Node: Termcap, Next: Message Line, Prev: Flow Control, Up: Top + +Termcap +******* + + `screen' demands the most out of your terminal so that it can +perform its VT100 emulation most efficiently. These functions provide +means for tweaking the termcap entries for both your physical terminal +and the one simulated by `screen'. + +* Menu: + +* Window Termcap:: Choosing a termcap entry for the window. +* Dump Termcap:: Write out a termcap entry for the window. +* Termcap Syntax:: The `termcap' and `terminfo' commands. +* Termcap Examples:: Uses for `termcap'. +* Special Capabilities:: Non-standard capabilities used by `screen'. +* Autonuke:: Flush unseen output +* Obuflimit:: Allow pending output when reading more +* Character Translation:: Emulating fonts and charsets. + + +File: screen.info, Node: Window Termcap, Next: Dump Termcap, Up: Termcap + +Choosing the termcap entry for a window +======================================= + + Usually `screen' tries to emulate as much of the VT100/ANSI standard +as possible. But if your terminal lacks certain capabilities the +emulation may not be complete. In these cases `screen' has to tell the +applications that some of the features are missing. This is no problem +on machines using termcap, because `screen' can use the `$TERMCAP' +variable to customize the standard screen termcap. + + But if you do a rlogin on another machine or your machine supports +only terminfo this method fails. Because of this `screen' offers a way +to deal with these cases. Here is how it works: + + When `screen' tries to figure out a terminal name for itself, it +first looks for an entry named `screen.TERM', where TERM is the +contents of your `$TERM' variable. If no such entry exists, `screen' +tries `screen' (or `screen-w', if the terminal is wide (132 cols or +more)). If even this entry cannot be found, `vt100' is used as a +substitute. + + The idea is that if you have a terminal which doesn't support an +important feature (e.g. delete char or clear to EOS) you can build a new +termcap/terminfo entry for `screen' (named `screen.DUMBTERM') in which +this capability has been disabled. If this entry is installed on your +machines you are able to do a rlogin and still keep the correct +termcap/terminfo entry. The terminal name is put in the `$TERM' +variable of all new windows. `screen' also sets the `$TERMCAP' +variable reflecting the capabilities of the virtual terminal emulated. +Furthermore, the variable `$WINDOW' is set to the window number of each +window. + + The actual set of capabilities supported by the virtual terminal +depends on the capabilities supported by the physical terminal. If, for +instance, the physical terminal does not support underscore mode, +`screen' does not put the `us' and `ue' capabilities into the window's +`$TERMCAP' variable, accordingly. However, a minimum number of +capabilities must be supported by a terminal in order to run `screen'; +namely scrolling, clear screen, and direct cursor addressing (in +addition, `screen' does not run on hardcopy terminals or on terminals +that over-strike). + + Also, you can customize the `$TERMCAP' value used by `screen' by +using the `termcap' command, or by defining the variable `$SCREENCAP' +prior to startup. When the latter defined, its value will be copied +verbatim into each window's `$TERMCAP' variable. This can either be +the full terminal definition, or a filename where the terminal `screen' +(and/or `screen-w') is defined. + + Note that `screen' honors the `terminfo' command if the system uses +the terminfo database rather than termcap. On such machines the +`$TERMCAP' variable has no effect and you must use the `dumptermcap' +command (*note Dump Termcap::.) and the `tic' program to generate +terminfo entries for `screen' windows. + + When the boolean `G0' capability is present in the termcap entry for +the terminal on which `screen' has been called, the terminal emulation +of `screen' supports multiple character sets. This allows an +application to make use of, for instance, the VT100 graphics character +set or national character sets. The following control functions from +ISO 2022 are supported: `lock shift G0' (`SI'), `lock shift G1' (`SO'), +`lock shift G2', `lock shift G3', `single shift G2', and `single shift +G3'. When a virtual terminal is created or reset, the ASCII character +set is designated as `G0' through `G3'. When the `G0' capability is +present, screen evaluates the capabilities `S0', `E0', and `C0' if +present. `S0' is the sequence the terminal uses to enable and start the +graphics character set rather than `SI'. `E0' is the corresponding +replacement for `SO'. `C0' gives a character by character translation +string that is used during semi-graphics mode. This string is built +like the `acsc' terminfo capability. + + When the `po' and `pf' capabilities are present in the terminal's +termcap entry, applications running in a `screen' window can send +output to the printer port of the terminal. This allows a user to have +an application in one window sending output to a printer connected to +the terminal, while all other windows are still active (the printer +port is enabled and disabled again for each chunk of output). As a +side-effect, programs running in different windows can send output to +the printer simultaneously. Data sent to the printer is not displayed +in the window. + + Some capabilities are only put into the `$TERMCAP' variable of the +virtual terminal if they can be efficiently implemented by the physical +terminal. For instance, `dl' (delete line) is only put into the +`$TERMCAP' variable if the terminal supports either delete line itself +or scrolling regions. Note that this may provoke confusion, when the +session is reattached on a different terminal, as the value of +`$TERMCAP' cannot be modified by parent processes. You can force +`screen' to include all capabilities in `$TERMCAP' with the `-a' +command-line option (*note Invoking Screen::.). + + +File: screen.info, Node: Dump Termcap, Next: Termcap Syntax, Prev: Window Termcap, Up: Termcap + +Write out the window's termcap entry +==================================== + + - Command: dumptermcap + (`C-a .') + Write the termcap entry for the virtual terminal optimized for the + currently active window to the file `.termcap' in the user's + `$HOME/.screen' directory (or wherever `screen' stores its + sockets. *note Files::.). This termcap entry is identical to the + value of the environment variable `$TERMCAP' that is set up by + `screen' for each window. For terminfo based systems you will need + to run a converter like `captoinfo' and then compile the entry with + `tic'. + + +File: screen.info, Node: Termcap Syntax, Next: Termcap Examples, Prev: Dump Termcap, Up: Termcap + +The `termcap' command +===================== + + - Command: termcap TERM TERMINAL-TWEAKS [WINDOW-TWEAKS] + - Command: terminfo TERM TERMINAL-TWEAKS [WINDOW-TWEAKS] + - Command: termcapinfo TERM TERMINAL-TWEAKS [WINDOW-TWEAKS] + (none) + Use this command to modify your terminal's termcap entry without + going through all the hassles involved in creating a custom + termcap entry. Plus, you can optionally customize the termcap + generated for the windows. You have to place these commands in + one of the screenrc starup files, as they are meaningless once the + terminal emulator is booted. + + If your system uses the terminfo database rather than termcap, + `screen' will understand the `terminfo' command which has the same + effects as the `termcap' command. Two separate commands are + provided, as there are subtle syntactic differences, e.g. when + parameter interpolation (using `%') is required. Note that the + termcap names of the capabilities have to be used with the + `terminfo' command. + + In many cases, where the arguments are valid in both terminfo and + termcap syntax, you can use the command `termcapinfo', which is + just a shorthand for a pair of `termcap' and `terminfo' commands + with identical arguments. + + The first argument specifies which terminal(s) should be affected by +this definition. You can specify multiple terminal names by separating +them with `|'s. Use `*' to match all terminals and `vt*' to match all +terminals that begin with `vt'. + + Each TWEAK argument contains one or more termcap defines (separated +by `:'s) to be inserted at the start of the appropriate termcap entry, +enhancing it or overriding existing values. The first tweak modifies +your terminal's termcap, and contains definitions that your terminal +uses to perform certain functions. Specify a null string to leave this +unchanged (e.g. ""). The second (optional) tweak modifies all the +window termcaps, and should contain definitions that screen understands +(*note Virtual Terminal::.). + + +File: screen.info, Node: Termcap Examples, Next: Special Capabilities, Prev: Termcap Syntax, Up: Termcap + +Termcap Examples +================ + + Some examples: + + termcap xterm* xn:hs@ + +Informs `screen' that all terminals that begin with `xterm' have firm +auto-margins that allow the last position on the screen to be updated +(xn), but they don't really have a status line (no 'hs' - append `@' to +turn entries off). Note that we assume `xn' for all terminal names +that start with `vt', but only if you don't specify a termcap command +for that terminal. + + termcap vt* xn + termcap vt102|vt220 Z0=\E[?3h:Z1=\E[?3l + +Specifies the firm-margined `xn' capability for all terminals that +begin with `vt', and the second line will also add the escape-sequences +to switch into (Z0) and back out of (Z1) 132-character-per-line mode if +this is a VT102 or VT220. (You must specify Z0 and Z1 in your termcap +to use the width-changing commands.) + + termcap vt100 "" l0=PF1:l1=PF2:l2=PF3:l3=PF4 + +This leaves your vt100 termcap alone and adds the function key labels to +each window's termcap entry. + + termcap h19|z19 am@:im=\E@:ei=\EO dc=\E[P + +Takes a h19 or z19 termcap and turns off auto-margins (am@) and enables +the insert mode (im) and end-insert (ei) capabilities (the `@' in the +`im' string is after the `=', so it is part of the string). Having the +`im' and `ei' definitions put into your terminal's termcap will cause +screen to automatically advertise the character-insert capability in +each window's termcap. Each window will also get the delete-character +capability (dc) added to its termcap, which screen will translate into +a line-update for the terminal (we're pretending it doesn't support +character deletion). + + If you would like to fully specify each window's termcap entry, you +should instead set the `$SCREENCAP' variable prior to running `screen'. +*Note Virtual Terminal::, for the details of the `screen' terminal +emulation. *Note Termcap: (termcap)Top, for more information on +termcap definitions. + + +File: screen.info, Node: Special Capabilities, Next: Autonuke, Prev: Termcap Examples, Up: Termcap + +Special Terminal Capabilities +============================= + + The following table describes all terminal capabilities that are +recognized by `screen' and are not in the termcap manual (*note +Termcap: (termcap)Top.). You can place these capabilities in your +termcap entries (in `/etc/termcap') or use them with the commands +`termcap', `terminfo' and `termcapinfo' in your `screenrc' files. It is +often not possible to place these capabilities in the terminfo database. +`LP' + (bool) + Terminal has VT100 style margins (`magic margins'). Note that this + capability is obsolete -- `screen' now uses the standard `xn' + instead. + +`Z0' + (str) + Change width to 132 columns. + +`Z1' + (str) + Change width to 80 columns. + +`WS' + (str) + Resize display. This capability has the desired width and height as + arguments. SunView(tm) example: `\E[8;%d;%dt'. + +`NF' + (bool) + Terminal doesn't need flow control. Send ^S and ^Q direct to the + application. Same as `flow off'. The opposite of this capability + is `nx'. + +`G0' + (bool) + Terminal can deal with ISO 2022 font selection sequences. + +`S0' + (str) + Switch charset `G0' to the specified charset. Default is `\E(%.'. + +`E0' + (str) + Switch charset `G0' back to standard charset. Default is `\E(B'. + +`C0' + (str) + Use the string as a conversion table for font 0. See the `ac' + capability for more details. + +`CS' + (str) + Switch cursor keys to application mode. + +`CE' + (str) + Switch cursor keys to cursor mode. + +`AN' + (bool) + Enable autonuke for displays of this terminal type. (*note + Autonuke::.). + +`OL' + (num) + Set the output buffer limit. See the `obuflimit' command (*note + Obuflimit::.) for more details. + +`KJ' + (str) + Set the kanji type of the terminal. Valid strings are `jis', `euc' + and `sjis'. + +`AF' + (str) + Change character forground color in an ANSI conform way. This + capability will almost always be set to `\E[3%dm' (`\E[3%p1%dm' on + terminfo machines). + +`AB' + (str) + Same as `AF', but change background color. + +`AX' + (bool) + Does understand ANSI set default fg/bg color (`\E[39m / \E[49m'). + +`XC' + (str) + Describe a translation of characters to strings depending on the + current font. (*note Character Translation::.). + + +File: screen.info, Node: Autonuke, Next: Obuflimit, Prev: Special Capabilities, Up: Termcap + +Autonuke +======== + + - Command: autonuke STATE + (none) + Sets whether a clear screen sequence should nuke all the output + that has not been written to the terminal. *Note Obuflimit::. + This property is set per display, not per window. + + - Command: defautonuke STATE + (none) + Same as the `autonuke' command except that the default setting for + new displays is also changed. Initial setting is `off'. Note that + you can use the special `AN' terminal capability if you want to + have a terminal type dependent setting. + + +File: screen.info, Node: Obuflimit, Next: Character Translation, Prev: Autonuke, Up: Termcap + +Obuflimit +========= + + - Command: obuflimit [LIMIT] + (none) + If the output buffer contains more bytes than the specified limit, + no more data will be read from the windows. The default value is + 256. If you have a fast display (like `xterm'), you can set it to + some higher value. If no argument is specified, the current + setting is displayed. This property is set per display, not per + window. + + - Command: defobuflimit LIMIT + (none) + Same as the `obuflimit' command except that the default setting + for new displays is also changed. Initial setting is 256 bytes. + Note that you can use the special `OL' terminal capability if you + want to have a terminal type dependent limit. + + +File: screen.info, Node: Character Translation, Prev: Obuflimit, Up: Termcap + +Character Translation +===================== + + `Screen' has a powerful mechanism to translate characters to +arbitrary strings depending on the current font and terminal type. Use +this feature if you want to work with a common standard character set +(say ISO8851-latin1) even on terminals that scatter the more unusual +characters over several national language font pages. + + Syntax: + + XC=<CHARSET-MAPPING>{,,<CHARSET-MAPPING>} + <CHARSET-MAPPING> := <DESIGNATOR><TEMPLATE>{,<MAPPING>} + <MAPPING> := <CHAR-TO-BE-MAPPED><TEMPLATE-ARG> + + The things in braces may be repeated any number of times. + + A <CHARSET-MAPPING> tells screen how to map characters in font +<DESIGNATOR> (`B': Ascii, `A': UK, `K': german, etc.) to strings. Every +<MAPPING> describes to what string a single character will be +translated. A template mechanism is used, as most of the time the codes +have a lot in common (for example strings to switch to and from another +charset). Each occurence of `%' in <TEMPLATE> gets substituted with the +TEMPLATE-ARG specified together with the character. If your strings are +not similar at all, then use `%' as a template and place the full +string in <TEMPLATE-ARG>. A quoting mechanism was added to make it +possible to use a real `%'. The `\' character quotes the special +characters `\', `%', and `,'. + + Here is an example: + + termcap hp700 'XC=B\E(K%\E(B,\304[,\326\\\\,\334]' + + This tells `screen', how to translate ISOlatin1 (charset `B') upper +case umlaut characters on a `hp700' terminal that has a german charset. +`\304' gets translated to `\E(K[\E(B' and so on. Note that this line +gets parsed *three* times before the internal lookup table is built, +therefore a lot of quoting is needed to create a single `\'. + + Another extension was added to allow more emulation: If a mapping +translates the unquoted `%' char, it will be sent to the terminal +whenever screen switches to the corresponding <DESIGNATOR>. In this +special case the template is assumed to be just `%' because the charset +switch sequence and the character mappings normaly haven't much in +common. + + This example shows one use of the extension: + termcap xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334' + + Here, a part of the german (`K') charset is emulated on an xterm. +If screen has to change to the `K' charset, `\E(B' will be sent to the +terminal, i.e. the ASCII charset is used instead. The template is just +`%', so the mapping is straightforward: `[' to `\304', `\' to `\326', +and `]' to `\334'. + + +File: screen.info, Node: Message Line, Next: Logging, Prev: Termcap, Up: Top + +The Message Line +**************** + + `screen' displays informational messages and other diagnostics in a +"message line" at the bottom of the screen. If your terminal has a +status line defined in its termcap, screen will use this for displaying +its messages, otherwise the last line of the screen will be temporarily +overwritten and output will be momentarily interrupted. The message +line is automatically removed after a few seconds delay, but it can also +be removed early (on terminals without a status line) by beginning to +type. + +* Menu: + +* Privacy Message:: Using the message line from your program. +* Hardware Status Line:: Use the terminal's hardware status line. +* Last Message:: Redisplay the last message. +* Message Wait:: Control how long messages are displayed. + + +File: screen.info, Node: Privacy Message, Next: Hardware Status Line, Up: Message Line + +Using the message line from your program +======================================== + + The message line facility can be used by an application running in +the current window by means of the ANSI "Privacy message" control +sequence. For instance, from within the shell, try something like: + + echo "^Hello world from window $WINDOW\" + + where `' is ASCII ESC and `^' is a literal caret or up-arrow. + + +File: screen.info, Node: Hardware Status Line, Next: Last Message, Prev: Privacy Message, Up: Message Line + +Hardware Status Line +==================== + + - Command: hardstatus [STATE] + (none) + Toggles the use of the terminal's hardware status line. If `on', + `screen' will use this facility to display one line messages. + Otherwise these messages are overlayed in reverse video mode at the + display line. Note that the hardstatus feature can only be used if + the termcap/terminfo capabilities "hs", "ts", "fs" and "ds" are set + properly. Default is `on' whenever the "hs" capability is present. + + +File: screen.info, Node: Last Message, Next: Message Wait, Prev: Hardware Status Line, Up: Message Line + +Display Last Message +==================== + + - Command: lastmsg + (`C-a m', `C-a C-m') + Repeat the last message displayed in the message line. Useful if + you're typing when a message appears, because (unless your + terminal has a hardware status line) the message goes away when + you press a key. + + +File: screen.info, Node: Message Wait, Prev: Last Message, Up: Message Line + +Message Wait +============ + + - Command: msgminwait SEC + (none) + Defines the time `screen' delays a new message when another is + currently displayed. Defaults to 1 second. + + - Command: msgwait SEC + (none) + Defines the time a message is displayed, if `screen' is not + disturbed by other activity. Defaults to 5 seconds. + + +File: screen.info, Node: Logging, Next: Startup, Prev: Message Line, Up: Top + +Logging +******* + + This section describes the commands for keeping a record of your +session. + +* Menu: + +* Hardcopy:: Dump the current screen to a file +* Log:: Log the output of a window to a file + + +File: screen.info, Node: Hardcopy, Next: Log, Up: Logging + +hardcopy +======== + + - Command: hardcopy + (`C-a h', `C-a C-h') + Writes out the current display contents to the file `hardcopy.N' + in the window's default directory, where N is the number of the + current window. This either appends or overwrites the file if it + exists, as determined by the `hardcopy_append' command. + + - Command: hardcopy_append STATE + (none) + If set to `on', `screen' will append to the `hardcopy.N' files + created by the command `hardcopy'; otherwise, these files are + overwritten each time. + + - Command: hardcopydir DIRECTORY + (none) + Defines a directory where hardcopy files will be placed. If unset + hardcopys are dumped in screen's current working directory. + + +File: screen.info, Node: Log, Prev: Hardcopy, Up: Logging + +log +=== + + - Command: log [STATE] + (`C-a H') + Begins/ends logging of the current window to the file + `screenlog.N' in the window's default directory, where N is the + number of the current window. This filename can be changed with + the `logfile' command. If no parameter is given, the logging + state is toggled. The session log is appended to the previous + contents of the file if it already exists. The current contents + and the contents of the scrollback history are not included in the + session log. Default is `off'. + + - Command: logfile FILENAME + (none) + Defines the name the logfiles will get. The default is + `screenlog.%n'. + + +File: screen.info, Node: Startup, Next: Miscellaneous, Prev: Logging, Up: Top + +Startup +******* + + This section describes commands which are only useful in the +`.screenrc' file, for use at startup. + +* Menu: + +* echo:: Display a message. +* sleep:: Pause execution of the `.screenrc'. +* Startup Message:: Control display of the copyright notice. + + +File: screen.info, Node: echo, Next: sleep, Up: Startup + +echo +==== + + - Command: echo [-n] MESSAGE + (none) + The echo command may be used to annoy `screen' users with a + 'message of the day'. Typically installed in a global screenrc. + The option `-n' may be used to suppress the line feed. See also + `sleep'. Echo is also useful for online checking of environment + variables. + + +File: screen.info, Node: sleep, Next: Startup Message, Prev: echo, Up: Startup + +sleep +===== + + - Command: sleep NUM + (none) + This command will pause the execution of a .screenrc file for NUM + seconds. Keyboard activity will end the sleep. It may be used to + give users a chance to read the messages output by `echo'. + + +File: screen.info, Node: Startup Message, Prev: sleep, Up: Startup + +Startup Message +=============== + + - Command: startup_message STATE + (none) + Select whether you want to see the copyright notice during startup. + Default is `on', as you probably noticed. + + +File: screen.info, Node: Miscellaneous, Next: Environment, Prev: Startup, Up: Top + +Miscellaneous commands +********************** + + The commands described here do not fit well under any of the other +categories. + +* Menu: + +* At:: Execute a command at other displays or windows. +* Break:: Send a break signal to the window. +* Debug:: Suppress/allow debugging output. +* License:: Display the disclaimer page. +* Nethack:: Use `nethack'-like error messages. +* Number:: Change the current window's number. +* Silence:: Notify on inactivity. +* Time:: Display the time and load average. +* Version:: Display the version of `screen'. +* Zombie:: Keep dead windows. +* Printcmd:: Set command for VT100 printer port emulation. +* Sorendition:: Change the text highlighting method. + + +File: screen.info, Node: At, Next: Break, Up: Miscellaneous + +At +== + + - Command: at [IDENTIFIER][#|*|%] COMMAND [ARGS] + (none) + Execute a command at other displays or windows as if it had been + entered there. `At' changes the context (the `current window' or + `current display' setting) of the command. If the first parameter + describes a non-unique context, the command will be executed + multiple times. If the first parameter is of the form + `IDENTIFIER*' then identifier is matched against user names. The + command is executed once for each display of the selected user(s). + If the first parameter is of the form `IDENTIFIER%' identifier is + matched against displays. Displays are named after the ttys they + attach. The prefix `/dev/' or `/dev/tty' may be omitted from the + identifier. If IDENTIFIER has a `#' or nothing appended it is + matched against window numbers and titles. Omitting an identifier + in front of the `#', `*' or `%' character selects all users, + displays or windows because a prefix-match is performed. Note that + on the affected display(s) a short message will describe what + happened. Caution: Permission is checked for the owners or the + affected display(s), not for the initiator of the `at' command. + + +File: screen.info, Node: Break, Next: Debug, Prev: At, Up: Miscellaneous + +Break +===== + + - Command: break [DURATION] + (none) + Send a break signal for DURATION*0.25 seconds to this window. + Most useful if a character device is attached to the window rather + than a shell process. + + - Command: pow_break + (none) + Reopen the window's terminal line and send a break condition. + + +File: screen.info, Node: Debug, Next: License, Prev: Break, Up: Miscellaneous + +Debug +===== + + - Command: debug [ON|OFF] + (none) + Turns runtime debugging on or off. If `screen' has been compiled + with option `-DDEBUG' debugging is available and is turned on per + default. Note that this command only affects debugging output + from the main `SCREEN' process. + + +File: screen.info, Node: License, Next: Nethack, Prev: Debug, Up: Miscellaneous + +License +======= + + - Command: license + (none) + Display the disclaimer page. This is done whenever `screen' is + started without options, which should be often enough. + + +File: screen.info, Node: Nethack, Next: Number, Prev: License, Up: Miscellaneous + +Nethack +======= + + - Command: nethack STATE + (none) + Changes the kind of error messages used by `screen'. When you are + familiar with the game `nethack', you may enjoy the nethack-style + messages which will often blur the facts a little, but are much + funnier to read. Anyway, standard messages often tend to be + unclear as well. + + This option is only available if `screen' was compiled with the + NETHACK flag defined (*note Installation::.). The default setting + is then determined by the presence of the environment variable + `$NETHACKOPTIONS'. + + +File: screen.info, Node: Number, Next: Silence, Prev: Nethack, Up: Miscellaneous + +Number +====== + + - Command: number [N] + (`C-a N') + Change the current window's number. If the given number N is + already used by another window, both windows exchange their + numbers. If no argument is specified, the current window number + (and title) is shown. + + +File: screen.info, Node: Silence, Next: Time, Prev: Number, Up: Miscellaneous + +Silence +======= + + - Command: silence [STATE|SEC] + (none) + Toggles silence monitoring of windows. When silence is turned on + and an affected window is switched into the background, you will + receive the silence notification message in the status line after + a specified period of inactivity (silence). The default timeout + can be changed with the `silencewait' command or by specifying a + number of seconds instead of `on' or `off'. Silence is initially + off for all windows. + + - Command: silencewait SECONDS + (none) + Define the time that all windows monitored for silence should wait + before displaying a message. Default is 30 seconds. + + +File: screen.info, Node: Time, Next: Version, Prev: Silence, Up: Miscellaneous + +Time +==== + + - Command: time + (`C-a t', `C-a C-t') + Uses the message line to display the time of day, the host name, + and the load averages over 1, 5, and 15 minutes (if this is + available on your system). For window-specific information use + `info' (*note Info::.). + + +File: screen.info, Node: Version, Next: Zombie, Prev: Time, Up: Miscellaneous + +Version +======= + + - Command: version + (`C-a v') + Display the version and modification date in the message line. + + +File: screen.info, Node: Zombie, Next: Printcmd, Prev: Version, Up: Miscellaneous + +Zombie +====== + + - Command: zombie [KEYX] + - Command: defzombie [KEYX] + (none) + Per default windows are removed from the window list as soon as the + windows process (e.g. shell) exits. When a string of two keys is + specified to the zombie command, `dead' windows will remain in the + list. The `kill' kommand may be used to remove the window. + Pressing the first key in the dead window has the same effect. + Pressing the second key, however, screen will attempt to resurrect + the window. The process that was initially running in the window + will be launched again. Calling `zombie' without parameters will + clear the zombie setting, thus making windows disappear when the + process terminates. + + As the zombie setting is affected globally for all windows, this + command should only be called `defzombie'. Until we need this as a + per window setting, the commands `zombie' and `defzombie' are + synonymous. + + +File: screen.info, Node: Printcmd, Next: Sorendition, Prev: Zombie, Up: Miscellaneous + +Printcmd +======== + + - Command: printcmd [CMD] + (none) + If CMD is not an empty string, screen will not use the terminal + capabilities `po/pf' for printing if it detects an ansi print + sequence `ESC [ 5 i', but pipe the output into CMD. This should + normally be a command like `lpr' or `cat > /tmp/scrprint'. + `Printcmd' without an argument displays the current setting. The + ansi sequence `ESC \' ends printing and closes the pipe. + + Warning: Be careful with this command! If other user have write + access to your terminal, they will be able to fire off print + commands. + + +File: screen.info, Node: Sorendition, Prev: Printcmd, Up: Miscellaneous + +Sorendition +=========== + + - Command: sorendition [ATTR [COLOR]] + (none) + Change the way screen does highlighting for text marking and + printing messages. ATTR is a hexadecimal number and describes the + attributes (inverse, underline, ...) the text will get. COLOR is + a 2 digit number and changes the forground/background of the + highlighted text. Some knowledge of screen's internal character + representation is needed to make the characters appear in the + desired way. The default is currently `10 99' (standout, default + colors). + + +File: screen.info, Node: Environment, Next: Files, Prev: Miscellaneous, Up: Top + +Environment Variables +********************* + +`COLUMNS' + Number of columns on the terminal (overrides termcap entry). + +`HOME' + Directory in which to look for .screenrc. + +`ISCREENRC' + Alternate user screenrc file. + +`LINES' + Number of lines on the terminal (overrides termcap entry). + +`LOCKPRG' + Screen lock program. + +`NETHACKOPTIONS' + Turns on `nethack' option. + +`PATH' + Used for locating programs to run. + +`SCREENCAP' + For customizing a terminal's `TERMCAP' value. + +`SCREENDIR' + Alternate socket directory. + +`SCREENRC' + Alternate user screenrc file. + +`SHELL' + Default shell program for opening windows (default `/bin/sh'). + +`STY' + Alternate socket name. If `screen' is invoked, and the environment + variable `STY' is set, then it creates only a window in the + running `screen' session rather than starting a new session. + +`SYSSCREENRC' + Alternate system screenrc file. + +`TERM' + Terminal name. + +`TERMCAP' + Terminal description. + + +File: screen.info, Node: Files, Next: Credits, Prev: Environment, Up: Top + +Files Referenced +**************** + +`.../screen-3.?.??/etc/screenrc' +`.../screen-3.?.??/etc/etcscreenrc' + Examples in the `screen' distribution package for private and + global initialization files. + +``$SYSSCREENRC'' +`/local/etc/screenrc' + `screen' initialization commands + +``$ISCREENRC'' +``$SCREENRC'' +``$HOME'/.iscreenrc' +``$HOME'/.screenrc' + Read in after /local/etc/screenrc + +``$ISCREENDIR'/S-LOGIN' +``$SCREENDIR'/S-LOGIN' +`/local/screens/S-LOGIN' + Socket directories (default) + +`/usr/tmp/screens/S-LOGIN' + Alternate socket directories. + +`SOCKET DIRECTORY/.termcap' + Written by the `dumptermcap' command + +`/usr/tmp/screens/screen-exchange or' +`/tmp/screen-exchange' + `screen' interprocess communication buffer + +`hardcopy.[0-9]' + Screen images created by the hardcopy command + +`screenlog.[0-9]' + Output log files created by the log command + +`/usr/lib/terminfo/?/* or' +`/etc/termcap' + Terminal capability databases + +`/etc/utmp' + Login records + +``$LOCKPRG'' + Program for locking the terminal. + + +File: screen.info, Node: Credits, Next: Bugs, Prev: Files, Up: Top + +Credits +******* + +Authors +======= + + Originally created by Oliver Laumann, this latest version was +produced by Wayne Davison, Juergen Weigert and Michael Schroeder. + +Contributors +============ + + Ken Beal (kbeal@amber.ssd.csd.harris.com), + Rudolf Koenig (rfkoenig@informatik.uni-erlangen.de), + Toerless Eckert (eckert@informatik.uni-erlangen.de), + Wayne Davison (davison@borland.com), + Patrick Wolfe (pat@kai.com, kailand!pat), + Bart Schaefer (schaefer@cse.ogi.edu), + Nathan Glasser (nathan@brokaw.lcs.mit.edu), + Larry W. Virden (lvirden@cas.org), + Howard Chu (hyc@hanauma.jpl.nasa.gov), + Tim MacKenzie (tym@dibbler.cs.monash.edu.au), + Markku Jarvinen (mta@{cc,cs,ee}.tut.fi), + Marc Boucher (marc@CAM.ORG), + Doug Siebert (dsiebert@isca.uiowa.edu), + Ken Stillson (stillson@tsfsrv.mitre.org), + Ian Frechett (frechett@spot.Colorado.EDU), + Brian Koehmstedt (bpk@gnu.ai.mit.edu), + Don Smith (djs6015@ultb.isc.rit.edu), + Frank van der Linden (vdlinden@fwi.uva.nl), + Martin Schweikert (schweik@cpp.ob.open.de), + David Vrona (dave@sashimi.lcu.com), + E. Tye McQueen (tye%spillman.UUCP@uunet.uu.net), + Matthew Green (mrgreen@mame.mu.oz.au), + Christopher Williams (cgw@unt.edu), + Matt Mosley (mattm@access.digex.net), + Gregory Neil Shapiro (gshapiro@wpi.WPI.EDU), + Jason Merrill (jason@jarthur.Claremont.EDU). + +Version +======= + + This manual describes version 3.7.0 of the `screen' program. Its +roots are a merge of a custom version 2.3PR7 by Wayne Davison and +several enhancements to Oliver Laumann's version 2.0. Note that all +versions numbered 2.x are copyright by Oliver Laumann. + + See also *Note Availability::. + + +File: screen.info, Node: Bugs, Next: Installation, Prev: Credits, Up: Top + +Bugs +**** + + Just like any other significant piece of software, `screen' has a +few bugs and missing features. Please send in a bug report if you have +found a bug not mentioned here. + +* Menu: + +* Known Bugs:: Problems we know about. +* Reporting Bugs:: How to contact the maintainers. +* Availability:: Where to find the lastest screen version. + + +File: screen.info, Node: Known Bugs, Next: Reporting Bugs, Up: Bugs + +Known Bugs +========== + + * `dm' (delete mode) and `xs' are not handled correctly (they are + ignored). `xn' is treated as a magic-margin indicator. + + * `screen' has no clue about double-high or double-wide characters. + But this is the only area where `vttest' is allowed to fail. + + * It is not possible to change the environment variable `$TERMCAP' + when reattaching under a different terminal type. + + * The support of terminfo based systems is very limited. Adding extra + capabilities to `$TERMCAP' may not have any effects. + + * `screen' does not make use of hardware tabs. + + * `screen' must be installed setuid root in order to be able to + correctly change the owner of the tty device file for each window. + Special permission may also be required to write the file + `/etc/utmp'. + + * Entries in `/etc/utmp' are not removed when `screen' is killed + with SIGKILL. This will cause some programs (like "w" or "rwho") + to advertise that a user is logged on who really isn't. + + * `screen' may give a strange warning when your tty has no utmp + entry. + + * When the modem line was hung up, `screen' may not automatically + detach (or quit) unless the device driver sends a HANGUP signal. + To detach such a `screen' session use the -D or -d command line + option. + + * A weird imagination is most useful to gain full advantage of all + the features. + diff --git a/doc/screen.info-4 b/doc/screen.info-4 new file mode 100644 index 0000000..f466b1a --- /dev/null +++ b/doc/screen.info-4 @@ -0,0 +1,375 @@ +This is Info file screen.info, produced by Makeinfo-1.55 from the input +file ./screen.texinfo. + + This file documents the `Screen' virtual terminal manager. + + Copyright (c) 1993 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: screen.info, Node: Reporting Bugs, Next: Availability, Prev: Known Bugs, Up: Bugs + +Reporting Bugs +============== + + If you find a bug in `Screen', please send electronic mail to +`screen@uni-erlangen.de', and also to `bug-gnu-utils@prep.ai.mit.edu'. +Include the version number of `Screen' which you are using. Also +include in your message the hardware and operating system, the compiler +used to compile, a description of the bug behavior, and the conditions +that triggered the bug. Please recompile `screen' with the `-DDEBUG +-DTMPTEST' options enabled, reproduce the bug, and have a look at the +debug output written to the directory `/tmp/debug'. If necessary quote +suspect passages from the debug output and show the contents of your +`config.h' if it matters. + + +File: screen.info, Node: Availability, Prev: Reporting Bugs, Up: Bugs + +Availability +============ + + `Screen' is available under the `GNU' copyleft. + + The latest official release of `screen' available via anonymous ftp +from `prep.ai.mit.edu', `nic.funet.fi' or any other `GNU' distribution +site. The latest beta testing release of `screen' is available from +`ftp.uni-erlangen.de (131.188.1.43)', in the directory +`pub/utilities/screen'. + + +File: screen.info, Node: Installation, Next: Concept Index, Prev: Bugs, Up: Top + +Installation +************ + + Since `screen' uses pseudo-ttys, the select system call, and +UNIX-domain sockets/named pipes, it will not run under a system that +does not include these features of 4.2 and 4.3 BSD UNIX. + +* Menu: + +* Socket Directory:: Where screen stores its handle. +* Compiling Screen:: + + +File: screen.info, Node: Socket Directory, Next: Compiling Screen, Up: Installation + +Socket Directory +================ + + The socket directory defaults either to `$HOME/.screen' or simply to +`/tmp/screens' or preferably to `/usr/local/screens' chosen at +compile-time. If `screen' is installed setuid root, then the +administrator should compile screen with an adequate (not NFS mounted) +`SOCKDIR'. If `screen' is not running setuid-root, the user can specify +any mode 777 directory in the environment variable `$SCREENDIR'. + + +File: screen.info, Node: Compiling Screen, Prev: Socket Directory, Up: Installation + +Compiling Screen +================ + + To compile and install screen: + + The `screen' package comes with a `GNU Autoconf' configuration +script. Before you compile the package run + + `sh ./configure' + + This will create a `config.h' and `Makefile' for your machine. If +`configure' fails for some reason, then look at the examples and +comments found in the `Makefile.in' and `config.h.in' templates. +Rename `config.status' to `config.status.MACHINE' when you want to keep +configuration data for multiple architectures. Running `sh +./config.status.MACHINE' recreates your configuration significantly +faster than rerunning `configure'. +Read through the "User Configuration" section of `config.h', and verify +that it suits your needs. A comment near the top of this section +explains why it's best to install screen setuid to root. Check for the +place for the global `screenrc'-file and for the socket directory. +Check the compiler used in `Makefile', the prefix path where to install +`screen'. Then run + + `make' + + If `make' fails to produce one of the files `term.h', `comm.h' or +`tty.c', then use `FILENAME.X.dist' instead. For additional +information about installation of `screen' refer to the file +`INSTALLATION', coming with this package. + + +File: screen.info, Node: Concept Index, Next: Command Index, Prev: Installation, Up: Top + +Concept Index +************* + +* Menu: + +* .screenrc: Startup Files. +* availability: Availability. +* binding: Key Binding. +* bug report: Reporting Bugs. +* bugs: Bugs. +* capabilities: Special Capabilities. +* command line options: Invoking Screen. +* command summary: Command Summary. +* compiling screen: Compiling Screen. +* control sequences: Control Sequences. +* copy and paste: Copy and Paste. +* customization: Customization. +* environment: Environment. +* files: Files. +* flow control: Flow Control. +* input translation: Input Translation. +* installation: Installation. +* introduction: Getting Started. +* invoking: Invoking Screen. +* key binding: Key Binding. +* marking: Copy. +* message line: Message Line. +* multiuser session: Multiuser Session. +* options: Invoking Screen. +* overview: Overview. +* screenrc: Startup Files. +* scrollback: Copy. +* socket directory: Socket Directory. +* terminal capabilities: Special Capabilities. +* title: Naming Windows. + + +File: screen.info, Node: Command Index, Next: Keystroke Index, Prev: Concept Index, Up: Top + +Command Index +************* + + This is a list of all the commands supported by `screen'. + +* Menu: + +* acladd: Acladd. +* aclchg: Aclchg. +* acldel: Acldel. +* activity: Monitor. +* allpartial: Redisplay. +* at: At. +* autodetach: Detach. +* autonuke: Autonuke. +* bell_msg: Bell. +* bind: Bind. +* bindkey: Bindkey. +* break: Break. +* bufferfile: Screen-Exchange. +* c1: Character Processing. +* charset: Character Processing. +* chdir: Chdir. +* clear: Clear. +* colon: Colon. +* command: Command Character. +* console: Console. +* copy: Copy. +* copy_reg: Registers. +* crlf: Line Termination. +* debug: Debug. +* defautonuke: Autonuke. +* defc1: Character Processing. +* defcharset: Character Processing. +* defescape: Command Character. +* defflow: Flow. +* defgr: Character Processing. +* defhstatus: Hardstatus. +* defkanji: Character Processing. +* deflogin: Login. +* defmode: Mode. +* defmonitor: Monitor. +* defobuflimit: Obuflimit. +* defscrollback: Scrollback. +* defwrap: Wrap. +* defwritelock: Writelock. +* defzombie: Zombie. +* detach: Detach. +* digraph: Digraph. +* dumptermcap: Dump Termcap. +* echo: echo. +* escape: Command Character. +* exec: Exec. +* flow: Flow. +* gr: Character Processing. +* hardcopy: Hardcopy. +* hardcopydir: Hardcopy. +* hardcopy_append: Hardcopy. +* hardstatus: Hardware Status Line. +* height: Window Size. +* help: Help. +* history: History. +* info: Info. +* ins_reg: Registers. +* kanji: Character Processing. +* kill: Kill. +* lastmsg: Last Message. +* license: License. +* lockscreen: Lock. +* log: Log. +* logfile: Log. +* login: Login. +* mapdefault: Bindkey Control. +* mapnotnext: Bindkey Control. +* maptimeout: Bindkey Control. +* markkeys: Copy Mode Keys. +* meta: Command Character. +* monitor: Monitor. +* msgminwait: Message Wait. +* msgwait: Message Wait. +* multiuser: Multiuser. +* nethack: Nethack. +* next: Next and Previous. +* number: Number. +* obuflimit: Obuflimit. +* other: Other Window. +* partial: Redisplay. +* password: Detach. +* paste: Paste. +* pastefont: Paste. +* pow_break: Break. +* pow_detach: Power Detach. +* pow_detach_msg: Power Detach. +* prev: Next and Previous. +* printcmd: Printcmd. +* process: Registers. +* quit: Quit. +* readbuf: Screen-Exchange. +* readreg: Paste. +* redisplay: Redisplay. +* register: Registers. +* removebuf: Screen-Exchange. +* reset: Reset. +* screen: Screen Command. +* scrollback: Scrollback. +* select: Select. +* sessionname: Session Name. +* setenv: Setenv. +* shell: Shell. +* shelltitle: Shell. +* silence: Silence. +* silencewait: Silence. +* sleep: sleep. +* slowpaste: Paste. +* sorendition: Sorendition. +* startup_message: Startup Message. +* stuff: Registers. +* suspend: Suspend. +* term: Term. +* termcap: Termcap Syntax. +* termcapinfo: Termcap Syntax. +* terminfo: Termcap Syntax. +* time: Time. +* title: Title Command. +* unsetenv: Setenv. +* vbell: Bell. +* vbellwait: Bell. +* vbell_msg: Bell. +* version: Version. +* wall: Wall. +* width: Window Size. +* windows: Windows. +* wrap: Wrap. +* writebuf: Screen-Exchange. +* writelock: Writelock. +* xoff: XON/XOFF. +* xon: XON/XOFF. +* zombie: Zombie. + + +File: screen.info, Node: Keystroke Index, Prev: Command Index, Up: Top + +Keystroke Index +*************** + + This is a list of the default key bindings. + + The leading escape character (*note Command Character::.) has been +omitted from the key sequences, since it is the same for all bindings. + +* Menu: + +* ": Select. +* ': Select. +* .: Dump Termcap. +* 0...9: Select. +* :: Colon. +* <: Screen-Exchange. +* =: Screen-Exchange. +* >: Screen-Exchange. +* ?: Help. +* {: History. +* a: Command Character. +* A: Title Command. +* c: Screen Command. +* C: Clear. +* C-a: Other Window. +* C-c: Screen Command. +* C-d: Detach. +* C-f: Flow. +* C-g: Bell. +* C-h: Hardcopy. +* C-i: Info. +* C-k: Kill. +* C-l: Redisplay. +* C-m: Last Message. +* C-n: Next and Previous. +* C-p: Next and Previous. +* C-q: XON/XOFF. +* C-r: Wrap. +* C-s: XON/XOFF. +* C-t: Time. +* C-v: Digraph. +* C-w: Windows. +* C-x: Lock. +* C-z: Suspend. +* C-[: Copy. +* C-\: Quit. +* C-]: Paste. +* D: Power Detach. +* d: Detach. +* ESC: Copy. +* f: Flow. +* H: Log. +* h: Hardcopy. +* i: Info. +* k: Kill. +* L: Login. +* l: Redisplay. +* m: Last Message. +* M: Monitor. +* N: Number. +* n: Next and Previous. +* p: Next and Previous. +* q: XON/XOFF. +* r: Wrap. +* s: XON/XOFF. +* SPC: Next and Previous. +* t: Time. +* v: Version. +* w: Windows. +* W: Window Size. +* x: Lock. +* Z: Reset. +* z: Suspend. +* [: Copy. +* ]: Paste. + + diff --git a/doc/screen.texinfo b/doc/screen.texinfo new file mode 100644 index 0000000..a500018 --- /dev/null +++ b/doc/screen.texinfo @@ -0,0 +1,4061 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename screen.info +@settitle Screen User's Manual +@finalout +@setchapternewpage odd +@c %**end of header +@set version 3.7.0 + +@c For examples, use a literal escape in info. +@ifinfo +@set esc +@end ifinfo +@iftex +@set esc <ESC> +@end iftex + +@ifinfo +This file documents the @code{Screen} virtual terminal manager. + +Copyright (c) 1993 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +@end ignore +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the Foundation. +@end ifinfo + +@titlepage +@title Screen +@subtitle The virtual terminal manager +@subtitle for Version @value{version} +@subtitle Oct 1995 + +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1993 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the Foundation. +@end titlepage + +@node Top, Overview, (dir), (dir) + +@ifinfo +@top Screen +This file documents the @code{Screen} virtual terminal manager, version +@value{version}. +@end ifinfo + +@menu +* Overview:: Preliminary information. +* Getting Started:: An introduction to @code{screen}. +* Invoking Screen:: Command line options for @code{screen}. +* Customization:: The @file{.screenrc} file. +* Commands:: List all of the commands. +* New Window:: Running a program in a new window. +* Selecting:: Selecting a window to display. +* Session Management:: Suspending or detaching a session. +* Window Settings:: titles, logging, etc. +* Virtual Terminal:: Controlling the @code{screen} VT100 emulation. +* Copy and Paste:: Exchanging text between windows and sessions. +* Subprocess Execution:: I/O filtering with @code{exec}. +* Key Binding:: Binding commands to keys. +* Flow Control:: Trap or pass flow control characters. +* Termcap:: Tweaking your terminal's termcap entry. +* Message Line:: The @code{screen} message line. +* Logging:: Keeping a record of your session. +* Startup:: Functions only useful at @code{screen} startup. +* Miscellaneous:: Various other commands. +* Environment:: Environment variables used by @code{screen}. +* Files:: Files used by @code{screen}. +* Credits:: Who's who of @code{screen}. +* Bugs:: What to do if you find a bug. +* Installation:: Getting @code{screen} running on your system. +* Concept Index:: Index of concepts. +* Command Index:: Index of all @code{screen} commands. +* Keystroke Index:: Index of default key bindings. +@end menu + +@node Overview, Getting Started, Top, Top +@chapter Overview +@cindex overview + +Screen is a full-screen window manager that multiplexes a physical +terminal between several processes, typically interactive shells. Each +virtual terminal provides the functions of the DEC VT100 terminal and, +in addition, several control functions from the ANSI X3.64 (ISO 6429) +and ISO 2022 standards (e.g. insert/delete line and support for multiple +character sets). There is a scrollback history buffer for each virtual +terminal and a copy-and-paste mechanism that allows the user to move +text regions between windows. + +When @code{screen} is called, it creates a single window with a shell in +it (or the specified command) and then gets out of your way so that you +can use the program as you normally would. Then, at any time, you can +create new (full-screen) windows with other programs in them (including +more shells), kill the current window, view a list of the active +windows, turn output logging on and off, copy text between windows, view +the scrollback history, switch between windows, etc. All windows run +their programs completely independent of each other. Programs continue +to run when their window is currently not visible and even when the +whole screen session is detached from the users terminal. + +When a program terminates, @code{screen} (per default) kills the window +that contained it. If this window was in the foreground, the display +switches to the previously displayed window; if none are left, +@code{screen} exits. + +Everything you type is sent to the program running in the current +window. The only exception to this is the one keystroke that is used to +initiate a command to the window manager. By default, each command +begins with a control-a (abbreviated @kbd{C-a} from now on), and is +followed by one other keystroke. The command character (@pxref{Command +Character}) and all the key bindings (@pxref{Key Binding}) can be fully +customized to be anything you like, though they are always two +characters in length. + +The standard way to create a new window is to type @kbd{C-a c}. This +creates a new window running a shell and switches to that window +immediately, regardless of the state of the process running in the +current window. Similarly, you can create a new window with a custom +command in it by first binding the command to a keystroke (in your +@file{.screenrc} file or at the @kbd{C-a :} command line) and then using it +just like the @kbd{C-a c} command. In addition, new windows can be created by +running a command like: + +@example +screen emacs prog.c +@end example + +@noindent +from a shell prompt within a previously created window. This will not +run another copy of @code{screen}, but will instead supply the command +name and its arguments to the window manager (specified in the $STY environment +variable) who will use it to create the new window. The above example would +start the @code{emacs} editor (editing @file{prog.c}) and switch to its window. + +If @file{/etc/utmp} is writable by @code{screen}, an appropriate record +will be written to this file for each window, and removed when the +window is closed. This is useful for working with @code{talk}, +@code{script}, @code{shutdown}, @code{rsend}, @code{sccs} and other +similar programs that use the utmp file to determine who you are. As +long as @code{screen} is active on your terminal, the terminal's own +record is removed from the utmp file. @xref{Login}. + +@node Getting Started, Invoking Screen, Overview, Top +@chapter Getting Started +@cindex introduction + +Before you begin to use @code{screen} you'll need to make sure you have +correctly selected your terminal type, just as you would for any other +termcap/terminfo program. (You can do this by using @code{tset}, +@code{qterm}, or just @code{set term=mytermtype}, for example.) + +If you're impatient and want to get started without doing a lot more +reading, you should remember this one command: @kbd{C-a ?} (@pxref{Key +Binding}). Typing these two characters will display a list of the +available @code{screen} commands and their bindings. Each keystroke is +discussed in the section on keystrokes (@pxref{Default Key Bindings}). +Another section (@pxref{Customization}) deals with the contents of your +@file{.screenrc}. + +If your terminal is a ``true'' auto-margin terminal (it doesn't allow +the last position on the screen to be updated without scrolling the +screen) consider to use a version of your terminal's termcap that has +automatic margins turned @emph{off}. This will ensure an accurate +and optimal update of the screen in all circumstances. Most terminals +nowadays have ``magic'' margins (automatic margins plus usable last +column). This is the VT100 style type and perfectly suited for +@code{screen}. +If all you've got is a ``true'' auto-margin terminal @code{screen} +will be content to use it, but updating a character put into the last +position on the screen may not be possible until the screen scrolls or +the character is moved into a safe position in some other way. This +delay can be shortened by using a terminal with insert-character +capability. + +@xref{Special Capabilities}, for more information about telling +@code{screen} what kind of terminal you have. + +@node Invoking Screen, Customization, Getting Started, Top +@chapter Invoking @code{Screen} +@cindex invoking +@cindex options +@cindex command line options + +Screen has the following command-line options: + +@table @samp +@item -a +Include @emph{all} capabilities (with some minor exceptions) in each +window's termcap, even if @code{screen} must redraw parts of the display +in order to implement a function. + +@item -A +Adapt the sizes of all windows to the size of the display. By default, +@code{screen} may try to restore its old window sizes when attaching to +resizable terminals (those with @samp{WS} in their descriptions, e.g. +@code{suncmd} or some varieties of @code{xterm}). + +@item -c @var{file} +Use @var{file} as the user's configuration file instead of the default +of @file{$HOME/.screenrc}. + +@item -d [@var{pid.sessionname}] +@itemx -D [@var{pid.sessionname}] +Do not start @code{screen}, but instead detach a @code{screen} session +running elsewhere (@pxref{Detach}). @samp{-d} has the same effect as +typing @kbd{C-a d} from the controlling terminal for the session. +@samp{-D} is the equivalent to the power detach key. If no session can +be detached, this option is ignored. The combination @code{screen -D +-r} can be used to log out from a remote terminal and transport the +session running there to your current terminal. +@emph{Note}: It is a good idea to check the status of your sessions +with @code{screen -list} before using this option. + +@item -e @var{xy} +Set the command character to @var{x}, and the character generating a +literal command character (when typed after the command character) to +@var{y}. The defaults are @kbd{C-a} and @kbd{a}, which can be specified +as @samp{-e^Aa}. When creating a @code{screen} session, this option +sets the default command caracter. In a multiuser session all users +added will start off with this command character. But when attaching +to an already running session, this option only changes the command +character of the attaching user. +This option is equivalent to the commands @code{defescape} or +@code{escape} respectively. (@pxref{Command Character}). + +@item -f +@itemx -fn +@itemx -fa +Set flow-control to on, off, or automatic switching mode, respectively. +This option is equivalent to the @code{defflow} command (@pxref{Flow +Control}). + +@item -h @var{num} +Set the history scrollback buffer to be @var{num} lines high. +Equivalent to the @code{defscrollback} command (@pxref{Copy}). + +@item -i +Cause the interrupt key (usually @kbd{C-c}) to interrupt the display +immediately when flow control is on. This option is equivalent to the +@code{interrupt} argument to the @code{defflow} command (@pxref{Flow +Control}). Its use is discouraged. + +@item -l +@itemx -ln +Turn login mode on or off (for @file{/etc/utmp} updating). This option +is equivalent to the @code{deflogin} command (@pxref{Login}). + +@item -ls +@itemx -list +Do not start @code{screen}, but instead print a list of session +identification strings (usually of the form @var{pid.tty.host}; +@pxref{Session Name}). Sessions marked @samp{detached} can be resumed +with @code{screen -r}. Those marked @samp{attached} are running and +have a controlling terminal. Sessions marked as @samp{dead} should be +thoroughly checked and removed. Ask your system administrator if you are +not sure why they died. Remove sessions with the @samp{-wipe} option. + +@item -L +Tell @code{screen} that your auto-margin terminal allows programs to +write to the last column of the last row of the screen without +scrolling. This can also be set in your @file{.screenrc} by specifying +@samp{xn} in a @code{termcap} command (@pxref{Termcap}). + +@item -m +Tell @code{screen} to ignore the @code{$STY} environment variable. When +this option is used, a new session will always be created, regardless of +whether @code{screen} is being called from within another @code{screen} +session or not. + +@item -r [@var{pid.sessionname}] +@itemx -r @var{sessionowner/[pid.sessionname]} +Resume a detached @code{screen} session. No other options (except +@samp{-d} or @samp{-D}) may be specified, though the session name +(@pxref{Session Name}) may be needed to distinguish between multiple +detached @code{screen} sessions. +The second form is used to connect to another users screen session which +runs in multi-user mode. This indicates that screen should look for +sessions in another users directory. This requires setuid-root. + +@item -R +Resume the first appropriate detached @code{screen} session. If +successful, all other command-line options are ignored. If no detached +session exists, start a new session using the specified options, just as +if @samp{-R} had not been specified. This option is set by default if +screen is run as a login-shell. + +@item -s @var{program} +Set the default shell to be @var{program}. By default, @code{screen} +uses the value of the environment variable @code{$SHELL}, or +@file{/bin/sh} if it is not defined. This option is equivalent to the +@code{shell} command (@pxref{Shell}). + +@item -S @var{sessionname} +Set the name of the new session to @var{sessionname}. This option can +be used to specify a meaningful name for the session in place of the +default @var{tty.host} suffix. This name identifies the session for the +@code{screen -list} and @code{screen -r} commands. This option is +equivalent to the @code{sessionname} command (@pxref{Session Name}). + +@item -t @var{name} +Set the title (name) for the default shell or specified program. +This option is equivalent to the @code{shelltitle} command +(@pxref{Shell}). + +@item -v +Print the version number. + +@item -wipe +List available screens like @code{screen -ls}, but remove destroyed +sessions instead of marking them as @samp{dead}. + +@item -x +Attach to a session which is already attached elsewhere (multi-display +mode). +@end table + +@node Customization, Commands, Invoking Screen, Top +@chapter Customizing @code{Screen} +@cindex customization + +You can modify the default settings for @code{screen} to fit your tastes +either through a personal @file{.screenrc} file which contains commands +to be executed at startup, or on the fly using the @code{colon} command. + +@menu +* Startup Files:: The @file{.screenrc} file. +* Colon:: Entering customization commands interactively. +@end menu + +@node Startup Files, Colon, , Customization +@section The @file{.screenrc} file +@cindex .screenrc +@cindex screenrc +When @code{screen} is invoked, it executes initialization commands from +the files @file{.screenrc} in the user's home directory and +@file{/usr/local/etc/screenrc}. These defaults can be overridden in the +following ways: +For the global screenrc file @code{screen} searches for the environment +variable @code{$SYSSCREENRC} (this override feature may be disabled at +compile-time). The user specific screenrc file is +searched for in @code{$SCREENRC}, then +@file{@code{$HOME}/.screenrc}. The command line option @samp{-c} +specifies which file to use (@pxref{Invoking Screen}. Commands in these +files are used to set options, bind commands to keys, and to +automatically establish one or more windows at the beginning of +your @code{screen} session. Commands are listed one per line, with +empty lines being ignored. A command's arguments are separated by tabs +or spaces, and may be surrounded by single or double quotes. A @samp{#} +turns the rest of the line into a comment, except in quotes. +Unintelligible lines are warned about and ignored. Commands may contain +references to environment variables. The syntax is the shell-like +@code{$VAR} or @code{$@{VAR@}}. Note that this causes incompatibility +with previous @code{screen} versions, as now the '$'-character has to be +protected with '\' if no variable substitution is intended. A string in +single-quotes is also protected from variable substitution. + +Two configuration files are shipped as examples with your screen +distribution: @file{etc/screenrc} and @file{etc/etcscreenrc}. They +contain a number of useful examples for various commands. + +@node Colon, , Startup Files, Customization +@section Colon +Customization can also be done online, with this command: + +@kindex : +@deffn Command colon +(@kbd{C-a :})@* +Allows you to enter @file{.screenrc} command lines. Useful for +on-the-fly modification of key bindings, specific window creation and +changing settings. Note that the @code{set} keyword no longer exists, +as of version 3.3. Change default settings with commands starting with +@samp{def}. You might think of this as the @code{ex} command mode of +@code{screen}, with @code{copy} as its @code{vi} command mode +(@pxref{Copy and Paste}). +@end deffn + +@node Commands, New Window, Customization, Top +@chapter Commands + +A command in @code{screen} can either be bound to a key, invoked from a +screenrc file, or called from the @code{colon} prompt +(@pxref{Customization}). As of version 3.3, all commands can be bound +to keys, although some may be less useful than others. +For a number of real life working examples of the most important +commands see the files @file{etc/screenrc} and @file{etc/etcscreenrc} +of your screen distribution. + +In this manual, a command definition looks like this: + +@table @asis +@item -- Command: command [-n] ARG1 [ARG2] @dots{} +(@var{keybindings})@* +This command does something, but I can't remember what. +@end table + +An argument in square brackets (@samp{[]}) is optional. Many commands +take an argument of @samp{on} or @samp{off}, which is indicated as +@var{state} in the definition. + +@menu +* Default Key Bindings:: @code{screen} keyboard commands. +* Command Summary:: List of all commands. +@end menu + +@node Default Key Bindings, Command Summary, , Commands +@section Default Key Bindings + +As mentioned previously, each keyboard command consists of a +@kbd{C-a} followed by one other character. For your convenience, all +commands that are bound to lower-case letters are also bound to their +control character counterparts (with the exception of @kbd{C-a a}; see +below). Thus, both @kbd{C-a c} and @kbd{C-a C-c} can be used to create +a window. + +The following table shows the default key bindings: + +@table @asis +@item @kbd{C-a '} +@itemx @kbd{C-a "} +(select)@* +Prompt for a window identifier and switch. +@xref{Selecting}. + +@item @kbd{C-a 0@dots{}9} +(select 0@dots{}select 9)@* +Switch to window number 0@dots{}9. @xref{Selecting}. + +@item @kbd{C-a C-a} +(other)@* +Toggle to the window displayed previously. @xref{Selecting}. + +@item @kbd{C-a a} +(meta)@* +Send the command character (C-a) to window. See @code{escape} command. +@xref{Command Character}. + +@item @kbd{C-a A} +(title)@* +Allow the user to enter a title for the current window. +@xref{Naming Windows}. + +@item @kbd{C-a b} +itemx @kbd{C-a C-b} +(break)@* +Send a break to the tty. +@xref{Break}. + +@item @kbd{C-a B} +(pow_break)@* +Close and reopen the tty-line. +@xref{Break}. + +@item @kbd{C-a c} +@itemx @kbd{C-a C-c} +(screen)@* +Create a new window with a shell and switch to that window. +@xref{Screen Command}. + +@item @kbd{C-a C} +(clear)@* +Clear the screen. @xref{Clear}. + +@item @kbd{C-a d} +@itemx @kbd{C-a C-d} +(detach)@* +Detach @code{screen} from this terminal. @xref{Detach}. + +@item @kbd{C-a D D} +(pow_detach)@* +Detach and logout. @xref{Power Detach}. + +@item @kbd{C-a f} +@itemx @kbd{C-a C-f} +(flow)@* +Cycle flow among @samp{on}, @samp{off} or @samp{auto}. @xref{Flow}. + +@item @kbd{C-a C-g} +(vbell)@* +Toggle visual bell mode. @xref{Bell}. + +@item @kbd{C-a h} +(hardcopy)@* +Write a hardcopy of the current window to the file ``hardcopy.@var{n}''. +@xref{Hardcopy}. + +@item @kbd{C-a H} +(log)@* +Toggle logging of the current window to the file ``screenlog.@var{n}''. +@xref{Log}. + +@item @kbd{C-a i} +@itemx @kbd{C-a C-i} +(info)@* +Show info about the current window. @xref{Info}. + +@item @kbd{C-a k} +@itemx @kbd{C-a C-k} +(kill)@* +Destroy the current window. @xref{Kill}. + +@item @kbd{C-a l} +@itemx @kbd{C-a C-l} +(redisplay)@* +Fully refresh the current window. @xref{Redisplay}. + +@item @kbd{C-a L} +(login)@* +Toggle the current window's login state. @xref{Login}. + +@item @kbd{C-a m} +@itemx @kbd{C-a C-m} +(lastmsg)@* +Repeat the last message displayed in the message line. +@xref{Last Message}. + +@item @kbd{C-a M} +(monitor) +Toggle monitoring of the current window. @xref{Monitor}. + +@item @kbd{C-a @key{SPC}} +@itemx @kbd{C-a n} +@itemx @kbd{C-a C-n} +(next)@* +Switch to the next window. @xref{Selecting}. + +@item @kbd{C-a N} +(number)@* +Show the number (and title) of the current window. @xref{Number}. + +@item @kbd{C-a p} +@itemx @kbd{C-a C-p} +@itemx @kbd{C-a C-h} +@itemx @kbd{C-a @key{BackSpace}} +(prev)@* +Switch to the previous window (opposite of @kbd{C-a n}). +@xref{Selecting}. + +@item @kbd{C-a q} +@itemx @kbd{C-a C-q} +(xon)@* +Send a ^Q (ASCII XON) to the current window. @xref{XON/XOFF}. + +@item @kbd{C-a r} +@itemx @kbd{C-a C-r} +(wrap)@* +Toggle the current window's line-wrap setting (turn the current window's +automatic margins on or off). @xref{Wrap}. + +@item @kbd{C-a s} +@itemx @kbd{C-a C-s} +(xoff)@* +Send a ^S (ASCII XOFF) to the current window. @xref{XON/XOFF}. + +@item @kbd{C-a t} +@itemx @kbd{C-a C-t} +(time)@* +Show the load average and xref. @xref{Time}. + +@item @kbd{C-a v} +(version)@* +Display the version and compilation date. @xref{Version}. + +@item @kbd{C-a C-v} +(digraph)@* +Enter digraph. @xref{Digraph}. + +@item @kbd{C-a w} +@itemx @kbd{C-a C-w} +(windows)@* +Show a list of active windows. @xref{Windows}. + +@item @kbd{C-a W} +(width)@* +Toggle between 80 and 132 columns. @xref{Window Size}. + +@item @kbd{C-a x} +@itemx @kbd{C-a C-x} +(lockscreen)@* +Lock your terminal. @xref{Lock}. + +@item @kbd{C-a z} +@itemx @kbd{C-a C-z} +(suspend)@* +Suspend @code{screen}. @xref{Suspend}. + +@item @kbd{C-a Z} +(reset)@* +Reset the virtual terminal to its ``power-on'' values. +@xref{Reset}. + +@item @kbd{C-a .} +(dumptermcap)@* +Write out a @file{.termcap} file. @xref{Dump Termcap}. + +@item @kbd{C-a ?} +(help)@* +Show key bindings. @xref{Help}. + +@item @kbd{C-a C-\} +(quit)@* +Kill all windows and terminate @code{screen}. @xref{Quit}. + +@item @kbd{C-a :} +(colon)@* +Enter a command line. @xref{Colon}. + +@item @kbd{C-a [} +@itemx @kbd{C-a C-[} +@itemx @kbd{C-a @key{ESC}} +(copy)@* +Enter copy/scrollback mode. @xref{Copy}. + +@item @kbd{C-a ]} +@itemx @kbd{C-a C-]} +(paste .)@* +Write the contents of the paste buffer to the stdin queue of the +current window. @xref{Paste}. + +@item @kbd{C-a @{} +(history)@* +Copy and paste a previous (command) line. @xref{History}. + +@item @kbd{C-a >} +(writebuf)@* +Write the paste buffer out to the screen-exchange file. +@xref{Screen-Exchange}. + +@item @kbd{C-a <} +(readbuf)@* +Read the screen-exchange file into the paste buffer. +@xref{Screen-Exchange}. + +@item @kbd{C-a =} +(removebuf)@* +Delete the screen-exchange file. @xref{Screen-Exchange}. + +@item @kbd{C-a _} +(silence)@* +Start/stop monitoring the current window for inactivity. @xref{Silence}, + +@item @kbd{C-a ,} +(license)@* +Show the copyright page. +@end table + +@node Command Summary, , Default Key Bindings, Commands +@section Command Summary +@cindex command summary + +@table @code +@item acladd @var{usernames} +Allow other users in this session. @xref{Multiuser Session}. +@item aclchg @var{usernames permbits list} +Change a user's permissions. @xref{Multiuser Session}. +@item acldel @var{username} +Disallow other user in this session. @xref{Multiuser Session}. +@item activity @var{message} +Set the activity notification message. @xref{Monitor}. +@item allpartial @var{state} +Set all windows to partial refresh. @xref{Redisplay}. +@item at @var{[ident][@kbd{#}@var{|}@kbd{*}@var{|}@kbd{%}] command [args]} +Execute a command at other displays or windows. @xref{At}. +@item autodetach @var{state} +Automatically detach the session on SIGHUP. @xref{Detach}. +@item autonuke @var{state} +Enable a clear screen to discard unwritten output. @xref{Autonuke}. +@item bell_msg @var{message} +Set the bell notification message. @xref{Bell}. +@item bind @var{key [command [args]]} +Bind a command to a key. @xref{Bind}. +@item bindkey @var{[opts] [string [cmd args]]} +Bind a string to a series of keystrokes. @xref{Bindkey}. +@item break @var{[duration]} +Send a break signal to the current window. @xref{Break}. +@item bufferfile @var{[exchange-file]} +Select a file for screen-exchange. @xref{Screen-Exchange}. +@item c1 @var{[state]} +Change c1 code processing. @xref{Character Processing}. +@item charset @var{set} +Change character set slot designation. @xref{Character Processing}. +@item chdir @var{[directory]} +Change the current directory for future windows. @xref{Chdir}. +@item clear +Clear the window screen. @xref{Clear}. +@item colon +Enter a @code{screen} command. @xref{Colon}. +@item command +Simulate the screen escape key. @xref{Command Character}. +@item console @var{[state]} +Grab or ungrab console output. @xref{Console}. +@item copy +Enter copy mode. @xref{Copy}. +@item copy_reg @var{[key]} +Removed. Use @code{paste} instead. @xref{Registers}. +@item crlf @var{state} +Select line break behavior for copying. @xref{Line Termination}. +@item debug @var{state} +Suppress/allow debugging output. @xref{Debug}. +@item defautonuke @var{state} +Select default autonuke behavior. @xref{Autonuke}. +@item defc1 @var{state} +Select default c1 processing behavior. @xref{Character Processing}. +@item defcharset @var{[set]} +Change defaul character set slot designation. @xref{Character Processing}. +@item defescape @var{xy} +Set the default command and @code{meta} characters. @xref{Command Character}. +@item defflow @var{fstate} +Select default flow control behavior. @xref{Flow}. +@item defgr @var{state} +Select default GR processing behavior. @xref{Character Processing}. +@item defhstatus @var{[status]} +Select default window hardstatus line. @xref{Hardstatus}. +@item defkanji @var{wtype} +Select default GR processing behavior. @xref{Character Processing}. +@item deflogin @var{state} +Select default utmp logging behavior. @xref{Login}. +@item defmode @var{mode} +Select default file mode for ptys. @xref{Mode}. +@item defmonitor @var{state} +Select default activity monitoring behavior. @xref{Monitor}. +@item defobuflimit @var{limit} +Select default output buffer limit. @xref{Obuflimit}. +@item defscrollback @var{num} +Set default lines of scrollback. @xref{Scrollback}. +@item defwrap @var{state} +Set default line-wrapping behavior. @xref{Wrap}. +@item defwritelock @var{on|off|auto} +Set default writelock behavior. @xref{Multiuser}. +@item defzombie @var{[keys]} +Keep dead windows. @xref{Zombie}. +@item detach +Disconnect @code{screen} from the terminal. @xref{Detach}. +@item digraph +Enter digraph sequence. @xref{Digraph}. +@item dumptermcap +Write the window's termcap entry to a file. @xref{Dump Termcap}. +@item echo [-n] @var{message} +Display a message on startup. @xref{Startup}. +@item escape @var{xy} +Set the command and @code{meta} characters. @xref{Command Character}. +@item exec @var{[[fdpat] command [args ...]]} +Run a subprocess (filter). @xref{Exec}. +@item flow @var{[fstate]} +Set flow control behavior. @xref{Flow}. +@item gr @var{[state]} +Change GR charset processing. @xref{Character Processing}. +@item hardcopy +Write out the contents of the current window. @xref{Hardcopy}. +@item hardcopy_append @var{state} +Append to hardcopy files. @xref{Hardcopy}. +@item hardcopydir @var{directory} +Place, where to dump hardcopy files. @xref{Hardcopy}. +@item hardstatus @var{[state]} +Use the hardware status line. @xref{Hardware Status Line}. +@item height @var{[lines]} +Set display height. @xref{Window Size}. +@item help +Display current key bindings. @xref{Help}. +@item history +Find previous command beginning @dots{}. @xref{History}. +@item info +Display terminal settings. @xref{Info}. +@item ins_reg @var{[key]} +Removed, use @code{paste} instead. @xref{Registers}. +@item kanji @var{wtype [dtype]} +Set the kanji type of a window. @xref{Character Processing}. +@item kill +Destroy the current window. @xref{Kill}. +@item lastmsg +Redisplay the last message. @xref{Last Message}. +@item license +Display licensing information. @xref{Startup}. +@item lockscreen +Lock the controlling terminal. @xref{Lock}. +@item log @var{[state]} +Log all output in the current window. @xref{Log}. +@item logfile @var{filename} +Place where to collect logfiles. @xref{Log}. +@item login @var{[state]} +Log the window in @file{/etc/utmp}. @xref{Login}. +@item mapdefault +Use only the default mapping table for the next keystroke. @xref{Bindkey Control}. +@item mapnotnext +Don't try to do keymapping on the next keystroke. @xref{Bindkey Control}. +@item maptimeout @var{timo} +Set the intercharacter timeout used for keymapping. @xref{Bindkey Control}. +@item markkeys @var{string} +Rebind keys in copy mode. @xref{Copy Mode Keys}. +@item meta +Insert the command character. @xref{Command Character}. +@item monitor @var{[state]} +Monitor activity in window. @xref{Monitor}. +@item msgminwait @var{sec} +Set minimum message wait. @xref{Message Wait}. +@item msgwait @var{sec} +Set default message wait. @xref{Message Wait}. +@item multiuser @var{state} +Go into single or multi user mode. @xref{Multiuser Session}. +@item nethack @var{state} +Use @code{nethack}-like error messages. @xref{Nethack}. +@item next +Switch to the next window. @xref{Selecting}. +@item number @var{[n]} +Change/display the current window's number. @xref{Number}. +@item obuflimit @var{[limit]} +Select output buffer limit. @xref{Obuflimit}. +@item other +Switch to the window you were in last. @xref{Selecting}. +@item partial @var{state} +Set window to partial refresh. @xref{Redisplay}. +@item password @var{[crypted_pw]} +Set reattach password. @xref{Detach}. +@item paste @var{[src_regs [dest_reg]]} +Paste contents of paste buffer or registers somewhere. @xref{Paste}. +@item pastefont @var{[state]} +Include font information in the paste buffer. @xref{Paste}. +@item pow_break +Close and Reopen the window's terminal. @xref{Break}. +@item pow_detach +Detach and hang up. @xref{Power Detach}. +@item pow_detach_msg @var{[message]} +Set message displayed on @code{pow_detach}. @xref{Power Detach}. +@item prev +Switch to the previous window. @xref{Selecting}. +@item printcmd @var{[cmd]} +Set a command for VT100 printer port emulation. @xref{Printcmd}. +@item process @var{[key]} +Treat a register as input to @code{screen}. @xref{Registers}. +@item quit +Kill all windows and exit. @xref{Quit}. +@item readbuf +Read the paste buffer from the screen-exchange file. @xref{Screen-Exchange}. +@item readreg @var{[reg [file]]} +Load a register from paste buffer or file. @xref{Registers}. +@item redisplay +Redisplay the current window. @xref{Redisplay}. +@item register @var{key string} +Store a string to a register. @xref{Registers}. +@item removebuf +Delete the screen-exchange file. @xref{Screen-Exchange}. +@item reset +Reset the terminal settings for the window. @xref{Reset}. +@item screen @var{[opts] [n] [cmd [args]]} +Create a new window. @xref{Screen Command}. +@item scrollback @var{num} +Set size of scrollback buffer. @xref{Scrollback}. +@item select @var{[n]} +Switch to a specified window. @xref{Selecting}. +@item sessionname @var{[name]} +Name this session. @xref{Session Name}. +@item setenv @var{[var [string]]} +Set an environment variable for new windows. @xref{Setenv}. +@item shell @var{command} +Set the default program for new windows. @xref{Shell}. +@item shelltitle @var{title} +Set the default name for new windows. @xref{Shell}. +@item silence @var{[state|seconds]} +Monitor a window for inactivity. @xref{Silence}. +@item silencewait @var{seconds} +Default timeout to trigger an inactivity notify. @xref{Silence}. +@item sleep @var{num} +Pause during startup. @xref{Startup}. +@item slowpaste @var{msec} +Slow down pasting in windows. @xref{Paste}. +@item sorendition @var{[attr [color]]} +Change text highlighting. @xref{Sorendition}. +@item startup_message @var{state} +Display copyright notice on startup. @xref{Startup}. +@item stuff @var{string} +Stuff a string in the input buffer of a window. @xref{Paste}. +@item suspend +Put session in background. @xref{Suspend}. +@item term @var{term} +Set @code{$TERM} for new windows. @xref{Term}. +@item termcap @var{term terminal-tweaks [window-tweaks]} +Tweak termcap entries for best performance. @xref{Termcap Syntax}. +@item terminfo @var{term terminal-tweaks [window-tweaks]} +Ditto, for terminfo systems. @xref{Termcap Syntax}. +@item termcapinfo @var{term terminal-tweaks [window-tweaks]} +Ditto, for both systems. @xref{Termcap Syntax}. +@item time +Display time and load average. @xref{Time}. +@item title @var{[windowtitle]} +Set the name of the current window. @xref{Title Command}. +@item unsetenv @var{var} +Unset environment variable for new windows. @xref{Setenv}. +@item vbell @var{[state]} +Use visual bell. @xref{Bell}. +@item vbell_msg @var{[message]} +Set vbell message. @xref{Bell}. +@item vbellwait @var{sec} +Set delay for vbell message. @xref{Bell}. +@item version +Display @code{screen} version. @xref{Version}. +@item wall @var{message} +Write a message to all displays. @xref{Multiuser Session}. +@item width @var{[num]} +Set the width of the window. @xref{Window Size}. +@item windows +List active windows. @xref{Windows}. +@item wrap @var{[state]} +Control line-wrap behavior. @xref{Wrap}. +@item writebuf +Write paste buffer to screen-exchange file. @xref{Screen-Exchange}. +@item writelock @var{on|off|auto} +Grant exclusive write permission. @xref{Multiuser Session}. +@item xoff +Send an XOFF character. @xref{XON/XOFF}. +@item xon +Send an XON character. @xref{XON/XOFF}. +@item zombie @var{[keys]} +Keep dead windows. @xref{Zombie}. +@end table + +@node New Window, Selecting, Commands, Top +@chapter New Window + +This section describes the commands for creating a new window for +running programs. When a new window is created, the first available +number from the range 0@dots{}9 is assigned to it. There can be no more +than 10 windows active at any one time unless @code{screen} was compiled +with a higher MAXWIN setting. + +@menu +* Chdir:: Change the working directory for new windows. +* Screen Command:: Create a new window. +* Setenv:: Set environment variables for new windows. +* Shell:: Parameters for shell windows. +* Term:: Set the terminal type for new windows. +@end menu + +@node Chdir, Screen Command, , New Window +@section Chdir +@deffn Command chdir [directory] +(none)@* +Change the current directory of @code{screen} to the specified directory +or, if called without an argument, to your home directory (the value of +the environment variable @code{$HOME}). All windows that are created by means +of the @code{screen} command from within @file{.screenrc} or by means of +@kbd{C-a : screen @dots{}} or @kbd{C-a c} use this as their default +directory. Without a @code{chdir} command, this would be the directory +from which @code{screen} was invoked. Hardcopy and log files are always +written to the @emph{window's} default directory, @emph{not} the current +directory of the process running in the window. You can use this +command multiple times in your @file{.screenrc} to start various windows +in different default directories, but the last @code{chdir} value will +affect all the windows you create interactively. +@end deffn + +@node Screen Command, Setenv, Chdir, New Window +@section Screen Command +@kindex c +@kindex C-c +@deffn Command screen [opts] [n] [cmd [args]] +(@kbd{C-a c}, @kbd{C-a C-c})@* +Establish a new window. The flow-control options (@samp{-f}, @samp{-fn} +and @samp{-fa}), title option (@samp{-t}), login options +(@samp{-l} and @samp{-ln}) , terminal type option (@samp{-T @var{term}}) +and scrollback option (@samp{-h @var{num}}) may be specified for each +command. If an optional number @var{n} in the range 0@dots{}9 is given, +the window number @var{n} is assigned to the newly created window (or, +if this number is already in-use, the next available number). If a +command is specified after @code{screen}, this command (with the given +arguments) is started in the window; otherwise, a shell is created. + +If a tty (character special device) name (e.g. @samp{/dev/ttyS0}) +is specified as cmd, then the window is directly connected to this +device. This is similar to the cmd @samp{kermit -l /dev/ttyS0 -c} but +saves resources and is more efficient. +@end deffn + +Thus, if your @file{.screenrc} contains the lines + +@example +# example for .screenrc: +screen 1 +screen -fn -t foobar 2 telnet foobar +@end example + +@noindent +@code{screen} creates a shell window (in window #1) and a window with a +TELNET connection to the machine foobar (with no flow-control using the +title @samp{foobar} in window #2). If you do not include any +@code{screen} commands in your @file{.screenrc} file, then @code{screen} +defaults to creating a single shell window, number zero. When the +initialization is completed, @code{screen} switches to the last window +specified in your .screenrc file or, if none, it opens default window +#0. + +@node Setenv, Shell, Screen Command, New Window +@section Setenv +@deffn Command setenv var string +(none)@* +Set the environment variable @var{var} to value @var{string}. +If only @var{var} is specified, the user will be prompted to enter a value. +If no parameters are specified, the user will be prompted for both variable +and value. The environment is inherited by all subsequently forked shells. +@end deffn + +@deffn Command unsetenv var +(none)@* +Unset an environment variable. +@end deffn + +@node Shell, Term, Setenv, New Window +@section Shell +@deffn Command shell command +(none)@* +Set the command to be used to create a new shell. This overrides the +value of the environment variable @code{$SHELL}. This is useful if +you'd like to run a tty-enhancer which is expecting to execute the +program specified in @code{$SHELL}. If the command begins with +a @samp{-} character, the shell will be started as a login-shell. +@end deffn + +@deffn Command shelltitle title +(none)@* +Set the title for all shells created during startup or by the C-a C-c +command. @xref{Naming Windows}, for details about what titles are. +@end deffn + +@node Term, , Shell, New Window +@section Term +@deffn Command term term +(none)@* +In each window @code{screen} opens, it sets the @code{$TERM} +variable to @samp{screen} by default, unless no description for +@samp{screen} is installed in the local termcap or terminfo data base. +In that case it pretends that the terminal emulator is @samp{vt100}. +This won't do much harm, as @code{screen} is VT100/ANSI compatible. The +use of the @code{term} command is discouraged for non-default purpose. +That is, one may want to specify special @code{$TERM} settings (e.g. vt100) for +the next @code{screen rlogin othermachine} command. Use the command +@code{screen -T vt100 rlogin othermachine} rather than setting +and resetting the default. +@end deffn + +@node Selecting, Session Management, New Window, Top +@chapter Selecting a Window + +This section describes the commands for switching between windows in an +@code{screen} session. The windows are numbered from 0 to 9, and are created +in that order by default (@pxref{New Window}). + +@menu +* Next and Previous:: Forward or back one window. +* Other Window:: Switch back and forth between two windows. +* Select:: Specify a particular window. +@end menu + +@node Next and Previous, Other Window, , Selecting +@section Moving Back and Forth +@kindex SPC +@kindex n +@kindex C-n +@deffn Command next +(@kbd{C-a @key{SPC}}, @kbd{C-a n}, @kbd{C-a C-n})@* +Switch to the next window. This command can be used repeatedly to +cycle through the list of windows. (On some terminals, C-@key{SPC} +generates a NUL character, so you must release the control key before +pressing space.) +@end deffn + +@kindex p +@kindex C-p +@deffn Command prev +(@kbd{C-a p}, @kbd{C-a C-p})@* +Switch to the previous window (the opposite of @kbd{C-a n}). +@end deffn + +@node Other Window, Select, Next and Previous, Selecting +@section Other Window +@kindex C-a +@deffn Command other +(@kbd{C-a C-a})@* +Switch to the last window displayed. Note that this command +defaults to the command character typed twice, unless overridden. +For instance, if you use the option @samp{-e]x}, +this command becomes @kbd{]]} (@pxref{Command Character}). +@end deffn + +@node Select, , Other Window, Selecting +@section Select +@kindex 0@dots{}9 +@kindex ' +@kindex " +@deffn Command select [n] +(@kbd{C-a @var{n}}, @kbd{C-a '}, @kbd{C-a "})@* +Switch to the window with the number @var{n}. +If no window number is specified, you get prompted for an +identifier. This can be a window name (title) or a number. +When a new window is established, the lowest available number +is assigned to this window. +Thus, the first window can be activated by @code{select 0}; there +can be no more than 10 windows present simultaneously (unless screen is +compiled with a higher MAXWIN setting). +@end deffn + +@node Session Management, Window Settings, Selecting, Top +@chapter Session Management Commands + +Perhaps the most useful feature of @code{screen} is the way it allows +the user to move a session between terminals, by detaching and +reattaching. This also makes life easier for modem users who have to +deal with unexpected loss of carrier. + +@menu +* Detach:: Disconnect @code{screen} from your terminal. +* Power Detach:: Detach and log out. +* Lock:: Lock your terminal temporarily. +* Multiuser Session:: Changing number of allowed users. +* Session Name:: Rename your session for later reattachment. +* Suspend:: Suspend your session. +* Quit:: Terminate your session. +@end menu + +@node Detach, Power Detach, , Session Management +@section Detach + +@deffn Command autodetach state +(none)@* +Sets whether @code{screen} will automatically detach upon hangup, which +saves all your running programs until they are resumed with a +@code{screen -r} command. When turned off, a hangup signal will +terminate @code{screen} and all the processes it contains. Autodetach is +on by default. +@end deffn + +@kindex d +@kindex C-d +@deffn Command detach +(@kbd{C-a d}, @kbd{C-a C-d})@* +Detach the @code{screen} session (disconnect it from the terminal and +put it into the background). A detached @code{screen} can be resumed by +invoking @code{screen} with the @code{-r} option. (@pxref{Invoking +Screen}) +@end deffn + +@deffn Command password [crypted_pw] +(none)@* +Present a crypted password in your @file{.screenrc} file and screen will +ask for it, whenever someone attempts to resume a detached session. This +is useful, if you have privileged programs running under @code{screen} +and you want to protect your session from reattach attempts by users +that managed to assume your uid. (I.e. any superuser.) If no crypted +password is specified, screen prompts twice a password and places its +encryption in the paste buffer. Default is `none', which disables +password checking. +@end deffn + +@node Power Detach, Lock, Detach, Session Management +@section Power Detach + +@kindex D +@deffn Command pow_detach +(@kbd{C-a D})@* +Mainly the same as @code{detach}, but also sends a HANGUP signal +to the parent process of @code{screen}.@* +@emph{Caution}: This will result in a +logout if @code{screen} was started from your login shell. +@end deffn + +@deffn Command pow_detach_msg [message] +(none)@* +The @var{message} specified here is output whenever a power detach is +performed. It may be used as a replacement for a logout message or to reset +baud rate, etc. +Without parameter, the current message is shown. +@end deffn + +@node Lock, Multiuser Session, Power Detach, Session Management +@section Lock +@kindex x +@kindex C-x +@deffn Command lockscreen +(@kbd{C-a x}, @kbd{C-a C-x})@* +Call a screenlock program (@file{/local/bin/lck} or @file{/usr/bin/lock} +or a builtin, if no other is available). Screen does not accept any +command keys until this program terminates. Meanwhile processes in the +windows may continue, as the windows are in the detached state. +The screenlock program may be changed through the environment variable +@code{$LOCKPRG} (which must be set in the shell from which @code{screen} +is started) and is executed with the user's uid and gid. + +Warning: When you leave other shells unlocked and have no password set +on @code{screen}, the lock is void: One could easily re-attach from an +unlocked shell. This feature should rather be called +@code{lockterminal}. +@end deffn + +@node Multiuser Session, Session Name, Lock, Session Management +@section Multiuser Session +@cindex multiuser session + +These commands allow other users to gain access to one single @code{screen} +session. When attaching to a multiuser @code{screen} the sessionname is +specified as @code{username/sessionname} to the @code{-S} command line option. +@code{Screen} must be compiled with multiuser support to enable features +described here. + +@menu +* Multiuser:: Enable / Disable multiuser mode. +* Acladd:: Enable a specific user. +* Aclchg:: Change a users permissions. +* Acldel:: Disable a specific user. +* Wall:: Write a message to all users. +* Writelock:: Grant exclusive window access. +@end menu + +@node Multiuser, Acladd, , Multiuser Session +@subsection Multiuser +@deffn Command multiuser @var{state} +(none)@* +Switch between single-user and multi-user mode. Standard screen operation is +single-user. In multi-user mode the commands @code{acladd}, @code{aclchg} and +@code{acldel} can be used to enable (and disable) other users accessing this +@code{screen}. +@end deffn + +@node Acladd, Aclchg, Multiuser, Multiuser Session +@subsection Acladd +@deffn Command acladd @var{usernames} +(none)@* +Enable users to fully access this screen session. @var{Usernames} can be one +user or a comma seperated list of users. This command enables to attach to +the @code{screen} session and performs the equivalent of +@code{aclchg @var{usernames} +rwx "#?"}. To add a user with restricted access, +use the @code{aclchg} command below. Multi-user mode only. +@end deffn + +@node Aclchg, Acldel, Acladd, Multiuser Session +@subsection Aclchg +@deffn Command aclchg @var{usernames permbits list} +(none)@* +Change permissions for a comma seperated list of users. +Permission bits are represented as @samp{r}, @samp{w} and @samp{x}. +Prefixing @samp{+} grants the permission, @samp{-} removes it. The third +parameter is a comma seperated list of commands or windows (specified either +by number or title). The special list @samp{#} refers to all windows, @samp{?} +to all commands. If @var{usernames} consists of a single @samp{*}, all +known users is affected. +A command can be executed when the user has the @samp{x} bit for it. The user +can type input to a window when he has its @samp{w} bit set and no other +user obtains a writelock for this window. Other bits are currently ignored. +To withdraw the writelock from another user in e.g. window 2: +@samp{aclchg @var{username} -w+w 2}. To allow readonly access +to the session: @samp{aclchg @var{username} -w "#"}. As soon as a user's name +is known to screen, he can attach to the session and (per default) has full +permissions for all command and windows. Execution permission for the acl +commands, @code{at} and others should also be removed or the user may be able +to regain write permission. +Multi-user mode only. +@end deffn + +@node Acldel, Wall, Aclchg, Multiuser Session +@subsection Acldel +@deffn Command acldel @var{username} +(none)@* +Remove a user from screen's access control list. If currently attached, all the +user's displays are detached from the session. He cannot attach again. +Multi-user mode only. +@end deffn + +@node Wall, Writelock, Acldel, Multiuser Session +@subsection Wall +@deffn Command wall @var{message} +(none)@* +Write a message to all displays. The message will appear in the terminal's +status line. +@end deffn + +@node Writelock, , Wall, Multiuser Session +@subsection Writelock +@deffn Command writelock @var{on|off|auto} +(none)@* +In addition to access control lists, not all users may be able to write to +the same window at once. Per default, writelock is in @samp{auto} mode and +grants exclusive input permission to the user who is the first to switch +to the particular window. When he leaves the window, other users may obtain +the writelock (automatically). The writelock of the current window is disabled +by the command @code{writelock off}. If the user issues the command +@code{writelock on} he keeps the exclusive write permission while switching +to other windows. +@end deffn + +@deffn Command defwritelock @var{on|off|auto} +(none)@* +Sets the default writelock behaviour for new windows. Initially all windows +will be created with automatic writelocks. +@end deffn + + +@node Session Name, Suspend, Multiuser Session, Session Management +@section Session Name +@deffn Command sessionname [name] +(none)@* +Rename the current session. Note that for @code{screen -list} the name +shows up with the process-id prepended. If the argument @var{name} is +omitted, the name of this session is displayed.@* +@emph{Caution}: The @code{$STY} +environment variable still reflects the old name. This may result in +confusion. The default is constructed from the tty and host names. +@end deffn + +@node Suspend, Quit, Session Name, Session Management +@section Suspend +@kindex z +@kindex C-z +@deffn Command suspend +(@kbd{C-a z}, @kbd{C-a C-z})@* +Suspend @code{screen}. The windows are in the detached state while +@code{screen} is suspended. This feature relies on the parent shell +being able to do job control. +@end deffn + +@node Quit, , Suspend, Session Management +@section Quit +@kindex C-\ +@deffn Command quit +(@kbd{C-a C-\})@* +Kill all windows and terminate @code{screen}. Note that on VT100-style +terminals the keys @kbd{C-4} and @kbd{C-\} are identical. So be careful +not to type @kbd{C-a C-4} when selecting window no. 4. Use the empty +bind command (as in @code{bind "^\"}) to remove a key binding +(@pxref{Key Binding}). +@end deffn + +@node Window Settings, Virtual Terminal, Session Management, Top +@chapter Window Settings + +These commands control the way @code{screen} treats individual windows +in a session. @xref{Virtual Terminal}, for commands to control the +terminal emulation itself. + +@menu +* Naming Windows:: Control the name of the window +* Console:: See the host's console messages +* Kill:: Destroy an unwanted window +* Login:: Control @file{/etc/utmp} logging +* Mode:: Control the file mode of the pty +* Monitor:: Watch for activity in a window +* Windows:: List the active windows +* Hardstatus:: Set a window's hardstatus line +@end menu + +@node Naming Windows, Console, , Window Settings +@section Naming Windows (Titles) +@cindex title + +You can customize each window's name in the window display (viewed with +the @code{windows} command (@pxref{Windows}) 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 +@code{shelltitle} command (@pxref{Shell}). You can specify the name you +want for a window with the @samp{-t} option to the @code{screen} command +when the window is created (@pxref{Screen Command}). To change the name after +the window has been created you can use the title-string escape-sequence +(@kbd{@key{ESC} k @var{name} @key{ESC} \}) and the @code{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 +@code{title} command to set things quickly without prompting. + +@menu +* Title Command:: The @code{title} command. +* Dynamic Titles:: Make shell windows change titles dynamically. +* Title Prompts:: Set up your shell prompt for dynamic Titles. +* Title Screenrc:: Set up Titles in your @file{.screenrc}. +@end menu + +@node Title Command, Dynamic Titles, , Naming Windows +@subsection Title Command +@kindex A +@deffn Command title [windowtitle] +(@kbd{C-a A})@* +Set the name of the current window to @var{windowalias}. If no name is +specified, screen prompts for one. +@end deffn + +@node Dynamic Titles, Title Prompts, Title Command, Naming Windows +@subsection Dynamic Titles +@code{screen} has a shell-specific heuristic that is enabled by +setting the window's name to @var{search|name} and arranging to have a +null title escape-sequence output as a part of your prompt. The +@var{search} portion specifies an end-of-prompt search string, while the +@var{name} portion specifies the default shell name for the window. If +the @var{name} ends in a @samp{:} @code{screen} will add what it +believes to be the current command running in the window to the end of +the specified name (e.g. @var{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 (@key{ESC} k @key{ESC} \) as a part of your prompt. +The last part of your prompt must be the same as the string you +specified for the @var{search} portion of the title. Once this is set +up, @code{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 @samp{!}, +@samp{%}, or @samp{^}, @code{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. + +@node Title Prompts, Title Screenrc, Dynamic Titles, Naming Windows +@subsection 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: + +@example +set prompt='@value{esc}[0000m@value{esc}k@value{esc}\% ' +@end example + +The escape-sequence @samp{@value{esc}[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: + +@example +set prompt="%@{\ek\e\\%@}\% " +@end example + +Bash users will probably want to echo the escape sequence in the +PROMPT_COMMAND: + +@example +PROMPT_COMMAND='echo -n -e "\033k\033\134"' +@end example + +(I used @samp{\134} to output a @samp{\} because of a bug in v1.04). + +@node Title Screenrc, , Title Prompts, Naming Windows +@subsection Setting up shell titles in your @file{.screenrc} +Here are some .screenrc examples: + +@example +screen -t top 2 nice top +@end example + +Adding this line to your .screenrc would start a niced version of the +@code{top} command in window 2 named @samp{top} rather than @samp{nice}. + +@example +shelltitle '> |csh' +screen 1 +@end example + +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: + +@example +/usr/joe/src/dir> trn +@end example + +(it looks after the '> ' for the command name). +The window status would show the name @samp{trn} while the command was +running, and revert to @samp{csh} upon completion. + +@example +bind R screen -t '% |root:' su +@end example + +Having this command in your .screenrc would bind the key sequence +@kbd{C-a R} to the @code{su} command and give it an auto-title name of +@samp{root:}. For this auto-title to work, the screen could look +something like this: + +@example +% !em +emacs file.c +@end example + +Here the user typed the csh history command @code{!em} which ran the +previously entered @code{emacs} command. The window status would show +@samp{root:emacs} during the execution of the command, and revert to +simply @samp{root:} at its completion. + +@example +bind o title +bind E title "" +bind u title (unknown) +@end example + +The first binding doesn't have any arguments, so it would prompt you for +a title when you type @kbd{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 @samp{(unknown)} (C-a u). + +@node Console, Kill, Naming Windows, Window Settings +@section Console +@deffn Command console @var{[state]} +(none)@* +Grabs or ungrabs the machines console output to a window. When the argument +is omitted the current state is displayed. +@emph{Note}: Only the owner of @file{/dev/console} can grab the console +output. This command is only available if the host supports the ioctl +@code{TIOCCONS}. +@end deffn + +@node Kill, Login, Console, Window Settings +@section Kill + +@kindex k +@kindex C-k +@deffn Command kill +(@kbd{C-a k}, @kbd{C-a C-k})@* +Kill the current window.@* +If there is an @code{exec} command running (@pxref{Exec}) then it is killed. +Otherwise the process (e.g. shell) running in the window receives a +@code{HANGUP} condition, +the window structure is removed and screen switches to the previously +displayed window. When the last window is destroyed, @code{screen} exits. +@* +@emph{Caution}: @code{emacs} users may find themselves killing their +@code{emacs} session when trying to delete the current line. For this +reason, it is probably wise to use a different command character +(@pxref{Command Character}) or rebind @code{kill} to another key +sequence, such as @kbd{C-a K} (@pxref{Key Binding}). +@end deffn + +@node Login, Mode, Kill, Window Settings +@section Login + +@deffn Command deflogin state +(none)@* +Same as the @code{login} command except that the default setting for new +windows is changed. This defaults to `on' unless otherwise specified at +compile time (@pxref{Installation}). Both commands are only present when +@code{screen} has been compiled with utmp support. +@end deffn + +@kindex L +@deffn Command login [state] +(@kbd{C-a L})@* +Adds or removes the entry in @file{/etc/utmp} for the current window. +This controls whether or not the window is @dfn{logged in}. In addition +to this toggle, it is convenient to have ``log in'' and ``log out'' +keys. For instance, @code{bind I login on} and @code{bind O +login off} will map these keys to be @kbd{C-a I} and @kbd{C-a O} +(@pxref{Key Binding}). +@end deffn + +@node Mode, Monitor, Login, Window Settings +@section Mode +@deffn Command defmode mode +(none)@* +The mode of each newly allocated pseudo-tty is set to @var{mode}. +@var{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 @code{-ln} was +specified for creation. @xref{Screen Command}). +@end deffn + +@node Monitor, Windows, Mode, Window Settings +@section Monitoring + +@deffn Command activity message +(none)@* +When any activity occurs in a background window that is being monitored, +@code{screen} displays a notification in the message line. The +notification message can be redefined by means of the @code{activity} +command. Each occurrence of @samp{%} in @var{message} is replaced by +the number of the window in which activity has occurred, and each +occurrence of @samp{~} is replaced by the definition for bell in your +termcap (usually an audible bell). The default message is + +@example +'Activity in window %' +@end example + +Note that monitoring is off for all windows by default, but can be altered +by use of the @code{monitor} command (@kbd{C-a M}). +@end deffn + +@deffn Command defmonitor state +(none)@* +Same as the @code{monitor} command except that the default setting for +new windows is changed. Initial setting is `off'. +@end deffn + +@kindex M +@deffn Command monitor [state] +(@kbd{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 @samp{@@} in +the window-status display (@pxref{Windows}). Monitoring defaults to +@samp{off} for all windows. +@end deffn + +@node Windows, Hardstatus, Monitor, Window Settings +@section Windows +@kindex w +@kindex C-w +@deffn Command windows +(@kbd{C-a w}, @kbd{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 @samp{*}; +the previous window is marked with a @samp{-}; all the windows that are +logged in are marked with a @samp{$} (@pxref{Login}); a background +window that has received a bell is marked with a @samp{!}; a background +window that is being monitored and has had activity occur is marked with +an @samp{@@} (@pxref{Monitor}); a window which has output logging turned +on is marked with @samp{(L)}; windows occupied by other users are marked with +@samp{&}; windows in the zombie state are marked with @samp{Z}. +If this list is too long to fit on the terminal's status line only the +portion around the current window is displayed. +@end deffn + +@node Hardstatus, , Windows, Window Settings +@section Hardstatus + +@code{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. If the display has no hardstatus +the line will be displayed as a standard screen message. +The hardstatus line can be changed with the ANSI Application +Program Command (APC): @samp{ESC_<string>ESC\}. As a convenience +for xterm users the sequence @samp{ESC]0..2;<string>^G} is +also accepted. + +@deffn Command defhstatus +(none)@* +The hardstatus line that all new windows will get is set to +@var{status}. +This command is useful to make the hardstatus of every window +display the window number or title or the like. @var{status} +may contain the same directives as in the window messages, but +the directive escape character is @samp{^E} (octal 005) instead +of @samp{%}. This was done to make a misinterpretion of program +generated hardstatus lines impossible. +If the parameter @var{status} +is omitted, the current default string is displayed. +Per default the hardstatus line of new windows is empty. +@end deffn + +@node Virtual Terminal, Copy and Paste, Window Settings, Top +@chapter Virtual Terminal + +Each window in a @code{screen} session emulates a VT100 terminal, with +some extra functions added. The VT100 emulator is hardcoded, no other +terminal types can be emulated. +The commands described here modify the terminal emulation. + +@menu +* Control Sequences:: Details of the internal VT100 emulation. +* Input Translation:: How keystrokes are remapped. +* Digraph:: Entering digraph sequences. +* Bell:: Getting your attention. +* Clear:: Clear the window display. +* Info:: Terminal emulation statistics. +* Redisplay:: When the display gets confusing. +* Wrap:: Automatic margins. +* Reset:: Recovering from ill-behaved applications. +* Window Size:: Changing the size of your terminal. +* Character Processing:: Change the effect of special characters. +@end menu + +@node Control Sequences, Input Translation, , Virtual Terminal +@section Control Sequences +@cindex control sequences +The following is a list of control sequences recognized by +@code{screen}. @samp{(V)} and @samp{(A)} indicate VT100-specific and +ANSI- or ISO-specific functions, respectively. + +@example +ESC E Next Line +ESC D Index +ESC M Reverse Index +ESC H Horizontal Tab Set +ESC Z Send VT100 Identification String +ESC 7 (V) Save Cursor and Attributes +ESC 8 (V) Restore Cursor and Attributes +ESC [s (A) Save Cursor and Attributes +ESC [u (A) Restore Cursor and Attributes +ESC c Reset to Initial State +ESC g Visual Bell +ESC Pn p Cursor Visibility (97801) + Pn = 6 Invisible + 7 Visible +ESC = (V) Application Keypad Mode +ESC > (V) Numeric Keypad Mode +ESC # 8 (V) Fill Screen with E's +ESC \ (A) String Terminator +ESC ^ (A) Privacy Message String (Message Line) +ESC ! Global Message String (Message Line) +ESC k Title Definition String +ESC P (A) Device Control String + Outputs a string directly to the host + terminal without interpretation. +ESC _ (A) Application Program Command (Hardstatus) +ESC ] (A) Operating System Command (Hardstatus, xterm + title hack) +Control-N (A) Lock Shift G1 (SO) +Control-O (A) Lock Shift G0 (SI) +ESC n (A) Lock Shift G2 +ESC o (A) Lock Shift G3 +ESC N (A) Single Shift G2 +ESC O (A) Single Shift G3 +ESC ( Pcs (A) Designate character set as G0 +ESC ) Pcs (A) Designate character set as G1 +ESC * Pcs (A) Designate character set as G2 +ESC + Pcs (A) Designate character set as G3 +ESC [ Pn ; Pn H Direct Cursor Addressing +ESC [ Pn ; Pn f Direct Cursor Addressing +ESC [ Pn J Erase in Display + Pn = None or 0 From Cursor to End of Screen + 1 From Beginning of Screen to Cursor + 2 Entire Screen +ESC [ Pn K Erase in Line + Pn = None or 0 From Cursor to End of Line + 1 From Beginning of Line to Cursor + 2 Entire Line +ESC [ Pn A Cursor Up +ESC [ Pn B Cursor Down +ESC [ Pn C Cursor Right +ESC [ Pn D Cursor Left +ESC [ Ps ;...; Ps m Select Graphic Rendition + Ps = None or 0 Default Rendition + 1 Bold + 2 (A) Faint + 3 (A) @i{Standout} Mode (ANSI: Italicized) + 4 Underlined + 5 Blinking + 7 Negative Image + 22 (A) Normal Intensity + 23 (A) @i{Standout} Mode off (ANSI: Italicized off) + 24 (A) Not Underlined + 25 (A) Not Blinking + 27 (A) Positive Image + 30 (A) Foreground Black + 31 (A) Foreground Red + 32 (A) Foreground Green + 33 (A) Foreground Yellow + 34 (A) Foreground Blue + 35 (A) Foreground Magenta + 36 (A) Foreground Cyan + 37 (A) Foreground White + 39 (A) Foreground Default + 40 (A) Background Black + ... ... + 49 (A) Background Default +ESC [ Pn g Tab Clear + Pn = None or 0 Clear Tab at Current Position + 3 Clear All Tabs +ESC [ Pn ; Pn r (V) Set Scrolling Region +ESC [ Pn I (A) Horizontal Tab +ESC [ Pn Z (A) Backward Tab +ESC [ Pn L (A) Insert Line +ESC [ Pn M (A) Delete Line +ESC [ Pn @@ (A) Insert Character +ESC [ Pn P (A) Delete Character +ESC [ Pn S Scroll Scrolling Region Up +ESC [ Pn T Scroll Scrolling Region Down +ESC [ Ps ;...; Ps h Set Mode +ESC [ Ps ;...; Ps l Reset Mode + Ps = 4 (A) Insert Mode + 20 (A) @samp{Automatic Linefeed} Mode. + 34 Normal Cursor Visibility + ?1 (V) Application Cursor Keys + ?3 (V) Change Terminal Width to 132 columns + ?5 (V) Reverse Video + ?6 (V) @samp{Origin} Mode + ?7 (V) @samp{Wrap} Mode + ?25 (V) Visible Cursor +ESC [ 5 i (A) Start relay to printer (ANSI Media Copy) +ESC [ 4 i (A) Stop relay to printer (ANSI Media Copy) +ESC [ 8 ; Ph ; Pw t Resize the window to @samp{Ph} lines and + @samp{Pw} columns (SunView special) +ESC [ c Send VT100 Identification String +ESC [ x (V) Send Terminal Parameter Report +ESC [ > c Send Secondary Device Attributes String +ESC [ 6 n Send Cursor Position Report + +@end example + + +@node Input Translation, Digraph, Control Sequences, Virtual Terminal +@section Input Translation +@cindex input translation +In order to do a full VT100 emulation @code{screen} has to detect +that a sequence of characters in the input stream was generated +by a keypress on the user's keyboard and insert the VT100 +style escape sequence. @code{Screen} has a very flexible way of doing +this by making it possible to map arbitrary commands on arbitrary +sequences of characters. For standard VT100 emulation the command +will always insert a string in the input buffer of the window +(see also command @code{stuff}, @pxref{Paste}). +Because the sequences generated by a keypress can +change after a reattach from a different terminal type, it is +possible to bind commands to the termcap name of the keys. +@code{Screen} will insert the correct binding after each +reattach. @xref{Bindkey} for further details on the syntax and examples. + +Here is the table of the default key bindings. (A) means that the +command is executed if the keyboard is switched into application +mode. +@example + +Key name Termcap name Command +----------------------------------------------------- +Cursor up ku stuff \033[A + stuff \033OA (A) +Cursor down kd stuff \033[B + stuff \033OB (A) +Cursor right kr stuff \033[C + stuff \033OC (A) +Cursor left kl stuff \033[D + stuff \033OD (A) +Function key 0 k0 stuff \033[10~ +Function key 1 k1 stuff \033OP +Function key 2 k2 stuff \033OQ +Function key 3 k3 stuff \033OR +Function key 4 k4 stuff \033OS +Function key 5 k5 stuff \033[15~ +Function key 6 k6 stuff \033[17~ +Function key 7 k7 stuff \033[18~ +Function key 8 k8 stuff \033[19~ +Function key 9 k9 stuff \033[20~ +Function key 10 k; stuff \033[21~ +Function key 11 F1 stuff \033[22~ +Function key 12 F2 stuff \033[23~ +Backspace kb stuff \010 +Home kh stuff \033[1~ +End kH stuff \033[4~ +Insert kI stuff \033[2~ +Delete kD stuff \033[3~ +Page up kP stuff \033[5~ +Page down kN stuff \033[6~ +Keypad 0 f0 stuff 0 + stuff \033Op (A) +Keypad 1 f1 stuff 1 + stuff \033Oq (A) +Keypad 2 f2 stuff 2 + stuff \033Or (A) +Keypad 3 f3 stuff 3 + stuff \033Os (A) +Keypad 4 f4 stuff 4 + stuff \033Ot (A) +Keypad 5 f5 stuff 5 + stuff \033Ou (A) +Keypad 6 f6 stuff 6 + stuff \033Ov (A) +Keypad 7 f7 stuff 7 + stuff \033Ow (A) +Keypad 8 f8 stuff 8 + stuff \033Ox (A) +Keypad 9 f9 stuff 9 + stuff \033Oy (A) +Keypad + f+ stuff + + stuff \033Ok (A) +Keypad - f- stuff - + stuff \033Om (A) +Keypad * f* stuff * + stuff \033Oj (A) +Keypad / f/ stuff / + stuff \033Oo (A) +Keypad = fq stuff = + stuff \033OX (A) +Keypad . f. stuff . + stuff \033On (A) +Keypad , f, stuff , + stuff \033Ol (A) +Keypad enter fe stuff \015 + stuff \033OM (A) +@end example + +@node Digraph, Bell, Input Translation, Virtual Terminal +@section Digraph + +@kindex C-v +@deffn Command digraph [preset] +(none)@* +This command prompts the user for a digraph sequence. The next +two characters typed are looked up in a builtin table and the +resulting character is inserted in the input stream. For example, +if the user enters @samp{a"}, an a-umlaut will be inserted. If the +first character entered is a 0 (zero), @code{screen} +will treat the following charcters (up to three) as an octal +number instead. The optional argument @var{preset} +is treated as user input, thus one can create an "umlaut" key. +For example the command @samp{bindkey ^K digraph '"'} enables the user +to generate an a-umlaut by typing @samp{CTRL-K a}. +@end deffn + +@node Bell, Clear, Digraph, Virtual Terminal +@section Bell + +@deffn Command bell_msg [message] +(none)@* +When a bell character is sent to a background window, @code{screen} +displays a notification in the message line. The notification message +can be re-defined by means of the @code{bell} command. Each occurrence +of @samp{%} in @var{message} is replaced by the number of the window to +which a bell has been sent, and each occurrence of @samp{~} is replaced +by the definition for bell in your termcap (usually an audible bell). +The default message is + +@example +'Bell in window %' +@end example + +An empty message can be supplied to the @code{bell_msg} command to suppress +output of a message line (@code{bell_msg ""}). +@end deffn + +@kindex C-g +@deffn Command vbell [state] +(@kbd{C-a C-g})@* +Sets or toggles the visual bell setting for the current window. If +@code{vbell} is switched to @samp{on}, but your +terminal does not support a visual bell, the visual bell message is +displayed in the status line when the bell character is received. +Visual bell support of a terminal is +defined by the termcap variable @code{vb}. @xref{Bell, , Visual Bell, +termcap, The Termcap Manual}, for more information on visual bells. +The equivalent terminfo capability is @code{flash}. + +Per default, @code{vbell} is @samp{off}, thus the audible bell is used. +@end deffn + +@deffn Command vbell_msg [message] +(none)@* +Sets the visual bell message. @var{Message} is printed to the status +line if the window receives a bell character (^G), @code{vbell} is +set to @samp{on} and the terminal does not support a visual bell. +The default message is @samp{Wuff, Wuff!!}. +Without parameter, the current message is shown. +@end deffn + +@deffn Command vbellwait sec +(none)@* +Define a delay in seconds after each display of @code{screen} 's visual +bell message. The default is 1 second. +@end deffn + +@node Clear, Info, Bell, Virtual Terminal +@section Clear +@kindex C +@deffn Command clear +(@kbd{C-a C})@* +Clears the screen and saves its contents to the scrollback buffer. +@end deffn + +@node Info, Redisplay, Clear, Virtual Terminal +@section Info +@kindex i +@kindex C-i +@deffn Command info +(@kbd{C-a i}, @kbd{C-a C-i})@* +Uses the message line to display some information about the current +window: the cursor position in the form @samp{(@var{column},@var{row})} +starting with @samp{(1,1)}, the terminal width and height plus the size +of the scrollback buffer in lines, like in @samp{(80,24)+50}, various +flag settings (flow-control, insert mode, origin mode, wrap mode, +application-keypad mode, output logging, activity monitoring, and redraw +(@samp{+} indicates enabled, @samp{-} not)), the currently active +character set (@samp{G0}, @samp{G1}, @samp{G2}, or @samp{G3}), and in +square brackets the terminal character sets that are currently +designated as @samp{G0} through @samp{G3}. For system information use +@code{time}. +@end deffn + +@node Redisplay, Wrap, Info, Virtual Terminal +@section Redisplay + +@deffn Command allpartial state +(none)@* +If set to on, only the current cursor line is refreshed on window change. +This affects all windows and is useful for slow terminal lines. The +previous setting of full/partial refresh for each window is restored +with @code{allpartial off}. This is a global flag that immediately takes effect +on all windows overriding the @code{partial} settings. It does not change the +default redraw behaviour of newly created windows. +@end deffn + +@deffn Command partial state +(none)@* +Defines whether the display should be refreshed (as with +@code{redisplay}) after switching to the current window. This command +only affects the current window. To immediately affect all windows use the +@code{allpartial} command. Default is @samp{off}, of course. This default is +fixed, as there is currently no @code{defpartial} command. +@end deffn + +@kindex l +@kindex C-l +@deffn Command redisplay +(@kbd{C-a l}, @kbd{C-a C-l})@* +Redisplay the current window. Needed to get a full redisplay in +partial redraw mode. +@end deffn + +@node Wrap, Reset, Redisplay, Virtual Terminal +@section Wrap + +@kindex r +@kindex C-r +@deffn Command wrap state +(@kbd{C-a r}, @kbd{C-a C-r}) @* +Sets the line-wrap setting for the current window. When line-wrap is +on, the second consecutive printable character output at the last column +of a line will wrap to the start of the following line. As an added +feature, backspace (^H) will also wrap through the left margin to the +previous line. Default is @samp{on}. +@end deffn + +@deffn Command defwrap state +(none) @* +Same as the @code{wrap} command except that the default setting for new +windows is changed. Initially line-wrap is on and can be toggled with the +@code{wrap} command (@kbd{C-a r}) or by means of "C-a : wrap on|off". +@end deffn + +@node Reset, Window Size, Wrap, Virtual Terminal +@section Reset +@kindex Z +@deffn Command reset +(@kbd{C-a Z})@* +Reset the virtual terminal to its ``power-on'' values. Useful when strange +settings (like scroll regions or graphics character set) are left over from +an application. +@end deffn + +@node Window Size, Character Processing, Reset, Virtual Terminal +@section Window Size +@kindex W +@deffn Command width [num] +(@kbd{C-a W})@* +Toggle the window width between 80 and 132 columns, or set it to +@var{num} columns if an argument is specified. This requires a +capable terminal and the termcap entries @samp{Z0} and @samp{Z1}. See +the @code{termcap} command (@pxref{Termcap}), for more information. +@end deffn + +@deffn Command height @var{[lines]} +(none)@* +Set the display height to a specified number of lines. When no +argument is given it toggles between 24 and 42 lines display. +@end deffn + +@node Character Processing, ,Window Size, Virtual Terminal +@section Character Processing + +@deffn Command c1 [state] +(none)@* +Change c1 code processing. @samp{c1 on} tells screen to treat +the input characters between 128 and 159 as control functions. +Such an 8-bit code is normally the same as ESC followed by the +corresponding 7-bit code. The default setting is to process c1 +codes and can be changed with the @samp{defc1} command. +Users with fonts that have usable characters in the +c1 positions may want to turn this off. + +@end deffn +@deffn Command gr [state] +(none)@* +Turn GR charset switching on/off. Whenever screens sees an input +char with an 8th bit set, it will use the charset stored in the +GR slot and print the character with the 8th bit stripped. The +default (see also @samp{defgr}) is not to process GR switching because +otherwise the ISO88591 charset would not work. +@end deffn + +@deffn Command kanji wtype [dtype] +(none)@* +Tell screen how to process kanji input/output. @var{wtype} and +@var{dtype} must be one of the strings @samp{jis}, @samp{euc} or +@samp{sjis}. The first argument sets the kanji type of the current +window. Each window can emulate a different type. The optional second +parameter tells screen how to write the kanji codes to the +connected terminal. The preferred method of setting the display type +is to use the @samp{KJ} termcap entry. @xref{Special Capabilities}. +See also @samp{defkanji}, which changes the default setting of a new +window. +@end deffn + +@deffn Command charset set +(none)@* +Change the current character set slot designation and charset +mapping. The first four character of @var{set} +are treated as charset designators while the fifth and sixth +character must be in range @samp{0} to @samp{3} and set the GL/GR +charset mapping. On every position a @samp{.} may be used to indicate +that the corresponding charset/mapping should not be changed +(@var{set} is padded to six characters internally by appending +@samp{.} chars). New windows have @samp{BBBB02} as default +charset, unless a @samp{kanji} command is active. + +The current setting can be viewed with the @xref{Info} command. +@end deffn + +@deffn Command defc1 state +(none)@* +Same as the @samp{c1} command except that the default setting for +new windows is changed. Initial setting is @samp{on}. +@end deffn + +@deffn Command defgr state +(none)@* +Same as the @samp{gr} command except that the default setting for +new windows is changed. Initial setting is @samp{off}. +@end deffn + +@deffn Command defkanji wtype +(none)@* +Same as the @samp{kanji} command except that the default setting for +new windows is changed. Initial setting is @samp{off}, i.e. @samp{jis}. +@end deffn + +@deffn Command defcharset [set] +Like the @samp{charset} command except that the default setting for +new windows is changed. Shows current default if called without +argument. +@end deffn + +@node Copy and Paste, Subprocess Execution, Virtual Terminal, Top +@chapter Copy and Paste +@cindex copy and paste + +For those confined to a hardware terminal, these commands provide a cut +and paste facility more powerful than those provided by most windowing +systems. + +@menu +* Copy:: Copy from scrollback to buffer +* Paste:: Paste from buffer into window +* Registers:: Longer-term storage +* Screen-Exchange:: Sharing data between screen users +* History:: Recalling previous input +@end menu + +@node Copy, Paste, , Copy and Paste +@section Copying +@cindex marking +@cindex scrollback +@kindex [ +@kindex C-[ +@kindex ESC +@deffn Command copy +(@kbd{C-a [}, @kbd{C-a C-[}, @kbd{C-a @key{ESC}})@* +Enter copy/scrollback mode. This allows you to copy text from the +current window and its history into the paste buffer. In this mode a +@code{vi}-like full screen editor is active, with controls as +outlined below. +@end deffn + +@menu +* Line Termination:: End copied lines with CR/LF +* Scrollback:: Set the size of the scrollback buffer +* Copy Mode Keys:: Remap keys in copy mode +* Movement:: Move around in the scrollback buffer +* Marking:: Select the text you want +* Repeat count:: Repeat a command +* Searching:: Find the text you want +* Specials:: Other random keys +@end menu + +@node Line Termination, Scrollback, , Copy +@subsection CR/LF +@deffn Command crlf [state] +(none)@* +This affects the copying of text regions with the @kbd{C-a [} command. +If it is set to @samp{on}, lines will be separated by the two character +sequence @samp{CR}/@samp{LF}. Otherwise only @samp{LF} is used. +@code{crlf} is off by default. +When no parameter is given, the state is toggled. +@end deffn + +@node Scrollback, Copy Mode Keys, Line Termination, Copy +@subsection Scrollback +@deffn Command defscrollback num +(none)@* +Same as the @code{scrollback} command except that the default setting +for new windows is changed. Defaults to 100. +@end deffn + +@deffn Command scrollback num +(none)@* +Set the size of the scrollback buffer for new windows to @var{num} +lines. The default scrollback is 100 lines. Use @kbd{C-a i} to view +the current setting. +@end deffn + +@node Copy Mode Keys, Movement, Scrollback, Copy +@subsection markkeys +@deffn Command markkeys string +(none)@* +This is a method of changing the keymap used for copy/history mode. The +string is made up of @var{oldchar}=@var{newchar} pairs which are +separated by @samp{:}. Example: The command @code{markkeys +h=^B:l=^F:$=^E} would set some keys to be more familiar to @code{emacs} +users. +If your terminal sends characters, that cause you to abort copy mode, +then this command may help by binding these characters to do nothing. +The no-op character is `@' and is used like this: @code{markkeys @@=L=H} +if you do not want to use the `H' or `L' commands any longer. +As shown in this example, multiple keys can be assigned to one function +in a single statement. +@end deffn + +@node Movement, Marking, Copy Mode Keys, Copy +@subsection Movement Keys + +@noindent +@kbd{h}, @kbd{j}, @kbd{k}, @kbd{l} move the cursor line by line or +column by column. + +@noindent +@kbd{0}, @kbd{^} and @kbd{$} move to the leftmost column or to the first +or last non-whitespace character on the line. + +@noindent +@kbd{H}, @kbd{M} and @kbd{L} move the cursor to the leftmost column +of the top, center or bottom line of the window. + +@noindent +@kbd{+} and @kbd{-} move the cursor to the leftmost column of the next +or previous line. + +@noindent +@kbd{G} moves to the specified absolute line (default: end of buffer). + +@noindent +@kbd{|} moves to the specified absolute column. + +@noindent +@kbd{w}, @kbd{b}, @kbd{e} move the cursor word by word. + +@noindent +@kbd{C-u} and @kbd{C-d} scroll the display up/down by the specified +amount of lines while preserving the cursor position. (Default: half +screenfull). + +@noindent +@kbd{C-b} and @kbd{C-f} move the cursor up/down a full screen. + +@noindent +@kbd{g} moves to the beginning of the buffer. + +@noindent +@kbd{%} jumps to the specified percentage of the buffer. + +Note that Emacs-style movement keys can be specified by a .screenrc +command. (@code{markkeys "h=^B:l=^F:$=^E"}) There is no simple method for +a full emacs-style keymap, however, as this involves multi-character codes. + +@node Marking, Repeat count, Movement, Copy +@subsection Marking + +The copy range is specified by setting two marks. The text between these +marks will be highlighted. Press @kbd{space} to set the first or second +mark respectively. + +@noindent +@kbd{Y} and @kbd{y} can be used to mark one whole line or to mark from +start of line. + +@noindent +@kbd{W} marks exactly one word. + +@node Repeat count, Searching, Marking, Copy +@subsection Repeat Count + +Any command in copy mode can be prefixed with a number (by pressing +digits @kbd{0@dots{}9}) which is taken as a repeat count. Example: +@kbd{C-a C-[ H 10 j 5 Y} will copy lines 11 to 15 into the paste buffer. + +@node Searching, Specials, Repeat count, Copy +@subsection Searching + +@noindent +@kbd{/} @code{vi}-like search forward. + +@noindent +@kbd{?} @code{vi}-like search backward. + +@noindent +@kbd{C-a s} @code{emacs} style incremental search forward. + +@noindent +@kbd{C-r} @code{emacs} style reverse i-search. + +@node Specials, , Searching, Copy +@subsection Specials + +There are, however, some keys that act differently here from in +@code{vi}. @code{Vi} does not allow to yank rectangular blocks of text, +but @code{screen} does. Press + +@noindent +@kbd{c} or @kbd{C} to set the left or right margin respectively. If no +repeat count is given, both default to the current cursor position.@* +Example: Try this on a rather full text screen: +@kbd{C-a [ M 20 l SPACE c 10 l 5 j C SPACE}. + +@noindent +This moves one to the middle line of the screen, moves in 20 columns left, +marks the beginning of the paste buffer, sets the left column, moves 5 columns +down, sets the right column, and then marks the end of +the paste buffer. Now try:@* +@kbd{C-a [ M 20 l SPACE 10 l 5 j SPACE} + +@noindent +and notice the difference in the amount of text copied. + +@noindent +@kbd{J} joins lines. It toggles between 3 modes: lines separated by a +newline character (012), lines glued seamless, or lines separated by a +single space. Note that you can prepend the newline character with +a carriage return character, by issuing a @code{set crlf on}. + +@noindent +@kbd{v} is for all the @code{vi} users who use @code{:set numbers} - it +toggles the left margin between column 9 and 1. + +@noindent +@kbd{a} before the final space key turns on append mode. Thus +the contents of the paste buffer will not be overwritten, but appended to. + +@noindent +@kbd{A} turns on append mode and sets a (second) mark. + +@noindent +@kbd{>} sets the (second) mark and writes the contents of the paste buffer +to the screen-exchange file (@file{/tmp/screen-exchange} per default) +once copy-mode is finished. @xref{Screen-Exchange}.@* +This example demonstrates how to dump the +whole scrollback buffer to that file: @*@kbd{C-a [ g SPACE G $ >}. + +@noindent +@kbd{C-g} gives information about the current line and column. + +@noindent +@kbd{x} exchanges the first mark and the current cursor position. You +can use this to adjust an already placed mark. + +@noindent +@kbd{@@} does nothing. Absolutely nothing. Does not even exit copy +mode. + +@noindent +All keys not described here exit copy mode. + +@node Paste, Registers, Copy, Copy and Paste +@section Paste + +@kindex ] +@kindex C-] +@deffn Command paste [registers [destination]] +(@kbd{C-a ]}, @kbd{C-a C-]})@* +Write the (concatenated) contents of the specified registers to the stdin +stream of the current window. The register @samp{.} is treated as the +paste buffer. If no parameter is specified the user is prompted to enter a +single register. The paste buffer can be filled with the +@code{copy}, @code{history} and @code{readbuf} commands. +Other registers can be filled with the @code{register}, @code{readreg} and +@code{paste} commands. +If @code{paste} is called with a second argument, the contents of the specified +registers is pasted into the named destination register rather than +the window. If @samp{.} is used as the second argument, the display's paste +buffer is the destination. +Note, that @code{paste} uses a wide variety of resources: Usually both, a +current window and a current display are required. But whenever a second +argument is specified no current window is needed. When the source specification +only contains registers (not the paste buffer) then there need not be a current +display (terminal attached), as the registers are a global resource. The +paste buffer exists once for every user. +@end deffn + +@deffn Command pastefont [state] +Tell screen to include font information in the paste buffer. The +default is not to do so. This command is especially usefull for +multi character fonts like kanji. +@end deffn + +@deffn Command slowpaste msec +(none)@* +Define the speed text is inserted by the @code{paste} command. +If the slowpaste value is nonzero text is written character by character. +@code{screen} will pause for @var{msec} milliseconds after each write +to allow the application to process the input. only use @code{slowpaste} if +your underlying system exposes flow control problems while pasting large +amounts of text. +@end deffn + +@deffn Command readreg [register [filename]] +(none)@* +Does one of two things, dependent on number of arguments: with zero or one +arguments it it duplicates the paste buffer contents into the register specified +or entered at the prompt. With two arguments it reads the contents of the named +file into the register, just as @code{readbuf} reads the screen-exchange file +into the paste buffer. +The following example will paste the system's password file into +the screen window (using register p, where a copy remains): + +@example +C-a : readreg p /etc/passwd +C-a : paste p +@end example +@end deffn + +@node Registers, Screen-Exchange, Paste, Copy and Paste +@section Registers + +@deffn Command copy_reg [key] +(none)@* +Removed. Use @code{readreg} instead. +@end deffn + +@deffn Command ins_reg [key] +(none)@* +Removed. Use @code{paste} instead. +@end deffn + +@deffn Command process [key] +(none)@* +Stuff the contents of the specified register into the @code{screen} +input queue. If no argument is given you are prompted for a +register name. The text is parsed as if it had been typed in from the user's +keyboard. This command can be used to bind multiple actions to a single key. +@end deffn + +@deffn Command register key string +(none)@* +Save the specified @var{string} to the register @var{key}. +@end deffn + +@deffn Command stuff string +(none)@* +Stuff the string @var{string} in the input buffer of the current window. +This is like the @code{paste} command, but with much less overhead. +You cannot paste large buffers with the @code{stuff} command. It is most +useful for key bindings. @xref{Bindkey} + +@end deffn + +@node Screen-Exchange, History, Registers, Copy and Paste +@section Screen-Exchange + +@deffn Command bufferfile [exchange-file] +(none)@* +Change the filename used for reading and writing with the paste buffer. +If the @var{exchange-file} parameter is omitted, @code{screen} reverts +to the default of @file{/tmp/screen-exchange}. The following example +will paste the system's password file into the screen window (using the +paste buffer, where a copy remains): + +@example +C-a : bufferfile /etc/passwd +C-a < C-a ] +C-a : bufferfile +@end example +@end deffn + +@kindex < +@deffn Command readbuf +(@kbd{C-a <})@* +Reads the contents of the current screen-exchange file into the paste buffer. +@end deffn + +@kindex = +@deffn Command removebuf +(@kbd{C-a =})@* +Unlinks the screen-exchange file. +@end deffn + +@kindex > +@deffn Command writebuf +(@kbd{C-a >})@* +Writes the contents of the paste buffer to a public accessible +screen-exchange file. This is thought of as a primitive means of +communication between @code{screen} users on the same host. See also +@kbd{C-a @key{ESC}} (@pxref{Copy}). +@end deffn + +@node History, , Screen-Exchange, Copy and Paste +@section History + +@kindex @{ +@deffn Command history +(@kbd{C-a @{})@* +Usually users work with a shell that allows easy access to previous +commands. For example, @code{csh} has the command @code{!!} to repeat +the last command executed. @code{screen} provides a primitive way of +recalling ``the command that started @dots{}'': You just type the first +letter of that command, then hit @kbd{C-a @{} and @code{screen} tries to +find a previous line that matches with the prompt character to the left +of the cursor. This line is pasted into this window's input queue. Thus +you have a crude command history (made up by the visible window and its +scrollback buffer). +@end deffn + +@node Subprocess Execution, Key Binding, Copy and Paste, Top +@chapter Subprocess Execution +Control Input or Output of a window by another filter process. +Use with care! + +@menu +* Exec:: The @code{exec} command syntax. +* Using Exec:: Weird things that filters can do. +@end menu + +@node Exec, Using Exec, , Subprocess Execution +@section Exec +@deffn Command exec @var{[[fdpat] newcommand [args ... ]]} +(none)@* +Run a unix subprocess (specified by an executable path @var{newcommand} and +its optional arguments) in the current window. The flow of data between +newcommand's stdin/stdout/stderr, the process already running (shell) and +screen itself (window) is controlled by the filedescriptor pattern @var{fdpat}. +This pattern is basically a three character sequence representing stdin, stdout +and stderr of newcommand. A dot (@code{.}) connects the file descriptor +to screen. An exclamation mark (@code{!}) causes the file descriptor to be +connected to the already running process. A colon (@code{:}) combines both. +@* +User input will go to newcommand unless newcommand requests the old process' +output (@var{fdpat}s first character is @samp{!} or @samp{:}) or a pipe symbol +(@samp{|}) is added to the end of @var{fdpat}. +@* +Invoking @code{exec} without arguments shows name and arguments of the currently +running subprocess in this window. +@* +When a subprocess is running the @code{kill} command will affect it instead of +the window's process. +@* +Refer to the postscript file @file{doc/fdpat.ps} for a confusing +illustration of all 21 possible combinations. Each drawing shows the digits +2, 1, 0 representing the three file descriptors of newcommand. The box +marked `W' is usual pty that has the application-process on its slave side. +The box marked `P' is the secondary pty that now has screen at its master +side. +@end deffn + +@node Using Exec, , Exec, Subprocess Execution +@section Using Exec +@noindent +Abbreviations: + +@itemize @bullet +@item +Whitespace between the word @samp{exec} and @var{fdpat} and the command name +can be omitted. + +@item +Trailing dots and a @var{fdpat} consisting only of dots can be omitted. + +@item +A simple @samp{|} is synonymous for the @samp{!..|} pattern. + +@item +The word @samp{exec} can be omitted when the @samp{|} abbreviation is used. + +@item +The word @samp{exec} can always be replaced by leading @samp{!}. +@end itemize + +@noindent +Examples: + +@table @code +@item !/bin/sh +@itemx exec /bin/sh +@itemx exec ... /bin/sh +Creates another shell in the same window, while the original shell is still +running. Output of both shells is displayed and user input is sent to the new +@file{/bin/sh}. + +@item !!stty 19200 +@itemx exec!stty 19200 +@itemx exec !.. stty 19200 +Set the speed of the window's tty. If your stty command operates on stdout, then +add another @samp{!}. This is a useful command, when a screen window is +directly connected to a serial line that needs to be configured. + +@item |less +@itemx exec !..| less +This adds a pager to the window output. The special character @samp{|} is +needed to give the user control over the pager although it gets its input from +the window's process. This works, because @samp{less} listens on stderr +(a behavior that @code{screen} would not expect without the @samp{|}) +when its stdin is not a tty. @code{Less} versions newer than 177 fail miserably +here; good old @code{pg} still works. + +@item !:sed -n s/.*Error.*/\007/p +Sends window output to both, the user and the sed command. The sed inserts an +additional bell character (oct. 007) to the window output seen by screen. +This will cause 'Bell in window x' messages, whenever the string @samp{Error} +appears in the window. +@end table + +@node Key Binding, Flow Control, Subprocess Execution, Top +@chapter Key Binding +@cindex key binding +@cindex binding + +You may disagree with some of the default bindings (I know I do). The +@code{bind} command allows you to redefine them to suit your +preferences. + +@menu +* Bind:: @code{bind} syntax. +* Bind Examples:: Using @code{bind}. +* Command Character:: The character used to start keyboard commands. +* Help:: Show current key bindings. +* Bindkey:: @code{bindkey} syntax. +* Bindkey Examples:: Some easy examples. +* Bindkey Control:: How to control the bindkey mechanism. +@end menu + +@node Bind, Bind Examples, , Key Binding +@section The @code{bind} command +@deffn Command bind key [command [args]] +(none)@* +Bind a command to a key. The @var{key} argument is either a single +character, a two-character sequence of the form @samp{^x} (meaning +@kbd{C-x}), a backslash followed by an octal number (specifying the +ASCII code of the character), or a backslash followed by a second +character, such as @samp{\^} or @samp{\\}. The argument can also be +quoted, if you like. If no further argument is given, any previously +established binding for this key is removed. The @var{command} +argument can be any command (@pxref{Command Index}). + +By default, most suitable commands are bound to one or more keys +(@pxref{Default Key Bindings}; for instance, the command to create a +new window is bound to @kbd{C-c} and @kbd{c}. The @code{bind} command +can be used to redefine the key bindings and to define new bindings. +@end deffn + +@node Bind Examples, Command Character, Bind, Key Binding +@section Examples of the @code{bind} command +@noindent +Some examples: + +@example +bind ' ' windows +bind ^f screen telnet foobar +bind \033 screen -ln -t root -h 1000 9 su +@end example + +@noindent +would bind the space key to the command that displays a list of windows +(so that the command usually invoked by @kbd{C-a C-w} would also be +available as @kbd{C-a space}), bind @kbd{C-f} to the command +``create a window with a TELNET connection to foobar'', and bind +@key{ESC} to the command that creates an non-login window with title +@samp{root} in slot #9, with a super-user shell and a scrollbackbuffer +of 1000 lines. + +@node Command Character, Help, Bind Examples, Key Binding +@section Command Character + +@deffn Command escape xy +(none)@* +Set the command character to @var{x} and the character generating a +literal command character to @var{y} (just like with the @samp{-e} +option). Each argument is either a single character, a two-character +sequence of the form @samp{^x} (meaning @kbd{C-x}), a backslash followed +by an octal number (specifying the ASCII code of the character), or a +backslash followed by a second character, such as @samp{\^} or +@samp{\\}. The default is @samp{^Aa}, but @samp{``} is recommended by +one of the authors. +@end deffn + +@deffn Command defescape xy +(none)@* +Set the default command characters. This is equivalent to the command +@code{escape} except that it is useful for multiuser sessions only. +In a multiuser session +@code{escape} changes the command character of the calling user, where +@code{defescape} changes the default command characters for users that +will be added later. +@end deffn + +@kindex a +@deffn Command meta +(@kbd{C-a a})@* +Send the command character (@kbd{C-a}) to the process in the current +window. The keystroke for this command is the second parameter to the +@samp{-e} command line switch (@pxref{Invoking Screen}), or the +@code{escape} .screenrc directive. +@end deffn + +@deffn Command command +(none)@* +This command has the same effect as typing the screen escape character +(@kbd{C-a}). It is probably only useful for key bindings. +@xref{Bindkey}. +@end deffn + +@node Help, Bindkey, Command Character, Key Binding +@section Help +@kindex ? +@deffn Command help +(@kbd{C-a ?})@* +Displays a help screen showing you all the key bindings. The first +pages list all the internal commands followed by their bindings. +Subsequent pages will display the custom commands, one command per key. +Press space when you're done reading each page, or return to exit early. +All other characters are ignored. +@xref{Default Key Bindings}. +@end deffn + +@node Bindkey, Bindkey Examples, Help, Key Binding +@section Bindkey +@deffn Command bindkey @var{[opts] [string [cmd args]]} +(none)@* +This command manages screen's input translation tables. Every +entry in one of the tables tells screen how to react if a certain +sequence of characters is encountered. There are three tables: +one that should contain actions programmed by the user, one for +the default actions used for terminal emulation and one for +screen's copy mode to do cursor movement. @xref{Input Translation} +for a list of default key bindings. + +If the @samp{-d} +option is given, bindkey modifies the default table, @samp{-m} +changes the copy mode table and with neither option the user +table is selected. The argument @samp{string} is the sequence of +characters to which an action is bound. This can either be a fixed +tring or a termcap keyboard capability name (selectable with the +@samp{-k} option). + +Some keys on a VT100 terminal can send a different +string if application mode is turned on (e.g. the cursor keys). +Such keys have two entries in the translation table. You can +select the application mode entry by specifying the @samp{-a} +option. + +The @samp{-t} option tells screen not to do intercharacter +timing. One cannot turn off the timing if a termcap capabilty is +used. + +@samp{cmd} can be any of screen's commands with an arbitrary +number of @samp{args}. If @samp{cmd} is omitted the keybinding is +removed from the table. +@end deffn + +@node Bindkey Examples, Bindkey Control,Bindkey, Key Binding +@section Bindkey Examples +@noindent +Here are some examples of keyboard bindings: + +@example +bindkey -d +@end example +@noindent +Show all of the default key bindings. The application mode entries +are marked with [A]. + +@example +bindkey -k k1 select 1 +@end example +@noindent +Make the "F1" key switch to window one. + +@example +bindkey -t foo stuff barfoo +@end example +@noindent +Make @samp{foo} an abrevation of the word @samp{barfoo}. Timeout is +disabled so that users can type slowly. + +@example +bindkey "\024" mapdefault +@end example +@noindent +This keybinding makes @samp{C-t} an escape character for keybindings. If +you did the above @samp{stuff barfoo} binding, you can enter the word +@samp{foo} by typing @samp{C-t foo}. If you want to insert a +@samp{C-t} you have to press the key twice (i.e. escape the escape +binding). + +@example +bindkey -k F1 command +@end example +@noindent +Make the F11 (not F1!) key an alternative screen +escape (besides @samp{C-a}). + +@node Bindkey Control, , Bindkey Examples, Key Binding +@section Bindkey Control +@deffn Command mapdefault +(none)@* +Tell screen that the next input character should only be looked up +in the default bindkey table. +@end deffn +@deffn Command mapnotnext +(none)@* +Like mapdefault, but don't even look in the default bindkey table. +@end deffn +@deffn Command maptimeout timo +(none)@* +Set the intercharacter timer for input sequence detection to a timeout +of @var{timo} ms. The default timeout is 300ms. Maptimeout with no +arguments shows the current setting. +@end deffn + +@node Flow Control, Termcap, Key Binding, Top +@chapter Flow Control +@cindex flow control + +@code{screen} can trap flow control characters or pass them to the +program, as you see fit. This is useful when your terminal wants to use +XON/XOFF flow control and you are running a program which wants to use +^S/^Q for other purposes (i.e. @code{emacs}). + +@menu +* Flow Control Summary:: The effect of @code{screen} flow control +* Flow:: Setting the flow control behavior +* XON/XOFF:: Sending XON or XOFF to the window +@end menu + +@node Flow Control Summary, Flow, , Flow Control +@section About @code{screen} flow control settings +Each window has a flow-control setting that determines how screen deals +with the XON and XOFF characters (and perhaps the interrupt character). +When flow-control is turned off, screen ignores the XON and XOFF +characters, which allows the user to send them to the current program by +simply typing them (useful for the @code{emacs} editor, for instance). +The trade-off is that it will take longer for output from a +``normal'' program to pause in response to an XOFF. With +flow-control turned on, XON and XOFF characters are used to immediately +pause the output of the current window. You can still send these +characters to the current program, but you must use the appropriate +two-character screen commands (typically @kbd{C-a q} (xon) and @kbd{C-a +s} (xoff)). The xon/xoff commands are also useful for typing C-s and +C-q past a terminal that intercepts these characters. + +Each window has an initial flow-control value set with either the +@samp{-f} option or the @code{defflow} command. By default the +windows are set to automatic flow-switching. It can then be toggled +between the three states 'fixed on', 'fixed off' and 'automatic' +interactively with the @code{flow} command bound to @kbd{C-a f}. + +The automatic flow-switching mode deals with flow control using the +TIOCPKT mode (like @code{rlogin} does). If the tty driver does not +support TIOCPKT, screen tries to determine the right mode based on the +current setting of the application keypad --- when it is enabled, +flow-control is turned off and visa versa. Of course, you can still +manipulate flow-control manually when needed. + +If you're running with flow-control enabled and find that pressing the +interrupt key (usually C-c) does not interrupt the display until another +6-8 lines have scrolled by, try running screen with the @samp{interrupt} +option (add the @samp{interrupt} flag to the @code{flow} command in your +.screenrc, or use the @samp{-i} command-line option). This causes the +output that @code{screen} has accumulated from the interrupted program +to be flushed. One disadvantage is that the virtual terminal's memory +contains the non-flushed version of the output, which in rare cases can +cause minor inaccuracies in the output. For example, if you switch +screens and return, or update the screen with @kbd{C-a l} you would see +the version of the output you would have gotten without @samp{interrupt} +being on. Also, you might need to turn off flow-control (or use +auto-flow mode to turn it off automatically) when running a program that +expects you to type the interrupt character as input, as the +@samp{interrupt} parameter only takes effect when flow-control is +enabled. If your program's output is interrupted by mistake, a simple +refresh of the screen with @kbd{C-a l} will restore it. Give each mode +a try, and use whichever mode you find more comfortable. + +@node Flow, XON/XOFF, Flow Control Summary, Flow Control +@section Flow +@deffn Command defflow fstate [interrupt] +(none)@* +Same as the @code{flow} command except that the default setting for new +windows is changed. Initial setting is `auto'. +Specifying @code{flow auto interrupt} has the same effect as the +command-line options @samp{-fa} and @samp{-i}. +Note that if @samp{interrupt} is enabled, all existing displays are +changed immediately to forward interrupt signals. +@end deffn + +@kindex f +@kindex C-f +@deffn Command flow [fstate] +(@kbd{C-a f}, @kbd{C-a C-f})@* +Sets the flow-control mode for this window to @var{fstate}, which can be +@samp{on}, @samp{off} or @samp{auto}. +Without parameters it cycles the current window's +flow-control setting. Default is set by `defflow'. +@end deffn + +@node XON/XOFF, , Flow, Flow Control +@section XON and XOFF +@kindex q +@kindex C-q +@deffn Command xon +(@kbd{C-a q}, @kbd{C-a C-q})@* +Send a ^Q (ASCII XON) to the program in the current window. Redundant +if flow control is set to @samp{off} or @samp{auto}. +@end deffn + +@kindex s +@kindex C-s +@deffn Command xoff +(@kbd{C-a s}, @kbd{C-a C-s})@* +Send a ^S (ASCII XOFF) to the program in the current window. +@end deffn + +@node Termcap, Message Line, Flow Control, Top +@chapter Termcap + +@code{screen} demands the most out of your terminal so that it can +perform its VT100 emulation most efficiently. These functions provide +means for tweaking the termcap entries for both your physical terminal +and the one simulated by @code{screen}. + +@menu +* Window Termcap:: Choosing a termcap entry for the window. +* Dump Termcap:: Write out a termcap entry for the window. +* Termcap Syntax:: The @code{termcap} and @code{terminfo} commands. +* Termcap Examples:: Uses for @code{termcap}. +* Special Capabilities:: Non-standard capabilities used by @code{screen}. +* Autonuke:: Flush unseen output +* Obuflimit:: Allow pending output when reading more +* Character Translation:: Emulating fonts and charsets. +@end menu + +@node Window Termcap, Dump Termcap, , Termcap +@section Choosing the termcap entry for a window +Usually @code{screen} tries to emulate as much of the VT100/ANSI +standard as possible. But if your terminal lacks certain capabilities +the emulation may not be complete. In these cases @code{screen} has to +tell the applications that some of the features are missing. This is no +problem on machines using termcap, because @code{screen} can use the +@code{$TERMCAP} variable to customize the standard screen termcap. + +But if you do a rlogin on another machine or your machine supports only +terminfo this method fails. Because of this @code{screen} offers a way +to deal with these cases. Here is how it works: + +When @code{screen} tries to figure out a terminal name for itself, it +first looks for an entry named @samp{screen.@var{term}}, where +@var{term} is the contents of your @code{$TERM} variable. If no such entry +exists, @code{screen} tries @samp{screen} (or @samp{screen-w}, if the +terminal is wide (132 cols or more)). If even this entry cannot be +found, @samp{vt100} is used as a substitute. + +The idea is that if you have a terminal which doesn't support an +important feature (e.g. delete char or clear to EOS) you can build a new +termcap/terminfo entry for @code{screen} (named +@samp{screen.@var{dumbterm}}) in which this capability has been +disabled. If this entry is installed on your machines you are able to +do a rlogin and still keep the correct termcap/terminfo entry. The +terminal name is put in the @code{$TERM} variable of all new windows. +@code{screen} also sets the @code{$TERMCAP} variable reflecting the +capabilities of the virtual terminal emulated. +Furthermore, the variable @code{$WINDOW} is set to the window number of each +window. + +The actual set of capabilities supported by the virtual terminal depends +on the capabilities supported by the physical terminal. If, for +instance, the physical terminal does not support underscore mode, +@code{screen} does not put the @samp{us} and @samp{ue} capabilities into +the window's @code{$TERMCAP} variable, accordingly. However, a minimum number +of capabilities must be supported by a terminal in order to run +@code{screen}; namely scrolling, clear screen, and direct cursor +addressing (in addition, @code{screen} does not run on hardcopy +terminals or on terminals that over-strike). + +Also, you can customize the @code{$TERMCAP} value used by @code{screen} by +using the @code{termcap} command, or by defining the variable +@code{$SCREENCAP} prior to startup. When the latter defined, its value will be +copied verbatim into each window's @code{$TERMCAP} variable. This can either +be the full terminal definition, or a filename where the terminal +@samp{screen} (and/or @samp{screen-w}) is defined. + +Note that @code{screen} honors the @code{terminfo} command if the system +uses the terminfo database rather than termcap. On such machines the +@code{$TERMCAP} variable has no effect and you must use the +@code{dumptermcap} command (@pxref{Dump Termcap}) and the @code{tic} +program to generate terminfo entries for @code{screen} windows. + +When the boolean @samp{G0} capability is present in the termcap entry +for the terminal on which @code{screen} has been called, the terminal +emulation of @code{screen} supports multiple character sets. This +allows an application to make use of, for instance, the VT100 graphics +character set or national character sets. The following control +functions from ISO 2022 are supported: @samp{lock shift G0} (@samp{SI}), +@samp{lock shift G1} (@samp{SO}), @samp{lock shift G2}, @samp{lock shift +G3}, @samp{single shift G2}, and @samp{single shift G3}. When a virtual +terminal is created or reset, the ASCII character set is designated as +@samp{G0} through @samp{G3}. When the @samp{G0} capability is present, +screen evaluates the capabilities @samp{S0}, @samp{E0}, and @samp{C0} if +present. @samp{S0} is the sequence the terminal uses to enable and start +the graphics character set rather than @samp{SI}. @samp{E0} is the +corresponding replacement for @samp{SO}. @samp{C0} gives a character by +character translation string that is used during semi-graphics mode. +This string is built like the @samp{acsc} terminfo capability. + +When the @samp{po} and @samp{pf} capabilities are present in the +terminal's termcap entry, applications running in a @code{screen} window +can send output to the printer port of the terminal. This allows a user +to have an application in one window sending output to a printer +connected to the terminal, while all other windows are still active (the +printer port is enabled and disabled again for each chunk of output). +As a side-effect, programs running in different windows can send output +to the printer simultaneously. Data sent to the printer is not +displayed in the window. + +Some capabilities are only put into the @code{$TERMCAP} variable of the virtual +terminal if they can be efficiently implemented by the physical +terminal. For instance, @samp{dl} (delete line) is only put into the +@code{$TERMCAP} variable if the terminal supports either delete line itself or +scrolling regions. Note that this may provoke confusion, when the +session is reattached on a different terminal, as the value of @code{$TERMCAP} +cannot be modified by parent processes. You can force @code{screen} to +include all capabilities in @code{$TERMCAP} with the @samp{-a} +command-line option (@pxref{Invoking Screen}). + +@node Dump Termcap, Termcap Syntax, Window Termcap, Termcap +@section Write out the window's termcap entry +@kindex . +@deffn Command dumptermcap +(@kbd{C-a .})@* +Write the termcap entry for the virtual terminal optimized for the +currently active window to the file @file{.termcap} in the user's +@file{$HOME/.screen} directory (or wherever @code{screen} stores its +sockets. @pxref{Files}). This termcap entry is identical to +the value of the environment variable @code{$TERMCAP} that is set up by +@code{screen} for each window. For terminfo based systems you will need +to run a converter like @code{captoinfo} and then compile the entry with +@code{tic}. +@end deffn + +@node Termcap Syntax, Termcap Examples, Dump Termcap, Termcap +@section The @code{termcap} command +@deffn Command termcap term terminal-tweaks [window-tweaks] +@deffnx Command terminfo term terminal-tweaks [window-tweaks] +@deffnx Command termcapinfo term terminal-tweaks [window-tweaks] +(none)@* +Use this command to modify your terminal's termcap entry without going +through all the hassles involved in creating a custom termcap entry. +Plus, you can optionally customize the termcap generated for the +windows. +You have to place these commands in one of the screenrc starup files, as +they are meaningless once the terminal emulator is booted. + +If your system uses the terminfo database rather than +termcap, @code{screen} will understand the @code{terminfo} command which +has the same effects as the @code{termcap} command. Two separate commands are +provided, as there are subtle syntactic differences, e.g. when parameter +interpolation (using @samp{%}) is required. Note that the termcap names of +the capabilities have to be used with the @code{terminfo} command. + +In many cases, where the arguments are valid in both terminfo and termcap +syntax, you can use the command @code{termcapinfo}, which is just a +shorthand for a pair of @code{termcap} and @code{terminfo} commands with +identical arguments. +@end deffn + +The first argument specifies which terminal(s) should be affected by +this definition. You can specify multiple terminal names by separating +them with @samp{|}s. Use @samp{*} to match all terminals and @samp{vt*} +to match all terminals that begin with @samp{vt}. + +Each @var{tweak} argument contains one or more termcap defines +(separated by @samp{:}s) to be inserted at the start of the appropriate +termcap entry, enhancing it or overriding existing values. The first +tweak modifies your terminal's termcap, and contains definitions that +your terminal uses to perform certain functions. Specify a null string +to leave this unchanged (e.g. ""). The second (optional) tweak modifies +all the window termcaps, and should contain definitions that screen +understands (@pxref{Virtual Terminal}). + +@node Termcap Examples, Special Capabilities, Termcap Syntax, Termcap +@section Termcap Examples +Some examples: + +@example +termcap xterm* xn:hs@@ +@end example + +@noindent +Informs @code{screen} that all terminals that begin with @samp{xterm} +have firm auto-margins that allow the last position on the screen to be +updated (xn), but they don't really have a status line (no 'hs' -- +append @samp{@@} to turn entries off). Note that we assume @samp{xn} for +all terminal names that start with @samp{vt}, but only if you don't +specify a termcap command for that terminal. + +@example +termcap vt* xn +termcap vt102|vt220 Z0=\E[?3h:Z1=\E[?3l +@end example + +@noindent +Specifies the firm-margined @samp{xn} capability for all terminals that +begin with @samp{vt}, and the second line will also add the +escape-sequences to switch into (Z0) and back out of (Z1) +132-character-per-line mode if this is a VT102 or VT220. (You must +specify Z0 and Z1 in your termcap to use the width-changing commands.) + +@example +termcap vt100 "" l0=PF1:l1=PF2:l2=PF3:l3=PF4 +@end example + +@noindent +This leaves your vt100 termcap alone and adds the function key labels to +each window's termcap entry. + +@example +termcap h19|z19 am@@:im=\E@@:ei=\EO dc=\E[P +@end example + +@noindent +Takes a h19 or z19 termcap and turns off auto-margins (am@@) and enables +the insert mode (im) and end-insert (ei) capabilities (the @samp{@@} in +the @samp{im} string is after the @samp{=}, so it is part of the +string). Having the @samp{im} and @samp{ei} definitions put into your +terminal's termcap will cause screen to automatically advertise the +character-insert capability in each window's termcap. Each window will +also get the delete-character capability (dc) added to its termcap, +which screen will translate into a line-update for the terminal (we're +pretending it doesn't support character deletion). + +If you would like to fully specify each window's termcap entry, you +should instead set the @code{$SCREENCAP} variable prior to running +@code{screen}. @xref{Virtual Terminal}, for the details of the +@code{screen} terminal emulation. @xref{Top, , Termcap, termcap, The +Termcap Manual}, for more information on termcap definitions. + +@node Special Capabilities, Autonuke, Termcap Examples, Termcap +@section Special Terminal Capabilities +@cindex terminal capabilities +@cindex capabilities +The following table describes all terminal capabilities that are +recognized by @code{screen} and are not in the termcap manual +(@pxref{Top, , Termcap, termcap, The Termcap Manual}). +You can place these capabilities in your termcap entries (in +@file{/etc/termcap}) or use them with the commands @code{termcap}, +@code{terminfo} and @code{termcapinfo} in your @code{screenrc} files. It is +often not possible to place these capabilities in the terminfo database. +@table @samp +@item LP +(bool)@* +Terminal has VT100 style margins (`magic margins'). Note that +this capability is obsolete --- @code{screen} now uses the standard +@samp{xn} instead. + +@item Z0 +(str)@* +Change width to 132 columns. + +@item Z1 +(str)@* +Change width to 80 columns. + +@item WS +(str)@* +Resize display. This capability has the desired width and height as +arguments. SunView(tm) example: @samp{\E[8;%d;%dt}. + +@item NF +(bool)@* +Terminal doesn't need flow control. Send ^S and ^Q direct to +the application. Same as @code{flow off}. The opposite of this +capability is @samp{nx}. + +@item G0 +(bool)@* +Terminal can deal with ISO 2022 font selection sequences. + +@item S0 +(str)@* +Switch charset @samp{G0} to the specified charset. Default +is @samp{\E(%.}. + +@item E0 +(str)@* +Switch charset @samp{G0} back to standard charset. Default +is @samp{\E(B}. + +@item C0 +(str)@* +Use the string as a conversion table for font 0. See +the @samp{ac} capability for more details. + +@item CS +(str)@* +Switch cursor keys to application mode. + +@item CE +(str)@* +Switch cursor keys to cursor mode. + +@item AN +(bool)@* +Enable autonuke for displays of this terminal type. +(@pxref{Autonuke}). + +@item OL +(num)@* +Set the output buffer limit. See the @samp{obuflimit} command +(@pxref{Obuflimit}) for more details. + +@item KJ +(str)@* +Set the kanji type of the terminal. Valid strings are @samp{jis}, +@samp{euc} and @samp{sjis}. + +@item AF +(str)@* +Change character forground color in an ANSI conform way. This +capability will almost always be set to @samp{\E[3%dm} +(@samp{\E[3%p1%dm} on terminfo machines). + +@item AB +(str)@* +Same as @samp{AF}, but change background color. + +@item AX +(bool)@* +Does understand ANSI set default fg/bg color (@samp{\E[39m / \E[49m}). + +@item XC +(str)@* +Describe a translation of characters to strings depending on the +current font. (@pxref{Character Translation}). +@end table + +@node Autonuke, Obuflimit, Special Capabilities, Termcap +@section Autonuke +@deffn Command autonuke @var{state} +(none)@* +Sets whether a clear screen sequence should nuke all the output +that has not been written to the terminal. @xref{Obuflimit}. +This property is set per display, not per window. +@end deffn + +@deffn Command defautonuke @var{state} +(none)@* +Same as the @code{autonuke} command except that the default setting for +new displays is also changed. Initial setting is @code{off}. +Note that you can use the special @code{AN} terminal capability if you +want to have a terminal type dependent setting. +@end deffn + +@node Obuflimit, Character Translation, Autonuke, Termcap +@section Obuflimit +@deffn Command obuflimit @var{[limit]} +(none)@* +If the output buffer contains more bytes than the specified limit, no +more data will be read from the windows. The default value is 256. If +you have a fast display (like @code{xterm}), you can set it to some +higher value. If no argument is specified, the current setting is displayed. +This property is set per display, not per window. +@end deffn + +@deffn Command defobuflimit @var{limit} +(none)@* +Same as the @code{obuflimit} command except that the default setting for new +displays is also changed. Initial setting is 256 bytes. Note that you can use +the special @code{OL} terminal capability if you want to have a terminal +type dependent limit. +@end deffn + +@node Character Translation, , Obuflimit, Termcap +@section Character Translation +@code{Screen} has a powerful mechanism to translate characters to +arbitrary strings depending on the current font and terminal type. +Use this feature if you want to work with a common standard character +set (say ISO8851-latin1) even on terminals that scatter the more +unusual characters over several national language font pages. + +Syntax: + +@example + XC=@var{<charset-mapping>}@{,,@var{<charset-mapping>}@} + @var{<charset-mapping>} := @var{<designator>}@var{<template>}@{,@var{<mapping>}@} + @var{<mapping>} := @var{<char-to-be-mapped>}@var{<template-arg>} +@end example + +The things in braces may be repeated any number of times. + +A @var{<charset-mapping>} tells screen how to map characters +in font @var{<designator>} (@samp{B}: Ascii, @samp{A}: UK, +@samp{K}: german, etc.) +to strings. Every @var{<mapping>} describes to what string a single +character will be translated. A template mechanism is used, as +most of the time the codes have a lot in common (for example +strings to switch to and from another charset). Each occurence +of @samp{%} in @var{<template>} gets substituted with the +@var{template-arg} +specified together with the character. If your strings are not +similar at all, then use @samp{%} as a template and place the full +string in @var{<template-arg>}. A quoting mechanism was added to make +it possible to use a real @samp{%}. The @samp{\} character quotes the +special characters @samp{\}, @samp{%}, and @samp{,}. + +Here is an example: + +@example + termcap hp700 'XC=B\E(K%\E(B,\304[,\326\\\\,\334]' +@end example + +This tells @code{screen}, how to translate ISOlatin1 (charset @samp{B}) +upper case umlaut characters on a @code{hp700} terminal that has a +german charset. @samp{\304} gets translated to +@samp{\E(K[\E(B} and so on. +Note that this line gets parsed *three* times before the internal +lookup table is built, therefore a lot of quoting is needed to +create a single @samp{\}. + +Another extension was added to allow more emulation: If a mapping +translates the unquoted @samp{%} char, it will be sent to the terminal +whenever screen switches to the corresponding @var{<designator>}. +In this +special case the template is assumed to be just @samp{%} because +the charset switch sequence and the character mappings normaly +haven't much in common. + +This example shows one use of the extension: +@example + termcap xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334' +@end example + +Here, a part of the german (@samp{K}) charset is emulated on an xterm. +If screen has to change to the @samp{K} charset, @samp{\E(B} will be +sent +to the terminal, i.e. the ASCII charset is used instead. The +template is just @samp{%}, so the mapping is straightforward: +@samp{[} to @samp{\304}, @samp{\} to @samp{\326}, and @samp{]} to +@samp{\334}. + +@node Message Line, Logging, Termcap, Top +@chapter The Message Line +@cindex message line + +@code{screen} displays informational messages and other diagnostics in a +@dfn{message line} at the bottom of the screen. If your terminal has a +status line defined in its termcap, screen will use this for displaying +its messages, otherwise the last line of the screen will be temporarily +overwritten and output will be momentarily interrupted. The message +line is automatically removed after a few seconds delay, but it can also +be removed early (on terminals without a status line) by beginning to +type. + +@menu +* Privacy Message:: Using the message line from your program. +* Hardware Status Line:: Use the terminal's hardware status line. +* Last Message:: Redisplay the last message. +* Message Wait:: Control how long messages are displayed. +@end menu + +@node Privacy Message, Hardware Status Line, , Message Line +@section Using the message line from your program +The message line facility can be used by an application running in the +current window by means of the ANSI @dfn{Privacy message} control +sequence. For instance, from within the shell, try something like: + +@example +echo "@value{esc}^Hello world from window $WINDOW@value{esc}\" +@end example + +where @samp{@value{esc}} is ASCII ESC and @samp{^} is a literal caret or +up-arrow. + +@node Hardware Status Line, Last Message, Privacy Message, Message Line +@section Hardware Status Line +@deffn Command hardstatus [state] +(none)@* +Toggles the use of the terminal's hardware status line. If @samp{on}, +@code{screen} will use this facility to display one line messages. +Otherwise these messages are overlayed in reverse video mode at the +display line. Note that the hardstatus feature can only be used if the +termcap/terminfo capabilities "hs", "ts", "fs" and "ds" are set +properly. Default is @samp{on} whenever the "hs" capability is present. +@end deffn + +@node Last Message, Message Wait, Hardware Status Line, Message Line +@section Display Last Message +@kindex m +@kindex C-m +@deffn Command lastmsg +(@kbd{C-a m}, @kbd{C-a C-m})@* +Repeat the last message displayed in the message line. Useful if you're +typing when a message appears, because (unless your terminal has a +hardware status line) the message goes away when you press a key. +@end deffn + +@node Message Wait, , Last Message, Message Line +@section Message Wait +@deffn Command msgminwait sec +(none)@* +Defines the time @code{screen} delays a new message when another is +currently displayed. Defaults to 1 second. +@end deffn + +@deffn Command msgwait sec +(none)@* +Defines the time a message is displayed, if @code{screen} is not +disturbed by other activity. Defaults to 5 seconds. +@end deffn + +@node Logging, Startup, Message Line, Top +@chapter Logging + +This section describes the commands for keeping a record of your session. + +@menu +* Hardcopy:: Dump the current screen to a file +* Log:: Log the output of a window to a file +@end menu + +@node Hardcopy, Log, , Logging +@section hardcopy +@kindex h +@kindex C-h +@deffn Command hardcopy +(@kbd{C-a h}, @kbd{C-a C-h})@* +Writes out the current display contents to the file @file{hardcopy.@var{n}} +in the window's default directory, where @var{n} is the number of the +current window. This either appends or overwrites the file if it +exists, as determined by the @code{hardcopy_append} command. +@end deffn + +@deffn Command hardcopy_append state +(none)@* +If set to @samp{on}, @code{screen} will append to the +@file{hardcopy.@var{n}} files created by the command @code{hardcopy}; +otherwise, these files are overwritten each time. +@end deffn + +@deffn Command hardcopydir directory +(none)@* +Defines a directory where hardcopy files will be placed. +If unset hardcopys are dumped in screen's current working +directory. +@end deffn + +@node Log, , Hardcopy, Logging +@section log +@kindex H +@deffn Command log [state] +(@kbd{C-a H})@* +Begins/ends logging of the current window to the file +@file{screenlog.@var{n}} in the window's default directory, where +@var{n} is the number of the current window. +This filename can be changed with the @samp{logfile} command. +If no parameter is given, +the logging state is toggled. The session log is +appended to the previous contents of the file if it already exists. The +current contents and the contents of the scrollback history are not +included in the session log. Default is @samp{off}. +@end deffn + +@deffn Command logfile filename +(none)@* +Defines the name the logfiles will get. The default is @samp{screenlog.%n}. +@end deffn + +@node Startup, Miscellaneous, Logging, Top +@chapter Startup + +This section describes commands which are only useful in the +@file{.screenrc} file, for use at startup. + +@menu +* echo:: Display a message. +* sleep:: Pause execution of the @file{.screenrc}. +* Startup Message:: Control display of the copyright notice. +@end menu + +@node echo, sleep, , Startup +@section echo +@deffn Command echo [@t{-n}] message +(none)@* +The echo command may be used to annoy @code{screen} users with a +'message of the day'. Typically installed in a global screenrc. +The option @samp{-n} may be used to suppress the line feed. +See also @code{sleep}. +Echo is also useful for online checking of environment variables. +@end deffn + +@node sleep, Startup Message, echo, Startup +@section sleep +@deffn Command sleep num +(none)@* +This command will pause the execution of a .screenrc file for @var{num} +seconds. Keyboard activity will end the sleep. It may be used to give +users a chance to read the messages output by @code{echo}. +@end deffn + +@node Startup Message, , sleep, Startup +@section Startup Message +@deffn Command startup_message state +(none)@* +Select whether you want to see the copyright notice during startup. +Default is @samp{on}, as you probably noticed. +@end deffn + +@node Miscellaneous, Environment, Startup, Top +@chapter Miscellaneous commands + +The commands described here do not fit well under any of the other +categories. + +@menu +* At:: Execute a command at other displays or windows. +* Break:: Send a break signal to the window. +* Debug:: Suppress/allow debugging output. +* License:: Display the disclaimer page. +* Nethack:: Use @code{nethack}-like error messages. +* Number:: Change the current window's number. +* Silence:: Notify on inactivity. +* Time:: Display the time and load average. +* Version:: Display the version of @code{screen}. +* Zombie:: Keep dead windows. +* Printcmd:: Set command for VT100 printer port emulation. +* Sorendition:: Change the text highlighting method. +@end menu + +@node At, Break, , Miscellaneous +@section At +@deffn Command at [identifier][#|*|%] command [args] +(none)@* +Execute a command at other displays or windows as if it had been entered there. +@code{At} changes the context (the `current window' or `current display' +setting) of the command. If the first parameter describes a non-unique context, +the command will be executed multiple times. If the first parameter is of the +form @samp{@var{identifier}*} then identifier is matched against user names. +The command is executed once for each display of the selected user(s). +If the first parameter is of the form @samp{@var{identifier}%} identifier is +matched against displays. Displays are named after the ttys they attach. The +prefix @samp{/dev/} or @samp{/dev/tty} may be omitted from the identifier. +If @var{identifier} has a @code{#} or nothing appended it is matched against +window numbers and titles. Omitting an identifier in front of the @code{#}, +@code{*} or @code{%} character selects all users, displays or windows because +a prefix-match is performed. Note that on the affected display(s) a short +message will describe what happened. Caution: Permission is checked for the +owners or the affected display(s), not for the initiator of the `at' command. +@end deffn + +@node Break, Debug, At, Miscellaneous +@section Break +@deffn Command break [duration] +(none)@* +Send a break signal for @var{duration}*0.25 seconds to this window. +Most useful if a character device is attached to the window rather than +a shell process. +@end deffn + +@deffn Command pow_break +(none)@* +Reopen the window's terminal line and send a break condition. +@end deffn + +@node Debug, License, Break, Miscellaneous +@section Debug +@deffn Command debug [on|off] +(none)@* +Turns runtime debugging on or off. If @code{screen} has been compiled with +option @code{-DDEBUG} debugging is available and is turned on per default. +Note that this command only affects debugging output from the main +@samp{SCREEN} process. +@end deffn + +@node License, Nethack, Debug, Miscellaneous +@section License +@deffn Command license +(none)@* +Display the disclaimer page. This is done whenever @code{screen} is +started without options, which should be often enough. +@end deffn + +@node Nethack, Number, License, Miscellaneous +@section Nethack +@deffn Command nethack state +(none)@* +Changes the kind of error messages used by @code{screen}. When you are +familiar with the game @code{nethack}, you may enjoy the nethack-style +messages which will often blur the facts a little, but are much funnier +to read. Anyway, standard messages often tend to be unclear as well. + +This option is only available if @code{screen} was compiled with the +NETHACK flag defined (@pxref{Installation}). The default setting is then +determined by the presence of the environment variable +@code{$NETHACKOPTIONS}. +@end deffn + +@node Number, Silence, Nethack, Miscellaneous +@section Number +@kindex N +@deffn Command number @var{[n]} +(@kbd{C-a N})@* +Change the current window's number. If the given number @var{n} is already +used by another window, both windows exchange their numbers. If no argument is +specified, the current window number (and title) is shown. +@end deffn + +@node Silence, Time, Number, Miscellaneous +@section Silence +@deffn Command silence @var{[state|sec]} +(none)@* +Toggles silence monitoring of windows. When silence is turned on and an +affected window is switched into the background, you will receive the +silence notification message in the status line after a specified period +of inactivity (silence). The default timeout can be changed with the +@code{silencewait} command or by specifying a number of seconds instead of +@code{on} or @code{off}. Silence is initially off for all windows. +@end deffn + +@deffn Command silencewait @var{seconds} +(none)@* +Define the time that all windows monitored for silence should wait +before displaying a message. Default is 30 seconds. +@end deffn + +@node Time, Version, Silence, Miscellaneous +@section Time +@kindex t +@kindex C-t +@deffn Command time +(@kbd{C-a t}, @kbd{C-a C-t})@* +Uses the message line to display the time of day, the host name, and the +load averages over 1, 5, and 15 minutes (if this is available on your +system). For window-specific information use @code{info} (@pxref{Info}). +@end deffn + +@node Version, Zombie, Time, Miscellaneous +@section Version +@kindex v +@deffn Command version +(@kbd{C-a v})@* +Display the version and modification date in the message line. +@end deffn + +@node Zombie, Printcmd, Version, Miscellaneous +@section Zombie +@deffn Command zombie @var{[keyx]} +@deffnx Command defzombie @var{[keyx]} +(none)@* +Per default windows are removed from the window list as soon as the +windows process (e.g. shell) exits. When a string of two keys is +specified to the zombie command, `dead' windows will remain in the list. +The @code{kill} kommand may be used to remove the window. Pressing the first key +in the dead window has the same effect. Pressing the second key, however, +screen will attempt to resurrect the window. The process that was initially +running in the window will be launched again. Calling @code{zombie} without +parameters will clear the zombie setting, thus making windows disappear when +the process terminates. + +As the zombie setting is affected globally for all windows, this command +should only be called @code{defzombie}. Until we need this as a per window +setting, the commands @code{zombie} and @code{defzombie} are synonymous. +@end deffn + +@node Printcmd, Sorendition, Zombie, Miscellaneous +@section Printcmd +@deffn Command printcmd @var{[cmd]} +(none)@* +If @var{cmd} is not an empty string, screen will not use the terminal +capabilities @code{po/pf} for printing if it detects an ansi print +sequence @code{ESC [ 5 i}, but pipe the output into @var{cmd}. +This should normally be a command like @samp{lpr} or +@samp{cat > /tmp/scrprint}. +@code{Printcmd} without an argument displays the current setting. +The ansi sequence @code{ESC \} ends printing and closes the pipe. + +Warning: Be careful with this command! If other user have write +access to your terminal, they will be able to fire off print commands. +@end deffn + +@node Sorendition, , Printcmd, Miscellaneous +@section Sorendition +@deffn Command sorendition @var{[attr [color]]} +(none)@* +Change the way screen does highlighting for text marking and printing +messages. +@var{attr} is a hexadecimal number and describes the attributes +(inverse, underline, ...) the text will get. @var{color} +is a 2 digit number and changes the +forground/background of the highlighted text. +Some knowledge of screen's internal character representation is +needed to make the characters appear in the desired way. The default +is currently @samp{10 99} (standout, default colors). +@end deffn + +@node Environment, Files, Miscellaneous, Top +@chapter Environment Variables +@cindex environment + +@table @code +@item COLUMNS +Number of columns on the terminal (overrides termcap entry). + +@item HOME +Directory in which to look for .screenrc. + +@item ISCREENRC +Alternate user screenrc file. + +@item LINES +Number of lines on the terminal (overrides termcap entry). + +@item LOCKPRG +Screen lock program. + +@item NETHACKOPTIONS +Turns on @code{nethack} option. + +@item PATH +Used for locating programs to run. + +@item SCREENCAP +For customizing a terminal's @code{TERMCAP} value. + +@item SCREENDIR +Alternate socket directory. + +@item SCREENRC +Alternate user screenrc file. + +@item SHELL +Default shell program for opening windows (default @file{/bin/sh}). + +@item STY +Alternate socket name. If @code{screen} is invoked, and the environment variable +@code{STY} is set, then it creates only a window in the running @code{screen} +session rather than starting a new session. + +@item SYSSCREENRC +Alternate system screenrc file. + +@item TERM +Terminal name. + +@item TERMCAP +Terminal description. +@end table + +@node Files, Credits, Environment, Top +@chapter Files Referenced +@cindex files + +@table @file +@item .../screen-3.?.??/etc/screenrc +@itemx .../screen-3.?.??/etc/etcscreenrc +Examples in the @code{screen} distribution package for private and +global initialization files. + +@item @code{$SYSSCREENRC} +@itemx /local/etc/screenrc +@code{screen} initialization commands + +@item @code{$ISCREENRC} +@itemx @code{$SCREENRC} +@itemx @code{$HOME}/.iscreenrc +@itemx @code{$HOME}/.screenrc +Read in after /local/etc/screenrc + +@item @code{$ISCREENDIR}/S-@var{login} +@itemx @code{$SCREENDIR}/S-@var{login} + +@item /local/screens/S-@var{login} +Socket directories (default) + +@item /usr/tmp/screens/S-@var{login} +Alternate socket directories. + +@item @var{socket directory}/.termcap +Written by the @code{dumptermcap} command + +@item /usr/tmp/screens/screen-exchange or +@itemx /tmp/screen-exchange +@code{screen} interprocess communication buffer + +@item hardcopy.[0-9] +Screen images created by the hardcopy command + +@item screenlog.[0-9] +Output log files created by the log command + +@item /usr/lib/terminfo/?/* or +@itemx /etc/termcap +Terminal capability databases + +@item /etc/utmp +Login records + +@item @code{$LOCKPRG} +Program for locking the terminal. +@end table + +@node Credits, Bugs, Files, Top +@chapter Credits + +@noindent +Authors @* +======= + +Originally created by Oliver Laumann, this latest version was +produced by Wayne Davison, Juergen Weigert and Michael Schroeder. + +@noindent +Contributors @* +============ + +@example + Ken Beal (kbeal@@amber.ssd.csd.harris.com), + Rudolf Koenig (rfkoenig@@informatik.uni-erlangen.de), + Toerless Eckert (eckert@@informatik.uni-erlangen.de), + Wayne Davison (davison@@borland.com), + Patrick Wolfe (pat@@kai.com, kailand!pat), + Bart Schaefer (schaefer@@cse.ogi.edu), + Nathan Glasser (nathan@@brokaw.lcs.mit.edu), + Larry W. Virden (lvirden@@cas.org), + Howard Chu (hyc@@hanauma.jpl.nasa.gov), + Tim MacKenzie (tym@@dibbler.cs.monash.edu.au), + Markku Jarvinen (mta@@@{cc,cs,ee@}.tut.fi), + Marc Boucher (marc@@CAM.ORG), + Doug Siebert (dsiebert@@isca.uiowa.edu), + Ken Stillson (stillson@@tsfsrv.mitre.org), + Ian Frechett (frechett@@spot.Colorado.EDU), + Brian Koehmstedt (bpk@@gnu.ai.mit.edu), + Don Smith (djs6015@@ultb.isc.rit.edu), + Frank van der Linden (vdlinden@@fwi.uva.nl), + Martin Schweikert (schweik@@cpp.ob.open.de), + David Vrona (dave@@sashimi.lcu.com), + E. Tye McQueen (tye%spillman.UUCP@@uunet.uu.net), + Matthew Green (mrgreen@@mame.mu.oz.au), + Christopher Williams (cgw@@unt.edu), + Matt Mosley (mattm@@access.digex.net), + Gregory Neil Shapiro (gshapiro@@wpi.WPI.EDU), + Jason Merrill (jason@@jarthur.Claremont.EDU). +@end example + +@noindent +Version @* +======= + +This manual describes version @value{version} of the @code{screen} +program. Its roots are a merge of a custom version 2.3PR7 by Wayne +Davison and several enhancements to Oliver Laumann's version 2.0. +Note that all versions numbered 2.x are copyright by Oliver Laumann. + +See also @xref{Availability}. + +@node Bugs, Installation, Credits, Top +@chapter Bugs +@cindex bugs + +Just like any other significant piece of software, @code{screen} has a +few bugs and missing features. Please send in a bug report if you have +found a bug not mentioned here. + +@menu +* Known Bugs:: Problems we know about. +* Reporting Bugs:: How to contact the maintainers. +* Availability:: Where to find the lastest screen version. +@end menu + +@node Known Bugs, Reporting Bugs, , Bugs +@section Known Bugs + +@itemize @bullet +@item +@samp{dm} (delete mode) and @samp{xs} are not handled correctly (they +are ignored). @samp{xn} is treated as a magic-margin indicator. + +@item +@code{screen} has no clue about double-high or double-wide characters. +But this is the only area where @code{vttest} is allowed to fail. + +@item +It is not possible to change the environment variable @code{$TERMCAP} +when reattaching under a different terminal type. + +@item +The support of terminfo based systems is very limited. Adding extra +capabilities to @code{$TERMCAP} may not have any effects. + +@item +@code{screen} does not make use of hardware tabs. + +@item +@code{screen} must be installed setuid root in order to be able to +correctly change the owner of the tty device file for each window. +Special permission may also be required to write the file +@file{/etc/utmp}. + +@item +Entries in @file{/etc/utmp} are not removed when @code{screen} is killed +with SIGKILL. This will cause some programs (like "w" or "rwho") to +advertise that a user is logged on who really isn't. + +@item +@code{screen} may give a strange warning when your tty has no utmp +entry. + +@item +When the modem line was hung up, @code{screen} may not automatically +detach (or quit) unless the device driver sends a HANGUP signal. +To detach such a @code{screen} session use the -D or -d command +line option. + +@item +A weird imagination is most useful to gain full advantage of all the +features. +@end itemize + +@node Reporting Bugs, Availability, Known Bugs, Bugs +@section Reporting Bugs +@cindex bug report + +If you find a bug in @code{Screen}, please send electronic mail to +@w{@samp{screen@@uni-erlangen.de}}, and also to +@w{@samp{bug-gnu-utils@@prep.ai.mit.edu}}. Include the version number +of @code{Screen} which you are using. Also include in your message the +hardware and operating system, the compiler used to compile, a +description of the bug behavior, and the conditions that triggered the +bug. Please recompile @code{screen} with the @samp{-DDEBUG -DTMPTEST} options +enabled, reproduce the bug, and have a look at the debug output written to +the directory @file{/tmp/debug}. If necessary quote suspect passages from the +debug output and show the contents of your @file{config.h} if it matters. + +@node Availability, , Reporting Bugs, Bugs +@section Availability +@cindex availability + +@code{Screen} is available under the @code{GNU} copyleft. + +The latest official release of @code{screen} available via anonymous +ftp from @samp{prep.ai.mit.edu}, @samp{nic.funet.fi} or any other +@code{GNU} distribution site. The latest beta testing release of +@code{screen} is available from @samp{ftp.uni-erlangen.de +(131.188.1.43)}, in the directory @file{pub/utilities/screen}. + +@node Installation, Concept Index, Bugs, Top +@chapter Installation +@cindex installation + +Since @code{screen} uses pseudo-ttys, the select system call, and +UNIX-domain sockets/named pipes, it will not run under a system that +does not include these features of 4.2 and 4.3 BSD UNIX. + +@menu +* Socket Directory:: Where screen stores its handle. +* Compiling Screen:: +@end menu + +@node Socket Directory, +@section Socket Directory +@cindex socket directory + +The socket directory defaults either to @file{$HOME/.screen} or simply to +@file{/tmp/screens} or preferably to @file{/usr/local/screens} chosen at +compile-time. If @code{screen} is installed +setuid root, then the administrator should compile screen with an +adequate (not NFS mounted) @code{SOCKDIR}. If @code{screen} is not +running setuid-root, the user can specify any mode 777 directory in the +environment variable @code{$SCREENDIR}. + +@node Compiling Screen, , Socket Directory, Installation +@section Compiling Screen +@cindex compiling screen + +To compile and install screen: + +The @code{screen} package comes with a @code{GNU Autoconf} configuration +script. Before you compile the package run + +@center @code{sh ./configure} + +This will create a @file{config.h} and @file{Makefile} for your machine. +If @code{configure} fails for some reason, then look at the examples and +comments found in the @file{Makefile.in} and @file{config.h.in} templates. +Rename @file{config.status} to @file{config.status.@var{machine}} when +you want to keep configuration data for multiple architectures. Running +@code{sh ./config.status.@var{machine}} recreates your configuration +significantly faster than rerunning @code{configure}. +@* +Read through the "User Configuration" section of @file{config.h}, and verify +that it suits your needs. +A comment near the top of this section explains why it's best to +install screen setuid to root. +Check for the place for the global @file{screenrc}-file and for the socket +directory. +@* +Check the compiler used in @file{Makefile}, the prefix path where to install +@code{screen}. Then run + +@center @code{make} + +If @code{make} fails to produce one of the files @file{term.h}, @file{comm.h} +or @file{tty.c}, then use @code{@var{filename.x}.dist} instead. +For additional information about installation of @code{screen} refer to the +file @file{INSTALLATION}, coming with this package. + +@node Concept Index, Command Index, Installation, Top +@unnumbered Concept Index + +@printindex cp + +@node Command Index, Keystroke Index, Concept Index, Top +@unnumbered Command Index + +This is a list of all the commands supported by @code{screen}. + +@printindex fn + +@node Keystroke Index, , Command Index, Top +@unnumbered Keystroke Index + +This is a list of the default key bindings. + +The leading escape character (@pxref{Command Character}) has been omitted +from the key sequences, since it is the same for all bindings. + +@printindex ky + +@shortcontents +@contents +@bye + |