|
|
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.