blob: 4d6daa38b6921905a721f0ee26daa52a97009616 [file] [log] [blame]
micky3879b9f5e72025-07-08 18:04:53 -04001.\"***************************************************************************
2.\" Copyright 2018-2023,2024 Thomas E. Dickey *
3.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
4.\" *
5.\" Permission is hereby granted, free of charge, to any person obtaining a *
6.\" copy of this software and associated documentation files (the *
7.\" "Software"), to deal in the Software without restriction, including *
8.\" without limitation the rights to use, copy, modify, merge, publish, *
9.\" distribute, distribute with modifications, sublicense, and/or sell *
10.\" copies of the Software, and to permit persons to whom the Software is *
11.\" furnished to do so, subject to the following conditions: *
12.\" *
13.\" The above copyright notice and this permission notice shall be included *
14.\" in all copies or substantial portions of the Software. *
15.\" *
16.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
17.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
18.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
19.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
20.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
21.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
22.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
23.\" *
24.\" Except as contained in this notice, the name(s) of the above copyright *
25.\" holders shall not be used in advertising or otherwise to promote the *
26.\" sale, use or other dealings in this Software without prior written *
27.\" authorization. *
28.\"***************************************************************************
29.\"
30.\" $Id: terminfo.tail,v 1.148 2024/04/20 21:24:19 tom Exp $
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053031.ps +1
micky3879b9f5e72025-07-08 18:04:53 -040032.SS "User-Defined Capabilities"
Steve Kondikae271bc2015-11-15 02:50:53 +010033.
34The preceding section listed the \fIpredefined\fP capabilities.
35They deal with some special features for terminals no longer
36(or possibly never) produced.
37Occasionally there are special features of newer terminals which
38are awkward or impossible to represent by reusing the predefined
39capabilities.
40.PP
micky3879b9f5e72025-07-08 18:04:53 -040041\fI\%ncurses\fP addresses this limitation by allowing user-defined
42capabilities.
Steve Kondikae271bc2015-11-15 02:50:53 +010043The \fB@TIC@\fP and \fB@INFOCMP@\fP programs provide
44the \fB\-x\fP option for this purpose.
45When \fB\-x\fP is set,
46\fB@TIC@\fP treats unknown capabilities as user-defined.
47That is, if \fB@TIC@\fP encounters a capability name
48which it does not recognize,
micky3879b9f5e72025-07-08 18:04:53 -040049it infers its type (Boolean, number or string) from the syntax
Steve Kondikae271bc2015-11-15 02:50:53 +010050and makes an extended table entry for that capability.
micky3879b9f5e72025-07-08 18:04:53 -040051The \fBuse_extended_names\fP(3X) function makes this information
Steve Kondikae271bc2015-11-15 02:50:53 +010052conditionally available to applications.
micky3879b9f5e72025-07-08 18:04:53 -040053The \fI\%ncurses\fP library provides the data leaving most of the
54behavior to applications:
Steve Kondikae271bc2015-11-15 02:50:53 +010055.bP
56User-defined capability strings whose name begins
57with \*(``k\*('' are treated as function keys.
58.bP
micky3879b9f5e72025-07-08 18:04:53 -040059The types (Boolean, number, string) determined by \fB@TIC@\fP
Steve Kondikae271bc2015-11-15 02:50:53 +010060can be inferred by successful calls on \fBtigetflag\fP, etc.
61.bP
62If the capability name happens to be two characters,
63the capability is also available through the termcap interface.
64.PP
65While termcap is said to be extensible because it does not use a predefined set
66of capabilities,
67in practice it has been limited to the capabilities defined by
68terminfo implementations.
69As a rule,
70user-defined capabilities intended for use by termcap applications should
micky3879b9f5e72025-07-08 18:04:53 -040071be limited to Booleans and numbers to avoid running past the 1023 byte
Steve Kondikae271bc2015-11-15 02:50:53 +010072limit assumed by termcap implementations and their applications.
73In particular, providing extended sets of function keys (past the 60
74numbered keys and the handful of special named keys) is best done using
75the longer names available using terminfo.
micky3879b9f5e72025-07-08 18:04:53 -040076.PP
77The \fI\%ncurses\fP library uses a few of these user-defined
78capabilities,
79as described in \fBuser_caps\fR(5).
80Other user-defined capabilities (including function keys) are
81described in the terminal database, in the section on
82.I "NCURSES USER-DEFINABLE CAPABILITIES"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053083.
micky3879b9f5e72025-07-08 18:04:53 -040084.SS "A Sample Entry"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053085.
86The following entry, describing an ANSI-standard terminal, is representative
micky3879b9f5e72025-07-08 18:04:53 -040087of what a \fBterminfo\fP entry for a modern terminal typically looks like.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053088.PP
micky3879b9f5e72025-07-08 18:04:53 -040089.EX
90\s-2ansi|ansi/pc\-term compatible with color,
Steve Kondikae271bc2015-11-15 02:50:53 +010091 am, mc5i, mir, msgr,
92 colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
micky3879b9f5e72025-07-08 18:04:53 -040093 acsc=+\e020\e,\e021\-\e030.\*^Y0\e333\(ga\e004a\e261f\e370g\e361h\e260
94 j\e331k\e277l\e332m\e300n\e305o\*~p\e304q\e304r\e304s_t\e303
95 u\e264v\e301w\e302x\e263y\e363z\e362{\e343|\e330}\e234\*~\e376,
96 bel=\*^G, blink=\eE[5m, bold=\eE[1m, cbt=\eE[Z, clear=\eE[H\eE[J,
97 cr=\*^M, cub=\eE[%p1%dD, cub1=\eE[D, cud=\eE[%p1%dB, cud1=\eE[B,
98 cuf=\eE[%p1%dC, cuf1=\eE[C, cup=\eE[%i%p1%d;%p2%dH,
99 cuu=\eE[%p1%dA, cuu1=\eE[A, dch=\eE[%p1%dP, dch1=\eE[P,
100 dl=\eE[%p1%dM, dl1=\eE[M, ech=\eE[%p1%dX, ed=\eE[J, el=\eE[K,
101 el1=\eE[1K, home=\eE[H, hpa=\eE[%i%p1%dG, ht=\eE[I, hts=\eEH,
102 ich=\eE[%p1%d@, il=\eE[%p1%dL, il1=\eE[L, ind=\*^J,
103 indn=\eE[%p1%dS, invis=\eE[8m, kbs=\*^H, kcbt=\eE[Z, kcub1=\eE[D,
104 kcud1=\eE[B, kcuf1=\eE[C, kcuu1=\eE[A, khome=\eE[H, kich1=\eE[L,
105 mc4=\eE[4i, mc5=\eE[5i, nel=\er\eE[S, op=\eE[39;49m,
106 rep=%p1%c\eE[%p2%{1}%\-%db, rev=\eE[7m, rin=\eE[%p1%dT,
107 rmacs=\eE[10m, rmpch=\eE[10m, rmso=\eE[m, rmul=\eE[m,
108 s0ds=\eE(B, s1ds=\eE)B, s2ds=\eE*B, s3ds=\eE+B,
109 setab=\eE[4%p1%dm, setaf=\eE[3%p1%dm,
110 sgr=\eE[0;10%?%p1%t;7%;
Steve Kondikae271bc2015-11-15 02:50:53 +0100111 %?%p2%t;4%;
112 %?%p3%t;7%;
113 %?%p4%t;5%;
114 %?%p6%t;1%;
115 %?%p7%t;8%;
116 %?%p9%t;11%;m,
micky3879b9f5e72025-07-08 18:04:53 -0400117 sgr0=\eE[0;10m, smacs=\eE[11m, smpch=\eE[11m, smso=\eE[7m,
118 smul=\eE[4m, tbc=\eE[3g, u6=\eE[%i%d;%dR, u7=\eE[6n,
119 u8=\eE[?%[;0123456789]c, u9=\eE[c, vpa=\eE[%i%p1%dd,
120.EE
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530121.PP
122Entries may continue onto multiple lines by placing white space at
123the beginning of each line except the first.
Steve Kondikae271bc2015-11-15 02:50:53 +0100124Comments may be included on lines beginning with \*(``#\*(''.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530125Capabilities in
126.I terminfo
127are of three types:
Steve Kondikae271bc2015-11-15 02:50:53 +0100128.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530129Boolean capabilities which indicate that the terminal has
Steve Kondikae271bc2015-11-15 02:50:53 +0100130some particular feature,
131.bP
132numeric capabilities giving the size of the terminal
133or the size of particular delays, and
134.bP
135string
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530136capabilities, which give a sequence which can be used to perform particular
137terminal operations.
micky3879b9f5e72025-07-08 18:04:53 -0400138.SS "Types of Capabilities"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530139All capabilities have names.
140For instance, the fact that
141ANSI-standard terminals have
142.I "automatic margins"
143(i.e., an automatic return and line-feed
micky3879b9f5e72025-07-08 18:04:53 -0400144when the end of a line is reached) is indicated by the capability \fBam\fP.
145Hence the description of ansi includes \fBam\fP.
146Numeric capabilities are followed by the character \*(``#\*(''
147and then a positive value.
148Thus \fBcols\fP, which indicates the number of columns the terminal has,
Steve Kondikae271bc2015-11-15 02:50:53 +0100149gives the value \*(``80\*('' for ansi.
micky3879b9f5e72025-07-08 18:04:53 -0400150Values for numeric capabilities may be specified in
151decimal,
152octal, or
153hexadecimal,
154using the C programming language conventions
155(e.g., 255, 0377 and 0xff or 0xFF).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530156.PP
micky3879b9f5e72025-07-08 18:04:53 -0400157Finally, string valued capabilities,
158such as \fBel\fP (clear to end of line sequence)
159are given by the two-character code,
160an \*(``=\*('', and then
161a string ending at the next following \*(``,\*(''.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530162.PP
163A number of escape sequences are provided in the string valued capabilities
micky3879b9f5e72025-07-08 18:04:53 -0400164for easy encoding of characters there:
165.bP
166Both \fB\eE\fP and \fB\ee\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530167map to an \s-1ESCAPE\s0 character,
micky3879b9f5e72025-07-08 18:04:53 -0400168.bP
169\fB\*^\f(BIx\fR maps to a control-\fIx\fP for any appropriate \fIx\fP,
170and
171.bP
172the sequences
173.RS 6
174.PP
175\fB\en\fP, \fB\el\fP, \fB\er\fP, \fB\et\fP, \fB\eb\fP, \fB\ef\fP, and \fB\es\fP
176.RE
177.IP
178produce
179.RS 6
180.PP
181\fInewline\fP, \fIline-feed\fP, \fIreturn\fP, \fItab\fP, \fIbackspace\fP, \fIform-feed\fP, and \fIspace\fP,
182.RE
183.IP
184respectively.
185.PP
186X/Open Curses does not say what \*(``appropriate \fIx\fP\*('' might be.
187In practice, that is a printable ASCII graphic character.
188The special case \*(``\*^?\*('' is interpreted as DEL (127).
189In all other cases, the character value is AND'd with 0x1f,
190mapping to ASCII control codes in the range 0 through 31.
191.PP
Steve Kondikae271bc2015-11-15 02:50:53 +0100192Other escapes include
193.bP
micky3879b9f5e72025-07-08 18:04:53 -0400194\fB\e\*^\fP for \fB\*^\fP,
Steve Kondikae271bc2015-11-15 02:50:53 +0100195.bP
micky3879b9f5e72025-07-08 18:04:53 -0400196\fB\e\e\fP for \fB\e\fP,
Steve Kondikae271bc2015-11-15 02:50:53 +0100197.bP
micky3879b9f5e72025-07-08 18:04:53 -0400198\fB\e\fP, for comma,
Steve Kondikae271bc2015-11-15 02:50:53 +0100199.bP
micky3879b9f5e72025-07-08 18:04:53 -0400200\fB\e:\fP for \fB:\fP,
Steve Kondikae271bc2015-11-15 02:50:53 +0100201.bP
micky3879b9f5e72025-07-08 18:04:53 -0400202and \fB\e0\fP for null.
Steve Kondikae271bc2015-11-15 02:50:53 +0100203.IP
micky3879b9f5e72025-07-08 18:04:53 -0400204\fB\e0\fP will produce \e200, which does not terminate a string but behaves
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530205as a null character on most terminals, providing CS7 is specified.
micky3879b9f5e72025-07-08 18:04:53 -0400206See \fBstty\fP(1).
Steve Kondikae271bc2015-11-15 02:50:53 +0100207.IP
208The reason for this quirk is to maintain binary compatibility of the
209compiled terminfo files with other implementations,
210e.g., the SVr4 systems, which document this.
211Compiled terminfo files use null-terminated strings, with no lengths.
micky3879b9f5e72025-07-08 18:04:53 -0400212Modifying this would require a new binary format,
Steve Kondikae271bc2015-11-15 02:50:53 +0100213which would not work with other implementations.
214.PP
micky3879b9f5e72025-07-08 18:04:53 -0400215Finally, characters may be given as three octal digits after a \fB\e\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530216.PP
217A delay in milliseconds may appear anywhere in a string capability, enclosed in
micky3879b9f5e72025-07-08 18:04:53 -0400218$<..> brackets, as in \fBel\fP=\eEK$<5>,
219and padding characters are supplied by \fBtputs\fP(3X)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530220to provide this delay.
micky3879b9f5e72025-07-08 18:04:53 -0400221.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530222The delay must be a number with at most one decimal
micky3879b9f5e72025-07-08 18:04:53 -0400223place of precision;
224it may be followed by suffixes \*(``*\*('' or \*(``/\*('' or both.
225.bP
Steve Kondikae271bc2015-11-15 02:50:53 +0100226A \*(``*\*(''
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530227indicates that the padding required is proportional to the number of lines
228affected by the operation, and the amount given is the per-affected-unit
229padding required.
230(In the case of insert character, the factor is still the
micky3879b9f5e72025-07-08 18:04:53 -0400231number of \fIlines\fP affected.)
232.IP
233Normally, padding is advisory if the device has the \fBxon\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530234capability; it is used for cost computation but does not trigger delays.
micky3879b9f5e72025-07-08 18:04:53 -0400235.bP
Steve Kondikae271bc2015-11-15 02:50:53 +0100236A \*(``/\*(''
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530237suffix indicates that the padding is mandatory and forces a delay of the given
micky3879b9f5e72025-07-08 18:04:53 -0400238number of milliseconds even on devices for which \fBxon\fP is present to
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530239indicate flow control.
240.PP
241Sometimes individual capabilities must be commented out.
242To do this, put a period before the capability name.
243For example, see the second
244.B ind
245in the example above.
246.br
247.ne 5
micky3879b9f5e72025-07-08 18:04:53 -0400248.SS "Fetching Compiled Descriptions"
249Terminal descriptions in \fI\%ncurses\fP are stored in terminal
250databases.
251These databases, which are found by their pathname,
252may be configured either as directory trees or hashed databases
253(see \fBterm\fR(5)),
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530254.PP
micky3879b9f5e72025-07-08 18:04:53 -0400255The library uses a compiled-in list of pathnames,
Steve Kondikae271bc2015-11-15 02:50:53 +0100256which can be overridden by environment variables.
257Before starting to search,
micky3879b9f5e72025-07-08 18:04:53 -0400258\fI\%ncurses\fP checks the search list,
259eliminating duplicates and pathnames where no terminal database is found.
260The \fI\%ncurses\fP library reads the first description
261which passes its consistency checks.
Steve Kondikae271bc2015-11-15 02:50:53 +0100262.bP
micky3879b9f5e72025-07-08 18:04:53 -0400263The environment variable \fBTERMINFO\fR is checked first, for
264a terminal database containing the terminal description.
Steve Kondikae271bc2015-11-15 02:50:53 +0100265.bP
micky3879b9f5e72025-07-08 18:04:53 -0400266Next,
267\fI\%ncurses\fP looks in \fI$HOME/.terminfo\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530268for a compiled description.
Steve Kondikae271bc2015-11-15 02:50:53 +0100269.IP
micky3879b9f5e72025-07-08 18:04:53 -0400270This is an optional feature which may be omitted entirely from
271the library, or limited to prevent accidental use by privileged applications.
Steve Kondikae271bc2015-11-15 02:50:53 +0100272.bP
micky3879b9f5e72025-07-08 18:04:53 -0400273Next,
274if the environment variable \fI\%TERMINFO_DIRS\fP is set,
275\fI\%ncurses\fP interprets the contents of that variable
276as a list of colon-separated pathnames of terminal databases to be searched.
277.IP
278An empty pathname (i.e., if the variable begins or ends
279with a colon, or contains adjacent colons)
280is interpreted as the system location \fI\*d\fP.
281.bP
282Finally, \fI\%ncurses\fP searches these compiled-in locations:
Steve Kondikae271bc2015-11-15 02:50:53 +0100283.RS
284.bP
285a list of directories (@TERMINFO_DIRS@), and
286.bP
micky3879b9f5e72025-07-08 18:04:53 -0400287the system terminfo directory, \fI\*d\fP
Steve Kondikae271bc2015-11-15 02:50:53 +0100288.RE
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530289.PP
micky3879b9f5e72025-07-08 18:04:53 -0400290The \fBTERMINFO\fP variable can contain a terminal description instead
291of the pathname of a terminal database.
292If this variable begins with \*(``hex:\*('' or \*(``b64:\*(''
293then \fI\%ncurses\fP reads a terminal description from
294hexadecimal- or base64-encoded data,
295and if that description matches the name sought, will use that.
296This encoded data can be set using the \*(``\-Q\*('' option of
297\fB@TIC@\fR or \fB@INFOCMP@\fR.
298.PP
299The preceding addresses the usual configuration of \fI\%ncurses\fP,
300which uses terminal descriptions prepared in \fIterminfo\fP format.
301While \fItermcap\fP is less expressive,
302\fI\%ncurses\fP can also be configured to read \fItermcap\fP
303descriptions.
304In that configuration,
305it checks the \fI\%TERMCAP\fP and \fI\%TERMPATH\fP variables
306(for content and search path,
307respectively)
308after the system terminal database.
309.SS "Preparing Descriptions"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530310We now outline how to prepare descriptions of terminals.
311The most effective way to prepare a terminal description is by imitating
312the description of a similar terminal in
313.I terminfo
314and to build up a description gradually, using partial descriptions
315with
316.I vi
317or some other screen-oriented program to check that they are correct.
318Be aware that a very unusual terminal may expose deficiencies in
319the ability of the
320.I terminfo
321file to describe it
322or bugs in the screen-handling code of the test program.
323.PP
324To get the padding for insert line right (if the terminal manufacturer
325did not document it) a severe test is to edit a large file at 9600 baud,
Steve Kondikae271bc2015-11-15 02:50:53 +0100326delete 16 or so lines from the middle of the screen, then hit the \*(``u\*(''
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530327key several times quickly.
328If the terminal messes up, more padding is usually needed.
329A similar test can be used for insert character.
micky3879b9f5e72025-07-08 18:04:53 -0400330.SS "Basic Capabilities"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530331The number of columns on each line for the terminal is given by the
micky3879b9f5e72025-07-08 18:04:53 -0400332\fBcols\fP numeric capability.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530333If the terminal is a \s-1CRT\s0, then the
micky3879b9f5e72025-07-08 18:04:53 -0400334number of lines on the screen is given by the \fBlines\fP capability.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530335If the terminal wraps around to the beginning of the next line when
micky3879b9f5e72025-07-08 18:04:53 -0400336it reaches the right margin, then it should have the \fBam\fP capability.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530337If the terminal can clear its screen, leaving the cursor in the home
micky3879b9f5e72025-07-08 18:04:53 -0400338position, then this is given by the \fBclear\fP string capability.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530339If the terminal overstrikes
340(rather than clearing a position when a character is struck over)
micky3879b9f5e72025-07-08 18:04:53 -0400341then it should have the \fBos\fP capability.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530342If the terminal is a printing terminal, with no soft copy unit,
343give it both
344.B hc
345and
346.BR os .
347.RB ( os
348applies to storage scope terminals, such as \s-1TEKTRONIX\s+1 4010
349series, as well as hard copy and APL terminals.)
350If there is a code to move the cursor to the left edge of the current
351row, give this as
352.BR cr .
micky3879b9f5e72025-07-08 18:04:53 -0400353(Normally this will be carriage return, control/M.)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530354If there is a code to produce an audible signal (bell, beep, etc)
355give this as
356.BR bel .
357.PP
358If there is a code to move the cursor one position to the left
359(such as backspace) that capability should be given as
360.BR cub1 .
361Similarly, codes to move to the right, up, and down should be
362given as
363.BR cuf1 ,
364.BR cuu1 ,
365and
366.BR cud1 .
367These local cursor motions should not alter the text they pass over,
Steve Kondikae271bc2015-11-15 02:50:53 +0100368for example, you would not normally use \*(``\fBcuf1\fP=\ \*('' because the
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530369space would erase the character moved over.
370.PP
371A very important point here is that the local cursor motions encoded
372in
373.I terminfo
374are undefined at the left and top edges of a \s-1CRT\s0 terminal.
375Programs should never attempt to backspace around the left edge,
376unless
377.B bw
378is given,
379and never attempt to go up locally off the top.
380In order to scroll text up, a program will go to the bottom left corner
381of the screen and send the
382.B ind
383(index) string.
384.PP
385To scroll text down, a program goes to the top left corner
386of the screen and sends the
387.B ri
388(reverse index) string.
389The strings
390.B ind
391and
392.B ri
393are undefined when not on their respective corners of the screen.
394.PP
395Parameterized versions of the scrolling sequences are
396.B indn
397and
398.B rin
399which have the same semantics as
400.B ind
401and
402.B ri
403except that they take one parameter, and scroll that many lines.
404They are also undefined except at the appropriate edge of the screen.
405.PP
micky3879b9f5e72025-07-08 18:04:53 -0400406The \fBam\fP capability tells whether the cursor sticks at the right
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530407edge of the screen when text is output, but this does not necessarily
408apply to a
409.B cuf1
410from the last column.
411The only local motion which is defined from the left edge is if
412.B bw
413is given, then a
414.B cub1
415from the left edge will move to the right edge of the previous row.
416If
417.B bw
418is not given, the effect is undefined.
419This is useful for drawing a box around the edge of the screen, for example.
420If the terminal has switch selectable automatic margins,
421the
422.I terminfo
micky3879b9f5e72025-07-08 18:04:53 -0400423file usually assumes that this is on; i.e., \fBam\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530424If the terminal has a command which moves to the first column of the next
425line, that command can be given as
426.B nel
427(newline).
428It does not matter if the command clears the remainder of the current line,
429so if the terminal has no
430.B cr
431and
432.B lf
433it may still be possible to craft a working
434.B nel
435out of one or both of them.
436.PP
micky3879b9f5e72025-07-08 18:04:53 -0400437These capabilities suffice to describe
438hard-copy and \*(``glass-tty\*('' terminals.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530439Thus the model 33 teletype is described as
440.PP
micky3879b9f5e72025-07-08 18:04:53 -0400441.EX
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530442.\".in -2
443\s-133\||\|tty33\||\|tty\||\|model 33 teletype,
micky3879b9f5e72025-07-08 18:04:53 -0400444 bel=\*^G, cols#72, cr=\*^M, cud1=\*^J, hc, ind=\*^J, os,\s+1
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530445.\".in +2
micky3879b9f5e72025-07-08 18:04:53 -0400446.EE
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530447.PP
448while the Lear Siegler \s-1ADM-3\s0 is described as
449.PP
micky3879b9f5e72025-07-08 18:04:53 -0400450.EX
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530451.\".in -2
452\s-1adm3\||\|3\||\|lsi adm3,
micky3879b9f5e72025-07-08 18:04:53 -0400453 am, bel=\*^G, clear=\*^Z, cols#80, cr=\*^M, cub1=\*^H, cud1=\*^J,
454 ind=\*^J, lines#24,\s+1
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530455.\".in +2
micky3879b9f5e72025-07-08 18:04:53 -0400456.EE
457.SS "Parameterized Strings"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530458Cursor addressing and other strings requiring parameters
459in the terminal are described by a
Steve Kondikae271bc2015-11-15 02:50:53 +0100460parameterized string capability,
micky3879b9f5e72025-07-08 18:04:53 -0400461with \fIprintf\fP-like escapes such as \fI%x\fP in it.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530462For example, to address the cursor, the
463.B cup
464capability is given, using two parameters:
465the row and column to address to.
466(Rows and columns are numbered from zero and refer to the
467physical screen visible to the user, not to any unseen memory.)
468If the terminal has memory relative cursor addressing,
469that can be indicated by
470.BR mrcup .
471.PP
472The parameter mechanism uses a stack and special \fB%\fP codes
473to manipulate it.
474Typically a sequence will push one of the
475parameters onto the stack and then print it in some format.
micky3879b9f5e72025-07-08 18:04:53 -0400476Print (e.g., \*(``%d\*('') is a special case.
477Other operations, including \*(``%t\*('' pop their operand from the stack.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530478It is noted that more complex operations are often necessary,
479e.g., in the \fBsgr\fP string.
480.PP
micky3879b9f5e72025-07-08 18:04:53 -0400481The \fB%\fP encodings have the following meanings:
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530482.TP 5
Steve Kondikae271bc2015-11-15 02:50:53 +0100483\fB%%\fP
484outputs \*(``%\*(''
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530485.TP
micky3879b9f5e72025-07-08 18:04:53 -0400486\fB%\fI[[\fR:\fI]flags][width[.precision]][\fBdoxXs\fI]\fR
487as in \fBprintf\fP(3), flags are \fI[\-+#]\fP and \fIspace\fP.
Steve Kondikae271bc2015-11-15 02:50:53 +0100488Use a \*(``:\*('' to allow the next character to be a \*(``\-\*('' flag,
micky3879b9f5e72025-07-08 18:04:53 -0400489avoiding interpreting \*(``%\-\*('' as an operator.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530490.TP
micky3879b9f5e72025-07-08 18:04:53 -0400491\fB%c\fP
492print \fIpop()\fP like %c in \fBprintf\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530493.TP
Steve Kondikae271bc2015-11-15 02:50:53 +0100494\fB%s\fP
micky3879b9f5e72025-07-08 18:04:53 -0400495print \fIpop()\fP like %s in \fBprintf\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530496.TP
micky3879b9f5e72025-07-08 18:04:53 -0400497\fB%p\fI[1\-9]\fR
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530498push \fIi\fP'th parameter
499.TP
micky3879b9f5e72025-07-08 18:04:53 -0400500\fB%P\fI[a\-z]\fR
501set dynamic variable \fI[a\-z]\fP to \fIpop()\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530502.TP
micky3879b9f5e72025-07-08 18:04:53 -0400503\fB%g\fI[a\-z]\fR
Steve Kondikae271bc2015-11-15 02:50:53 +0100504get dynamic variable \fI[a\-z]\fP and push it
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530505.TP
micky3879b9f5e72025-07-08 18:04:53 -0400506\fB%P\fI[A\-Z]\fR
Steve Kondikae271bc2015-11-15 02:50:53 +0100507set static variable \fI[a\-z]\fP to \fIpop()\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530508.TP
micky3879b9f5e72025-07-08 18:04:53 -0400509\fB%g\fI[A\-Z]\fR
Steve Kondikae271bc2015-11-15 02:50:53 +0100510get static variable \fI[a\-z]\fP and push it
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530511.IP
micky3879b9f5e72025-07-08 18:04:53 -0400512The terms \*(``static\*('' and \*(``dynamic\*('' are misleading.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530513Historically, these are simply two different sets of variables,
micky3879b9f5e72025-07-08 18:04:53 -0400514whose values are not reset between calls to \fBtparm\fP(3X).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530515However, that fact is not documented in other implementations.
micky3879b9f5e72025-07-08 18:04:53 -0400516Relying on it will adversely impact portability to other implementations:
517.RS
518.bP
519SVr2 curses supported \fIdynamic\fP variables.
520Those are set only by a \fB%P\fP operator.
521A \fB%g\fP for a given variable without first setting it with \fB%P\fP
522will give unpredictable results, because dynamic variables are
523an uninitialized local array on the stack in the \fBtparm\fP function.
524.bP
525SVr3.2 curses supported \fIstatic\fP variables.
526Those are an array in the \fI\%TERMINAL\fP
527structure (declared in \fBterm.h\fP),
528and are zeroed automatically when the \fBsetupterm\fP function
529allocates the data.
530.bP
531SVr4 curses made no further improvements
532to the \fIdynamic/static\fP variable feature.
533.bP
534Solaris XPG4 curses does not distinguish between \fIdynamic\fP and
535\fIstatic\fP variables.
536They are the same.
537Like SVr4 curses, XPG4 curses does not initialize these explicitly.
538.bP
539Before version 6.3,
540\fI\%ncurses\fP stores both \fIdynamic\fP and \fIstatic\fP
541variables in persistent storage, initialized to zeros.
542.bP
543Beginning with version 6.3,
544\fI\%ncurses\fP stores \fIstatic\fP and \fIdynamic\fP
545variables in the same manner as SVr4.
546.RS
547.bP
548Unlike other implementations, \fI\%ncurses\fP zeros dynamic variables
549before the first \fB%g\fP or \fB%P\fP operator.
550.bP
551Like SVr2,
552the scope of dynamic variables in \fI\%ncurses\fP
553is within the current call to
554\fBtparm\fP.
555Use static variables if persistent storage is needed.
556.RE
557.RE
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530558.TP
micky3879b9f5e72025-07-08 18:04:53 -0400559\fB%\*'\fIc\fB\*'\fR
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530560char constant \fIc\fP
561.TP
micky3879b9f5e72025-07-08 18:04:53 -0400562\fB%{\fInn\fB}\fR
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530563integer constant \fInn\fP
564.TP
Steve Kondikae271bc2015-11-15 02:50:53 +0100565\fB%l\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530566push strlen(pop)
567.TP
Steve Kondikae271bc2015-11-15 02:50:53 +0100568\fB%+\fP, \fB%\-\fP, \fB%*\fP, \fB%/\fP, \fB%m\fP
micky3879b9f5e72025-07-08 18:04:53 -0400569arithmetic (%m is \fImod\fP): \fIpush(pop() op pop())\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530570.TP
micky3879b9f5e72025-07-08 18:04:53 -0400571\fB%&\fP, \fB%|\fP, \fB%\*^\fP
Steve Kondikae271bc2015-11-15 02:50:53 +0100572bit operations (AND, OR and exclusive-OR): \fIpush(pop() op pop())\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530573.TP
Steve Kondikae271bc2015-11-15 02:50:53 +0100574\fB%=\fP, \fB%>\fP, \fB%<\fP
575logical operations: \fIpush(pop() op pop())\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530576.TP
Steve Kondikae271bc2015-11-15 02:50:53 +0100577\fB%A\fP, \fB%O\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530578logical AND and OR operations (for conditionals)
579.TP
micky3879b9f5e72025-07-08 18:04:53 -0400580\fB%!\fP, \fB%\*~\fP
581unary operations (logical and bit complement): \fIpush(op pop())\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530582.TP
Steve Kondikae271bc2015-11-15 02:50:53 +0100583\fB%i\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530584add 1 to first two parameters (for ANSI terminals)
585.TP
Steve Kondikae271bc2015-11-15 02:50:53 +0100586\fB%?\fP \fIexpr\fP \fB%t\fP \fIthenpart\fP \fB%e\fP \fIelsepart\fP \fB%;\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530587This forms an if-then-else.
Steve Kondikae271bc2015-11-15 02:50:53 +0100588The \fB%e\fP \fIelsepart\fP is optional.
589Usually the \fB%?\fP \fIexpr\fP part pushes a value onto the stack,
590and \fB%t\fP pops it from the stack, testing if it is nonzero (true).
591If it is zero (false), control passes to the \fB%e\fP (else) part.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530592.IP
593It is possible to form else-if's a la Algol 68:
594.RS
Steve Kondikae271bc2015-11-15 02:50:53 +0100595\fB%?\fP c\d1\u \fB%t\fP b\d1\u \fB%e\fP c\d2\u \fB%t\fP b\d2\u \fB%e\fP c\d3\u \fB%t\fP b\d3\u \fB%e\fP c\d4\u \fB%t\fP b\d4\u \fB%e\fP \fB%;\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530596.RE
597.IP
598where c\di\u are conditions, b\di\u are bodies.
599.IP
Steve Kondikae271bc2015-11-15 02:50:53 +0100600Use the \fB\-f\fP option of \fB@TIC@\fP or \fB@INFOCMP@\fP to see
601the structure of if-then-else's.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530602Some strings, e.g., \fBsgr\fP can be very complicated when written
603on one line.
Steve Kondikae271bc2015-11-15 02:50:53 +0100604The \fB\-f\fP option splits the string into lines with the parts indented.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530605.PP
606Binary operations are in postfix form with the operands in the usual order.
micky3879b9f5e72025-07-08 18:04:53 -0400607That is, to get x\-5 one would use \*(``%gx%{5}%\-\*(''.
Steve Kondikae271bc2015-11-15 02:50:53 +0100608\fB%P\fP and \fB%g\fP variables are
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530609persistent across escape-string evaluations.
610.PP
611Consider the HP2645, which, to get to row 3 and column 12, needs
612to be sent \eE&a12c03Y padded for 6 milliseconds.
micky3879b9f5e72025-07-08 18:04:53 -0400613The order of the rows and columns is inverted here,
614and the row and column are printed as two digits.
615The corresponding terminal description is expressed thus:
616.RS
617cup=\eE&a%p2%dc%p1%dY$<6>,
618.RE
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530619.PP
620The Microterm \s-1ACT-IV\s0 needs the current row and column sent
micky3879b9f5e72025-07-08 18:04:53 -0400621preceded by a \fB\*^T\fP, with the row and column simply encoded in binary,
622.RS
623cup=\*^T%p1%c%p2%c
624.RE
625.PP
626Terminals which use \*(``%c\*('' need to be able to
627backspace the cursor (\fBcub1\fP),
628and to move the cursor up one line on the screen (\fBcuu1\fP).
629This is necessary because it is not always safe to transmit \fB\en\fP
630\fB\*^D\fP and \fB\er\fP, as the system may change or discard them.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530631(The library routines dealing with terminfo set tty modes so that
632tabs are never expanded, so \et is safe to send.
633This turns out to be essential for the Ann Arbor 4080.)
634.PP
635A final example is the \s-1LSI ADM\s0-3a, which uses row and column
micky3879b9f5e72025-07-08 18:04:53 -0400636offset by a blank character, thus
637.RS
638cup=\eE=%p1%\*' \*'%+%c%p2%\*' \*'%+%c
639.RE
640.PP
Steve Kondikae271bc2015-11-15 02:50:53 +0100641After sending \*(``\eE=\*('', this pushes the first parameter, pushes the
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530642ASCII value for a space (32), adds them (pushing the sum on the stack
643in place of the two previous values) and outputs that value as a character.
644Then the same is done for the second parameter.
645More complex arithmetic is possible using the stack.
micky3879b9f5e72025-07-08 18:04:53 -0400646.SS "Cursor Motions"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530647If the terminal has a fast way to home the cursor
648(to very upper left corner of screen) then this can be given as
micky3879b9f5e72025-07-08 18:04:53 -0400649\fBhome\fP; similarly a fast way of getting to the lower left-hand corner
650can be given as \fBll\fP; this may involve going up with \fBcuu1\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530651from the home position,
micky3879b9f5e72025-07-08 18:04:53 -0400652but a program should never do this itself (unless \fBll\fP does) because it
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530653can make no assumption about the effect of moving up from the home position.
654Note that the home position is the same as addressing to (0,0):
655to the top left corner of the screen, not of memory.
656(Thus, the \eEH sequence on HP terminals cannot be used for
657.BR home .)
658.PP
659If the terminal has row or column absolute cursor addressing,
660these can be given as single parameter capabilities
661.B hpa
662(horizontal position absolute)
663and
664.B vpa
665(vertical position absolute).
666Sometimes these are shorter than the more general two parameter
667sequence (as with the hp2645) and can be used in preference to
668.BR cup .
669If there are parameterized local motions (e.g., move
670.I n
671spaces to the right) these can be given as
672.BR cud ,
673.BR cub ,
674.BR cuf ,
675and
micky3879b9f5e72025-07-08 18:04:53 -0400676.B cuu
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530677with a single parameter indicating how many spaces to move.
678These are primarily useful if the terminal does not have
679.BR cup ,
680such as the \s-1TEKTRONIX\s+1 4025.
681.PP
682If the terminal needs to be in a special mode when running
683a program that uses these capabilities,
micky3879b9f5e72025-07-08 18:04:53 -0400684the codes to enter and exit this mode can be given
685as \fBsmcup\fP and \fBrmcup\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530686This arises, for example, from terminals like the Concept with more than
687one page of memory.
688If the terminal has only memory relative cursor addressing and not screen
689relative cursor addressing, a one screen-sized window must be fixed into
690the terminal for cursor addressing to work properly.
691This is also used for the \s-1TEKTRONIX\s+1 4025,
692where
693.B smcup
694sets the command character to be the one used by terminfo.
695If the \fBsmcup\fP sequence will not restore the screen after an
696\fBrmcup\fP sequence is output (to the state prior to outputting
697\fBrmcup\fP), specify \fBnrrmc\fP.
micky3879b9f5e72025-07-08 18:04:53 -0400698.SS Margins
699SVr4 (and X/Open Curses)
700list several string capabilities for setting margins.
701Two were intended for use with terminals,
702and another six were intended for use with printers.
703.bP
704The two terminal capabilities assume that the terminal may have
705the capability of setting the left and/or right margin at the current
706cursor column position.
707.bP
708The printer capabilities assume that the printer may have
709two types of capability:
710.RS
711.bP
712the ability to set a top and/or bottom margin using the current
713line position, and
714.bP
715parameterized capabilities for setting the top, bottom, left, right margins
716given the number of rows or columns.
717.RE
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530718.PP
micky3879b9f5e72025-07-08 18:04:53 -0400719In practice, the categorization into \*(``terminal\*('' and \*(``printer\*(''
720is not suitable:
721.bP
722The AT&T SVr4 terminal database uses \fBsmgl\fP four times,
723for AT&T hardware.
724.IP
725Three of the four are printers.
726They lack the ability to set left/right margins by specifying the column.
727.bP
728Other (non-AT&T) terminals may support margins
729but using different assumptions from AT&T.
730.IP
731For instance, the DEC VT420 supports left/right margins,
732but only using a column parameter.
733As an added complication, the VT420 uses two settings to fully enable
734left/right margins (left/right margin mode, and origin mode).
735The former enables the margins, which causes printed text
736to wrap within margins, but the latter is needed to prevent
737cursor-addressing outside those margins.
738.bP
739Both DEC VT420 left/right margins are set with a single control sequence.
740If either is omitted, the corresponding margin is set to the left or
741right edge of the display (rather than leaving the margin unmodified).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530742.PP
micky3879b9f5e72025-07-08 18:04:53 -0400743These are the margin-related capabilities:
744.PP
745.TS
746center;
747lb lb
748lb l .
749Name Description
750_
751smgl Set left margin at current column
752smgr Set right margin at current column
753smgb Set bottom margin at current line
754smgt Set top margin at current line
755smgbp Set bottom margin at line \fIN\fP
756smglp Set left margin at column \fIN\fP
757smgrp Set right margin at column \fIN\fP
758smgtp Set top margin at line \fIN\fP
759smglr Set both left and right margins to \fIL\fP and \fIR\fP
760smgtb Set both top and bottom margins to \fIT\fP and \fIB\fP
761.TE
762.PP
763When writing an application that
764uses these string capabilities,
765the pairs should be first checked to see
766if each capability in the pair is set or only one is set:
767.bP
768If both \fBsmglp\fP and \fBsmgrp\fP are set,
769each is used with a single argument, \fIN\fP,
770that gives the column number of the left and right margin, respectively.
771.bP
772If both \fBsmgtp\fP and \fBsmgbp\fP are set,
773each is used to set the top and bottom margin,
774respectively:
775.RS 4
776.bP
777\fBsmgtp\fP is used with a single argument, \fIN\fP,
778the line number of the top margin.
779.bP
780\fBsmgbp\fP is used with two arguments, \fIN\fP and \fIM\fP,
781that give the line number of the bottom margin,
782the first counting from the top of the
783page and the second counting from the bottom.
784This accommodates the two styles of specifying
785the bottom margin in different manufacturers' printers.
786.RE
787.IP
788When designing a terminfo entry for a
789printer that has a settable bottom margin,
790only the first or second argument should be used, depending on the printer.
791When developing an application that uses \fBsmgbp\fP to set the bottom margin,
792both arguments must be given.
793.PP
794Conversely, when only one capability in the pair is set:
795.bP
796If only one of \fBsmglp\fP and \fBsmgrp\fP is set,
797then it is used with two arguments,
798the column number of the left and right margins, in that order.
799.bP
800Likewise, if only one of \fBsmgtp\fP and \fBsmgbp\fP is set, then it
801is used with two arguments that give the top and bottom margins,
802in that order, counting from the top of the page.
803.IP
804When designing a terminfo entry for a printer that requires setting both
805left and right or top and bottom margins simultaneously,
806only one capability in the pairs
807\fBsmglp\fP and \fBsmgrp\fP or
808\fBsmgtp\fP and \fBsmgbp\fP should be defined,
809leaving the other unset.
810.PP
811Except for very old terminal descriptions, e.g., those developed for SVr4,
812the scheme just described should be considered obsolete.
813An improved set of capabilities was added late in the SVr4 releases
814(\fBsmglr\fP and \fBsmgtb\fP),
815which explicitly use two parameters for setting the left/right or top/bottom
816margins.
817.PP
818When setting margins, the line- and column-values are zero-based.
819.PP
820The \fBmgc\fP string capability should be defined.
821Applications such as \fBtabs\fP(1) rely upon this to reset all margins.
822.\"
823.SS "Area Clears"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530824If the terminal can clear from the current position to the end of the
micky3879b9f5e72025-07-08 18:04:53 -0400825line, leaving the cursor where it is, this should be given as \fBel\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530826If the terminal can clear from the beginning of the line to the current
827position inclusive, leaving
828the cursor where it is, this should be given as \fBel1\fP.
829If the terminal can clear from the current position to the end of the
micky3879b9f5e72025-07-08 18:04:53 -0400830display, then this should be given as \fBed\fP.
831\fBEd\fP is only defined from the first column of a line.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530832(Thus, it can be simulated by a request to delete a large number of lines,
833if a true
834.B ed
835is not available.)
micky3879b9f5e72025-07-08 18:04:53 -0400836.\"
837.SS "Insert/Delete Line and Vertical Motions"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530838If the terminal can open a new blank line before the line where the cursor
micky3879b9f5e72025-07-08 18:04:53 -0400839is, this should be given as \fBil1\fP; this is done only from the first
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530840position of a line.
841The cursor must then appear on the newly blank line.
842If the terminal can delete the line which the cursor is on, then this
micky3879b9f5e72025-07-08 18:04:53 -0400843should be given as \fBdl1\fP; this is done only from the first position on
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530844the line to be deleted.
845Versions of
846.B il1
847and
848.B dl1
849which take a single parameter and insert or delete that many lines can
850be given as
851.B il
852and
853.BR dl .
854.PP
855If the terminal has a settable scrolling region (like the vt100)
856the command to set this can be described with the
857.B csr
858capability, which takes two parameters:
859the top and bottom lines of the scrolling region.
860The cursor position is, alas, undefined after using this command.
861.PP
862It is possible to get the effect of insert or delete line using
863.B csr
864on a properly chosen region; the
865.B sc
866and
867.B rc
868(save and restore cursor) commands may be useful for ensuring that
869your synthesized insert/delete string does not move the cursor.
micky3879b9f5e72025-07-08 18:04:53 -0400870(Note that the \fB\%ncurses\fP(3X) library does this synthesis
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530871automatically, so you need not compose insert/delete strings for
micky3879b9f5e72025-07-08 18:04:53 -0400872an entry with \fBcsr\fP).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530873.PP
874Yet another way to construct insert and delete might be to use a combination of
micky3879b9f5e72025-07-08 18:04:53 -0400875index with the memory-lock feature found on some terminals (like the HP-700/90
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530876series, which however also has insert/delete).
877.PP
878Inserting lines at the top or bottom of the screen can also be
879done using
880.B ri
881or
882.B ind
883on many terminals without a true insert/delete line,
884and is often faster even on terminals with those features.
885.PP
micky3879b9f5e72025-07-08 18:04:53 -0400886The Boolean \fBnon_dest_scroll_region\fP should be set if each scrolling
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530887window is effectively a view port on a screen-sized canvas.
888To test for
889this capability, create a scrolling region in the middle of the screen,
890write something to the bottom line, move the cursor to the top of the region,
micky3879b9f5e72025-07-08 18:04:53 -0400891and do \fBri\fP followed by \fBdl1\fP or \fBind\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530892If the data scrolled
micky3879b9f5e72025-07-08 18:04:53 -0400893off the bottom of the region by the \fBri\fP re-appears, then scrolling
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530894is non-destructive.
micky3879b9f5e72025-07-08 18:04:53 -0400895System V and X/Open Curses expect that \fBind\fP, \fBri\fP,
896\fBindn\fP, and \fBrin\fP will simulate destructive scrolling; their
897documentation cautions you not to define \fBcsr\fP unless this is true.
898This \fBcurses\fP implementation is more liberal and will do explicit erases
899after scrolling if \fBndsrc\fP is defined.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530900.PP
901If the terminal has the ability to define a window as part of
902memory, which all commands affect,
903it should be given as the parameterized string
904.BR wind .
905The four parameters are the starting and ending lines in memory
906and the starting and ending columns in memory, in that order.
907.PP
908If the terminal can retain display memory above, then the
micky3879b9f5e72025-07-08 18:04:53 -0400909\fBda\fP capability should be given; if display memory can be retained
910below, then \fBdb\fP should be given.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530911These indicate
912that deleting a line or scrolling may bring non-blank lines up from below
micky3879b9f5e72025-07-08 18:04:53 -0400913or that scrolling back with \fBri\fP may bring down non-blank lines.
914.SS "Insert/Delete Character"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530915There are two basic kinds of intelligent terminals with respect to
916insert/delete character which can be described using
micky3879b9f5e72025-07-08 18:04:53 -0400917.IR terminfo .
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530918The most common insert/delete character operations affect only the characters
919on the current line and shift characters off the end of the line rigidly.
920Other terminals, such as the Concept 100 and the Perkin Elmer Owl, make
921a distinction between typed and untyped blanks on the screen, shifting
922upon an insert or delete only to an untyped blank on the screen which is
923either eliminated, or expanded to two untyped blanks.
Steve Kondikae271bc2015-11-15 02:50:53 +0100924.PP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530925You can determine the
926kind of terminal you have by clearing the screen and then typing
927text separated by cursor motions.
micky3879b9f5e72025-07-08 18:04:53 -0400928Type \*(``abc\ \ \ \ def\*('' using local
929cursor motions (not spaces) between the \*(``abc\*('' and the \*(``def\*(''.
930Then position the cursor before the \*(``abc\*('' and put the terminal in insert
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530931mode.
932If typing characters causes the rest of the line to shift
933rigidly and characters to fall off the end, then your terminal does
934not distinguish between blanks and untyped positions.
micky3879b9f5e72025-07-08 18:04:53 -0400935If the \*(``abc\*(''
936shifts over to the \*(``def\*('' which then move together around the end of the
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530937current line and onto the next as you insert, you have the second type of
micky3879b9f5e72025-07-08 18:04:53 -0400938terminal, and should give the capability \fBin\fP, which stands for
939\*(``insert null\*(''.
Steve Kondikae271bc2015-11-15 02:50:53 +0100940.PP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530941While these are two logically separate attributes (one line versus multi-line
942insert mode, and special treatment of untyped spaces) we have seen no
943terminals whose insert mode cannot be described with the single attribute.
944.PP
945Terminfo can describe both terminals which have an insert mode, and terminals
946which send a simple sequence to open a blank position on the current line.
micky3879b9f5e72025-07-08 18:04:53 -0400947Give as \fBsmir\fP the sequence to get into insert mode.
948Give as \fBrmir\fP the sequence to leave insert mode.
949Now give as \fBich1\fP any sequence needed to be sent just before sending
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530950the character to be inserted.
951Most terminals with a true insert mode
micky3879b9f5e72025-07-08 18:04:53 -0400952will not give \fBich1\fP; terminals which send a sequence to open a screen
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530953position should give it here.
954.PP
micky3879b9f5e72025-07-08 18:04:53 -0400955If your terminal has both, insert mode is usually preferable to \fBich1\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530956Technically, you should not give both unless the terminal actually requires
957both to be used in combination.
958Accordingly, some non-curses applications get
959confused if both are present; the symptom is doubled characters in an update
960using insert.
micky3879b9f5e72025-07-08 18:04:53 -0400961This requirement is now rare; most \fBich\fP sequences do not
962require previous smir, and most smir insert modes do not require \fBich1\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530963before each character.
micky3879b9f5e72025-07-08 18:04:53 -0400964Therefore, the new \fBcurses\fP actually assumes this
965is the case and uses either \fBrmir\fP/\fBsmir\fP or \fBich\fP/\fBich1\fP as
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530966appropriate (but not both).
967If you have to write an entry to be used under
968new curses for a terminal old enough to need both, include the
micky3879b9f5e72025-07-08 18:04:53 -0400969\fBrmir\fP/\fBsmir\fP sequences in \fBich1\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530970.PP
971If post insert padding is needed, give this as a number of milliseconds
micky3879b9f5e72025-07-08 18:04:53 -0400972in \fBip\fP (a string option).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530973Any other sequence which may need to be
micky3879b9f5e72025-07-08 18:04:53 -0400974sent after an insert of a single character may also be given in \fBip\fP.
Steve Kondikae271bc2015-11-15 02:50:53 +0100975If your terminal needs both to be placed into an \*(``insert mode\*('' and
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530976a special code to precede each inserted character, then both
977.BR smir / rmir
978and
979.B ich1
980can be given, and both will be used.
981The
982.B ich
983capability, with one parameter,
984.IR n ,
985will repeat the effects of
986.B ich1
987.I n
988times.
989.PP
990If padding is necessary between characters typed while not
991in insert mode, give this as a number of milliseconds padding in \fBrmp\fP.
992.PP
993It is occasionally necessary to move around while in insert mode
994to delete characters on the same line (e.g., if there is a tab after
995the insertion position).
996If your terminal allows motion while in
micky3879b9f5e72025-07-08 18:04:53 -0400997insert mode you can give the capability \fBmir\fP to speed up inserting
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530998in this case.
micky3879b9f5e72025-07-08 18:04:53 -0400999Omitting \fBmir\fP will affect only speed.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301000Some terminals
micky3879b9f5e72025-07-08 18:04:53 -04001001(notably Datamedia's) must not have \fBmir\fP because of the way their
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301002insert mode works.
1003.PP
1004Finally, you can specify
1005.B dch1
1006to delete a single character,
1007.B dch
1008with one parameter,
1009.IR n ,
1010to delete
micky3879b9f5e72025-07-08 18:04:53 -04001011.IR n "characters,"
1012and delete mode by giving \fBsmdc\fP and \fBrmdc\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301013to enter and exit delete mode (any mode the terminal needs to be placed
1014in for
1015.B dch1
1016to work).
1017.PP
1018A command to erase
1019.I n
1020characters (equivalent to outputting
1021.I n
1022blanks without moving the cursor)
1023can be given as
1024.B ech
1025with one parameter.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301026.SS "Highlighting, Underlining, and Visible Bells"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301027If your terminal has one or more kinds of display attributes,
1028these can be represented in a number of different ways.
1029You should choose one display form as
micky3879b9f5e72025-07-08 18:04:53 -04001030\f2standout mode\fP,
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301031representing a good, high contrast, easy-on-the-eyes,
1032format for highlighting error messages and other attention getters.
1033(If you have a choice, reverse video plus half-bright is good,
1034or reverse video alone.)
1035The sequences to enter and exit standout mode
micky3879b9f5e72025-07-08 18:04:53 -04001036are given as \fBsmso\fP and \fBrmso\fP, respectively.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301037If the code to change into or out of standout
1038mode leaves one or even two blank spaces on the screen,
1039as the TVI 912 and Teleray 1061 do,
micky3879b9f5e72025-07-08 18:04:53 -04001040then \fBxmc\fP should be given to tell how many spaces are left.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301041.PP
micky3879b9f5e72025-07-08 18:04:53 -04001042Codes to begin underlining and end underlining can be given as \fBsmul\fP
1043and \fBrmul\fP respectively.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301044If the terminal has a code to underline the current character and move
1045the cursor one space to the right,
1046such as the Microterm Mime,
micky3879b9f5e72025-07-08 18:04:53 -04001047this can be given as \fBuc\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301048.PP
1049Other capabilities to enter various highlighting modes include
1050.B blink
1051(blinking)
1052.B bold
1053(bold or extra bright)
1054.B dim
1055(dim or half-bright)
1056.B invis
1057(blanking or invisible text)
1058.B prot
1059(protected)
1060.B rev
1061(reverse video)
1062.B sgr0
1063(turn off
1064.I all
1065attribute modes)
1066.B smacs
1067(enter alternate character set mode)
1068and
1069.B rmacs
1070(exit alternate character set mode).
1071Turning on any of these modes singly may or may not turn off other modes.
1072.PP
1073If there is a sequence to set arbitrary combinations of modes,
1074this should be given as
1075.B sgr
1076(set attributes),
1077taking 9 parameters.
micky3879b9f5e72025-07-08 18:04:53 -04001078Each parameter is either zero (0) or nonzero,
1079as the corresponding attribute is on or off.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301080The 9 parameters are, in order:
1081standout, underline, reverse, blink, dim, bold, blank, protect, alternate
1082character set.
1083Not all modes need be supported by
1084.BR sgr ,
1085only those for which corresponding separate attribute commands exist.
1086.PP
1087For example, the DEC vt220 supports most of the modes:
1088.PP
1089.TS
1090center;
micky3879b9f5e72025-07-08 18:04:53 -04001091lb lb lb
1092l l l .
1093tparm Parameter Attribute Escape Sequence
1094_
1095none none \eE[0m
1096p1 standout \eE[0;1;7m
1097p2 underline \eE[0;4m
1098p3 reverse \eE[0;7m
1099p4 blink \eE[0;5m
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301100p5 dim not available
micky3879b9f5e72025-07-08 18:04:53 -04001101p6 bold \eE[0;1m
1102p7 invis \eE[0;8m
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301103p8 protect not used
micky3879b9f5e72025-07-08 18:04:53 -04001104p9 altcharset \*^O (off) \*^N (on)
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301105.TE
1106.PP
1107We begin each escape sequence by turning off any existing modes, since
1108there is no quick way to determine whether they are active.
1109Standout is set up to be the combination of reverse and bold.
1110The vt220 terminal has a protect mode,
1111though it is not commonly used in sgr
1112because it protects characters on the screen from the host's erasures.
micky3879b9f5e72025-07-08 18:04:53 -04001113The altcharset mode also is different in that it is either \*^O or \*^N,
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301114depending on whether it is off or on.
micky3879b9f5e72025-07-08 18:04:53 -04001115If all modes are turned on, the resulting sequence is \eE[0;1;4;5;7;8m\*^N.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301116.PP
1117Some sequences are common to different modes.
1118For example, ;7 is output when either p1 or p3 is true, that is, if
1119either standout or reverse modes are turned on.
1120.PP
1121Writing out the above sequences, along with their dependencies yields
1122.PP
Steve Kondikae271bc2015-11-15 02:50:53 +01001123.ne 11
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301124.TS
1125center;
micky3879b9f5e72025-07-08 18:04:53 -04001126lb lb lb
1127l l l .
1128Sequence When to Output terminfo Translation
1129_
1130\eE[0 always \eE[0
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301131;1 if p1 or p6 %?%p1%p6%|%t;1%;
1132;4 if p2 %?%p2%|%t;4%;
1133;5 if p4 %?%p4%|%t;5%;
1134;7 if p1 or p3 %?%p1%p3%|%t;7%;
1135;8 if p7 %?%p7%|%t;8%;
1136m always m
micky3879b9f5e72025-07-08 18:04:53 -04001137\*^N or \*^O if p9 \*^N, else \*^O %?%p9%t\*^N%e\*^O%;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301138.TE
1139.PP
1140Putting this all together into the sgr sequence gives:
1141.PP
micky3879b9f5e72025-07-08 18:04:53 -04001142.EX
1143 sgr=\eE[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%;
1144 %?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\e016%e\e017%;,
1145.EE
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301146.PP
1147Remember that if you specify sgr, you must also specify sgr0.
1148Also, some implementations rely on sgr being given if sgr0 is,
1149Not all terminfo entries necessarily have an sgr string, however.
1150Many terminfo entries are derived from termcap entries
1151which have no sgr string.
1152The only drawback to adding an sgr string is that termcap also
1153assumes that sgr0 does not exit alternate character set mode.
1154.PP
Steve Kondikae271bc2015-11-15 02:50:53 +01001155Terminals with the \*(``magic cookie\*('' glitch
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301156.RB ( xmc )
Steve Kondikae271bc2015-11-15 02:50:53 +01001157deposit special \*(``cookies\*('' when they receive mode-setting sequences,
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301158which affect the display algorithm rather than having extra bits for
1159each character.
1160Some terminals, such as the HP 2621, automatically leave standout
1161mode when they move to a new line or the cursor is addressed.
1162Programs using standout mode should exit standout mode before
1163moving the cursor or sending a newline,
1164unless the
1165.B msgr
1166capability, asserting that it is safe to move in standout mode, is present.
1167.PP
1168If the terminal has
1169a way of flashing the screen to indicate an error quietly (a bell replacement)
micky3879b9f5e72025-07-08 18:04:53 -04001170then this can be given as \fBflash\fP; it must not move the cursor.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301171.PP
1172If the cursor needs to be made more visible than normal when it is
1173not on the bottom line (to make, for example, a non-blinking underline into an
1174easier to find block or blinking underline)
1175give this sequence as
1176.BR cvvis .
1177If there is a way to make the cursor completely invisible, give that as
1178.BR civis .
1179The capability
micky3879b9f5e72025-07-08 18:04:53 -04001180.B cnorm
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301181should be given which undoes the effects of both of these modes.
1182.PP
1183If your terminal correctly generates underlined characters
1184(with no special codes needed)
1185even though it does not overstrike,
micky3879b9f5e72025-07-08 18:04:53 -04001186then you should give the capability \fBul\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301187If a character overstriking another leaves both characters on the screen,
1188specify the capability \fBos\fP.
1189If overstrikes are erasable with a blank,
micky3879b9f5e72025-07-08 18:04:53 -04001190then this should be indicated by giving \fBeo\fP.
1191.SS "Keypad and Function Keys"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301192If the terminal has a keypad that transmits codes when the keys are pressed,
1193this information can be given.
1194Note that it is not possible to handle
1195terminals where the keypad only works in local (this applies, for example,
1196to the unshifted HP 2621 keys).
1197If the keypad can be set to transmit or not transmit,
micky3879b9f5e72025-07-08 18:04:53 -04001198give these codes as \fBsmkx\fP and \fBrmkx\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301199Otherwise the keypad is assumed to always transmit.
Steve Kondikae271bc2015-11-15 02:50:53 +01001200.PP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301201The codes sent by the left arrow, right arrow, up arrow, down arrow,
1202and home keys can be given as
micky3879b9f5e72025-07-08 18:04:53 -04001203\fBkcub1, kcuf1, kcuu1, kcud1, \fRand\fB khome\fP respectively.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301204If there are function keys such as f0, f1, ..., f10, the codes they send
micky3879b9f5e72025-07-08 18:04:53 -04001205can be given as \fBkf0, kf1, ..., kf10\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301206If these keys have labels other than the default f0 through f10, the labels
micky3879b9f5e72025-07-08 18:04:53 -04001207can be given as \fBlf0, lf1, ..., lf10\fP.
Steve Kondikae271bc2015-11-15 02:50:53 +01001208.PP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301209The codes transmitted by certain other special keys can be given:
Steve Kondikae271bc2015-11-15 02:50:53 +01001210.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301211.B kll
1212(home down),
Steve Kondikae271bc2015-11-15 02:50:53 +01001213.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301214.B kbs
1215(backspace),
Steve Kondikae271bc2015-11-15 02:50:53 +01001216.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301217.B ktbc
1218(clear all tabs),
Steve Kondikae271bc2015-11-15 02:50:53 +01001219.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301220.B kctab
1221(clear the tab stop in this column),
Steve Kondikae271bc2015-11-15 02:50:53 +01001222.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301223.B kclr
1224(clear screen or erase key),
Steve Kondikae271bc2015-11-15 02:50:53 +01001225.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301226.B kdch1
1227(delete character),
Steve Kondikae271bc2015-11-15 02:50:53 +01001228.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301229.B kdl1
1230(delete line),
Steve Kondikae271bc2015-11-15 02:50:53 +01001231.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301232.B krmir
1233(exit insert mode),
Steve Kondikae271bc2015-11-15 02:50:53 +01001234.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301235.B kel
1236(clear to end of line),
Steve Kondikae271bc2015-11-15 02:50:53 +01001237.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301238.B ked
1239(clear to end of screen),
Steve Kondikae271bc2015-11-15 02:50:53 +01001240.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301241.B kich1
1242(insert character or enter insert mode),
Steve Kondikae271bc2015-11-15 02:50:53 +01001243.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301244.B kil1
1245(insert line),
Steve Kondikae271bc2015-11-15 02:50:53 +01001246.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301247.B knp
1248(next page),
Steve Kondikae271bc2015-11-15 02:50:53 +01001249.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301250.B kpp
1251(previous page),
Steve Kondikae271bc2015-11-15 02:50:53 +01001252.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301253.B kind
1254(scroll forward/down),
Steve Kondikae271bc2015-11-15 02:50:53 +01001255.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301256.B kri
1257(scroll backward/up),
Steve Kondikae271bc2015-11-15 02:50:53 +01001258.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301259.B khts
1260(set a tab stop in this column).
Steve Kondikae271bc2015-11-15 02:50:53 +01001261.PP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301262In addition, if the keypad has a 3 by 3 array of keys including the four
1263arrow keys, the other five keys can be given as
1264.BR ka1 ,
1265.BR ka3 ,
1266.BR kb2 ,
1267.BR kc1 ,
1268and
1269.BR kc3 .
1270These keys are useful when the effects of a 3 by 3 directional pad are needed.
1271.PP
1272Strings to program function keys can be given as
1273.BR pfkey ,
1274.BR pfloc ,
1275and
1276.BR pfx .
1277A string to program screen labels should be specified as \fBpln\fP.
1278Each of these strings takes two parameters: the function key number to
1279program (from 0 to 10) and the string to program it with.
1280Function key numbers out of this range may program undefined keys in
1281a terminal dependent manner.
1282The difference between the capabilities is that
1283.B pfkey
1284causes pressing the given key to be the same as the user typing the
1285given string;
1286.B pfloc
1287causes the string to be executed by the terminal in local; and
1288.B pfx
1289causes the string to be transmitted to the computer.
1290.PP
1291The capabilities \fBnlab\fP, \fBlw\fP and \fBlh\fP
1292define the number of programmable
1293screen labels and their width and height.
1294If there are commands to turn the labels on and off,
1295give them in \fBsmln\fP and \fBrmln\fP.
1296\fBsmln\fP is normally output after one or more pln
1297sequences to make sure that the change becomes visible.
micky3879b9f5e72025-07-08 18:04:53 -04001298.SS "Tabs and Initialization"
1299A few capabilities are used only for tabs:
1300.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301301If the terminal has hardware tabs, the command to advance to the next
1302tab stop can be given as
1303.B ht
micky3879b9f5e72025-07-08 18:04:53 -04001304(usually control/I).
1305.bP
Steve Kondikae271bc2015-11-15 02:50:53 +01001306A \*(``back-tab\*('' command which moves leftward to the preceding tab stop can
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301307be given as
1308.BR cbt .
micky3879b9f5e72025-07-08 18:04:53 -04001309.IP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301310By convention, if the teletype modes indicate that tabs are being
1311expanded by the computer rather than being sent to the terminal,
1312programs should not use
1313.B ht
1314or
1315.B cbt
1316even if they are present, since the user may not have the tab stops
1317properly set.
micky3879b9f5e72025-07-08 18:04:53 -04001318.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301319If the terminal has hardware tabs which are initially set every
1320.I n
1321spaces when the terminal is powered up,
1322the numeric parameter
1323.B it
1324is given, showing the number of spaces the tabs are set to.
micky3879b9f5e72025-07-08 18:04:53 -04001325.IP
1326The \fBit\fP capability is normally used by the \fB@TSET@\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301327command to determine whether to set the mode for hardware tab expansion,
1328and whether to set the tab stops.
1329If the terminal has tab stops that can be saved in non-volatile memory,
1330the terminfo description can assume that they are properly set.
1331.PP
1332Other capabilities
1333include
micky3879b9f5e72025-07-08 18:04:53 -04001334.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301335.BR is1 ,
1336.BR is2 ,
1337and
1338.BR is3 ,
1339initialization strings for the terminal,
micky3879b9f5e72025-07-08 18:04:53 -04001340.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301341.BR iprog ,
1342the path name of a program to be run to initialize the terminal,
micky3879b9f5e72025-07-08 18:04:53 -04001343.bP
1344and \fBif\fP, the name of a file containing long initialization strings.
1345.PP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301346These strings are expected to set the terminal into modes consistent
1347with the rest of the terminfo description.
1348They are normally sent to the terminal, by the
1349.I init
micky3879b9f5e72025-07-08 18:04:53 -04001350option of the \fB@TPUT@\fP program, each time the user logs in.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301351They will be printed in the following order:
1352.RS
1353.TP
1354run the program
micky3879b9f5e72025-07-08 18:04:53 -04001355.B iprog
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301356.TP
1357output
micky3879b9f5e72025-07-08 18:04:53 -04001358.br
1359\fBis1\fP and
1360.br
1361\fBis2\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301362.TP
1363set the margins using
micky3879b9f5e72025-07-08 18:04:53 -04001364\fBmgc\fP or
1365.br
1366\fBsmglp\fP and \fBsmgrp\fP or
1367.br
1368\fBsmgl\fP and \fBsmgr\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301369.TP
1370set tabs using
1371.B tbc
1372and
micky3879b9f5e72025-07-08 18:04:53 -04001373.B hts
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301374.TP
1375print the file
micky3879b9f5e72025-07-08 18:04:53 -04001376\fBif\fP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301377.TP
micky3879b9f5e72025-07-08 18:04:53 -04001378and finally output
1379\fBis3\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301380.RE
1381.PP
1382Most initialization is done with
1383.BR is2 .
1384Special terminal modes can be set up without duplicating strings
1385by putting the common sequences in
1386.B is2
1387and special cases in
1388.B is1
1389and
1390.BR is3 .
1391.PP
1392A set of sequences that does a harder reset from a totally unknown state
1393can be given as
1394.BR rs1 ,
1395.BR rs2 ,
micky3879b9f5e72025-07-08 18:04:53 -04001396.B rf
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301397and
1398.BR rs3 ,
1399analogous to
1400.B is1 ,
1401.B is2 ,
1402.B if
1403and
micky3879b9f5e72025-07-08 18:04:53 -04001404.B is3
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301405respectively.
micky3879b9f5e72025-07-08 18:04:53 -04001406These strings are output
1407by \fIreset\fP option of \fB@TPUT@\fP,
1408or by the \fB@RESET@\fP program
1409(an alias of \fB@TSET@\fP),
1410which is used when the terminal gets into a wedged state.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301411Commands are normally placed in
1412.BR rs1 ,
micky3879b9f5e72025-07-08 18:04:53 -04001413.B rs2
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301414.B rs3
1415and
1416.B rf
1417only if they produce annoying effects on the screen and are not
1418necessary when logging in.
1419For example, the command to set the vt100 into 80-column mode would
1420normally be part of
1421.BR is2 ,
1422but it causes an annoying glitch of the screen and is not normally
micky3879b9f5e72025-07-08 18:04:53 -04001423needed since the terminal is usually already in 80-column mode.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301424.PP
micky3879b9f5e72025-07-08 18:04:53 -04001425The \fB@RESET@\fP program writes strings including
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301426.BR iprog ,
1427etc., in the same order as the
micky3879b9f5e72025-07-08 18:04:53 -04001428.I init
1429program, using
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301430.BR rs1 ,
1431etc., instead of
1432.BR is1 ,
1433etc.
1434If any of
1435.BR rs1 ,
1436.BR rs2 ,
1437.BR rs3 ,
1438or
micky3879b9f5e72025-07-08 18:04:53 -04001439.B rf
1440reset capability strings are missing,
1441the \fB@RESET@\fP program
1442falls back upon the corresponding initialization capability string.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301443.PP
1444If there are commands to set and clear tab stops, they can be given as
1445.B tbc
1446(clear all tab stops)
1447and
1448.B hts
1449(set a tab stop in the current column of every row).
1450If a more complex sequence is needed to set the tabs than can be
1451described by this, the sequence can be placed in
1452.B is2
1453or
1454.BR if .
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301455.PP
micky3879b9f5e72025-07-08 18:04:53 -04001456The \fB@TPUT@ reset\fP command uses the same capability strings
1457as the \fB@RESET@\fP command,
1458although the two programs (\fB@TPUT@\fP and \fB@RESET@\fP)
1459provide different command-line options.
1460.PP
1461In practice, these terminfo capabilities are not often used in
1462initialization of tabs
1463(though they are required for the \fB@TABS@\fP program):
1464.bP
1465Almost all hardware terminals (at least those which supported tabs)
1466initialized those to every \fIeight\fP columns:
1467.IP
1468The only exception was the AT&T 2300 series,
1469which set tabs to every \fIfive\fP columns.
1470.bP
1471In particular, developers of the hardware terminals which are commonly used
1472as models for modern terminal emulators provided documentation demonstrating
1473that \fIeight\fP columns were the standard.
1474.bP
1475Because of this, the terminal initialization programs
1476\fB@TPUT@\fP and \fB@TSET@\fP
1477use the
1478\fBtbc\fP (\fBclear_all_tabs\fP) and
1479\fBhts\fP (\fBset_tab\fP) capabilities directly
1480only when the \fBit\fP (\fBinit_tabs\fP) capability
1481is set to a value other than \fIeight\fP.
1482.SS "Delays and Padding"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301483Many older and slower terminals do not support either XON/XOFF or DTR
1484handshaking, including hard copy terminals and some very archaic CRTs
1485(including, for example, DEC VT100s).
1486These may require padding characters
1487after certain cursor motions and screen changes.
1488.PP
1489If the terminal uses xon/xoff handshaking for flow control (that is,
micky3879b9f5e72025-07-08 18:04:53 -04001490it automatically emits \*^S back to the host when its input buffers are
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301491close to full), set
1492.BR xon .
1493This capability suppresses the emission of padding.
1494You can also set it
1495for memory-mapped console devices effectively that do not have a speed limit.
1496Padding information should still be included so that routines can
1497make better decisions about relative costs, but actual pad characters will
1498not be transmitted.
1499.PP
micky3879b9f5e72025-07-08 18:04:53 -04001500If \fBpb\fP (padding baud rate) is given, padding is suppressed at baud rates
1501below the value of \fBpb\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301502If the entry has no padding baud rate, then
micky3879b9f5e72025-07-08 18:04:53 -04001503whether padding is emitted or not is completely controlled by \fBxon\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301504.PP
1505If the terminal requires other than a null (zero) character as a pad,
micky3879b9f5e72025-07-08 18:04:53 -04001506then this can be given as \fBpad\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301507Only the first character of the
1508.B pad
1509string is used.
micky3879b9f5e72025-07-08 18:04:53 -04001510.SS "Status Lines"
Steve Kondikae271bc2015-11-15 02:50:53 +01001511Some terminals have an extra \*(``status line\*('' which is not normally used by
micky3879b9f5e72025-07-08 18:04:53 -04001512software (and thus not counted in the terminal's \fBlines\fP capability).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301513.PP
1514The simplest case is a status line which is cursor-addressable but not
1515part of the main scrolling region on the screen; the Heathkit H19 has
1516a status line of this kind, as would a 24-line VT100 with a 23-line
1517scrolling region set up on initialization.
1518This situation is indicated
micky3879b9f5e72025-07-08 18:04:53 -04001519by the \fBhs\fP capability.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301520.PP
1521Some terminals with status lines need special sequences to access the
1522status line.
1523These may be expressed as a string with single parameter
micky3879b9f5e72025-07-08 18:04:53 -04001524\fBtsl\fP which takes the cursor to a given zero-origin column on the
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301525status line.
micky3879b9f5e72025-07-08 18:04:53 -04001526The capability \fBfsl\fP must return to the main-screen
1527cursor positions before the last \fBtsl\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301528You may need to embed the
micky3879b9f5e72025-07-08 18:04:53 -04001529string values of \fBsc\fP (save cursor) and \fBrc\fP (restore cursor)
1530in \fBtsl\fP and \fBfsl\fP to accomplish this.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301531.PP
1532The status line is normally assumed to be the same width as the width
1533of the terminal.
1534If this is untrue, you can specify it with the numeric
micky3879b9f5e72025-07-08 18:04:53 -04001535capability \fBwsl\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301536.PP
micky3879b9f5e72025-07-08 18:04:53 -04001537A command to erase or blank the status line may be specified as \fBdsl\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301538.PP
micky3879b9f5e72025-07-08 18:04:53 -04001539The Boolean capability \fBeslok\fP specifies that escape sequences, tabs,
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301540etc., work ordinarily in the status line.
1541.PP
micky3879b9f5e72025-07-08 18:04:53 -04001542The \fI\%ncurses\fP implementation does not yet use any of these
1543capabilities.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301544They are documented here in case they ever become important.
micky3879b9f5e72025-07-08 18:04:53 -04001545.SS "Line Graphics"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301546Many terminals have alternate character sets useful for forms-drawing.
micky3879b9f5e72025-07-08 18:04:53 -04001547Terminfo and \fBcurses\fP have built-in support
1548for most of the drawing characters
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301549supported by the VT100, with some characters from the AT&T 4410v1 added.
micky3879b9f5e72025-07-08 18:04:53 -04001550This alternate character set may be specified by the \fBacsc\fP capability.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301551.PP
micky3879b9f5e72025-07-08 18:04:53 -04001552.TS
1553center;
1554Lb Cb S L Lb
1555Lb2 Lb2 Lb Lb1 S
1556Lb L C Lb Lx.
1557\& acsc \& \&
1558ACS Name Value Symbol ASCII Fallback / Glyph Name
1559_
1560ACS_RARROW 0x2b + > arrow pointing right
1561ACS_LARROW 0x2c , < arrow pointing left
1562ACS_UARROW 0x2d \- \*^ arrow pointing up
1563ACS_DARROW 0x2e . v arrow pointing down
1564ACS_BLOCK 0x30 0 # solid square block
1565ACS_DIAMOND 0x60 \(ga + diamond
1566ACS_CKBOARD 0x61 a : checker board (stipple)
1567ACS_DEGREE 0x66 f \e degree symbol
1568ACS_PLMINUS 0x67 g # plus/minus
1569ACS_BOARD 0x68 h # board of squares
1570ACS_LANTERN 0x69 i # lantern symbol
1571ACS_LRCORNER 0x6a j + lower right corner
1572ACS_URCORNER 0x6b k + upper right corner
1573ACS_ULCORNER 0x6c l + upper left corner
1574ACS_LLCORNER 0x6d m + lower left corner
1575ACS_PLUS 0x6e n + large plus or crossover
1576ACS_S1 0x6f o \*~ scan line 1
1577ACS_S3 0x70 p \- scan line 3
1578ACS_HLINE 0x71 q \- horizontal line
1579ACS_S7 0x72 r \- scan line 7
1580ACS_S9 0x73 s \&_ scan line 9
1581ACS_LTEE 0x74 t + tee pointing right
1582ACS_RTEE 0x75 u + tee pointing left
1583ACS_BTEE 0x76 v + tee pointing up
1584ACS_TTEE 0x77 w + tee pointing down
1585ACS_VLINE 0x78 x | vertical line
1586ACS_LEQUAL 0x79 y < less-than-or-equal-to
1587ACS_GEQUAL 0x7a z > greater-than-or-equal-to
1588ACS_PI 0x7b { * greek pi
1589ACS_NEQUAL 0x7c | ! not-equal
1590ACS_STERLING 0x7d } f UK pound sign
1591ACS_BULLET 0x7e \*~ o bullet
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301592.TE
1593.PP
micky3879b9f5e72025-07-08 18:04:53 -04001594A few notes apply to the table itself:
1595.bP
1596X/Open Curses incorrectly states that the mapping for \fIlantern\fP is
1597uppercase \*(``I\*('' although Unix implementations use the
1598lowercase \*(``i\*('' mapping.
1599.bP
1600The DEC VT100 implemented graphics using the alternate character set
1601feature, temporarily switching \fImodes\fP and sending characters
1602in the range 0x60 (96) to 0x7e (126)
1603(the \fBacsc Value\fP column in the table).
1604.bP
1605The AT&T terminal added graphics characters outside that range.
1606.IP
1607Some of the characters within the range do not match the VT100;
1608presumably they were used in the AT&T terminal:
1609\fIboard of squares\fP replaces the VT100 \fInewline\fP symbol, while
1610\fIlantern symbol\fP replaces the VT100 \fIvertical tab\fP symbol.
1611The other VT100 symbols for control characters (\fIhorizontal tab\fP,
1612\fIcarriage return\fP and \fIline-feed\fP) are not (re)used in curses.
1613.PP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301614The best way to define a new device's graphics set is to add a column
1615to a copy of this table for your terminal, giving the character which
micky3879b9f5e72025-07-08 18:04:53 -04001616(when emitted between \fBsmacs\fP/\fBrmacs\fP switches) will be rendered
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301617as the corresponding graphic.
1618Then read off the VT100/your terminal
1619character pairs right to left in sequence; these become the ACSC string.
micky3879b9f5e72025-07-08 18:04:53 -04001620.SS "Color Handling"
1621The curses library functions \fBinit_pair\fP and \fBinit_color\fP
1622manipulate the \fIcolor pairs\fP and \fIcolor values\fP discussed in this
1623section
1624(see \fBcurs_color\fP(3X) for details on these and related functions).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301625.PP
micky3879b9f5e72025-07-08 18:04:53 -04001626Most color terminals are either \*(``Tektronix-like\*('' or \*(``HP-like\*('':
1627.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301628Tektronix-like
micky3879b9f5e72025-07-08 18:04:53 -04001629terminals have a predefined set of \fIN\fP colors
1630(where \fIN\fP is usually 8),
1631and can set
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301632character-cell foreground and background characters independently, mixing them
micky3879b9f5e72025-07-08 18:04:53 -04001633into \fIN\fP\ *\ \fIN\fP color pairs.
1634.bP
1635On HP-like terminals, the user must set each color
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301636pair up separately (foreground and background are not independently settable).
micky3879b9f5e72025-07-08 18:04:53 -04001637Up to \fIM\fP color pairs may be set up from 2*\fIM\fP different colors.
1638ANSI-compatible terminals are Tektronix-like.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301639.PP
1640Some basic color capabilities are independent of the color method.
1641The numeric
micky3879b9f5e72025-07-08 18:04:53 -04001642capabilities \fBcolors\fP and \fBpairs\fP specify the maximum numbers of colors
1643and color pairs that can be displayed simultaneously.
1644The \fBop\fP (original
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301645pair) string resets foreground and background colors to their default values
1646for the terminal.
micky3879b9f5e72025-07-08 18:04:53 -04001647The \fBoc\fP string resets all colors or color pairs to
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301648their default values for the terminal.
1649Some terminals (including many PC
1650terminal emulators) erase screen areas with the current background color rather
micky3879b9f5e72025-07-08 18:04:53 -04001651than the power-up default background; these should have the Boolean capability
1652\fBbce\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301653.PP
micky3879b9f5e72025-07-08 18:04:53 -04001654While the curses library works with \fIcolor pairs\fP
1655(reflecting the inability of some devices to set foreground
1656and background colors independently),
1657there are separate capabilities for setting these features:
1658.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301659To change the current foreground or background color on a Tektronix-type
micky3879b9f5e72025-07-08 18:04:53 -04001660terminal, use \fBsetaf\fP (set ANSI foreground) and \fBsetab\fP (set ANSI
1661background) or \fBsetf\fP (set foreground) and \fBsetb\fP (set background).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301662These take one parameter, the color number.
1663The SVr4 documentation describes
micky3879b9f5e72025-07-08 18:04:53 -04001664only \fBsetaf\fP/\fBsetab\fP; the XPG4 draft says that "If the terminal
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301665supports ANSI escape sequences to set background and foreground, they should
micky3879b9f5e72025-07-08 18:04:53 -04001666be coded as \fBsetaf\fP and \fBsetab\fP, respectively.
1667.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301668If the terminal
1669supports other escape sequences to set background and foreground, they should
micky3879b9f5e72025-07-08 18:04:53 -04001670be coded as \fBsetf\fP and \fBsetb\fP, respectively.
1671The \fBvidputs\fP and the \fBrefresh\fP(3X) functions
1672use the \fBsetaf\fP and \fBsetab\fP capabilities if they are defined.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301673.PP
micky3879b9f5e72025-07-08 18:04:53 -04001674The \fBsetaf\fP/\fBsetab\fP and \fBsetf\fP/\fBsetb\fP capabilities take a
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301675single numeric argument each.
micky3879b9f5e72025-07-08 18:04:53 -04001676Argument values 0-7 of \fBsetaf\fP/\fBsetab\fP are portably defined as
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301677follows (the middle column is the symbolic #define available in the header for
micky3879b9f5e72025-07-08 18:04:53 -04001678the \fBcurses\fP or \fI\%ncurses\fP libraries).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301679The terminal hardware is free to
1680map these as it likes, but the RGB values indicate normal locations in color
1681space.
1682.PP
micky3879b9f5e72025-07-08 18:04:53 -04001683.TS
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301684center;
micky3879b9f5e72025-07-08 18:04:53 -04001685cb cb cb cb s s
1686l lb c l1 l1 l .
1687Color #define Value RGB
1688_
1689black COLOR_BLACK 0 0, 0, 0
1690red COLOR_RED 1 max, 0, 0
1691green COLOR_GREEN 2 0, max, 0
1692yellow COLOR_YELLOW 3 max, max, 0
1693blue COLOR_BLUE 4 0, 0, max
1694magenta COLOR_MAGENTA 5 max, 0, max
1695cyan COLOR_CYAN 6 0, max, max
1696white COLOR_WHITE 7 max, max, max
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301697.TE
micky3879b9f5e72025-07-08 18:04:53 -04001698.br
1699.if t .ne 6v
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301700.PP
micky3879b9f5e72025-07-08 18:04:53 -04001701The argument values of \fBsetf\fP/\fBsetb\fP historically correspond to
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301702a different mapping, i.e.,
micky3879b9f5e72025-07-08 18:04:53 -04001703.PP
1704.TS
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301705center;
micky3879b9f5e72025-07-08 18:04:53 -04001706cb cb cb cb s s
1707l lb c l1 l1 l .
1708Color #define Value RGB
1709_
1710black COLOR_BLACK 0 0, 0, 0
1711blue COLOR_BLUE 1 0, 0, max
1712green COLOR_GREEN 2 0, max, 0
1713cyan COLOR_CYAN 3 0, max, max
1714red COLOR_RED 4 max, 0, 0
1715magenta COLOR_MAGENTA 5 max, 0, max
1716yellow COLOR_YELLOW 6 max, max, 0
1717white COLOR_WHITE 7 max, max, max
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301718.TE
Steve Kondikae271bc2015-11-15 02:50:53 +01001719.PP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301720It is important to not confuse the two sets of color capabilities;
1721otherwise red/blue will be interchanged on the display.
1722.PP
micky3879b9f5e72025-07-08 18:04:53 -04001723On an HP-like terminal, use \fBscp\fP with a color pair number parameter to set
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301724which color pair is current.
1725.PP
micky3879b9f5e72025-07-08 18:04:53 -04001726Some terminals allow the \fIcolor values\fP to be modified:
1727.bP
1728On a Tektronix-like terminal, the capability \fBccc\fP may be present to
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301729indicate that colors can be modified.
micky3879b9f5e72025-07-08 18:04:53 -04001730If so, the \fBinitc\fP capability will
1731take a color number (0 to \fBcolors\fP \- 1)and three more parameters which
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301732describe the color.
1733These three parameters default to being interpreted as RGB
1734(Red, Green, Blue) values.
micky3879b9f5e72025-07-08 18:04:53 -04001735If the Boolean capability \fBhls\fP is present,
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301736they are instead as HLS (Hue, Lightness, Saturation) indices.
1737The ranges are
1738terminal-dependent.
micky3879b9f5e72025-07-08 18:04:53 -04001739.bP
1740On an HP-like terminal, \fBinitp\fP may give a capability for changing a
1741color pair value.
1742It will take seven parameters; a color pair number (0 to
1743\fBmax_pairs\fP \- 1), and two triples describing first background and then
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301744foreground colors.
1745These parameters must be (Red, Green, Blue) or
micky3879b9f5e72025-07-08 18:04:53 -04001746(Hue, Lightness, Saturation) depending on \fBhls\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301747.PP
1748On some color terminals, colors collide with highlights.
1749You can register
micky3879b9f5e72025-07-08 18:04:53 -04001750these collisions with the \fBncv\fP capability.
1751This is a bit mask of
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301752attributes not to be used when colors are enabled.
1753The correspondence with the
micky3879b9f5e72025-07-08 18:04:53 -04001754attributes understood by \fBcurses\fP is as follows:
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301755.PP
1756.TS
1757center;
micky3879b9f5e72025-07-08 18:04:53 -04001758cb cb cb cb
1759lb n n lb.
1760Attribute Bit Decimal Set by
1761_
Steve Kondikae271bc2015-11-15 02:50:53 +01001762A_STANDOUT 0 1 sgr
1763A_UNDERLINE 1 2 sgr
1764A_REVERSE 2 4 sgr
micky3879b9f5e72025-07-08 18:04:53 -04001765A_BLINK 3 8 sgr
1766A_DIM 4 16 sgr
1767A_BOLD 5 32 sgr
1768A_INVIS 6 64 sgr
Steve Kondikae271bc2015-11-15 02:50:53 +01001769A_PROTECT 7 128 sgr
1770A_ALTCHARSET 8 256 sgr
1771A_HORIZONTAL 9 512 sgr1
1772A_LEFT 10 1024 sgr1
1773A_LOW 11 2048 sgr1
1774A_RIGHT 12 4096 sgr1
1775A_TOP 13 8192 sgr1
1776A_VERTICAL 14 16384 sgr1
1777A_ITALIC 15 32768 sitm
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301778.TE
1779.PP
1780For example, on many IBM PC consoles, the underline attribute collides with the
1781foreground color blue and is not available in color mode.
1782These should have
micky3879b9f5e72025-07-08 18:04:53 -04001783an \fBncv\fP capability of 2.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301784.PP
micky3879b9f5e72025-07-08 18:04:53 -04001785SVr4 curses does nothing with \fBncv\fP,
1786\fI\%ncurses\fP recognizes it and optimizes
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301787the output in favor of colors.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301788.SS Miscellaneous
1789If the terminal requires other than a null (zero) character as a pad, then this
1790can be given as pad.
1791Only the first character of the pad string is used.
1792If the terminal does not have a pad character, specify npc.
micky3879b9f5e72025-07-08 18:04:53 -04001793Note that \fI\%ncurses\fP implements the termcap-compatible \fBPC\fP
1794variable;
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301795though the application may set this value to something other than
micky3879b9f5e72025-07-08 18:04:53 -04001796a null,
1797\fI\%ncurses\fP will test \fBnpc\fP first and use napms if the terminal
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301798has no pad character.
1799.PP
1800If the terminal can move up or down half a line,
1801this can be indicated with
1802.B hu
1803(half-line up)
1804and
1805.B hd
1806(half-line down).
1807This is primarily useful for superscripts and subscripts on hard-copy terminals.
1808If a hard-copy terminal can eject to the next page (form feed), give this as
1809.B ff
micky3879b9f5e72025-07-08 18:04:53 -04001810(usually control/L).
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301811.PP
1812If there is a command to repeat a given character a given number of
1813times (to save time transmitting a large number of identical characters)
1814this can be indicated with the parameterized string
1815.BR rep .
1816The first parameter is the character to be repeated and the second
1817is the number of times to repeat it.
micky3879b9f5e72025-07-08 18:04:53 -04001818Thus, tparm(repeat_char, \*'x\*', 10) is the same as \*(``xxxxxxxxxx\*(''.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301819.PP
micky3879b9f5e72025-07-08 18:04:53 -04001820If the terminal has a settable command character,
1821such as the \s-1TEKTRONIX\s+1 4025,
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301822this can be indicated with
1823.BR cmdch .
1824A prototype command character is chosen which is used in all capabilities.
1825This character is given in the
1826.B cmdch
1827capability to identify it.
micky3879b9f5e72025-07-08 18:04:53 -04001828The following convention is supported on some Unix systems:
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301829The environment is to be searched for a
1830.B CC
1831variable, and if found, all
1832occurrences of the prototype character are replaced with the character
1833in the environment variable.
1834.PP
1835Terminal descriptions that do not represent a specific kind of known
1836terminal, such as
1837.IR switch ,
1838.IR dialup ,
1839.IR patch ,
1840and
1841.IR network ,
1842should include the
1843.B gn
1844(generic) capability so that programs can complain that they do not know
1845how to talk to the terminal.
1846(This capability does not apply to
1847.I virtual
1848terminal descriptions for which the escape sequences are known.)
1849.PP
Steve Kondikae271bc2015-11-15 02:50:53 +01001850If the terminal has a \*(``meta key\*('' which acts as a shift key,
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301851setting the 8th bit of any character transmitted, this fact can
1852be indicated with
1853.BR km .
1854Otherwise, software will assume that the 8th bit is parity and it
1855will usually be cleared.
Steve Kondikae271bc2015-11-15 02:50:53 +01001856If strings exist to turn this \*(``meta mode\*('' on and off, they
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301857can be given as
1858.B smm
1859and
1860.BR rmm .
1861.PP
1862If the terminal has more lines of memory than will fit on the screen
1863at once, the number of lines of memory can be indicated with
1864.BR lm .
1865A value of
1866.BR lm #0
1867indicates that the number of lines is not fixed,
1868but that there is still more memory than fits on the screen.
1869.PP
micky3879b9f5e72025-07-08 18:04:53 -04001870If the terminal is one of those supported by the Unix virtual
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301871terminal protocol, the terminal number can be given as
1872.BR vt .
1873.PP
1874Media copy
1875strings which control an auxiliary printer connected to the terminal
1876can be given as
1877.BR mc0 :
1878print the contents of the screen,
1879.BR mc4 :
1880turn off the printer, and
1881.BR mc5 :
1882turn on the printer.
1883When the printer is on, all text sent to the terminal will be sent
1884to the printer.
1885It is undefined whether the text is also displayed on the terminal screen
1886when the printer is on.
1887A variation
1888.B mc5p
1889takes one parameter, and leaves the printer on for as many characters
1890as the value of the parameter, then turns the printer off.
1891The parameter should not exceed 255.
1892All text, including
1893.BR mc4 ,
1894is transparently passed to the printer while an
1895.B mc5p
1896is in effect.
micky3879b9f5e72025-07-08 18:04:53 -04001897.SS "Glitches and Brain Damage"
1898Hazeltine terminals,
1899which do not allow \*(``\*~\*('' characters to be displayed should
1900indicate \fBhz\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301901.PP
micky3879b9f5e72025-07-08 18:04:53 -04001902Terminals which ignore a line-feed immediately after an \fBam\fP wrap,
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301903such as the Concept and vt100,
micky3879b9f5e72025-07-08 18:04:53 -04001904should indicate \fBxenl\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301905.PP
1906If
1907.B el
1908is required to get rid of standout
1909(instead of merely writing normal text on top of it),
1910\fBxhp\fP should be given.
1911.PP
1912Teleray terminals, where tabs turn all characters moved over to blanks,
micky3879b9f5e72025-07-08 18:04:53 -04001913should indicate \fBxt\fP (destructive tabs).
Steve Kondikae271bc2015-11-15 02:50:53 +01001914Note: the variable indicating this is now \*(``dest_tabs_magic_smso\*(''; in
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301915older versions, it was teleray_glitch.
1916This glitch is also taken to mean that it is not possible to position
Steve Kondikae271bc2015-11-15 02:50:53 +01001917the cursor on top of a \*(``magic cookie\*('',
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301918that to erase standout mode it is instead necessary to use
1919delete and insert line.
micky3879b9f5e72025-07-08 18:04:53 -04001920The \fI\%ncurses\fP implementation ignores this glitch.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301921.PP
1922The Beehive Superbee, which is unable to correctly transmit the escape
micky3879b9f5e72025-07-08 18:04:53 -04001923or control/C characters, has
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301924.BR xsb ,
micky3879b9f5e72025-07-08 18:04:53 -04001925indicating that the f1 key is used for escape and f2 for control/C.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301926(Only certain Superbees have this problem, depending on the ROM.)
1927Note that in older terminfo versions, this capability was called
Steve Kondikae271bc2015-11-15 02:50:53 +01001928\*(``beehive_glitch\*(''; it is now \*(``no_esc_ctl_c\*(''.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301929.PP
1930Other specific terminal problems may be corrected by adding more
micky3879b9f5e72025-07-08 18:04:53 -04001931capabilities of the form \fBx\fIx\fR.
1932.SS "Pitfalls of Long Entries"
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301933Long terminfo entries are unlikely to be a problem; to date, no entry has even
1934approached terminfo's 4096-byte string-table maximum.
1935Unfortunately, the termcap
micky3879b9f5e72025-07-08 18:04:53 -04001936translations are much more strictly limited (to 1023 bytes),
1937thus termcap translations of long terminfo entries can cause problems.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301938.PP
micky3879b9f5e72025-07-08 18:04:53 -04001939The man pages for 4.3BSD
1940and older versions of \fBtgetent\fP instruct the user to
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301941allocate a 1024-byte buffer for the termcap entry.
1942The entry gets null-terminated by
1943the termcap library, so that makes the maximum safe length for a termcap entry
Steve Kondikae271bc2015-11-15 02:50:53 +010019441k\-1 (1023) bytes.
micky3879b9f5e72025-07-08 18:04:53 -04001945Depending on what the application and the termcap library being used does,
1946and where in the termcap file the terminal type that \fBtgetent\fP
1947is searching for is, several bad things can happen:
1948.bP
1949some termcap libraries print a warning message,
1950.bP
1951some exit if they find an entry that's longer than 1023 bytes,
1952.bP
1953some neither exit nor warn, doing nothing useful, and
1954.bP
1955some simply truncate the entries to 1023 bytes.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301956.PP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301957Some application programs allocate more than
1958the recommended 1K for the termcap entry; others do not.
1959.PP
1960Each termcap entry has two important sizes associated with it: before
micky3879b9f5e72025-07-08 18:04:53 -04001961\*(``tc\*('' expansion, and after \*(``tc\*('' expansion.
1962\*(``tc\*('' is the capability that
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301963tacks on another termcap entry to the end of the current one, to add
1964on its capabilities.
micky3879b9f5e72025-07-08 18:04:53 -04001965If a termcap entry does not use the \*(``tc\*(''
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301966capability, then of course the two lengths are the same.
1967.PP
micky3879b9f5e72025-07-08 18:04:53 -04001968The \*(``before tc expansion\*('' length is the most important one, because it
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301969affects more than just users of that particular terminal.
1970This is the
1971length of the entry as it exists in /etc/termcap, minus the
micky3879b9f5e72025-07-08 18:04:53 -04001972backslash-newline pairs, which \fBtgetent\fP strips out while reading it.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301973Some termcap libraries strip off the final newline, too (GNU termcap does not).
1974Now suppose:
Steve Kondikae271bc2015-11-15 02:50:53 +01001975.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301976a termcap entry before expansion is more than 1023 bytes long,
Steve Kondikae271bc2015-11-15 02:50:53 +01001977.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301978and the application has only allocated a 1k buffer,
Steve Kondikae271bc2015-11-15 02:50:53 +01001979.bP
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301980and the termcap library (like the one in BSD/OS 1.1 and GNU) reads
1981the whole entry into the buffer, no matter what its length, to see
1982if it is the entry it wants,
Steve Kondikae271bc2015-11-15 02:50:53 +01001983.bP
micky3879b9f5e72025-07-08 18:04:53 -04001984and \fBtgetent\fP is searching for a terminal type that either is the
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301985long entry, appears in the termcap file after the long entry, or
micky3879b9f5e72025-07-08 18:04:53 -04001986does not appear in the file at all (so that \fBtgetent\fP has to search
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301987the whole termcap file).
1988.PP
micky3879b9f5e72025-07-08 18:04:53 -04001989Then \fBtgetent\fP will overwrite memory,
1990perhaps its stack,
1991and probably core dump the program.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301992Programs like telnet are particularly vulnerable; modern telnets
1993pass along values like the terminal type automatically.
1994The results are almost
1995as undesirable with a termcap library, like SunOS 4.1.3 and Ultrix 4.4, that
1996prints warning messages when it reads an overly long termcap entry.
1997If a
1998termcap library truncates long entries, like OSF/1 3.0, it is immune to dying
1999here but will return incorrect data for the terminal.
2000.PP
micky3879b9f5e72025-07-08 18:04:53 -04002001The \*(``after tc expansion\*('' length will have a similar effect to the
2002above, but only for people who actually set \fITERM\fP to that terminal
2003type, since \fBtgetent\fP only does \*(``tc\*('' expansion once it is found the
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302004terminal type it was looking for, not while searching.
2005.PP
2006In summary, a termcap entry that is longer than 1023 bytes can cause,
2007on various combinations of termcap libraries and applications, a core
2008dump, warnings, or incorrect operation.
2009If it is too long even before
micky3879b9f5e72025-07-08 18:04:53 -04002010\*(``tc\*('' expansion, it will have this effect even for users of some other
2011terminal types and users whose \fITERM\fP variable does not have a termcap
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302012entry.
2013.PP
micky3879b9f5e72025-07-08 18:04:53 -04002014When in \-C (translate to termcap) mode,
2015the \fI\%ncurses\fP implementation of
2016\fB@TIC@\fP(1M) issues warning messages when the pre-tc length of a termcap
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302017translation is too long.
Steve Kondikae271bc2015-11-15 02:50:53 +01002018The \-c (check) option also checks resolved (after tc
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302019expansion) lengths.
micky3879b9f5e72025-07-08 18:04:53 -04002020.SH FILES
2021.TP
2022.I \*d
2023compiled terminal description database directory
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302024.SH EXTENSIONS
Steve Kondikae271bc2015-11-15 02:50:53 +01002025Searching for terminal descriptions in
micky3879b9f5e72025-07-08 18:04:53 -04002026\fI$HOME/.terminfo\fP and \fI\%TERMINFO_DIRS\fP
Steve Kondikae271bc2015-11-15 02:50:53 +01002027is not supported by older implementations.
2028.PP
micky3879b9f5e72025-07-08 18:04:53 -04002029Some SVr4 \fBcurses\fP implementations, and all previous to SVr4, do not
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302030interpret the %A and %O operators in parameter strings.
2031.PP
micky3879b9f5e72025-07-08 18:04:53 -04002032SVr4/XPG4 do not specify whether \fBmsgr\fP licenses movement while in
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302033an alternate-character-set mode (such modes may, among other things, map
2034CR and NL to characters that do not trigger local motions).
micky3879b9f5e72025-07-08 18:04:53 -04002035The \fI\%ncurses\fP implementation ignores \fBmsgr\fP in
2036\fBALTCHARSET\fP mode.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302037This raises the possibility that an XPG4
2038implementation making the opposite interpretation may need terminfo
micky3879b9f5e72025-07-08 18:04:53 -04002039entries made for \fI\%ncurses\fP to have \fBmsgr\fP turned off.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302040.PP
micky3879b9f5e72025-07-08 18:04:53 -04002041The \fI\%ncurses\fP library handles insert-character and
2042insert-character modes in a slightly non-standard way to get better
2043update efficiency.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302044See
micky3879b9f5e72025-07-08 18:04:53 -04002045the \fBInsert/Delete Character\fP subsection above.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302046.PP
micky3879b9f5e72025-07-08 18:04:53 -04002047The parameter substitutions for \fBset_clock\fP and \fBdisplay_clock\fP are
2048not documented in SVr4 or X/Open Curses.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302049They are deduced from the
2050documentation for the AT&T 505 terminal.
2051.PP
micky3879b9f5e72025-07-08 18:04:53 -04002052Be careful assigning the \fBkmous\fP capability.
2053The \fI\%ncurses\fP library wants to interpret it as \fBKEY_MOUSE\fP,
2054for use by terminals and emulators like xterm
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302055that can return mouse-tracking information in the keyboard-input stream.
2056.PP
Steve Kondikae271bc2015-11-15 02:50:53 +01002057X/Open Curses does not mention italics.
2058Portable applications must assume that numeric capabilities are
2059signed 16-bit values.
micky3879b9f5e72025-07-08 18:04:53 -04002060This includes the \fIno_color_video\fP (\fBncv\fP) capability.
2061The 32768 mask value used for italics with \fBncv\fP can be confused with
2062an absent or cancelled \fBncv\fP.
Steve Kondikae271bc2015-11-15 02:50:53 +01002063If italics should work with colors,
micky3879b9f5e72025-07-08 18:04:53 -04002064then the \fBncv\fP value must be specified, even if it is zero.
Steve Kondikae271bc2015-11-15 02:50:53 +01002065.PP
micky3879b9f5e72025-07-08 18:04:53 -04002066Different commercial ports of \fI\%terminfo\fP and \fIcurses\fP support
2067different subsets of X/Open Curses and
2068(in some cases)
2069different extensions.
2070Here is a summary,
2071accurate as of October 1995,
2072after which the commercial Unix market contracted and lost diversity.
2073.bP
2074SVr4,
2075Solaris,
2076and \fI\%ncurses\fP support all SVr4 capabilities.
2077.bP
2078IRIX supports the SVr4 set and adds one undocumented extended string
2079capability (\fB\%set_pglen\fP).
2080.bP
2081SVr1 and Ultrix support a restricted subset of \fI\%terminfo\fP
2082capabilities.
2083The Booleans end with \fB\%xon_xoff\fP;
2084the numerics with \fB\%width_status_line\fP;
2085and the strings with \fB\%prtr_non\fP.
2086.bP
2087HP/UX supports the SVr1 subset,
2088plus the SVr[234] numerics
2089\fB\%num_labels\fP,
2090\fB\%label_height\fP,
2091\fB\%label_width\fP,
2092plus function keys 11 through 63,
2093plus
2094\fB\%plab_norm\fP,
2095\fB\%label_on\fP,
2096and
2097\fB\%label_off\fP,
2098plus a number of incompatible string table extensions.
2099.bP
2100AIX supports the SVr1 subset,
2101plus function keys 11 through 63,
2102plus a number of incompatible string table extensions.
2103.bP
2104OSF/1 supports both the SVr4 set and the AIX extensions.
2105.SH PORTABILITY
2106Do not count on compiled (binary) \fI\%terminfo\fP entries being
2107portable between commercial Unix systems.
2108At least two implementations of \fI\%terminfo\fP
2109(those of HP-UX and AIX)
2110diverged from those of other System V Unices after SVr1,
2111adding extension capabilities to the string table that
2112(in the binary format)
2113collide with subsequent System V and X/Open Curses extensions.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302114.SH AUTHORS
2115Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.
micky3879b9f5e72025-07-08 18:04:53 -04002116Based on \fIpcurses\fP by Pavel Curtis.
2117.SH SEE ALSO
2118\fB\%@INFOCMP@\fP(1M),
2119\fB\%@TABS@\fP(1),
2120\fB\%@TIC@\fP(1M),
2121\fB\%curses\fP(3X),
2122\fB\%curs_color\fP(3X),
2123\fB\%curs_terminfo\fP(3X),
2124\fB\%curs_variables\fP(3X),
2125\fB\%printf\fP(3),
2126\fB\%term_variables\fP(3X),
2127\fB\%term\fP(5),
2128\fB\%user_caps\fP(5)