termcap is a data base describing the capabilities of terminals. Terminals are described in termcap source descriptions by giving a set of capabilities which they have, by describing how operations are performed, by describing padding requirements, and by specifying initialization sequences. This database is used by applications programs such as vi.1 and libraries such as curses.3v so they can work with a variety of terminals without changes to the programs.
Each termcap entry consist of a number of colon-separated (:) fields. The first field for each terminal lists the various names by which it is known, separated by bar ( | ) characters. The first name is always two characters long, and is used by older (version 6) systems (which store the terminal type in a 16-bit word in a system-wide database). The second name given is the most common abbreviation for the terminal (this is the one to which the environment variable TERM would normally be set). The last name should fully identify the terminal's make and model. All other names are taken as synonyms for the initial terminal name. All names but the first and last should be in lower case and contain no blanks; the last name may well contain upper case and blanks for added readability.
Terminal names (except for the last, verbose entry) should be chosen using the following conventions:
Suffix Meaning Example -w wide mode (more than 80 columns) vt100-w -am with automatic margins (usually default) vt100-am -nam without automatic margins vt100-nam -n number of lines on the screen aaa-60 -na no arrow keys (leave them in local) concept100-na -np number of pages of memory concept100-4p -rv reverse video concept100-rv
Terminal entries may continue onto multiple lines by giving a \ as the last character of a line, and empty fields may be included for readability (here between the last field on a line and the first field on the next). Comments may be included on lines beginning with #.
Terminal capabilities each have a two-letter code, and are of three types:
A delay factor, in milliseconds may appear after the `='. Padding characters are supplied by tputs after the remainder of the string is sent. The delay can be either a number, or a number followed by the character `*', which indicates that the proportional padding is required, in which case the number given is the amount of padding for each line affected by an operation using that capability. (In the case of an insert-character operation, the factor is still the number of lines affected; this is always 1 unless the terminal has in and the software uses it.)
When a * is specified, it is sometimes useful to give a delay of the form 3.5 to specify a delay per line to tenths of milliseconds. (Only one decimal place is allowed.)
To comment-out a capability field, insert a `.' (period) as the first character in that field (following the :).
Finally, characters may be given as three octal digits after a backslash (for example, \123), and the characters ^ (caret) and \ (backslash) may be given as \^ and \\ respectively.
If it is necessary to place a : in a capability it must be escaped in octal as \072.
If it is necessary to place a NUL character in a string capability it must be encoded as \200. (The routines that deal with termcap use C strings and strip the high bits of the output very late, so that a \200 comes out as a \000 would.)
Cursor addressing and other strings requiring parameters are described by a parameterized string capability, with printf.3v escapes (%x) in it; other characters are passed through unchanged. For example, to address the cursor, the cm capability is given, using two parameters: the row and column to move to. (Rows and columns are numbered from zero and refer to the physical screen visible to the user, not to any unseen memory. If the terminal has memory-relative cursor addressing, that can be indicated by an analogous CM capability.)
The % escapes have the following meanings:
%% produce the character % %d output value as in printf %d %2 output value as in printf %2d %3 output value as in printf %3d %. output value as in printf %c %+x add x to value, then do `%.' %>xy if value > x then add y, no output %r reverse order of two parameters, no output %i increment by one, no output %n exclusive-or all parameters with 0140 (Datamedia 2500) %B BCD (16*(value/10)) + (value%10), no output %D Reverse coding (value - 2*(value%16)), no output (Delta Data)
Consider the Hewlett-Packard 2645, which, to get to row 3 and column 12, needs to be sent \E&a12c03Y padded for 6 milliseconds. Note: the order of the row and column coordinates is reversed here and that the row and column are sent as two-digit integers. Thus its cm capability is `:cm=6\E&%r%2c%2Y:'. Terminals that use `%.' need to be able to backspace the cursor (le) and to move the cursor up one line on the screen (up). This is necessary because it is not always safe to transmit \n, ^D, and \r, as the system may change or discard them. (Programs using termcap must set terminal modes so that TAB characters are not expanded, making \t safe to send. This turns out to be essential for the Ann Arbor 4080.)
A final example is the Lear Siegler ADM-3a, which offsets row and column by a blank character, thus it requires `:cm=\E=%+ %+:'.
Row or column absolute cursor addressing can be given as single-parameter capabilities ch (horizontal position absolute) and cv (vertical position absolute). Sometimes these are shorter than the more general two-parameter sequence (as with the Hewlett-Packard 2645) and can be used in preference to cm. If there are parameterized local motions (for example, move n positions to the right) these can be given as DO, LE, RI, and UP with a single parameter indicating how many positions to move. These are primarily useful if the terminal does not have cm, such as the Tektronix 4025.
Certain capabilities control padding in the terminal driver. These are primarily needed by hardcopy terminals and are used by the tset (1) program to set terminal driver modes appropriately. Delays embedded in the capabilities cr, sf, le, ff, and ta will set the appropriate delay bits in the terminal driver. If pb (padding baud rate) is given, these values can be ignored at baud rates below the value of pb. For 4.2BSD tset, the delays are given as numeric capabilities dC, dN, dB, dF, and dT instead.
If there are two very similar terminals, one can be defined as being just like the other with certain exceptions. The string capability tc can be given with the name of the similar terminal. This capability must be last, and the combined length of the entries must not exceed 1024. The capabilities given before tc override those in the terminal type invoked by tc. A capability can be canceled by placing xx@ to the left of the tc invocation, where xx is the capability. For example, the entry
hn|2621-nl:ks@:ke@:tc=2621:
defines a 2621-nl that does not have the ks or ke capabilities, hence does not turn on the function key labels when in visual mode. This is useful for different modes for a terminal, or for different user preferences.
The characters in the Notes field in the next table have the following meanings (more than one may apply to a capability):
N indicates numeric parameter(s) P indicates that padding may be specified * indicates that padding may be based on the number of lines affected o indicates capability is obsolete
Obsolete capabilities have no terminfo equivalents, since they were considered useless, or are subsumed by other capabilities. New software should not rely on them.
Name Type Notes Description !1 str sent by shifted save key !2 str sent by shifted suspend key !3 str sent by shifted undo key #1 str sent by shifted help key #2 str sent by shifted home key #3 str sent by shifted input key #4 str sent by shifted left-arrow key %0 str sent by redo key %1 str sent by help key %2 str sent by mark key %3 str sent by message key %4 str sent by move key %5 str sent by next-object key %6 str sent by open key %7 str sent by options key %8 str sent by previous-object key %9 str sent by print or copy key %a str sent by shifted message key %b str sent by shifted move key %c str sent by shifted next-object key %d str sent by shifted options key %e str sent by shifted previous-object key %f str sent by shifted print or copy key %g str sent by shifted redo key %h str sent by shifted replace key %i str sent by shifted right-arrow key %j str sent by shifted resume key &0 str sent by shifted cancel key &1 str sent by ref(erence) key &2 str sent by refresh key &3 str sent by replace key &4 str sent by restart key &5 str sent by resume key &6 str sent by save key &7 str sent by suspend key &8 str sent by undo key &9 str sent by shifted beg(inning) key *0 str sent by shifted find key *1 str sent by shifted cmd (command) key *2 str sent by shifted copy key *3 str sent by shifted create key *4 str sent by shifted delete-char key *5 str sent by shifted delete-line key *6 str sent by select key *7 str sent by shifted end key *8 str sent by shifted clear-line key *9 str sent by shifted exit key 5i bool printer will not echo on screen @0 str sent by find key @1 str sent by beg(inning) key @2 str sent by cancel key @3 str sent by close key @4 str sent by cmd (command) key @5 str sent by copy key @6 str sent by create key @7 str sent by end key @8 str sent by enter/send key (unreliable) @9 str sent by exit key AL str (NP*) add n new blank lines CC str terminal settable command character in prototype CM str (NP) memory-relative cursor motion to row m, column n DC str (NP*) delete n characters DL str (NP*) delete n lines DO str (NP*) move cursor down n lines EP bool (o) even parity F1-F9 str sent by function keys 11-19 FA-FZ str sent by function keys 20-45 Fa-Fr str sent by function keys 46-63 HC bool cursor is hard to see HD bool (o) half-duplex IC str (NP*) insert n blank characters K1 str sent by keypad upper left K2 str sent by keypad center K3 str sent by keypad upper right K4 str sent by keypad lower left K5 str sent by keypad lower right LC bool (o) lower-case only LE str (NP) move cursor left n positions LF str (P) turn off soft labels LO str (P) turn on soft labels MC str (P) clear left and right soft margins ML str (P) set soft left margin MR str (P) set soft right margin NL bool (o) \n is NEWLINE, not LINEFEED NP bool pad character does not exist NR bool ti does not reverse te Nl num number of labels on screen (start at 1) OP bool (o) odd parity RA str (P) turn off automatic margins RF str send next input character (for ptys) RI str (NP) move cursor right n positions RX str (P) turn off xoff/xon handshaking SA str (P) turn on automatic margins SF str (NP*) scroll forward n lines SR str (NP*) scroll backward n lines SX str (P) turn on xoff/xon handshaking UC bool (o) upper-case only UP str (NP*) move cursor up n lines XF str x-off character (default DC3) XN str x-on character (default DC1) ac str graphic character set pairs aAbBcC - def=VT100 ae str (P) end alternate character set al str (P*) add new blank line am bool terminal has automatic margins as str (P) start alternate character set bc str (o) backspace if not ^H bl str (P) audible signal (bell) bs bool (o) terminal can backspace with ^H bt str (P) back-tab bw bool le (backspace) wraps from column 0 to last column cb str (P) clear to beginning of line, inclusive cd str (P*) clear to end of display ce str (P) clear to end of line ch str (NP) set cursor column (horizontal position) cl str (P*) clear screen and home cursor cm str (NP) screen-relative cursor motion to row m, column n co num number of columns in a line cr str (P*) RETURN cs str (NP) change scrolling region to lines m through n (VT100) ct str (P) clear all tab stops cv str (NP) set cursor row (vertical position) dB num (o) milliseconds of bs delay needed (default 0) dC num (o) milliseconds of cr delay needed (default 0) dF num (o) milliseconds of ff delay needed (default 0) dN num (o) milliseconds of nl delay needed (default 0) dT num (o) milliseconds of horizontal tab delay needed (default 0) dV num (o) milliseconds of vertical tab delay needed (default 0) da bool display may be retained above the screen db bool display may be retained below the screen dc str (P*) delete character dl str (P*) delete line dm str enter delete mode do str down one line ds str disable status line eA str (P) enable graphic character set ec str (NP) erase n characters ed str end delete mode ei str end insert mode eo bool can erase overstrikes with a blank es bool escape can be used on the status line ff str (P*) hardcopy terminal page eject fs str return from status line gn bool generic line type (for example dialup, switch) hc bool hardcopy terminal hd str half-line down (forward 1/2 linefeed) ho str (P) home cursor hs bool has extra ``status line'' hu str half-line up (reverse 1/2 linefeed) hz bool cannot print ~s (Hazeltine) i1 str terminal initialization string (terminfo only) i3 str terminal initialization string (terminfo only) iP str pathname of program for initialization (terminfo only) ic str (P*) insert character if str name of file containing initialization string im str enter insert mode in bool insert mode distinguishes nulls ip str (P*) insert pad after character inserted is str terminal initialization string it num tab stops initially every n positions k0-k9 str sent by function keys 0-9 k; str sent by function key 10 kA str sent by insert-line key kB str sent by back-tab key kC str sent by clear-screen or erase key kD str sent by delete-character key kE str sent by clear-to-end-of-line key kF str sent by scroll-forward/down key kH str sent by home-down key kI str sent by insert-character or enter-insert-mode key kL str sent by delete-line key kM str sent by insert key while in insert mode kN str sent by next-page key kP str sent by previous-page key kR str sent by scroll-backward/up key kS str sent by clear-to-end-of-screen key kT str sent by set-tab key ka str sent by clear-all-tabs key kb str sent by backspace key kd str sent by down-arrow key ke str out of ``keypad transmit'' mode kh str sent by home key kl str sent by left-arrow key km bool has a ``meta'' key (shift, sets parity bit) kn num (o) number of function (k0-k9) keys (default 0) ko str (o) termcap entries for other non-function keys kr str sent by right-arrow key ks str put terminal in ``keypad transmit'' mode kt str sent by clear-tab key ku str sent by up-arrow key l0-l9 str labels on function keys 0-9 if not f0-f9 la str label on function key 10 if not f10 le str (P) move cursor left one position lh num number of rows in each label li num number of lines on screen or page ll str last line, first column lm num lines of memory if > li (0 means varies) lw num number of columns in each label ma str (o) arrow key map (used by vi version 2 only) mb str turn on blinking attribute md str turn on bold (extra bright) attribute me str turn off all attributes mh str turn on half-bright attribute mi bool safe to move while in insert mode mk str turn on blank attribute (characters invisible) ml str (o) memory lock on above cursor mm str turn on ``meta mode'' (8th bit) mo str turn off ``meta mode'' mp str turn on protected attribute mr str turn on reverse-video attribute ms bool safe to move in standout modes mu str (o) memory unlock (turn off memory lock) nc bool (o) no correctly-working cr (Datamedia 2500, Hazeltine 2000) nd str non-destructive space (cursor right) nl str (o) NEWLINE character if not \n ns bool (o) terminal is a CRT but does not scroll nw str (P) NEWLINE (behaves like cr followed by do) nx bool padding will not work, xoff/xon required os bool terminal overstrikes pO str (N) turn on the printer for n bytes pb num lowest baud where delays are required pc str pad character (default NUL) pf str turn off the printer pk str program function key n to type string s (terminfo only) pl str program function key n to execute string s (terminfo only) pn str (NP) program label n to show string s (terminfo only) po str turn on the printer ps str print contents of the screen pt bool (o) has hardware tab stops (may need to be set with is) px str program function key n to transmit string s (terminfo only) r1 str reset terminal completely to sane modes (terminfo only) r2 str reset terminal completely to sane modes (terminfo only) r3 str reset terminal completely to sane modes (terminfo only) rP str (P) like ip but when in replace mode rc str (P) restore cursor to position of last sc rf str name of file containing reset string ri ? unknown at present rp str (NP*) repeat character c n times rs str reset terminal completely to sane modes sa str (NP) define the video attributes (9 parameters) sc str (P) save cursor position se str end standout mode sf str (P) scroll text up sg num number of garbage chars left by so or se (default 0) so str begin standout mode sr str (P) scroll text down st str set a tab stop in all rows, current column ta str (P) move cursor to next 8-position hardware tab stop tc str entry of similar terminal - must be last te str string to end programs that use termcap ti str string to begin programs that use termcap ts str (N) go to status line, column n uc str underscore one character and move past it ue str end underscore mode ug num number of garbage chars left by us or ue (default 0) ul bool underline character overstrikes up str upline (cursor up) us str start underscore mode vb str visible bell (must not move cursor) ve str make cursor appear normal (undo vs/vi) vi str make cursor invisible vs str make cursor very visible vt num virtual terminal number (not supported on all systems) wi str (N) set current window to lines i through j, columns m through n ws num number of columns in status line xb bool Beehive (f1=ESC, f2=^C) xn bool NEWLINE ignored after 80 cols (Concept) xo bool terminal uses xoff/xon handshaking xr bool (o) RETURN acts like ce cr nl (Delta Data) xs bool standout not erased by overwriting (Hewlett-Packard) xt bool TAB characters destructive, magic so char (Teleray 1061) xx bool (o) Tektronix 4025 insert-line
If the environment variable TERMCAP contains an absolute pathname, programs look to that file for terminal descriptions, rather than /usr/share/lib/termcap. If the value of this variable is in the form of a termcap entry, programs use that value for the terminal description.
[a manual with the abbreviation ADMIN]
UNIX System V uses terminfo.5v rather than termcap. SunOS supports either termcap or terminfo.5v terminal databases, depending on whether you link with the termcap.3x or curses.3v libraries. Transitions between the two should be relatively painless if capabilities flagged as ``obsolete'' are avoided.
vi allows only 256 characters for string capabilities, and the routines in termcap.3x do not check for overflow of this buffer. The total length of a single entry (excluding only escaped NEWLINE characters) may not exceed 1024.
Not all programs support all entries.
Created by unroff & hp-tools. © somebody (See intro for details). All Rights Reserved. Last modified 11/5/97