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