|
|
1.1 ! root 1: .\" Copyright (c) 1980 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)termcap.5 6.5 (Berkeley) 9/30/87 ! 6: .\" ! 7: .ie n \{\ ! 8: . ds lq \&"\" ! 9: . ds rq \&"\" ! 10: .\} ! 11: .el \{\ ! 12: . ds rq '' ! 13: . ds lq `` ! 14: .\} ! 15: .tr || ! 16: .tr *\(** ! 17: .hw trans-parently ! 18: .TH TERMCAP 5 "1 November 1985" ! 19: .UC ! 20: .SH NAME ! 21: termcap \- terminal capability data base ! 22: .SH SYNOPSIS ! 23: /etc/termcap ! 24: .SH DESCRIPTION ! 25: .I Termcap\^ ! 26: is a data base describing terminals, ! 27: used, ! 28: .IR e.g. , ! 29: by ! 30: .IR vi\^ (1) ! 31: and ! 32: .IR curses\^ (3X). ! 33: Terminals are described in ! 34: .I termcap\^ ! 35: by giving a set of capabilities that they have and by describing ! 36: how operations are performed. ! 37: Padding requirements and initialization sequences ! 38: are included in ! 39: .IR termcap\^ . ! 40: .PP ! 41: Entries in ! 42: .I termcap\^ ! 43: consist of a number of `:'-separated fields. ! 44: The first entry for each terminal gives the names that are known for the ! 45: terminal, separated by `|' characters. ! 46: The first name is always two characters ! 47: long and is used by older systems which store the terminal type ! 48: in a 16-bit word in a system-wide data base. ! 49: The second name given is the most common abbreviation for the terminal, ! 50: the last name given should be a long name fully identifying the terminal, ! 51: and all others are understood as synonyms for the terminal name. ! 52: All names but the first and last ! 53: should be in lower case and contain no blanks; ! 54: the last name may well contain ! 55: upper case and blanks for readability. ! 56: .PP ! 57: Terminal names (except for the last, verbose entry) ! 58: should be chosen using the following conventions. ! 59: The particular piece of hardware making up the terminal ! 60: should have a root name chosen, thus \*(lqhp2621\*(rq. ! 61: This name should not contain hyphens. ! 62: Modes that the hardware can be in ! 63: or user preferences ! 64: should be indicated by appending a hyphen and an indicator of the mode. ! 65: Therefore, a \*(lqvt100\*(rq in 132-column mode would be \*(lqvt100-w\*(rq. ! 66: The following suffixes should be used where possible: ! 67: .sp ! 68: .ev ! 69: .ta ! 70: .ta \w'\fBSuffix\fP\ \ \ 'u +\w'With automatic margins (usually default)\ \ 'u ! 71: .nf ! 72: .if t \{\ ! 73: .nr Xx \n(.lu-\n(.i-\w'\fBSuffix\fP\ \ \ With automatic margins (usually default)\ \ vt100-am'u ! 74: .in +\n(Xxu/2u ! 75: .\} ! 76: \fBSuffix Meaning Example\fP ! 77: -w Wide mode (more than 80 columns) vt100-w ! 78: -am With automatic margins (usually default) vt100-am ! 79: -nam Without automatic margins vt100-nam ! 80: -\fIn\fP Number of lines on the screen aaa-60 ! 81: -na No arrow keys (leave them in local) concept100-na ! 82: -\fIn\^\fPp Number of pages of memory concept100-4p ! 83: -rv Reverse video concept100-rv ! 84: .fi ! 85: .ev ! 86: .SH CAPABILITIES ! 87: .PP ! 88: The characters in the ! 89: .I Notes ! 90: field in the table have the following meanings ! 91: (more than one may apply to a capability): ! 92: .PP ! 93: .ev ! 94: .ta ! 95: .ta \w'N\ \ \ 'u ! 96: .nf ! 97: N indicates numeric parameter(s) ! 98: P indicates that padding may be specified ! 99: * indicates that padding may be based on the number of lines affected ! 100: o indicates capability is obsolete ! 101: .fi ! 102: .ev ! 103: .PP ! 104: \*(lqObsolete\*(rq capabilities have no ! 105: .I terminfo\^ ! 106: equivalents, ! 107: since they were considered useless, ! 108: or are subsumed by other capabilities. ! 109: New software should not rely on them at all. ! 110: .PP ! 111: .nf ! 112: .ta \w'\fBName \fP'u +\w'\fBType \fP'u +\w'\fBNotes \fP'u ! 113: \fBName Type Notes Description\fP ! 114: ae str (P) End alternate character set ! 115: AL str (NP*) Add \fIn\^\fP new blank lines ! 116: al str (P*) Add new blank line ! 117: am bool Terminal has automatic margins ! 118: as str (P) Start alternate character set ! 119: bc str (o) Backspace if not \fB^H\fP ! 120: bl str (P) Audible signal (bell) ! 121: bs bool (o) Terminal can backspace with \fB^H\fP ! 122: bt str (P) Back tab ! 123: bw bool \fBle\fP (backspace) wraps from column 0 to last column ! 124: CC str Terminal settable command character in prototype ! 125: cd str (P*) Clear to end of display ! 126: ce str (P) Clear to end of line ! 127: ch str (NP) Set cursor column (horizontal position) ! 128: cl str (P*) Clear screen and home cursor ! 129: CM str (NP) Memory-relative cursor addressing ! 130: cm str (NP) Screen-relative cursor motion ! 131: co num Number of columns in a line (See BUGS section below) ! 132: cr str (P) Carriage return ! 133: cs str (NP) Change scrolling region (VT100) ! 134: ct str (P) Clear all tab stops ! 135: cv str (NP) Set cursor row (vertical position) ! 136: da bool Display may be retained above the screen ! 137: dB num (o) Milliseconds of \fBbs\fP delay needed (default 0) ! 138: db bool Display may be retained below the screen ! 139: DC str (NP*) Delete \fIn\^\fP characters ! 140: dC num (o) Milliseconds of \fBcr\fP delay needed (default 0) ! 141: dc str (P*) Delete character ! 142: dF num (o) Milliseconds of \fBff\fP delay needed (default 0) ! 143: DL str (NP*) Delete \fIn\^\fP lines ! 144: dl str (P*) Delete line ! 145: dm str Enter delete mode ! 146: dN num (o) Milliseconds of \fBnl\fP delay needed (default 0) ! 147: DO str (NP*) Move cursor down \fIn\^\fP lines ! 148: do str Down one line ! 149: ds str Disable status line ! 150: dT num (o) Milliseconds of horizontal tab delay needed (default 0) ! 151: dV num (o) Milliseconds of vertical tab delay needed (default 0) ! 152: ec str (NP) Erase \fIn\^\fP characters ! 153: ed str End delete mode ! 154: ei str End insert mode ! 155: eo bool Can erase overstrikes with a blank ! 156: EP bool (o) Even parity ! 157: es bool Escape can be used on the status line ! 158: ff str (P*) Hardcopy terminal page eject ! 159: fs str Return from status line ! 160: gn bool Generic line type (\fIe.g.\fP dialup, switch) ! 161: hc bool Hardcopy terminal ! 162: HD bool (o) Half-duplex ! 163: hd str Half-line down (forward 1/2 linefeed) ! 164: ho str (P) Home cursor ! 165: hs bool Has extra \*(lqstatus line\*(rq ! 166: hu str Half-line up (reverse 1/2 linefeed) ! 167: hz bool Cannot print ~s (Hazeltine) ! 168: i1-i3 str Terminal initialization strings (\fIterminfo\^\fP only) ! 169: IC str (NP*) Insert \fIn\^\fP blank characters ! 170: ic str (P*) Insert character ! 171: if str Name of file containing initialization string ! 172: im str Enter insert mode ! 173: in bool Insert mode distinguishes nulls ! 174: iP str Pathname of program for initialization (\fIterminfo\^\fP only) ! 175: ip str (P*) Insert pad after character inserted ! 176: is str Terminal initialization string (\fItermcap\^\fP only) ! 177: it num Tabs initially every \fIn\^\fP positions ! 178: K1 str Sent by keypad upper left ! 179: K2 str Sent by keypad upper right ! 180: K3 str Sent by keypad center ! 181: K4 str Sent by keypad lower left ! 182: K5 str Sent by keypad lower right ! 183: k0-k9 str Sent by function keys 0-9 ! 184: kA str Sent by insert-line key ! 185: ka str Sent by clear-all-tabs key ! 186: kb str Sent by backspace key ! 187: kC str Sent by clear-screen or erase key ! 188: kD str Sent by delete-character key ! 189: kd str Sent by down-arrow key ! 190: kE str Sent by clear-to-end-of-line key ! 191: ke str Out of \*(lqkeypad transmit\*(rq mode ! 192: kF str Sent by scroll-forward/down key ! 193: kH str Sent by home-down key ! 194: kh str Sent by home key ! 195: kI str Sent by insert-character or enter-insert-mode key ! 196: kL str Sent by delete-line key ! 197: kl str Sent by left-arrow key ! 198: kM str Sent by insert key while in insert mode ! 199: km bool Has a \*(lqmeta\*(rq key (shift, sets parity bit) ! 200: kN str Sent by next-page key ! 201: kn num (o) Number of function (\fBk0\fP\-\fBk9\fP) keys (default 0) ! 202: ko str (o) Termcap entries for other non-function keys ! 203: kP str Sent by previous-page key ! 204: kR str Sent by scroll-backward/up key ! 205: kr str Sent by right-arrow key ! 206: kS str Sent by clear-to-end-of-screen key ! 207: ks str Put terminal in \*(lqkeypad transmit\*(rq mode ! 208: kT str Sent by set-tab key ! 209: kt str Sent by clear-tab key ! 210: ku str Sent by up-arrow key ! 211: l0-l9 str Labels on function keys if not \*(lqf\fIn\^\fP\*(rq ! 212: LC bool (o) Lower-case only ! 213: LE str (NP) Move cursor left \fIn\^\fP positions ! 214: le str (P) Move cursor left one position ! 215: li num Number of lines on screen or page (See BUGS section below) ! 216: ll str Last line, first column ! 217: lm num Lines of memory if > \fBli\fP (0 means varies) ! 218: ma str (o) Arrow key map (used by \fIvi\^\fP version 2 only) ! 219: mb str Turn on blinking attribute ! 220: md str Turn on bold (extra bright) attribute ! 221: me str Turn off all attributes ! 222: mh str Turn on half-bright attribute ! 223: mi bool Safe to move while in insert mode ! 224: mk str Turn on blank attribute (characters invisible) ! 225: ml str (o) Memory lock on above cursor ! 226: mm str Turn on \*(lqmeta mode\*(rq (8th bit) ! 227: mo str Turn off \*(lqmeta mode\*(rq ! 228: mp str Turn on protected attribute ! 229: mr str Turn on reverse-video attibute ! 230: ms bool Safe to move in standout modes ! 231: mu str (o) Memory unlock (turn off memory lock) ! 232: nc bool (o) No correctly-working \fBcr\fP (Datamedia 2500, Hazeltine 2000) ! 233: nd str Non-destructive space (cursor right) ! 234: NL bool (o) \fB\\n\fP is newline, not line feed ! 235: nl str (o) Newline character if not \fB\\n\fP ! 236: ns bool (o) Terminal is a \s-1CRT\s0 but doesn't scroll ! 237: nw str (P) Newline (behaves like \fBcr\fP followed by \fBdo\fP) ! 238: OP bool (o) Odd parity ! 239: os bool Terminal overstrikes ! 240: pb num Lowest baud where delays are required ! 241: pc str Pad character (default \s-2NUL\s0) ! 242: pf str Turn off the printer ! 243: pk str Program function key \fIn\^\fP to type string \fIs\fP (\fIterminfo\^\fP only) ! 244: pl str Program function key \fIn\^\fP to execute string \fIs\fP (\fIterminfo\^\fP only) ! 245: pO str (N) Turn on the printer for \fIn\^\fP bytes ! 246: po str Turn on the printer ! 247: ps str Print contents of the screen ! 248: pt bool (o) Has hardware tabs (may need to be set with \fBis\fP) ! 249: px str Program function key \fIn\^\fP to transmit string \fIs\fP (\fIterminfo\^\fP only) ! 250: r1-r3 str Reset terminal completely to sane modes (\fIterminfo\^\fP only) ! 251: rc str (P) Restore cursor to position of last \fBsc\fP ! 252: rf str Name of file containing reset codes ! 253: RI str (NP) Move cursor right \fIn\^\fP positions ! 254: rp str (NP*) Repeat character \fIc n\^\fP times ! 255: rs str Reset terminal completely to sane modes (\fItermcap\^\fP only) ! 256: sa str (NP) Define the video attributes ! 257: sc str (P) Save cursor position ! 258: se str End standout mode ! 259: SF str (NP*) Scroll forward \fIn\^\fP lines ! 260: sf str (P) Scroll text up ! 261: sg num Number of garbage chars left by \fBso\fP or \fBse\fP (default 0) ! 262: so str Begin standout mode ! 263: SR str (NP*) Scroll backward \fIn\^\fP lines ! 264: sr str (P) Scroll text down ! 265: st str Set a tab in all rows, current column ! 266: ta str (P) Tab to next 8-position hardware tab stop ! 267: tc str Entry of similar terminal \- must be last ! 268: te str String to end programs that use \fItermcap\fP ! 269: ti str String to begin programs that use \fItermcap\fP ! 270: ts str (N) Go to status line, column \fIn\^\fP ! 271: UC bool (o) Upper-case only ! 272: uc str Underscore one character and move past it ! 273: ue str End underscore mode ! 274: ug num Number of garbage chars left by \fBus\fP or \fBue\fP (default 0) ! 275: ul bool Underline character overstrikes ! 276: UP str (NP*) Move cursor up \fIn\^\fP lines ! 277: up str Upline (cursor up) ! 278: us str Start underscore mode ! 279: vb str Visible bell (must not move cursor) ! 280: ve str Make cursor appear normal (undo \fBvs\fP/\fBvi\fP) ! 281: vi str Make cursor invisible ! 282: vs str Make cursor very visible ! 283: vt num Virtual terminal number (not supported on all systems) ! 284: wi str (N) Set current window ! 285: ws num Number of columns in status line ! 286: xb bool Beehive (f1=\s-2ESC\s0, f2=^C) ! 287: xn bool Newline ignored after 80 cols (Concept) ! 288: xo bool Terminal uses xoff/xon (\s-2DC3\s0/\s-2DC1\s0) handshaking ! 289: xr bool (o) Return acts like \fBce cr nl\fP (Delta Data) ! 290: xs bool Standout not erased by overwriting (Hewlett-Packard) ! 291: xt bool Tabs ruin, magic \fBso\fP char (Teleray 1061) ! 292: xx bool (o) Tektronix 4025 insert-line ! 293: .fi ! 294: .ta 8n +8n ! 295: .PP ! 296: .B A Sample Entry ! 297: .PP ! 298: The following entry, which describes the Concept\-100, is among the more ! 299: complex entries in the ! 300: .I termcap\^ ! 301: file as of this writing. ! 302: .PP ! 303: .nf ! 304: ca\||\|concept100\||\|c100\||\|concept\||\|c104\||\|concept100-4p\||\|HDS Concept\-100:\e ! 305: :al=3*\eE^R:am:bl=^G:cd=16*\eE^C:ce=16\eE^U:cl=2*^L:cm=\eEa%+ %+ :\e ! 306: :co#80:.cr=9^M:db:dc=16\eE^A:dl=3*\eE^B:do=^J:ei=\eE\e200:eo:im=\eE^P:in:\e ! 307: :ip=16*:is=\eEU\eEf\eE7\eE5\eE8\eEl\eENH\eEK\eE\e200\eEo&\e200\eEo\e47\eE:k1=\eE5:\e ! 308: :k2=\eE6:k3=\eE7:kb=^h:kd=\eE<:ke=\eEx:kh=\eE?:kl=\eE>:kr=\eE=:ks=\eEX:\e ! 309: :ku=\eE;:le=^H:li#24:mb=\eEC:me=\eEN\e200:mh=\eEE:mi:mk=\eEH:mp=\eEI:\e ! 310: :mr=\eED:nd=\eE=:pb#9600:rp=0.2*\eEr%.%+ :se=\eEd\eEe:sf=^J:so=\eEE\eED:\e ! 311: :.ta=8\et:te=\eEv \e200\e200\e200\e200\e200\e200\eEp\er\en:\e ! 312: :ti=\eEU\eEv 8p\eEp\er:ue=\eEg:ul:up=\eE;:us=\eEG:\e ! 313: :vb=\eEk\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\e200\eEK:\e ! 314: :ve=\eEw:vs=\eEW:vt#8:xn:\e ! 315: :bs:cr=^M:dC#9:dT#8:nl=^J:ta=^I:pt: ! 316: .fi ! 317: .PP ! 318: Entries may continue onto multiple lines by giving a \e as the last ! 319: character of a line, and empty fields ! 320: may be included for readability (here between the last field on a line ! 321: and the first field on the next). ! 322: Comments may be included on lines beginning with \*(lq#\*(rq. ! 323: .br ! 324: .ne 5 ! 325: .PP ! 326: .B Types of Capabilities ! 327: .PP ! 328: Capabilities in ! 329: .I termcap\^ ! 330: are of three types: Boolean capabilities, ! 331: which indicate particular features that the terminal has; ! 332: numeric capabilities, ! 333: giving the size of the display or the size of other attributes; ! 334: and string capabilities, ! 335: which give character sequences that can be used to perform particular ! 336: terminal operations. ! 337: All capabilities have two-letter codes. ! 338: For instance, the fact that ! 339: the Concept has ! 340: .I automatic margins ! 341: .RI ( i.e. , ! 342: an automatic return and linefeed ! 343: when the end of a line is reached) is indicated by the Boolean capability ! 344: .BR am . ! 345: Hence the description of the Concept includes ! 346: .BR am . ! 347: .PP ! 348: Numeric capabilities are followed by the character `#' then the value. ! 349: In the example above ! 350: .BR co , ! 351: which indicates the number of columns the display has, ! 352: gives the value `80' for the Concept. ! 353: .PP ! 354: Finally, string-valued capabilities, such as ! 355: .B ce ! 356: (clear-to-end-of-line ! 357: sequence) are given by the two-letter code, an `=', then a string ! 358: ending at the next following `:'. ! 359: A delay in milliseconds may appear after ! 360: the `=' in such a capability, ! 361: which causes padding characters to be supplied by ! 362: .I tputs\^ ! 363: after the remainder of the string is sent to provide this delay. ! 364: The delay can be either a number, ! 365: .I e.g. ! 366: `20', or a number followed by ! 367: an `*', ! 368: .IR i.e. , ! 369: `3*'. ! 370: An `*' indicates that the padding required is proportional ! 371: to the number of lines affected by the operation, and the amount given is ! 372: the per-affected-line padding required. ! 373: (In the case of insert-character, ! 374: the factor is still the number of ! 375: .I lines\^ ! 376: affected; ! 377: this is always 1 unless the terminal has ! 378: .B in ! 379: and the software uses it.) ! 380: When an `*' is specified, it is sometimes useful to give a delay of the form ! 381: `3.5' to specify a delay per line to tenths of milliseconds. ! 382: (Only one decimal place is allowed.) ! 383: .PP ! 384: A number of escape sequences are provided in the string-valued capabilities ! 385: for easy encoding of control characters there. ! 386: .B \eE ! 387: maps to an \s-2ESC\s0 ! 388: character, ! 389: .B ^X ! 390: maps to a control-X for any appropriate X, ! 391: and the sequences ! 392: .B \en ! 393: .B \er ! 394: .B \et ! 395: .B \eb ! 396: .B \ef ! 397: map to linefeed, return, tab, backspace, and formfeed, respectively. ! 398: Finally, characters may be given as three octal digits after a ! 399: .BR \e , ! 400: and the characters ! 401: .B ^ ! 402: and ! 403: .B \e ! 404: may be given as ! 405: .B \e^ ! 406: and ! 407: .BR \e\e . ! 408: If it is necessary to place a ! 409: .B : ! 410: in a capability it must be escaped in ! 411: octal as ! 412: .BR \e072 . ! 413: If it is necessary to place a \s-2NUL\s0 ! 414: character in a string capability it ! 415: must be encoded as ! 416: .BR \e200 . ! 417: (The routines that deal with ! 418: .I termcap\^ ! 419: use C strings and strip the high bits of the output very late, so that ! 420: a ! 421: .B \e200 ! 422: comes out as a ! 423: .B \e000 ! 424: would.) ! 425: .PP ! 426: Sometimes individual capabilities must be commented out. ! 427: To do this, put a period before the capability name. ! 428: For example, see the first ! 429: .B cr ! 430: and ! 431: .B ta ! 432: in the example above. ! 433: .br ! 434: .ne 5 ! 435: .PP ! 436: .B Preparing Descriptions ! 437: .PP ! 438: We now outline how to prepare descriptions of terminals. ! 439: The most effective way to prepare a terminal description is by imitating ! 440: the description of a similar terminal in ! 441: .I termcap\^ ! 442: and to build up a description gradually, using partial descriptions ! 443: with ! 444: .I vi\^ ! 445: to check that they are correct. ! 446: Be aware that a very unusual terminal may expose deficiencies in ! 447: the ability of the ! 448: .I termcap\^ ! 449: file to describe it ! 450: or bugs in ! 451: .IR vi\^ . ! 452: To easily test a new terminal description you are working on ! 453: you can put it in your home directory in a file called ! 454: .I .termcap\^ ! 455: and programs will look there before looking in ! 456: .IR /etc/termcap\^ . ! 457: You can also set the environment variable ! 458: .B ! 459: .SM TERMPATH ! 460: to a list of absolute file pathnames (separated by spaces or colons), ! 461: one of which contains the description you are working on, ! 462: and programs will search them in the order listed, and nowhere else. ! 463: See ! 464: .IR termcap\^ (3X). ! 465: The ! 466: .B ! 467: .SM TERMCAP ! 468: environment variable is usually set to the ! 469: .I termcap\^ ! 470: entry itself ! 471: to avoid reading files when starting up a program. ! 472: .PP ! 473: To get the padding for insert-line right ! 474: (if the terminal manufacturer did not document it), ! 475: a severe test is to use ! 476: .I vi\^ ! 477: to edit ! 478: .I /etc/passwd\^ ! 479: at 9600 baud, delete roughly 16 lines from the middle of the screen, ! 480: then hit the `u' key several times quickly. ! 481: If the display messes up, more padding is usually needed. ! 482: A similar test can be used for insert-character. ! 483: .br ! 484: .ne 5 ! 485: .PP ! 486: .B Basic Capabilities ! 487: .PP ! 488: The number of columns on each line of the display is given by the ! 489: .B co ! 490: numeric capability. ! 491: If the display is a \s-1CRT\s0, then the ! 492: number of lines on the screen is given by the ! 493: .B li ! 494: capability. ! 495: If the display wraps around to the beginning of the next line when ! 496: the cursor reaches the right margin, then it should have the ! 497: .B am ! 498: capability. ! 499: If the terminal can clear its screen, ! 500: the code to do this is given by the ! 501: .B cl ! 502: string capability. ! 503: If the terminal overstrikes ! 504: (rather than clearing the position when a character is overwritten), ! 505: it should have the ! 506: .B os ! 507: capability. ! 508: If the terminal is a printing terminal, ! 509: with no soft copy unit, ! 510: give it both ! 511: .B hc ! 512: and ! 513: .BR os . ! 514: .RB ( os ! 515: applies to storage scope terminals, ! 516: such as the Tektronix 4010 series, ! 517: as well as to hard copy and ! 518: .SM APL ! 519: terminals.) ! 520: If there is a code to move the cursor to the left edge of the current row, ! 521: give this as ! 522: .BR cr . ! 523: (Normally this will be carriage-return, ! 524: .BR ^M .) ! 525: If there is a code to produce an audible signal (bell, beep, ! 526: .IR etc.\^ ), ! 527: give this as ! 528: .BR bl . ! 529: .PP ! 530: If there is a code (such as backspace) ! 531: to move the cursor one position to the left, ! 532: that capability should be given as ! 533: .BR le . ! 534: Similarly, ! 535: codes to move to the right, up, and down ! 536: should be given as ! 537: .BR nd , ! 538: .BR up , ! 539: and ! 540: .BR do , ! 541: respectively. ! 542: These ! 543: .I local cursor motions\^ ! 544: should not alter the text they pass over; ! 545: for example, you would not normally use ! 546: \*(lqnd=\ \*(rq ! 547: unless the terminal has the ! 548: .B os ! 549: capability, ! 550: because the space would erase the character moved over. ! 551: .PP ! 552: A very important point here is that the local cursor motions encoded ! 553: in ! 554: .I termcap\^ ! 555: have undefined behavior at the left and top edges of a ! 556: .SM CRT ! 557: display. ! 558: Programs should never attempt to backspace around the left edge, ! 559: unless ! 560: .B bw ! 561: is given, and never attempt to go up off the top ! 562: using local cursor motions. ! 563: .PP ! 564: In order to scroll text up, ! 565: a program goes to the bottom left corner of the screen and sends the ! 566: .B sf ! 567: (index) string. ! 568: To scroll text down, ! 569: a program goes to the top left corner of the screen and sends the ! 570: .B sr ! 571: (reverse index) string. ! 572: The strings ! 573: .B sf ! 574: and ! 575: .B sr ! 576: have undefined behavior ! 577: when not on their respective corners of the screen. ! 578: Parameterized versions of the scrolling sequences are ! 579: .B SF ! 580: and ! 581: .BR SR , ! 582: which have the same semantics as ! 583: .B sf ! 584: and ! 585: .B sr ! 586: except that they take one parameter ! 587: and scroll that many lines. ! 588: They also have undefined behavior ! 589: except at the appropriate corner of the screen. ! 590: .PP ! 591: The ! 592: .B am ! 593: capability tells whether the cursor sticks at the right ! 594: edge of the screen when text is output there, ! 595: but this does not necessarily apply to ! 596: .B nd ! 597: from the last column. ! 598: Leftward local motion is defined from the left edge only when ! 599: .B bw ! 600: is given; then an ! 601: .B le ! 602: from the left edge will move to the right edge of the previous row. ! 603: This is useful for drawing a box around the edge of the screen, ! 604: for example. ! 605: If the terminal has switch-selectable automatic margins, ! 606: the ! 607: .I termcap\^ ! 608: description usually assumes that this feature is on, ! 609: .IR i.e. , ! 610: .BR am . ! 611: If the terminal has a command ! 612: that moves to the first column of the next line, ! 613: that command can be given as ! 614: .B nw ! 615: (newline). ! 616: It is permissible for this to clear the remainder of the current line, ! 617: so if the terminal has no correctly-working \s-2CR\s0 and \s-2LF\s0 ! 618: it may still be possible to craft a working ! 619: .B nw ! 620: out of one or both of them. ! 621: .PP ! 622: These capabilities suffice to describe hardcopy and \*(lqglass-tty\*(rq terminals. ! 623: Thus the Teletype model 33 is described as ! 624: .PP ! 625: .nf ! 626: T3\||\|tty33\||\|33\||\|tty\||\|Teletype model 33:\e ! 627: :bl=^G:co#72:cr=^M:do=^J:hc:os: ! 628: .fi ! 629: .PP ! 630: and the Lear Siegler \s-1ADM\s0\-3 is described as ! 631: .PP ! 632: .nf ! 633: l3\||\|adm3\||\|3\||\|LSI \s-1ADM\s0-3:\e ! 634: :am:bl=^G:cl=^Z:co#80:cr=^M:do=^J:le=^H:li#24:sf=^J: ! 635: .fi ! 636: .br ! 637: .ne 5 ! 638: .PP ! 639: .B Parameterized Strings ! 640: .PP ! 641: Cursor addressing and other strings requiring parameters ! 642: are described by a ! 643: parameterized string capability, with ! 644: .IR printf\^ (3S)-like ! 645: escapes ! 646: .B %x ! 647: in it, ! 648: while other characters are passed through unchanged. ! 649: For example, to address the cursor the ! 650: .B cm ! 651: capability is given, using two parameters: the row and column to move to. ! 652: (Rows and columns are numbered from zero and refer to the physical screen ! 653: visible to the user, not to any unseen memory. ! 654: If the terminal has memory-relative cursor addressing, ! 655: that can be indicated by an analogous ! 656: .B CM ! 657: capability.) ! 658: .PP ! 659: The ! 660: .B % ! 661: encodings have the following meanings: ! 662: .PP ! 663: .DT ! 664: .nf ! 665: %% output `%' ! 666: %d output value as in \fIprintf\^\fP %d ! 667: %2 output value as in \fIprintf\^\fP %2d ! 668: %3 output value as in \fIprintf\^\fP %3d ! 669: %. output value as in \fIprintf\^\fP %c ! 670: %+\fIx\fP add \fIx\^\fP to value, then do %. ! 671: %>\fIxy\fP if value > \fIx\^\fP then add \fIy\^\fP, no output ! 672: %r reverse order of two parameters, no output ! 673: %i increment by one, no output ! 674: %n exclusive-or all parameters with 0140 (Datamedia 2500) ! 675: %B BCD (16*(value/10)) + (value%10), no output ! 676: %D Reverse coding (value \- 2*(value%16)), no output (Delta Data) ! 677: .fi ! 678: .PP ! 679: Consider the Hewlett-Packard 2645, which, to get to row 3 and column 12, needs ! 680: to be sent \*(lq\eE&a12c03Y\*(rq padded for 6 milliseconds. ! 681: Note that the order ! 682: of the row and column coordinates is reversed here ! 683: and that the row and column ! 684: are sent as two-digit integers. ! 685: Thus its ! 686: .B cm ! 687: capability is \*(lqcm=6\eE&%r%2c%2Y\*(rq. ! 688: .PP ! 689: The Microterm ! 690: .SM ACT-IV ! 691: needs the current row and column sent ! 692: simply encoded in binary ! 693: preceded by a ! 694: .BR ^T , ! 695: \*(lqcm=^T%.%.\*(rq. ! 696: Terminals that use \*(lq%.\*(rq need to be able to ! 697: backspace the cursor ! 698: .RB ( le ) ! 699: and to move the cursor up one line on the screen ! 700: .RB ( up ). ! 701: This is necessary because it is not always safe to transmit ! 702: .BR \en , ! 703: .BR ^D , ! 704: and ! 705: .BR \er , ! 706: as the system may change or discard them. ! 707: (Programs using ! 708: .I termcap\^ ! 709: must set terminal modes so that tabs are not expanded, so ! 710: .B \et ! 711: is safe to send. ! 712: This turns out to be essential for the Ann Arbor 4080.) ! 713: .PP ! 714: A final example is the Lear Siegler \s-1ADM\s0\-3a, ! 715: which offsets row and column ! 716: by a blank character, thus \*(lqcm=\eE=%+ %+ \*(rq. ! 717: .PP ! 718: Row or column absolute cursor addressing ! 719: can be given as single parameter capabilities ! 720: .B ch ! 721: (horizontal position absolute) and ! 722: .B cv ! 723: (vertical position absolute). ! 724: Sometimes these are shorter than the more general two-parameter sequence ! 725: (as with the Hewlett-Packard 2645) and can be used in preference to ! 726: .BR cm . ! 727: If there are parameterized local motions ! 728: .RI ( e.g. , ! 729: move ! 730: .I n\^ ! 731: positions to the right) ! 732: these can be given as ! 733: .BR DO , ! 734: .BR LE , ! 735: .BR RI , ! 736: and ! 737: .B UP ! 738: with a single parameter indicating how many positions to move. ! 739: These are primarily useful if the terminal does not have ! 740: .BR cm , ! 741: such as the Tektronix 4025. ! 742: .br ! 743: .ne 5 ! 744: .PP ! 745: .B Cursor Motions ! 746: .PP ! 747: If the terminal has a fast way to home the cursor ! 748: (to the very upper left corner of the screen), this can be given as ! 749: .BR ho . ! 750: Similarly, a fast way of getting to the lower left-hand corner ! 751: can be given as ! 752: .BR ll ; ! 753: this may involve going up with ! 754: .B up ! 755: from the home position, ! 756: but a program should never do this itself (unless ! 757: .B ll ! 758: does), because it can ! 759: make no assumption about the effect of moving up from the home position. ! 760: Note that the home position is the same as ! 761: cursor address (0,0): to the top left corner of the screen, not of memory. ! 762: (Therefore, the \*(lq\eEH\*(rq sequence on Hewlett-Packard terminals ! 763: cannot be used for ! 764: .BR ho .) ! 765: .br ! 766: .ne 5 ! 767: .PP ! 768: .B Area Clears ! 769: .PP ! 770: If the terminal can clear from the current position to the end of the ! 771: line, leaving the cursor where it is, this should be given as ! 772: .BR ce . ! 773: If the terminal can clear from the current position to the end of the ! 774: display, this should be given as ! 775: .BR cd . ! 776: .B cd ! 777: must only be invoked from the first column of a line. ! 778: (Therefore, ! 779: it can be simulated by a request to delete a large number of lines, ! 780: if a true ! 781: .B cd ! 782: is not available.) ! 783: .br ! 784: .ne 5 ! 785: .PP ! 786: .B Insert/Delete Line ! 787: .PP ! 788: If the terminal can open a new blank line ! 789: before the line containing the cursor, ! 790: this should be given as ! 791: .BR al ; ! 792: this must be invoked only from the first ! 793: position of a line. ! 794: The cursor must then appear at the left of the newly blank line. ! 795: If the terminal can delete the line that the cursor is on, this ! 796: should be given as ! 797: .BR dl ; ! 798: this must only be used from the first position on ! 799: the line to be deleted. ! 800: Versions of ! 801: .B al ! 802: and ! 803: .B dl ! 804: which take a single parameter ! 805: and insert or delete that many lines ! 806: can be given as ! 807: .B AL ! 808: and ! 809: .BR DL . ! 810: If the terminal has a settable scrolling region ! 811: (like the VT100), ! 812: the command to set this can be described with the ! 813: .B cs ! 814: capability, ! 815: which takes two parameters: the top and bottom lines of the scrolling region. ! 816: The cursor position is, alas, undefined after using this command. ! 817: It is possible to get the effect of insert or delete line ! 818: using this command \(em the ! 819: .B sc ! 820: and ! 821: .B rc ! 822: (save and restore cursor) commands are also useful. ! 823: Inserting lines at the top or bottom of the screen can also be done using ! 824: .B sr ! 825: or ! 826: .B sf ! 827: on many terminals without a true insert/delete line, ! 828: and is often faster even on terminals with those features. ! 829: .PP ! 830: If the terminal has the ability to define a window as part of memory ! 831: which all commands affect, it should be given as the parameterized string ! 832: .BR wi . ! 833: The four parameters are the starting and ending lines in memory ! 834: and the starting and ending columns in memory, in that order. ! 835: (This ! 836: .I terminfo\^ ! 837: capability is described for completeness. ! 838: It is unlikely that any ! 839: .IR termcap\^ -using ! 840: program will support it.) ! 841: .PP ! 842: If the terminal can retain display memory above the screen, then the ! 843: .B da ! 844: capability should be given; ! 845: if display memory can be retained ! 846: below, then ! 847: .B db ! 848: should be given. ! 849: These indicate ! 850: that deleting a line or scrolling may bring non-blank lines up from below ! 851: or that scrolling back with ! 852: .B sr ! 853: may bring down non-blank lines. ! 854: .br ! 855: .ne 5 ! 856: .PP ! 857: .B Insert/Delete Character ! 858: .PP ! 859: There are two basic kinds of intelligent terminals with respect to ! 860: insert/delete character that can be described using ! 861: .IR termcap\^ . ! 862: The most common insert/delete character operations affect only the characters ! 863: on the current line and shift characters off the end of the line rigidly. ! 864: Other terminals, such as the Concept\-100 and the Perkin Elmer Owl, make ! 865: a distinction between typed and untyped blanks on the screen, shifting ! 866: upon an insert or delete only to an untyped blank on the screen which is ! 867: either eliminated or expanded to two untyped blanks. ! 868: You can determine ! 869: the kind of terminal you have by clearing the screen then typing ! 870: text separated by cursor motions. ! 871: Type \*(lqabc\ \ \ \ def\*(rq using local ! 872: cursor motions (not spaces) between the \*(lqabc\*(rq and the \*(lqdef\*(rq. ! 873: Then position the cursor before the \*(lqabc\*(rq and put the terminal in insert ! 874: mode. ! 875: If typing characters causes the rest of the line to shift ! 876: rigidly and characters to fall off the end, then your terminal does ! 877: not distinguish between blanks and untyped positions. ! 878: If the \*(lqabc\*(rq ! 879: shifts over to the \*(lqdef\*(rq which then move together around the end of the ! 880: current line and onto the next as you insert, then you have the second type of ! 881: terminal and should give the capability \fBin\fP, which stands for ! 882: \*(lqinsert null\*(rq. ! 883: While these are two logically separate attributes ! 884: (one line ! 885: .I vs. ! 886: multi-line insert mode, ! 887: and special treatment of untyped spaces), ! 888: we have seen no terminals whose insert ! 889: mode cannot be described with the single attribute. ! 890: .PP ! 891: .I Termcap\^ ! 892: can describe both terminals that have an insert mode and terminals ! 893: that send a simple sequence to open a blank position on the current line. ! 894: Give as ! 895: .B im ! 896: the sequence to get into insert mode. ! 897: Give as ! 898: .B ei ! 899: the sequence to leave insert mode. ! 900: Now give as ! 901: .B ic ! 902: any sequence that needs to be sent just before ! 903: each character to be inserted. ! 904: Most terminals with a true insert mode ! 905: will not give ! 906: .BR ic ; ! 907: terminals that use a sequence to open a screen ! 908: position should give it here. ! 909: (If your terminal has both, ! 910: insert mode is usually preferable to ! 911: .BR ic . ! 912: Do not give both unless the terminal actually requires both to be used ! 913: in combination.) ! 914: If post-insert padding is needed, give this as a number of milliseconds ! 915: in ! 916: .B ip ! 917: (a string option). ! 918: Any other sequence that may need to be ! 919: sent after insertion of a single character can also be given in ! 920: .BR ip . ! 921: If your terminal needs to be placed into an `insert mode' ! 922: and needs a special code preceding each inserted character, ! 923: then both ! 924: .BR im / ei ! 925: and ! 926: .B ic ! 927: can be given, and both will be used. ! 928: The ! 929: .B IC ! 930: capability, with one parameter ! 931: .IR n\^ , ! 932: will repeat the effects of ! 933: .B ic ! 934: .I n\^ ! 935: times. ! 936: .PP ! 937: It is occasionally necessary to move around while in insert mode ! 938: to delete characters on the same line ! 939: .RI ( e.g. , ! 940: if there is a tab after ! 941: the insertion position). ! 942: If your terminal allows motion while in ! 943: insert mode, you can give the capability ! 944: .B mi ! 945: to speed up inserting ! 946: in this case. ! 947: Omitting ! 948: .B mi ! 949: will affect only speed. ! 950: Some terminals ! 951: (notably Datamedia's) must not have ! 952: .B mi ! 953: because of the way their ! 954: insert mode works. ! 955: .PP ! 956: Finally, you can specify ! 957: .B dc ! 958: to delete a single character, ! 959: .B DC ! 960: with one parameter ! 961: .I n\^ ! 962: to delete ! 963: .I n\^ ! 964: characters, ! 965: and delete mode by giving ! 966: .B dm ! 967: and ! 968: .B ed ! 969: to enter and exit delete mode ! 970: (which is any mode the terminal needs to be placed in for ! 971: .B dc ! 972: to work). ! 973: .br ! 974: .ne 5 ! 975: .PP ! 976: .B Highlighting, Underlining, and Visible Bells ! 977: .PP ! 978: If your terminal has one or more kinds of display attributes, ! 979: these can be represented in a number of different ways. ! 980: You should choose one display form as ! 981: .IR "standout mode" , ! 982: representing a good high-contrast, easy-on-the-eyes format ! 983: for highlighting error messages and other attention getters. ! 984: (If you have a choice, reverse video plus half-bright is good, ! 985: or reverse video alone.) ! 986: The sequences to enter and exit standout mode ! 987: are given as ! 988: .B so ! 989: and ! 990: .BR se , ! 991: respectively. ! 992: If the code to change into or out of standout ! 993: mode leaves one or even two blank spaces or garbage characters on the screen, ! 994: as the TVI 912 and Teleray 1061 do, ! 995: then ! 996: .B sg ! 997: should be given to tell how many characters are left. ! 998: .PP ! 999: Codes to begin underlining and end underlining can be given as ! 1000: .B us ! 1001: and ! 1002: .BR ue , ! 1003: respectively. ! 1004: Underline mode change garbage is specified by ! 1005: .BR ug , ! 1006: similar to ! 1007: .BR sg . ! 1008: If the terminal has a code to underline the current character and move ! 1009: the cursor one position to the right, ! 1010: such as the Microterm Mime, ! 1011: this can be given as ! 1012: .BR uc . ! 1013: .PP ! 1014: Other capabilities to enter various highlighting modes include ! 1015: .B mb ! 1016: (blinking), ! 1017: .B md ! 1018: (bold or extra bright), ! 1019: .B mh ! 1020: (dim or half-bright), ! 1021: .B mk ! 1022: (blanking or invisible text), ! 1023: .B mp ! 1024: (protected), ! 1025: .B mr ! 1026: (reverse video), ! 1027: .B me ! 1028: (turn off ! 1029: .I all ! 1030: attribute modes), ! 1031: .B as ! 1032: (enter alternate character set mode), and ! 1033: .B ae ! 1034: (exit alternate character set mode). ! 1035: Turning on any of these modes singly may or may not turn off other modes. ! 1036: .PP ! 1037: If there is a sequence to set arbitrary combinations of mode, ! 1038: this should be given as ! 1039: .B sa ! 1040: (set attributes), taking 9 parameters. ! 1041: Each parameter is either 0 or 1, ! 1042: as the corresponding attributes is on or off. ! 1043: The 9 parameters are, in order: standout, underline, reverse, blink, ! 1044: dim, bold, blank, protect, and alternate character set. ! 1045: Not all modes need be supported by ! 1046: .BR sa , ! 1047: only those for which corresponding attribute commands exist. ! 1048: (It is unlikely that a ! 1049: .IR termcap\^ -using ! 1050: program will support this capability, which is defined for compatibility ! 1051: with ! 1052: .IR terminfo\^ .) ! 1053: .PP ! 1054: Terminals with the \*(lqmagic cookie\*(rq glitches ! 1055: .RB ( sg ! 1056: and ! 1057: .BR ug ), ! 1058: rather than maintaining extra attribute bits for each character cell, ! 1059: instead deposit special \*(lqcookies\*(rq, ! 1060: or \*(lqgarbage characters\*(rq, ! 1061: when they receive mode-setting sequences, ! 1062: which affect the display algorithm. ! 1063: .PP ! 1064: Some terminals, ! 1065: such as the Hewlett-Packard 2621, ! 1066: automatically leave standout ! 1067: mode when they move to a new line or when the cursor is addressed. ! 1068: Programs using standout mode ! 1069: should exit standout mode on such terminals ! 1070: before moving the cursor or sending a newline. ! 1071: On terminals where this is not a problem, ! 1072: the ! 1073: .B ms ! 1074: capability should be present ! 1075: to say that this overhead is unnecessary. ! 1076: .PP ! 1077: If the terminal has ! 1078: a way of flashing the screen to indicate an error quietly ! 1079: (a bell replacement), ! 1080: this can be given as ! 1081: .BR vb ; ! 1082: it must not move the cursor. ! 1083: .PP ! 1084: If the cursor needs to be made more visible than normal ! 1085: when it is not on the bottom line ! 1086: (to change, for example, a non-blinking underline into an easier-to-find ! 1087: block or blinking underline), ! 1088: give this sequence as ! 1089: .BR vs . ! 1090: If there is a way to make the cursor completely invisible, give that as ! 1091: .BR vi . ! 1092: The capability ! 1093: .BR ve , ! 1094: which undoes the effects of both of these modes, ! 1095: should also be given. ! 1096: .PP ! 1097: If your terminal correctly displays underlined characters ! 1098: (with no special codes needed) ! 1099: even though it does not overstrike, ! 1100: then you should give the capability ! 1101: .BR ul . ! 1102: If overstrikes are erasable with a blank, ! 1103: this should be indicated by giving ! 1104: .BR eo . ! 1105: .br ! 1106: .ne 5 ! 1107: .PP ! 1108: .B Keypad ! 1109: .PP ! 1110: If the terminal has a keypad that transmits codes when the keys are pressed, ! 1111: this information can be given. ! 1112: Note that it is not possible to handle ! 1113: terminals where the keypad only works in local mode ! 1114: (this applies, for example, to the unshifted Hewlett-Packard 2621 keys). ! 1115: If the keypad can be set to transmit or not transmit, ! 1116: give these codes as ! 1117: .B ks ! 1118: and ! 1119: .BR ke . ! 1120: Otherwise the keypad is assumed to always transmit. ! 1121: The codes sent by the left-arrow, right-arrow, up-arrow, down-arrow, ! 1122: and home keys can be given as ! 1123: .BR kl , ! 1124: .BR kr , ! 1125: .BR ku , ! 1126: .BR kd , ! 1127: and ! 1128: .BR kh , ! 1129: respectively. ! 1130: If there are function keys such as f0, f1, ..., f9, the codes they send ! 1131: can be given as ! 1132: .BR k0 , ! 1133: .BR k1 , "" ..., ! 1134: .BR k9 . ! 1135: If these keys have labels other than the default f0 through f9, the labels ! 1136: can be given as ! 1137: .BR l0 , ! 1138: .BR l1 , "" ..., ! 1139: .BR l9 . ! 1140: The codes transmitted by certain other special keys can be given: ! 1141: .B kH ! 1142: (home down), ! 1143: .B kb ! 1144: (backspace), ! 1145: .B ka ! 1146: (clear all tabs), ! 1147: .B kt ! 1148: (clear the tab stop in this column), ! 1149: .B kC ! 1150: (clear screen or erase), ! 1151: .B kD ! 1152: (delete character), ! 1153: .B kL ! 1154: (delete line), ! 1155: .B kM ! 1156: (exit insert mode), ! 1157: .B kE ! 1158: (clear to end of line), ! 1159: .B kS ! 1160: (clear to end of screen), ! 1161: .B kI ! 1162: (insert character or enter insert mode), ! 1163: .B kA ! 1164: (insert line), ! 1165: .B kN ! 1166: (next page), ! 1167: .B kP ! 1168: (previous page), ! 1169: .B kF ! 1170: (scroll forward/down), ! 1171: .B kR ! 1172: (scroll backward/up), and ! 1173: .B kT ! 1174: (set a tab stop in this column). ! 1175: In addition, if the keypad has a 3 by 3 array of keys ! 1176: including the four arrow keys, then the other five keys can be given as ! 1177: .BR K1 , ! 1178: .BR K2 , ! 1179: .BR K3 , ! 1180: .BR K4 , ! 1181: and ! 1182: .BR K5 . ! 1183: These keys are useful when the effects of a 3 by 3 directional pad are needed. ! 1184: The obsolete ! 1185: .B ko ! 1186: capability formerly used to describe \*(lqother\*(rq function keys has been ! 1187: completely supplanted by the above capabilities. ! 1188: .PP ! 1189: The ! 1190: .B ma ! 1191: entry is also used to indicate arrow keys on terminals that have ! 1192: single-character arrow keys. ! 1193: It is obsolete but still in use in ! 1194: version 2 of ! 1195: .I vi\^ ! 1196: which must be run on some minicomputers due to ! 1197: memory limitations. ! 1198: This field is redundant with ! 1199: .BR kl , ! 1200: .BR kr , ! 1201: .BR ku , ! 1202: .BR kd , ! 1203: and ! 1204: .BR kh . ! 1205: It consists of groups of two characters. ! 1206: In each group, the first character is what an arrow key sends, and the ! 1207: second character is the corresponding ! 1208: .I vi\^ ! 1209: command. ! 1210: These commands are ! 1211: .B h ! 1212: for ! 1213: .BR kl , ! 1214: .B j ! 1215: for ! 1216: .BR kd , ! 1217: .B k ! 1218: for ! 1219: .BR ku , ! 1220: .B l ! 1221: for ! 1222: .BR kr , ! 1223: and ! 1224: .B H ! 1225: for ! 1226: .BR kh . ! 1227: For example, the Mime would have \*(lqma=^Hh^Kj^Zk^Xl\*(rq ! 1228: indicating arrow keys left (^H), down (^K), up (^Z), and right (^X). ! 1229: (There is no home key on the Mime.) ! 1230: .br ! 1231: .ne 5 ! 1232: .PP ! 1233: .B Tabs and Initialization ! 1234: .PP ! 1235: If the terminal needs to be in a special mode when running ! 1236: a program that uses these capabilities, ! 1237: the codes to enter and exit this mode can be given as ! 1238: .B ti ! 1239: and ! 1240: .BR te . ! 1241: This arises, for example, from terminals like the Concept with more than ! 1242: one page of memory. ! 1243: If the terminal has only memory-relative cursor addressing and not ! 1244: screen-relative cursor addressing, ! 1245: a screen-sized window must be fixed into ! 1246: the display for cursor addressing to work properly. ! 1247: This is also used for the Tektronix 4025, where ! 1248: .B ti ! 1249: sets the command character to be the one used by ! 1250: .IR termcap\^ . ! 1251: .PP ! 1252: Other capabilities ! 1253: include ! 1254: .BR is , ! 1255: an initialization string for the terminal, ! 1256: and ! 1257: .BR if , ! 1258: the name of a file containing long initialization strings. ! 1259: These strings are expected to set the terminal into modes ! 1260: consistent with the rest of the ! 1261: .I termcap\^ ! 1262: description. ! 1263: They are normally sent to the terminal by the ! 1264: .I tset\^ ! 1265: program each time the user logs in. ! 1266: They will be printed in the following order: ! 1267: .BR is ; ! 1268: setting tabs using ! 1269: .B ct ! 1270: and ! 1271: .BR st ; ! 1272: and finally ! 1273: .BR if . ! 1274: .RI ( Terminfo\^ ! 1275: uses ! 1276: .B i1-i2 ! 1277: instead of ! 1278: .B is ! 1279: and runs the program ! 1280: .B iP ! 1281: and prints ! 1282: .B i3 ! 1283: after the other initializations.) ! 1284: A pair of sequences that does a harder reset from a totally unknown state ! 1285: can be analogously given as ! 1286: .B rs ! 1287: and ! 1288: .BR if . ! 1289: These strings are output by the ! 1290: .I reset\^ ! 1291: program, which is used when the terminal gets into a wedged state. ! 1292: .RI ( Terminfo\^ ! 1293: uses ! 1294: .B r1-r3 ! 1295: instead of ! 1296: .BR rs .) ! 1297: Commands are normally placed in ! 1298: .B rs ! 1299: and ! 1300: .B rf ! 1301: only if they produce annoying effects on the screen and are not necessary ! 1302: when logging in. ! 1303: For example, the command to set the VT100 into 80-column mode ! 1304: would normally be part of ! 1305: .BR is , ! 1306: but it causes an annoying glitch of the screen and is not normally needed ! 1307: since the terminal is usually already in 80-column mode. ! 1308: .PP ! 1309: If the terminal has hardware tabs, ! 1310: the command to advance to the next tab stop can be given as ! 1311: .B ta ! 1312: (usually ! 1313: .BR ^I ). ! 1314: A \*(lqbacktab\*(rq command which moves leftward to the previous tab stop ! 1315: can be given as ! 1316: .BR bt . ! 1317: By convention, ! 1318: if the terminal driver modes indicate that tab stops are being expanded ! 1319: by the computer rather than being sent to the terminal, ! 1320: programs should not use ! 1321: .B ta ! 1322: or ! 1323: .B bt ! 1324: even if they are present, ! 1325: since the user may not have the tab stops properly set. ! 1326: If the terminal has hardware tabs that are initially set every ! 1327: .I n\^ ! 1328: positions when the terminal is powered up, then the numeric parameter ! 1329: .B it ! 1330: is given, showing the number of positions between tab stops. ! 1331: This is normally used by the ! 1332: .I tset\^ ! 1333: command to determine whether to set the driver mode for hardware tab ! 1334: expansion, and whether to set the tab stops. ! 1335: If the terminal has tab stops that can be saved in nonvolatile memory, the ! 1336: .I termcap\^ ! 1337: description can assume that they are properly set. ! 1338: .PP ! 1339: If there are commands to set and clear tab stops, they can be given as ! 1340: .B ct ! 1341: (clear all tab stops) and ! 1342: .B st ! 1343: (set a tab stop in the current column of every row). ! 1344: If a more complex sequence is needed to set the tabs than can be ! 1345: described by this, the sequence can be placed in ! 1346: .B is ! 1347: or ! 1348: .BR if . ! 1349: .br ! 1350: .ne 5 ! 1351: .PP ! 1352: .B Delays ! 1353: .PP ! 1354: Certain capabilities control padding in the terminal driver. ! 1355: These are primarily needed by hardcopy terminals and are used by the ! 1356: .I tset\^ ! 1357: program to set terminal driver modes appropriately. ! 1358: Delays embedded in the capabilities ! 1359: .BR cr , ! 1360: .BR sf , ! 1361: .BR le , ! 1362: .BR ff , ! 1363: and ! 1364: .B ta ! 1365: will cause the appropriate delay bits to be set in the terminal driver. ! 1366: If ! 1367: .B pb ! 1368: (padding baud rate) is given, these values can be ignored at baud rates ! 1369: below the value of ! 1370: .BR pb . ! 1371: For 4.2BSD ! 1372: .IR tset\^ , ! 1373: the delays are given as numeric capabilities ! 1374: .BR dC , ! 1375: .BR dN , ! 1376: .BR dB , ! 1377: .BR dF , ! 1378: and ! 1379: .BR dT ! 1380: instead. ! 1381: .br ! 1382: .ne 5 ! 1383: .PP ! 1384: .B Miscellaneous ! 1385: .PP ! 1386: If the terminal requires other than a \s-2NUL\s0 (zero) character as a pad, ! 1387: this can be given as ! 1388: .BR pc . ! 1389: Only the first character of the ! 1390: .B pc ! 1391: string is used. ! 1392: .PP ! 1393: If the terminal has commands to save and restore the position of the ! 1394: cursor, give them as ! 1395: .B sc ! 1396: and ! 1397: .BR rc . ! 1398: .PP ! 1399: If the terminal has an extra \*(lqstatus line\*(rq that is not normally used by ! 1400: software, this fact can be indicated. ! 1401: If the status line is viewed as an extra line below the bottom line, ! 1402: then the capability ! 1403: .B hs ! 1404: should be given. ! 1405: Special strings to go to a position in the status line and to return ! 1406: from the status line can be given as ! 1407: .B ts ! 1408: and ! 1409: .BR fs . ! 1410: .RB ( fs ! 1411: must leave the cursor position in the same place that it was before ! 1412: .BR ts . ! 1413: If necessary, the ! 1414: .B sc ! 1415: and ! 1416: .B rc ! 1417: strings can be included in ! 1418: .B ts ! 1419: and ! 1420: .B fs ! 1421: to get this effect.) ! 1422: The capability ! 1423: .B ts ! 1424: takes one parameter, which is the column number of the status line ! 1425: to which the cursor is to be moved. ! 1426: If escape sequences and other special commands such as tab work while in ! 1427: the status line, the flag ! 1428: .B es ! 1429: can be given. ! 1430: A string that turns off the status line (or otherwise erases its contents) ! 1431: should be given as ! 1432: .BR ds . ! 1433: The status line is normally assumed to be the same width as the ! 1434: rest of the screen, ! 1435: .IR i.e. , ! 1436: .BR co . ! 1437: If the status line is a different width (possibly because the terminal ! 1438: does not allow an entire line to be loaded), then its width in columns ! 1439: can be indicated with the numeric parameter ! 1440: .BR ws . ! 1441: .PP ! 1442: If the terminal can move up or down half a line, this can be ! 1443: indicated with ! 1444: .B hu ! 1445: (half-line up) and ! 1446: .B hd ! 1447: (half-line down). ! 1448: This is primarily useful for superscripts and subscripts on hardcopy ! 1449: terminals. ! 1450: If a hardcopy terminal can eject to the next page (form feed), ! 1451: give this as ! 1452: .B ff ! 1453: (usually ! 1454: .BR ^L ). ! 1455: .PP ! 1456: If there is a command to repeat a given character a given number of times ! 1457: (to save time transmitting a large number of identical characters), ! 1458: this can be indicated with the parameterized string ! 1459: .BR rp . ! 1460: The first parameter is the character to be repeated and the second is ! 1461: the number of times to repeat it. ! 1462: (This is a ! 1463: .I terminfo\^ ! 1464: feature that is unlikely to be supported by a program that uses ! 1465: .IR termcap\^ .) ! 1466: .PP ! 1467: If the terminal has a settable command character, such as the ! 1468: Tektronix 4025, this can be indicated with ! 1469: .BR CC . ! 1470: A prototype command character is chosen which is used in all capabilities. ! 1471: This character is given in the ! 1472: .B CC ! 1473: capability to identify it. ! 1474: The following convention is supported on some UNIX systems: ! 1475: The environment is to be searched for a ! 1476: .B ! 1477: .SM CC ! 1478: variable, ! 1479: and if found, ! 1480: all occurrences of the prototype character are replaced by the character ! 1481: in the environment variable. ! 1482: This use of the ! 1483: .B ! 1484: .SM CC ! 1485: environment variable ! 1486: is a very bad idea, as it conflicts with ! 1487: .IR make\^ (1). ! 1488: .PP ! 1489: Terminal descriptions that do not represent a specific kind of known ! 1490: terminal, such as ! 1491: .IR switch\^ , ! 1492: .IR dialup\^ , ! 1493: .IR patch\^ , ! 1494: and ! 1495: .IR network\^ , ! 1496: should include the ! 1497: .B gn ! 1498: (generic) capability so that programs can complain that they do not know ! 1499: how to talk to the terminal. ! 1500: (This capability does not apply to ! 1501: .I virtual\^ ! 1502: terminal descriptions for which the escape sequences are known.) ! 1503: .PP ! 1504: If the terminal uses xoff/xon (\s-2DC3\s0/\s-2DC1\s0) ! 1505: handshaking for flow control, give ! 1506: .BR xo . ! 1507: Padding information should still be included so that routines can make ! 1508: better decisions about costs, but actual pad characters will not be ! 1509: transmitted. ! 1510: .PP ! 1511: If the terminal has a \*(lqmeta key\*(rq which acts as a shift key, setting the ! 1512: 8th bit of any character transmitted, then this fact can be indicated with ! 1513: .BR km . ! 1514: Otherwise, software will assume that the 8th bit is parity and it will ! 1515: usually be cleared. ! 1516: If strings exist to turn this \*(lqmeta mode\*(rq on and off, they can be given as ! 1517: .B mm ! 1518: and ! 1519: .BR mo . ! 1520: .PP ! 1521: If the terminal has more lines of memory than will fit on the screen at once, ! 1522: the number of lines of memory can be indicated with ! 1523: .BR lm . ! 1524: An explicit value of 0 indicates that the number of lines is not fixed, ! 1525: but that there is still more memory than fits on the screen. ! 1526: .PP ! 1527: If the terminal is one of those supported by the UNIX system virtual ! 1528: terminal protocol, the terminal number can be given as ! 1529: .BR vt . ! 1530: .PP ! 1531: Media copy strings which control an auxiliary printer ! 1532: connected to the terminal can be given as ! 1533: .BR ps : ! 1534: print the contents of the screen; ! 1535: .BR pf : ! 1536: turn off the printer; and ! 1537: .BR po : ! 1538: turn on the printer. ! 1539: When the printer is on, all text sent to the terminal will be sent to the ! 1540: printer. ! 1541: It is undefined whether the text is also displayed on the terminal screen ! 1542: when the printer is on. ! 1543: A variation ! 1544: .B pO ! 1545: takes one parameter and leaves the printer on for as many characters as the ! 1546: value of the parameter, then turns the printer off. ! 1547: The parameter should not exceed 255. ! 1548: All text, including ! 1549: .BR pf , ! 1550: is transparently passed to the printer while ! 1551: .B pO ! 1552: is in effect. ! 1553: .PP ! 1554: Strings to program function keys can be given as ! 1555: .BR pk , ! 1556: .BR pl , ! 1557: and ! 1558: .BR px . ! 1559: Each of these strings takes two parameters: the function key number ! 1560: to program (from 0 to 9) and the string to program it with. ! 1561: Function key numbers out of this range may program undefined keys ! 1562: in a terminal-dependent manner. ! 1563: The differences among the capabilities are that ! 1564: .B pk ! 1565: causes pressing the given key to be the same as the user typing the given ! 1566: string; ! 1567: .B pl ! 1568: causes the string to be executed by the terminal in local mode; ! 1569: and ! 1570: .B px ! 1571: causes the string to be transmitted to the computer. ! 1572: Unfortunately, due to lack of a definition for string parameters in ! 1573: .IR termcap\^ , ! 1574: only ! 1575: .I terminfo\^ ! 1576: supports these capabilities. ! 1577: .br ! 1578: .ne 5 ! 1579: .PP ! 1580: .B Glitches and Braindamage ! 1581: .PP ! 1582: Hazeltine terminals, which do not allow `~' characters to be displayed, ! 1583: should indicate ! 1584: .BR hz . ! 1585: .PP ! 1586: The ! 1587: .B nc ! 1588: capability, now obsolete, formerly indicated Datamedia terminals, ! 1589: which echo ! 1590: .B \er \en ! 1591: for ! 1592: carriage return then ignore a following linefeed. ! 1593: .PP ! 1594: Terminals that ignore a linefeed immediately after an ! 1595: .B am ! 1596: wrap, such as the Concept, should indicate ! 1597: .BR xn . ! 1598: .PP ! 1599: If ! 1600: .B ce ! 1601: is required to get rid of standout ! 1602: (instead of merely writing normal text on top of it), ! 1603: .B xs ! 1604: should be given. ! 1605: .PP ! 1606: Teleray terminals, where tabs turn all characters moved over to blanks, ! 1607: should indicate ! 1608: .B xt ! 1609: (destructive tabs). ! 1610: This glitch is also taken to mean that it is not possible ! 1611: to position the cursor on top of a \*(lqmagic cookie\*(rq, and that ! 1612: to erase standout mode it is necessary to use delete and insert line. ! 1613: .PP ! 1614: The Beehive Superbee, which is unable to correctly transmit the ! 1615: \s-2ESC\s0 or ^C characters, has ! 1616: .BR xb , ! 1617: indicating that the \*(lqf1\*(rq key is used for \s-2ESC\s0 and \*(lqf2\*(rq for ^C. ! 1618: (Only certain Superbees have this problem, depending on the ROM.) ! 1619: .PP ! 1620: Other specific terminal problems may be corrected by adding more ! 1621: capabilities of the form \fBx\fIx\^\fP. ! 1622: .br ! 1623: .ne 5 ! 1624: .PP ! 1625: .B Similar Terminals ! 1626: .PP ! 1627: If there are two very similar terminals, ! 1628: one can be defined as being just like the other with certain exceptions. ! 1629: The string capability ! 1630: .B tc ! 1631: can be given ! 1632: with the name of the similar terminal. ! 1633: This capability must be ! 1634: .IR last\^ , ! 1635: and the combined length of the entries ! 1636: must not exceed 1024. ! 1637: The capabilities given before ! 1638: .B tc ! 1639: override those in the terminal type invoked by ! 1640: .BR tc . ! 1641: A capability can be canceled by placing ! 1642: .B xx@ ! 1643: to the left of the ! 1644: .B tc ! 1645: invocation, where ! 1646: .I xx\^ ! 1647: is the capability. ! 1648: For example, the entry ! 1649: .PP ! 1650: hn\||\|2621\-nl:ks@:ke@:tc=2621: ! 1651: .PP ! 1652: defines a \*(lq2621\-nl\*(rq that does not have the ! 1653: .B ks ! 1654: or ! 1655: .B ke ! 1656: capabilities, ! 1657: hence does not turn on the function key labels when in visual mode. ! 1658: This is useful for different modes for a terminal, or for different ! 1659: user preferences. ! 1660: .SH AUTHOR ! 1661: William Joy ! 1662: .br ! 1663: Mark Horton added underlining and keypad support ! 1664: .SH FILES ! 1665: .DT ! 1666: /etc/termcap file containing terminal descriptions ! 1667: .SH SEE ALSO ! 1668: ex(1), more(1), tset(1), ul(1), vi(1), curses(3X), printf(3S), ! 1669: termcap(3X), term(7) ! 1670: .SH "CAVEATS AND BUGS" ! 1671: .B Note: ! 1672: .I termcap\^ ! 1673: was replaced by ! 1674: .I terminfo\^ ! 1675: in UNIX System V Release 2.0. ! 1676: The transition will be relatively painless if capabilities flagged as ! 1677: \*(lqobsolete\*(rq are avoided. ! 1678: .PP ! 1679: Lines and columns are now stored by the kernel as well as in the termcap ! 1680: entry. ! 1681: Most programs now use the kernel information primarily; the information ! 1682: in this file is used only if the kernel does not have any information. ! 1683: .PP ! 1684: .I Vi\^ ! 1685: allows only 256 characters for string capabilities, and the routines ! 1686: in ! 1687: .IR termlib\^ (3) ! 1688: do not check for overflow of this buffer. ! 1689: The total length of a single entry (excluding only escaped newlines) ! 1690: may not exceed 1024. ! 1691: .PP ! 1692: Not all programs support all entries.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.