* Note: this must be run through tbl before nroff.
* The magic cookie on the first line triggers this under some man programs.
****************************************************************************
- * Copyright (c) 1998-2013,2016 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************
- * @Id: terminfo.head,v 1.22 2016/10/15 17:02:31 tom Exp @
+ * @Id: terminfo.head,v 1.30 2017/03/05 00:24:35 tom Exp @
* Head of terminfo man page ends here
- * @Id: terminfo.tail,v 1.73 2016/10/22 19:56:17 tom Exp @
+ * @Id: terminfo.tail,v 1.78 2017/03/04 23:52:35 tom Exp @
* Beginning of terminfo.tail file
* This file is part of ncurses.
* See "terminfo.head" for copyright.
nals by giving a set of capabilities which they have, by
specifying how to perform screen operations, and by speci-
fying padding requirements and initialization sequences.
- This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20161022).
-
- Entries in <EM>terminfo</EM> consist of a sequence of `,' separated
- fields (embedded commas may be escaped with a backslash or
- notated as \054). White space after the `,' separator is
- ignored. The first entry for each terminal gives the
- names which are known for the terminal, separated by `|'
- characters. The first name given is the most common
- abbreviation for the terminal, the last name given should
- be a long name fully identifying the terminal, and all
- others are understood as synonyms for the terminal name.
- All names but the last should be in lower case and contain
- no blanks; the last name may well contain upper case and
- blanks for readability.
-
- Lines beginning with a `#' in the first column are treated
- as comments. While comment lines are legal at any point,
- the output of <STRONG>captoinfo</STRONG> and <STRONG>infotocap</STRONG> (aliases for <STRONG>tic</STRONG>)
- will move comments so they occur only between entries.
-
- Newlines and leading tabs may be used for formatting
- entries for readability. These are removed from parsed
- entries. The <STRONG>infocmp</STRONG> <STRONG>-f</STRONG> option relies on this to format
- if-then-else expressions: the result can be read by <STRONG>tic</STRONG>.
+ This describes <STRONG>ncurses</STRONG> version 6.0 (patch 20170304).
+
+
+</PRE><H3><a name="h3-Terminfo-Entry-Syntax">Terminfo Entry Syntax</a></H3><PRE>
+ Entries in <EM>terminfo</EM> consist of a sequence of fields:
+
+ <STRONG>o</STRONG> Each field ends with a comma "," (embedded commas may
+ be escaped with a backslash or written as "\054").
+
+ <STRONG>o</STRONG> White space between fields is ignored.
+
+ <STRONG>o</STRONG> The first field in a <EM>terminfo</EM> entry begins in the
+ first column.
+
+ <STRONG>o</STRONG> Newlines and leading whitespace (spaces or tabs) may
+ be used for formatting entries for readability. These
+ are removed from parsed entries.
+
+ The <STRONG>infocmp</STRONG> <STRONG>-f</STRONG> and <STRONG>-W</STRONG> options relies on this to format
+ if-then-else expressions, or to enforce maximum line-
+ width. The resulting formatted terminal description
+ can be read by <STRONG>tic</STRONG>.
+
+ <STRONG>o</STRONG> The first field for each terminal gives the names
+ which are known for the terminal, separated by "|"
+ characters.
+
+ The first name given is the most common abbreviation
+ for the terminal (its primary name), the last name
+ given should be a long name fully identifying the ter-
+ minal (see <STRONG><A HREF="longname.3x.html">longname(3x)</A></STRONG>), and all others are treated
+ as synonyms (aliases) for the primary terminal name.
+
+ X/Open Curses advises that all names but the last
+ should be in lower case and contain no blanks; the
+ last name may well contain upper case and blanks for
+ readability.
+
+ This implementation is not so strict; it allows mixed
+ case in the primary name and aliases. If the last
+ name has no embedded blanks, it allows that to be both
+ an alias and a verbose name (but will warn about this
+ ambiguity).
+
+ <STRONG>o</STRONG> Lines beginning with a "#" in the first column are
+ treated as comments.
+
+ While comment lines are legal at any point, the output
+ of <STRONG>captoinfo</STRONG> and <STRONG>infotocap</STRONG> (aliases for <STRONG>tic</STRONG>) will move
+ comments so they occur only between entries.
Terminal names (except for the last, verbose entry) should
be chosen using the following conventions. The particular
-rv Reverse video c100-rv
-s Enable status line vt100-s
-vb Use visible bell instead of beep wy370-vb
-
-w Wide mode (> 80 columns, usually 132) vt100-w
For more on terminal naming conventions, see the <STRONG>term(7)</STRONG>
manual page.
+</PRE><H3><a name="h3-Terminfo-Capabilities-Syntax">Terminfo Capabilities Syntax</a></H3><PRE>
+ The terminfo entry consists of several <EM>capabilities</EM>, i.e.,
+ features that the terminal has, or methods for exercising
+ the terminal's features.
+
+ After the first field (giving the name(s) of the terminal
+ entry), there should be one or more <EM>capability</EM> fields.
+ These are boolean, numeric or string names with corre-
+ sponding values:
+
+ <STRONG>o</STRONG> Boolean capabilities are true when present, false when
+ absent. There is no explicit value for boolean capa-
+ bilities.
+
+ <STRONG>o</STRONG> Numeric capabilities have a "#" following the name,
+ then an unsigned decimal integer value.
+
+ <STRONG>o</STRONG> String capabilities have a "=" following the name,
+ then an string of characters making up the capability
+ value.
+
+ String capabilities can be split into multiple lines,
+ just as the fields comprising a terminal entry can be
+ split into multiple lines. While blanks between
+ fields are ignored, blanks embedded within a string
+ value are retained, except for leading blanks on a
+ line.
+
+ Any capability can be <EM>canceled</EM>, i.e., suppressed from the
+ terminal entry, by following its name with "@" rather than
+ a capability value.
+
+
+</PRE><H3><a name="h3-Similar-Terminals">Similar Terminals</a></H3><PRE>
+ If there are two very similar terminals, one (the variant)
+ can be defined as being just like the other (the base)
+ with certain exceptions. In the definition of the vari-
+ ant, the string capability <STRONG>use</STRONG> can be given with the name
+ of the base terminal:
+
+ <STRONG>o</STRONG> The capabilities given before <STRONG>use</STRONG> override those in
+ the base type named by <STRONG>use</STRONG>.
+
+ <STRONG>o</STRONG> If there are multiple <STRONG>use</STRONG> capabilities, they are
+ merged in reverse order. That is, the rightmost <STRONG>use</STRONG>
+ reference is processed first, then the one to its
+ left, and so forth.
+
+ <STRONG>o</STRONG> Capabilities given explicitly in the entry override
+ those brought in by <STRONG>use</STRONG> references.
+
+ A capability can be canceled by placing <STRONG>xx@</STRONG> to the left of
+ the use reference that imports it, where <EM>xx</EM> is the capa-
+ bility. For example, the entry
+
+ 2621-nl, smkx@, rmkx@, use=2621,
+
+ defines a 2621-nl that does not have the <STRONG>smkx</STRONG> or <STRONG>rmkx</STRONG>
+ capabilities, and hence does not turn on the function key
+ labels when in visual mode. This is useful for different
+ modes for a terminal, or for different user preferences.
+
+ An entry included via <STRONG>use</STRONG> can contain canceled capabili-
+ ties, which have the same effect as if those cancels were
+ inline in the using terminal entry.
+
+
</PRE><H3><a name="h3-Predefined-Capabilities">Predefined Capabilities</a></H3><PRE>
- The following is a complete table of the capabilities
- included in a terminfo description block and available to
+ The following is a complete table of the capabilities
+ included in a terminfo description block and available to
terminfo-using code. In each line of the table,
- The <STRONG>variable</STRONG> is the name by which the programmer (at the
+ The <STRONG>variable</STRONG> is the name by which the programmer (at the
terminfo level) accesses the capability.
- The <STRONG>capname</STRONG> is the short name used in the text of the
- database, and is used by a person updating the database.
- Whenever possible, capnames are chosen to be the same as
+ The <STRONG>capname</STRONG> is the short name used in the text of the
+ database, and is used by a person updating the database.
+ Whenever possible, capnames are chosen to be the same as
or similar to the ANSI X3.64-1979 standard (now superseded
- by ECMA-48, which uses identical or very similar names).
+ by ECMA-48, which uses identical or very similar names).
Semantics are also intended to match those of the specifi-
cation.
- The termcap code is the old <STRONG>termcap</STRONG> capability name (some
+ The termcap code is the old <STRONG>termcap</STRONG> capability name (some
capabilities are new, and have names which termcap did not
originate).
- Capability names have no hard length limit, but an infor-
- mal limit of 5 characters has been adopted to keep them
- short and to allow the tabs in the source file <STRONG>Caps</STRONG> to
+ Capability names have no hard length limit, but an infor-
+ mal limit of 5 characters has been adopted to keep them
+ short and to allow the tabs in the source file <STRONG>Caps</STRONG> to
line up nicely.
- Finally, the description field attempts to convey the
- semantics of the capability. You may find some codes in
+ Finally, the description field attempts to convey the
+ semantics of the capability. You may find some codes in
the description field:
(P) indicates that padding may be specified
- #[1-9] in the description field indicates that the string
+ #[1-9] in the description field indicates that the string
is passed through tparm with parms as given (#<EM>i</EM>).
- (P*) indicates that padding may vary in proportion to
+ (P*) indicates that padding may vary in proportion to
the number of lines affected
(#<EM>i</EM>) indicates the <EM>i</EM>th parameter.
by overwriting (hp)
col_addr_glitch xhpa YA only positive motion
for hpa/mhpa caps
-
-
-
cpi_changes_res cpix YF changing character
pitch changes reso-
lution
required
no_esc_ctlc xsb xb beehive (f1=escape,
f2=ctrl C)
+
+
no_pad_char npc NP pad character does
not exist
non_dest_scroll_region ndscr ND scrolling region is
on the status line
tilde_glitch hz hz cannot print ~'s
(Hazeltine)
-
-
transparent_underline ul ul underline character
overstrikes
xon_xoff xon xo terminal uses
width_status_line wsl ws number of columns in
status line
- The following numeric capabilities are present in the
- SVr4.0 term structure, but are not yet documented in the
+ The following numeric capabilities are present in the
+ SVr4.0 term structure, but are not yet documented in the
man page. They came in with SVr4's printer support.
dot_horz_spacing spinh Yc spacing of dots hor-
izontally in dots
per inch
-
dot_vert_spacing spinv Yb spacing of pins ver-
tically in pins per
inch
to #1
change_line_pitch lpi ZB Change number of
lines per inch to #1
+
change_res_horz chr ZC Change horizontal
resolution to #1
+
+
change_res_vert cvr ZD Change vertical res-
olution to #1
change_scroll_region csr cs change region to
home cursor (P*)
clr_bol el1 cb Clear to beginning
of line
-
-
clr_eol el ce clear to end of line
(P)
clr_eos ed cd clear to end of
char set
enter_alt_charset_mode smacs as start alternate
character set (P)
+
enter_am_mode smam SA turn on automatic
margins
enter_blink_mode blink mb turn on blinking
+
+
enter_bold_mode bold md turn on bold (extra
bright) mode
enter_ca_mode smcup ti string to start pro-
enter_italics_mode sitm ZH Enter italic mode
enter_leftward_mode slm ZI Start leftward car-
riage motion
-
enter_micro_mode smicm ZJ Start micro-motion
mode
enter_near_letter_quality snlq ZK Enter NLQ mode
ter motion
exit_xon_mode rmxon RX turn off xon/xoff
handshaking
+
+
fixed_pause pause PA pause for 2-3 sec-
onds
flash_hook hook fh flash switch hook
string
init_2string is2 is initialization
string
-
init_3string is3 i3 initialization
string
init_file if if name of initializa-
key_f1 kf1 k1 F1 function key
key_f10 kf10 k; F10 function key
key_f11 kf11 F1 F11 function key
+
key_f12 kf12 F2 F12 function key
key_f13 kf13 F3 F13 function key
key_f14 kf14 F4 F14 function key
key_f22 kf22 FC F22 function key
key_f23 kf23 FD F23 function key
key_f24 kf24 FE F24 function key
-
key_f25 kf25 FF F25 function key
key_f26 kf26 FG F26 function key
key_f27 kf27 FH F27 function key
key_ic kich1 kI insert-character key
key_il kil1 kA insert-line key
key_left kcub1 kl left-arrow key
+
key_ll kll kH lower-left key (home
down)
key_mark kmrk %2 mark key
key_previous kprv %8 previous key
key_print kprt %9 print key
key_redo krdo %0 redo key
-
key_reference kref &1 reference key
key_refresh krfr &2 refresh key
key_replace krpl &3 replace key
board_transmit' mode
keypad_xmit smkx ks enter 'key-
board_transmit' mode
+
+
lab_f0 lf0 l0 label on function
key f0 if not f0
lab_f1 lf1 l1 label on function
key f3 if not f3
lab_f4 lf4 l4 label on function
key f4 if not f4
-
-
lab_f5 lf5 l5 label on function
key f5 if not f5
lab_f6 lf6 l6 label on function
to the left (P)
parm_left_micro mcub Zg Like parm_left_cur-
sor in micro mode
+
+
parm_right_cursor cuf RI move #1 characters
to the right (P*)
parm_right_micro mcuf Zh Like parm_right_cur-
in micro mode
pkey_key pfkey pk program function key
#1 to type string #2
-
-
pkey_local pfloc pl program function key
#1 to execute string
#2
pair to #1
set_foreground setf Sf Set foreground color
#1
+
+
set_left_margin smgl ML set left soft margin
at current column.
See smgl. (ML is not
umn
set_right_margin_parm smgrp Zn Set right margin at
column #1
-
set_tab hts st set a tab in every
row, current columns
set_top_margin smgt Zo Set top margin at
zero_motion zerom Zx No motion for subse-
quent character
- The following string capabilities are present in the
- SVr4.0 term structure, but were originally not documented
+ The following string capabilities are present in the
+ SVr4.0 term structure, but were originally not documented
in the man page.
of same row
bit_image_newline binel Zz Move to next row
of the bit image
-
bit_image_repeat birep Xy Repeat bit image
cell #1 #2 times
char_set_names csnm Zy Produce #1'th item
ANSI escape
set_color_band setcolor Yz Change to ribbon
color #1
+
set_lr_margin smglr ML Set both left and
right margins to
#1, #2. (ML is
cap).
set_page_length slines YZ Set page length to
#1 lines
-
-
set_tb_margin smgtb MT Sets both top and
bottom margins to
#1, #2
- The XSI Curses standard added these hardcopy capabili-
+ The XSI Curses standard added these hardcopy capabili-
ties. They were used in some post-4.1 versions of System
V curses, e.g., Solaris 2.5 and IRIX 6.x. Except for <STRONG>YI</STRONG>,
the <STRONG>ncurses</STRONG> termcap names for them are invented. Accord-
- ing to the XSI Curses standard, they have no termcap
+ ing to the XSI Curses standard, they have no termcap
names. If your compiled terminfo entries use these, they
- may not be binary-compatible with System V terminfo
+ may not be binary-compatible with System V terminfo
entries after SVr4.1; beware!
</PRE><H3><a name="h3-User-Defined-Capabilities">User-Defined Capabilities</a></H3><PRE>
- The preceding section listed the <EM>predefined</EM> capabilities.
- They deal with some special features for terminals no
- longer (or possibly never) produced. Occasionally there
- are special features of newer terminals which are awkward
+ The preceding section listed the <EM>predefined</EM> capabilities.
+ They deal with some special features for terminals no
+ longer (or possibly never) produced. Occasionally there
+ are special features of newer terminals which are awkward
or impossible to represent by reusing the predefined capa-
bilities.
<STRONG>ncurses</STRONG> addresses this limitation by allowing user-defined
capabilities. The <STRONG>tic</STRONG> and <STRONG>infocmp</STRONG> programs provide the <STRONG>-x</STRONG>
- option for this purpose. When <STRONG>-x</STRONG> is set, <STRONG>tic</STRONG> treats
- unknown capabilities as user-defined. That is, if <STRONG>tic</STRONG>
- encounters a capability name which it does not recognize,
- it infers its type (boolean, number or string) from the
+ option for this purpose. When <STRONG>-x</STRONG> is set, <STRONG>tic</STRONG> treats
+ unknown capabilities as user-defined. That is, if <STRONG>tic</STRONG>
+ encounters a capability name which it does not recognize,
+ it infers its type (boolean, number or string) from the
syntax and makes an extended table entry for that capabil-
- ity. The <STRONG>use_extended_names</STRONG> function makes this informa-
+ ity. The <STRONG>use_extended_names</STRONG> function makes this informa-
tion conditionally available to applications. The ncurses
- library provides the data leaving most of the behavior to
+ library provides the data leaving most of the behavior to
applications:
<STRONG>o</STRONG> User-defined capability strings whose name begins with
"k" are treated as function keys.
- <STRONG>o</STRONG> The types (boolean, number, string) determined by <STRONG>tic</STRONG>
+ <STRONG>o</STRONG> The types (boolean, number, string) determined by <STRONG>tic</STRONG>
can be inferred by successful calls on <STRONG>tigetflag</STRONG>, etc.
- <STRONG>o</STRONG> If the capability name happens to be two characters,
- the capability is also available through the termcap
+ <STRONG>o</STRONG> If the capability name happens to be two characters,
+ the capability is also available through the termcap
interface.
While termcap is said to be extensible because it does not
- use a predefined set of capabilities, in practice it has
- been limited to the capabilities defined by terminfo
- implementations. As a rule, user-defined capabilities
+ use a predefined set of capabilities, in practice it has
+ been limited to the capabilities defined by terminfo
+ implementations. As a rule, user-defined capabilities
intended for use by termcap applications should be limited
- to booleans and numbers to avoid running past the 1023
- byte limit assumed by termcap implementations and their
- applications. In particular, providing extended sets of
- function keys (past the 60 numbered keys and the handful
+ to booleans and numbers to avoid running past the 1023
+ byte limit assumed by termcap implementations and their
+ applications. In particular, providing extended sets of
+ function keys (past the 60 numbered keys and the handful
of special named keys) is best done using the longer names
available using terminfo.
</PRE><H3><a name="h3-A-Sample-Entry">A Sample Entry</a></H3><PRE>
The following entry, describing an ANSI-standard terminal,
- is representative of what a <STRONG>terminfo</STRONG> entry for a modern
+ is representative of what a <STRONG>terminfo</STRONG> entry for a modern
terminal typically looks like.
ansi|ansi/pc-term compatible with color,
smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,
- Entries may continue onto multiple lines by placing white
- space at the beginning of each line except the first.
- Comments may be included on lines beginning with "#".
+ Entries may continue onto multiple lines by placing white
+ space at the beginning of each line except the first.
+ Comments may be included on lines beginning with "#".
Capabilities in <EM>terminfo</EM> are of three types:
- <STRONG>o</STRONG> Boolean capabilities which indicate that the terminal
+ <STRONG>o</STRONG> Boolean capabilities which indicate that the terminal
has some particular feature,
- <STRONG>o</STRONG> numeric capabilities giving the size of the terminal
+ <STRONG>o</STRONG> numeric capabilities giving the size of the terminal
or the size of particular delays, and
- <STRONG>o</STRONG> string capabilities, which give a sequence which can
+ <STRONG>o</STRONG> string capabilities, which give a sequence which can
be used to perform particular terminal operations.
</PRE><H3><a name="h3-Types-of-Capabilities">Types of Capabilities</a></H3><PRE>
- All capabilities have names. For instance, the fact that
- ANSI-standard terminals have <EM>automatic</EM> <EM>margins</EM> (i.e., an
- automatic return and line-feed when the end of a line is
- reached) is indicated by the capability <STRONG>am</STRONG>. Hence the
+ All capabilities have names. For instance, the fact that
+ ANSI-standard terminals have <EM>automatic</EM> <EM>margins</EM> (i.e., an
+ automatic return and line-feed when the end of a line is
+ reached) is indicated by the capability <STRONG>am</STRONG>. Hence the
description of ansi includes <STRONG>am</STRONG>. Numeric capabilities are
- followed by the character "#" and then a positive value.
- Thus <STRONG>cols</STRONG>, which indicates the number of columns the ter-
- minal has, gives the value "80" for ansi. Values for
+ followed by the character "#" and then a positive value.
+ Thus <STRONG>cols</STRONG>, which indicates the number of columns the ter-
+ minal has, gives the value "80" for ansi. Values for
numeric capabilities may be specified in decimal, octal or
- hexadecimal, using the C programming language conventions
+ hexadecimal, using the C programming language conventions
(e.g., 255, 0377 and 0xff or 0xFF).
- Finally, string valued capabilities, such as <STRONG>el</STRONG> (clear to
+ Finally, string valued capabilities, such as <STRONG>el</STRONG> (clear to
end of line sequence) are given by the two-character code,
- an "=", and then a string ending at the next following
+ an "=", and then a string ending at the next following
",".
- A number of escape sequences are provided in the string
+ A number of escape sequences are provided in the string
valued capabilities for easy encoding of characters there.
- Both <STRONG>\E</STRONG> and <STRONG>\e</STRONG> map to an ESCAPE character, <STRONG>^x</STRONG> maps to a
- control-x for any appropriate x, and the sequences <STRONG>\n</STRONG> <STRONG>\l</STRONG>
- <STRONG>\r</STRONG> <STRONG>\t</STRONG> <STRONG>\b</STRONG> <STRONG>\f</STRONG> <STRONG>\s</STRONG> give a newline, line-feed, return, tab,
+ Both <STRONG>\E</STRONG> and <STRONG>\e</STRONG> map to an ESCAPE character, <STRONG>^x</STRONG> maps to a
+ control-x for any appropriate x, and the sequences <STRONG>\n</STRONG> <STRONG>\l</STRONG>
+ <STRONG>\r</STRONG> <STRONG>\t</STRONG> <STRONG>\b</STRONG> <STRONG>\f</STRONG> <STRONG>\s</STRONG> give a newline, line-feed, return, tab,
backspace, form-feed, and space. Other escapes include
<STRONG>o</STRONG> <STRONG>\^</STRONG> for <STRONG>^</STRONG>,
<STRONG>o</STRONG> and <STRONG>\0</STRONG> for null.
- <STRONG>\0</STRONG> will produce \200, which does not terminate a
- string but behaves as a null character on most termi-
+ <STRONG>\0</STRONG> will produce \200, which does not terminate a
+ string but behaves as a null character on most termi-
nals, providing CS7 is specified. See <STRONG>stty(1)</STRONG>.
- The reason for this quirk is to maintain binary com-
- patibility of the compiled terminfo files with other
- implementations, e.g., the SVr4 systems, which docu-
- ment this. Compiled terminfo files use null-termi-
- nated strings, with no lengths. Modifying this would
+ The reason for this quirk is to maintain binary com-
+ patibility of the compiled terminfo files with other
+ implementations, e.g., the SVr4 systems, which docu-
+ ment this. Compiled terminfo files use null-termi-
+ nated strings, with no lengths. Modifying this would
require a new binary format, which would not work with
other implementations.
- Finally, characters may be given as three octal digits
+ Finally, characters may be given as three octal digits
after a <STRONG>\</STRONG>.
- A delay in milliseconds may appear anywhere in a string
- capability, enclosed in $<..> brackets, as in <STRONG>el</STRONG>=\EK$<5>,
- and padding characters are supplied by <STRONG>tputs</STRONG> to provide
- this delay.
+ A delay in milliseconds may appear anywhere in a string
+ capability, enclosed in $<..> brackets, as in <STRONG>el</STRONG>=\EK$<5>,
+ and padding characters are supplied by <STRONG><A HREF="curs_terminfo.3x.html">tputs(3x)</A></STRONG> to pro-
+ vide this delay.
- <STRONG>o</STRONG> The delay must be a number with at most one decimal
+ <STRONG>o</STRONG> The delay must be a number with at most one decimal
place of precision; it may be followed by suffixes "*"
or "/" or both.
- <STRONG>o</STRONG> A "*" indicates that the padding required is propor-
- tional to the number of lines affected by the opera-
- tion, and the amount given is the per-affected-unit
- padding required. (In the case of insert character,
+ <STRONG>o</STRONG> A "*" indicates that the padding required is propor-
+ tional to the number of lines affected by the opera-
+ tion, and the amount given is the per-affected-unit
+ padding required. (In the case of insert character,
the factor is still the number of <EM>lines</EM> affected.)
- Normally, padding is advisory if the device has the
- <STRONG>xon</STRONG> capability; it is used for cost computation but
+ Normally, padding is advisory if the device has the
+ <STRONG>xon</STRONG> capability; it is used for cost computation but
does not trigger delays.
- <STRONG>o</STRONG> A "/" suffix indicates that the padding is mandatory
+ <STRONG>o</STRONG> A "/" suffix indicates that the padding is mandatory
and forces a delay of the given number of milliseconds
- even on devices for which <STRONG>xon</STRONG> is present to indicate
+ even on devices for which <STRONG>xon</STRONG> is present to indicate
flow control.
- Sometimes individual capabilities must be commented out.
- To do this, put a period before the capability name. For
+ Sometimes individual capabilities must be commented out.
+ To do this, put a period before the capability name. For
example, see the second <STRONG>ind</STRONG> in the example above.
</PRE><H3><a name="h3-Fetching-Compiled-Descriptions">Fetching Compiled Descriptions</a></H3><PRE>
- The <STRONG>ncurses</STRONG> library searches for terminal descriptions in
+ The <STRONG>ncurses</STRONG> library searches for terminal descriptions in
several places. It uses only the first description found.
- The library has a compiled-in list of places to search
- which can be overridden by environment variables. Before
- starting to search, <STRONG>ncurses</STRONG> eliminates duplicates in its
+ The library has a compiled-in list of places to search
+ which can be overridden by environment variables. Before
+ starting to search, <STRONG>ncurses</STRONG> eliminates duplicates in its
search list.
- <STRONG>o</STRONG> If the environment variable TERMINFO is set, it is
- interpreted as the pathname of a directory containing
- the compiled description you are working on. Only
+ <STRONG>o</STRONG> If the environment variable TERMINFO is set, it is
+ interpreted as the pathname of a directory containing
+ the compiled description you are working on. Only
that directory is searched.
- <STRONG>o</STRONG> If TERMINFO is not set, <STRONG>ncurses</STRONG> will instead look in
- the directory <STRONG>$HOME/.terminfo</STRONG> for a compiled descrip-
+ <STRONG>o</STRONG> If TERMINFO is not set, <STRONG>ncurses</STRONG> will instead look in
+ the directory <STRONG>$HOME/.terminfo</STRONG> for a compiled descrip-
tion.
- <STRONG>o</STRONG> Next, if the environment variable TERMINFO_DIRS is
+ <STRONG>o</STRONG> Next, if the environment variable TERMINFO_DIRS is
set, <STRONG>ncurses</STRONG> will interpret the contents of that vari-
- able as a list of colon-separated directories (or
+ able as a list of colon-separated directories (or
database files) to be searched.
- An empty directory name (i.e., if the variable begins
- or ends with a colon, or contains adjacent colons) is
- interpreted as the system location <EM>/usr/share/ter-</EM>
+ An empty directory name (i.e., if the variable begins
+ or ends with a colon, or contains adjacent colons) is
+ interpreted as the system location <EM>/usr/share/ter-</EM>
<EM>minfo</EM>.
<STRONG>o</STRONG> Finally, <STRONG>ncurses</STRONG> searches these compiled-in locations:
- <STRONG>o</STRONG> a list of directories
+ <STRONG>o</STRONG> a list of directories
(/usr/local/ncurses/share/terminfo:/usr/share/ter-
minfo), and
</PRE><H3><a name="h3-Preparing-Descriptions">Preparing Descriptions</a></H3><PRE>
- We now outline how to prepare descriptions of terminals.
- The most effective way to prepare a terminal description
- is by imitating the description of a similar terminal in
- <EM>terminfo</EM> and to build up a description gradually, using
+ We now outline how to prepare descriptions of terminals.
+ The most effective way to prepare a terminal description
+ is by imitating the description of a similar terminal in
+ <EM>terminfo</EM> and to build up a description gradually, using
partial descriptions with <EM>vi</EM> or some other screen-oriented
- program to check that they are correct. Be aware that a
+ program to check that they are correct. Be aware that a
very unusual terminal may expose deficiencies in the abil-
- ity of the <EM>terminfo</EM> file to describe it or bugs in the
+ ity of the <EM>terminfo</EM> file to describe it or bugs in the
screen-handling code of the test program.
- To get the padding for insert line right (if the terminal
+ To get the padding for insert line right (if the terminal
manufacturer did not document it) a severe test is to edit
- a large file at 9600 baud, delete 16 or so lines from the
- middle of the screen, then hit the "u" key several times
- quickly. If the terminal messes up, more padding is usu-
- ally needed. A similar test can be used for insert char-
+ a large file at 9600 baud, delete 16 or so lines from the
+ middle of the screen, then hit the "u" key several times
+ quickly. If the terminal messes up, more padding is usu-
+ ally needed. A similar test can be used for insert char-
acter.
</PRE><H3><a name="h3-Basic-Capabilities">Basic Capabilities</a></H3><PRE>
- The number of columns on each line for the terminal is
- given by the <STRONG>cols</STRONG> numeric capability. If the terminal is
- a CRT, then the number of lines on the screen is given by
+ The number of columns on each line for the terminal is
+ given by the <STRONG>cols</STRONG> numeric capability. If the terminal is
+ a CRT, then the number of lines on the screen is given by
the <STRONG>lines</STRONG> capability. If the terminal wraps around to the
- beginning of the next line when it reaches the right mar-
+ beginning of the next line when it reaches the right mar-
gin, then it should have the <STRONG>am</STRONG> capability. If the termi-
- nal can clear its screen, leaving the cursor in the home
- position, then this is given by the <STRONG>clear</STRONG> string capabil-
- ity. If the terminal overstrikes (rather than clearing a
- position when a character is struck over) then it should
- have the <STRONG>os</STRONG> capability. If the terminal is a printing
- terminal, with no soft copy unit, give it both <STRONG>hc</STRONG> and <STRONG>os</STRONG>.
- (<STRONG>os</STRONG> applies to storage scope terminals, such as TEKTRONIX
- 4010 series, as well as hard copy and APL terminals.) If
+ nal can clear its screen, leaving the cursor in the home
+ position, then this is given by the <STRONG>clear</STRONG> string capabil-
+ ity. If the terminal overstrikes (rather than clearing a
+ position when a character is struck over) then it should
+ have the <STRONG>os</STRONG> capability. If the terminal is a printing
+ terminal, with no soft copy unit, give it both <STRONG>hc</STRONG> and <STRONG>os</STRONG>.
+ (<STRONG>os</STRONG> applies to storage scope terminals, such as TEKTRONIX
+ 4010 series, as well as hard copy and APL terminals.) If
there is a code to move the cursor to the left edge of the
current row, give this as <STRONG>cr</STRONG>. (Normally this will be car-
- riage return, control M.) If there is a code to produce
+ riage return, control M.) If there is a code to produce
an audible signal (bell, beep, etc) give this as <STRONG>bel</STRONG>.
- If there is a code to move the cursor one position to the
- left (such as backspace) that capability should be given
- as <STRONG>cub1</STRONG>. Similarly, codes to move to the right, up, and
+ If there is a code to move the cursor one position to the
+ left (such as backspace) that capability should be given
+ as <STRONG>cub1</STRONG>. Similarly, codes to move to the right, up, and
down should be given as <STRONG>cuf1</STRONG>, <STRONG>cuu1</STRONG>, and <STRONG>cud1</STRONG>. These local
- cursor motions should not alter the text they pass over,
- for example, you would not normally use "<STRONG>cuf1</STRONG>= " because
+ cursor motions should not alter the text they pass over,
+ for example, you would not normally use "<STRONG>cuf1</STRONG>= " because
the space would erase the character moved over.
- A very important point here is that the local cursor
- motions encoded in <EM>terminfo</EM> are undefined at the left and
- top edges of a CRT terminal. Programs should never
- attempt to backspace around the left edge, unless <STRONG>bw</STRONG> is
+ A very important point here is that the local cursor
+ motions encoded in <EM>terminfo</EM> are undefined at the left and
+ top edges of a CRT terminal. Programs should never
+ attempt to backspace around the left edge, unless <STRONG>bw</STRONG> is
given, and never attempt to go up locally off the top. In
- order to scroll text up, a program will go to the bottom
+ order to scroll text up, a program will go to the bottom
left corner of the screen and send the <STRONG>ind</STRONG> (index) string.
To scroll text down, a program goes to the top left corner
- of the screen and sends the <STRONG>ri</STRONG> (reverse index) string.
- The strings <STRONG>ind</STRONG> and <STRONG>ri</STRONG> are undefined when not on their
+ of the screen and sends the <STRONG>ri</STRONG> (reverse index) string.
+ The strings <STRONG>ind</STRONG> and <STRONG>ri</STRONG> are undefined when not on their
respective corners of the screen.
Parameterized versions of the scrolling sequences are <STRONG>indn</STRONG>
and <STRONG>rin</STRONG> which have the same semantics as <STRONG>ind</STRONG> and <STRONG>ri</STRONG> except
- that they take one parameter, and scroll that many lines.
- They are also undefined except at the appropriate edge of
+ that they take one parameter, and scroll that many lines.
+ They are also undefined except at the appropriate edge of
the screen.
- The <STRONG>am</STRONG> capability tells whether the cursor sticks at the
- right edge of the screen when text is output, but this
+ The <STRONG>am</STRONG> capability tells whether the cursor sticks at the
+ right edge of the screen when text is output, but this
does not necessarily apply to a <STRONG>cuf1</STRONG> from the last column.
- The only local motion which is defined from the left edge
- is if <STRONG>bw</STRONG> is given, then a <STRONG>cub1</STRONG> from the left edge will
- move to the right edge of the previous row. If <STRONG>bw</STRONG> is not
- given, the effect is undefined. This is useful for draw-
- ing a box around the edge of the screen, for example. If
- the terminal has switch selectable automatic margins, the
- <EM>terminfo</EM> file usually assumes that this is on; i.e., <STRONG>am</STRONG>.
- If the terminal has a command which moves to the first
- column of the next line, that command can be given as <STRONG>nel</STRONG>
- (newline). It does not matter if the command clears the
- remainder of the current line, so if the terminal has no
- <STRONG>cr</STRONG> and <STRONG>lf</STRONG> it may still be possible to craft a working <STRONG>nel</STRONG>
+ The only local motion which is defined from the left edge
+ is if <STRONG>bw</STRONG> is given, then a <STRONG>cub1</STRONG> from the left edge will
+ move to the right edge of the previous row. If <STRONG>bw</STRONG> is not
+ given, the effect is undefined. This is useful for draw-
+ ing a box around the edge of the screen, for example. If
+ the terminal has switch selectable automatic margins, the
+ <EM>terminfo</EM> file usually assumes that this is on; i.e., <STRONG>am</STRONG>.
+ If the terminal has a command which moves to the first
+ column of the next line, that command can be given as <STRONG>nel</STRONG>
+ (newline). It does not matter if the command clears the
+ remainder of the current line, so if the terminal has no
+ <STRONG>cr</STRONG> and <STRONG>lf</STRONG> it may still be possible to craft a working <STRONG>nel</STRONG>
out of one or both of them.
These capabilities suffice to describe hard-copy and
- "glass-tty" terminals. Thus the model 33 teletype is
+ "glass-tty" terminals. Thus the model 33 teletype is
described as
33|tty33|tty|model 33 teletype,
</PRE><H3><a name="h3-Parameterized-Strings">Parameterized Strings</a></H3><PRE>
- Cursor addressing and other strings requiring parameters
- in the terminal are described by a parameterized string
- capability, with <EM>printf</EM>-like escapes such as <EM>%x</EM> in it.
- For example, to address the cursor, the <STRONG>cup</STRONG> capability is
+ Cursor addressing and other strings requiring parameters
+ in the terminal are described by a parameterized string
+ capability, with <EM>printf</EM>-like escapes such as <EM>%x</EM> in it.
+ For example, to address the cursor, the <STRONG>cup</STRONG> capability is
given, using two parameters: the row and column to address
to. (Rows and columns are numbered from zero and refer to
the physical screen visible to the user, not to any unseen
- memory.) If the terminal has memory relative cursor
+ memory.) If the terminal has memory relative cursor
addressing, that can be indicated by <STRONG>mrcup</STRONG>.
- The parameter mechanism uses a stack and special <STRONG>%</STRONG> codes
- to manipulate it. Typically a sequence will push one of
- the parameters onto the stack and then print it in some
- format. Print (e.g., "%d") is a special case. Other
- operations, including "%t" pop their operand from the
+ The parameter mechanism uses a stack and special <STRONG>%</STRONG> codes
+ to manipulate it. Typically a sequence will push one of
+ the parameters onto the stack and then print it in some
+ format. Print (e.g., "%d") is a special case. Other
+ operations, including "%t" pop their operand from the
stack. It is noted that more complex operations are often
necessary, e.g., in the <STRONG>sgr</STRONG> string.
<STRONG>%%</STRONG> outputs "%"
<STRONG>%</STRONG><EM>[[</EM>:<EM>]flags][width[.precision]][</EM><STRONG>doxXs</STRONG><EM>]</EM>
- as in <STRONG>printf</STRONG>, flags are <EM>[-+#]</EM> and <EM>space</EM>. Use a ":"
- to allow the next character to be a "-" flag, avoid-
+ as in <STRONG>printf</STRONG>, flags are <EM>[-+#]</EM> and <EM>space</EM>. Use a ":"
+ to allow the next character to be a "-" flag, avoid-
ing interpreting "%-" as an operator.
%c print <EM>pop()</EM> like %c in <STRONG>printf</STRONG>
<STRONG>%g</STRONG><EM>[A-Z]</EM>
get static variable <EM>[a-z]</EM> and push it
- The terms "static" and "dynamic" are misleading.
- Historically, these are simply two different sets of
- variables, whose values are not reset between calls
- to <STRONG>tparm</STRONG>. However, that fact is not documented in
- other implementations. Relying on it will adversely
- impact portability to other implementations.
+ The terms "static" and "dynamic" are misleading.
+ Historically, these are simply two different sets of
+ variables, whose values are not reset between calls
+ to <STRONG><A HREF="curs_terminfo.3x.html">tparm(3x)</A></STRONG>. However, that fact is not documented
+ in other implementations. Relying on it will
+ adversely impact portability to other implementa-
+ tions.
<STRONG>%'</STRONG><EM>c</EM><STRONG>'</STRONG> char constant <EM>c</EM>
late destructive scrolling; their documentation cautions
you not to define <STRONG>csr</STRONG> unless this is true. This <STRONG>curses</STRONG>
implementation is more liberal and will do explicit erases
- after scrolling if <STRONG>ndstr</STRONG> is defined.
+ after scrolling if <STRONG>ndsrc</STRONG> is defined.
If the terminal has the ability to define a window as part
of memory, which all commands affect, it should be given
diamond ACS_DIAMOND + `
greater-than-or-equal-to ACS_GEQUAL > z
greek pi ACS_PI * {
+
horizontal line ACS_HLINE - q
lantern symbol ACS_LANTERN # i
large plus or crossover ACS_PLUS + n
</PRE><H3><a name="h3-Color-Handling">Color Handling</a></H3><PRE>
- Most color terminals are either "Tektronix-like" or "HP-
- like". Tektronix-like terminals have a predefined set of
- N colors (where N usually 8), and can set character-cell
- foreground and background characters independently, mixing
- them into N * N color-pairs. On HP-like terminals, the
- use must set each color pair up separately (foreground and
- background are not independently settable). Up to M
- color-pairs may be set up from 2*M different colors.
- ANSI-compatible terminals are Tektronix-like.
+ The curses library functions <STRONG>init_pair</STRONG> and <STRONG>init_color</STRONG>
+ manipulate the <EM>color</EM> <EM>pairs</EM> and <EM>color</EM> <EM>values</EM> discussed in
+ this section (see <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG> for details on these and
+ related functions).
+
+ Most color terminals are either "Tektronix-like" or "HP-
+ like":
+
+ <STRONG>o</STRONG> Tektronix-like terminals have a predefined set of <EM>N</EM>
+ colors (where <EM>N</EM> is usually 8), and can set character-
+ cell foreground and background characters indepen-
+ dently, mixing them into <EM>N</EM> * <EM>N</EM> color-pairs.
+
+ <STRONG>o</STRONG> On HP-like terminals, the user must set each color
+ pair up separately (foreground and background are not
+ independently settable). Up to <EM>M</EM> color-pairs may be
+ set up from 2*<EM>M</EM> different colors. ANSI-compatible
+ terminals are Tektronix-like.
Some basic color capabilities are independent of the color
method. The numeric capabilities <STRONG>colors</STRONG> and <STRONG>pairs</STRONG> specify
- the maximum numbers of colors and color-pairs that can be
- displayed simultaneously. The <STRONG>op</STRONG> (original pair) string
- resets foreground and background colors to their default
- values for the terminal. The <STRONG>oc</STRONG> string resets all colors
- or color-pairs to their default values for the terminal.
- Some terminals (including many PC terminal emulators)
- erase screen areas with the current background color
- rather than the power-up default background; these should
+ the maximum numbers of colors and color-pairs that can be
+ displayed simultaneously. The <STRONG>op</STRONG> (original pair) string
+ resets foreground and background colors to their default
+ values for the terminal. The <STRONG>oc</STRONG> string resets all colors
+ or color-pairs to their default values for the terminal.
+ Some terminals (including many PC terminal emulators)
+ erase screen areas with the current background color
+ rather than the power-up default background; these should
have the boolean capability <STRONG>bce</STRONG>.
- To change the current foreground or background color on a
- Tektronix-type terminal, use <STRONG>setaf</STRONG> (set ANSI foreground)
- and <STRONG>setab</STRONG> (set ANSI background) or <STRONG>setf</STRONG> (set foreground)
- and <STRONG>setb</STRONG> (set background). These take one parameter, the
- color number. The SVr4 documentation describes only
- <STRONG>setaf</STRONG>/<STRONG>setab</STRONG>; the XPG4 draft says that "If the terminal
- supports ANSI escape sequences to set background and fore-
- ground, they should be coded as <STRONG>setaf</STRONG> and <STRONG>setab</STRONG>, respec-
- tively. If the terminal supports other escape sequences
- to set background and foreground, they should be coded as
- <STRONG>setf</STRONG> and <STRONG>setb</STRONG>, respectively. The <STRONG>vidputs</STRONG> function and the
- refresh functions use <STRONG>setaf</STRONG> and <STRONG>setab</STRONG> if they are
- defined."
+ While the curses library works with <EM>color</EM> <EM>pairs</EM> (reflect-
+ ing the inability of some devices to set foreground and
+ background colors independently), there are separate capa-
+ bilities for setting these features:
+
+ <STRONG>o</STRONG> To change the current foreground or background color
+ on a Tektronix-type terminal, use <STRONG>setaf</STRONG> (set ANSI
+ foreground) and <STRONG>setab</STRONG> (set ANSI background) or <STRONG>setf</STRONG>
+ (set foreground) and <STRONG>setb</STRONG> (set background). These
+ take one parameter, the color number. The SVr4 docu-
+ mentation describes only <STRONG>setaf</STRONG>/<STRONG>setab</STRONG>; the XPG4 draft
+ says that "If the terminal supports ANSI escape
+ sequences to set background and foreground, they
+ should be coded as <STRONG>setaf</STRONG> and <STRONG>setab</STRONG>, respectively.
+
+ <STRONG>o</STRONG> If the terminal supports other escape sequences to set
+ background and foreground, they should be coded as
+ <STRONG>setf</STRONG> and <STRONG>setb</STRONG>, respectively. The <STRONG>vidputs</STRONG> and the
+ <STRONG><A HREF="curs_refresh.3x.html">refresh(3x)</A></STRONG> functions use the <STRONG>setaf</STRONG> and <STRONG>setab</STRONG> capabil-
+ ities if they are defined.
The <STRONG>setaf</STRONG>/<STRONG>setab</STRONG> and <STRONG>setf</STRONG>/<STRONG>setb</STRONG> capabilities take a single
numeric argument each. Argument values 0-7 of <STRONG>setaf</STRONG>/<STRONG>setab</STRONG>
On an HP-like terminal, use <STRONG>scp</STRONG> with a color-pair number
parameter to set which color pair is current.
- On a Tektronix-like terminal, the capability <STRONG>ccc</STRONG> may be
- present to indicate that colors can be modified. If so,
- the <STRONG>initc</STRONG> capability will take a color number (0 to <STRONG>colors</STRONG>
- - 1)and three more parameters which describe the color.
- These three parameters default to being interpreted as RGB
- (Red, Green, Blue) values. If the boolean capability <STRONG>hls</STRONG>
- is present, they are instead as HLS (Hue, Lightness, Satu-
- ration) indices. The ranges are terminal-dependent.
-
- On an HP-like terminal, <STRONG>initp</STRONG> may give a capability for
- changing a color-pair value. It will take seven parame-
- ters; a color-pair number (0 to <STRONG>max_pairs</STRONG> - 1), and two
- triples describing first background and then foreground
- colors. These parameters must be (Red, Green, Blue) or
- (Hue, Lightness, Saturation) depending on <STRONG>hls</STRONG>.
+ Some terminals allow the <EM>color</EM> <EM>values</EM> to be modified:
+
+ <STRONG>o</STRONG> On a Tektronix-like terminal, the capability <STRONG>ccc</STRONG> may
+ be present to indicate that colors can be modified.
+ If so, the <STRONG>initc</STRONG> capability will take a color number
+ (0 to <STRONG>colors</STRONG> - 1)and three more parameters which
+ describe the color. These three parameters default to
+ being interpreted as RGB (Red, Green, Blue) values.
+ If the boolean capability <STRONG>hls</STRONG> is present, they are
+ instead as HLS (Hue, Lightness, Saturation) indices.
+ The ranges are terminal-dependent.
+
+ <STRONG>o</STRONG> On an HP-like terminal, <STRONG>initp</STRONG> may give a capability
+ for changing a color-pair value. It will take seven
+ parameters; a color-pair number (0 to <STRONG>max_pairs</STRONG> - 1),
+ and two triples describing first background and then
+ foreground colors. These parameters must be (Red,
+ Green, Blue) or (Hue, Lightness, Saturation) depending
+ on <STRONG>hls</STRONG>.
On some color terminals, colors collide with highlights.
You can register these collisions with the <STRONG>ncv</STRONG> capability.
adding more capabilities of the form <STRONG>x</STRONG><EM>x</EM>.
-</PRE><H3><a name="h3-Similar-Terminals">Similar Terminals</a></H3><PRE>
- If there are two very similar terminals, one (the variant)
- can be defined as being just like the other (the base)
- with certain exceptions. In the definition of the vari-
- ant, the string capability <STRONG>use</STRONG> can be given with the name
- of the base terminal. The capabilities given before <STRONG>use</STRONG>
- override those in the base type named by <STRONG>use</STRONG>. If there
- are multiple <STRONG>use</STRONG> capabilities, they are merged in reverse
- order. That is, the rightmost <STRONG>use</STRONG> reference is processed
- first, then the one to its left, and so forth. Capabili-
- ties given explicitly in the entry override those brought
- in by <STRONG>use</STRONG> references.
-
- A capability can be canceled by placing <STRONG>xx@</STRONG> to the left of
- the use reference that imports it, where <EM>xx</EM> is the capa-
- bility. For example, the entry
-
- 2621-nl, smkx@, rmkx@, use=2621,
-
- defines a 2621-nl that does not have the <STRONG>smkx</STRONG> or <STRONG>rmkx</STRONG>
- capabilities, and hence does not turn on the function key
- labels when in visual mode. This is useful for different
- modes for a terminal, or for different user preferences.
-
-
</PRE><H3><a name="h3-Pitfalls-of-Long-Entries">Pitfalls of Long Entries</a></H3><PRE>
- Long terminfo entries are unlikely to be a problem; to
- date, no entry has even approached terminfo's 4096-byte
+ Long terminfo entries are unlikely to be a problem; to
+ date, no entry has even approached terminfo's 4096-byte
string-table maximum. Unfortunately, the termcap transla-
tions are much more strictly limited (to 1023 bytes), thus
- termcap translations of long terminfo entries can cause
+ termcap translations of long terminfo entries can cause
problems.
- The man pages for 4.3BSD and older versions of <STRONG>tgetent</STRONG>
- instruct the user to allocate a 1024-byte buffer for the
- termcap entry. The entry gets null-terminated by the
+ The man pages for 4.3BSD and older versions of <STRONG>tgetent</STRONG>
+ instruct the user to allocate a 1024-byte buffer for the
+ termcap entry. The entry gets null-terminated by the
termcap library, so that makes the maximum safe length for
- a termcap entry 1k-1 (1023) bytes. Depending on what the
- application and the termcap library being used does, and
- where in the termcap file the terminal type that <STRONG>tgetent</STRONG>
+ a termcap entry 1k-1 (1023) bytes. Depending on what the
+ application and the termcap library being used does, and
+ where in the termcap file the terminal type that <STRONG>tgetent</STRONG>
is searching for is, several bad things can happen.
- Some termcap libraries print a warning message or exit if
- they find an entry that's longer than 1023 bytes; others
- do not; others truncate the entries to 1023 bytes. Some
+ Some termcap libraries print a warning message or exit if
+ they find an entry that's longer than 1023 bytes; others
+ do not; others truncate the entries to 1023 bytes. Some
application programs allocate more than the recommended 1K
for the termcap entry; others do not.
Each termcap entry has two important sizes associated with
it: before "tc" expansion, and after "tc" expansion. "tc"
- is the capability that tacks on another termcap entry to
- the end of the current one, to add on its capabilities.
- If a termcap entry does not use the "tc" capability, then
+ is the capability that tacks on another termcap entry to
+ the end of the current one, to add on its capabilities.
+ If a termcap entry does not use the "tc" capability, then
of course the two lengths are the same.
- The "before tc expansion" length is the most important
- one, because it affects more than just users of that par-
- ticular terminal. This is the length of the entry as it
+ The "before tc expansion" length is the most important
+ one, because it affects more than just users of that par-
+ ticular terminal. This is the length of the entry as it
exists in /etc/termcap, minus the backslash-newline pairs,
- which <STRONG>tgetent</STRONG> strips out while reading it. Some termcap
- libraries strip off the final newline, too (GNU termcap
+ which <STRONG>tgetent</STRONG> strips out while reading it. Some termcap
+ libraries strip off the final newline, too (GNU termcap
does not). Now suppose:
- <STRONG>o</STRONG> a termcap entry before expansion is more than 1023
+ <STRONG>o</STRONG> a termcap entry before expansion is more than 1023
bytes long,
<STRONG>o</STRONG> and the application has only allocated a 1k buffer,
- <STRONG>o</STRONG> and the termcap library (like the one in BSD/OS 1.1
- and GNU) reads the whole entry into the buffer, no
- matter what its length, to see if it is the entry it
+ <STRONG>o</STRONG> and the termcap library (like the one in BSD/OS 1.1
+ and GNU) reads the whole entry into the buffer, no
+ matter what its length, to see if it is the entry it
wants,
- <STRONG>o</STRONG> and <STRONG>tgetent</STRONG> is searching for a terminal type that
- either is the long entry, appears in the termcap file
- after the long entry, or does not appear in the file
- at all (so that <STRONG>tgetent</STRONG> has to search the whole term-
+ <STRONG>o</STRONG> and <STRONG>tgetent</STRONG> is searching for a terminal type that
+ either is the long entry, appears in the termcap file
+ after the long entry, or does not appear in the file
+ at all (so that <STRONG>tgetent</STRONG> has to search the whole term-
cap file).
Then <STRONG>tgetent</STRONG> will overwrite memory, perhaps its stack, and
- probably core dump the program. Programs like telnet are
- particularly vulnerable; modern telnets pass along values
- like the terminal type automatically. The results are
- almost as undesirable with a termcap library, like SunOS
+ probably core dump the program. Programs like telnet are
+ particularly vulnerable; modern telnets pass along values
+ like the terminal type automatically. The results are
+ almost as undesirable with a termcap library, like SunOS
4.1.3 and Ultrix 4.4, that prints warning messages when it
- reads an overly long termcap entry. If a termcap library
- truncates long entries, like OSF/1 3.0, it is immune to
- dying here but will return incorrect data for the termi-
+ reads an overly long termcap entry. If a termcap library
+ truncates long entries, like OSF/1 3.0, it is immune to
+ dying here but will return incorrect data for the termi-
nal.
The "after tc expansion" length will have a similar effect
while searching.
In summary, a termcap entry that is longer than 1023 bytes
- can cause, on various combinations of termcap libraries
- and applications, a core dump, warnings, or incorrect
- operation. If it is too long even before "tc" expansion,
+ can cause, on various combinations of termcap libraries
+ and applications, a core dump, warnings, or incorrect
+ operation. If it is too long even before "tc" expansion,
it will have this effect even for users of some other ter-
- minal types and users whose TERM variable does not have a
+ minal types and users whose TERM variable does not have a
termcap entry.
When in -C (translate to termcap) mode, the <STRONG>ncurses</STRONG> imple-
mentation of <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG> issues warning messages when the pre-
- tc length of a termcap translation is too long. The -c
- (check) option also checks resolved (after tc expansion)
+ tc length of a termcap translation is too long. The -c
+ (check) option also checks resolved (after tc expansion)
lengths.
</PRE><H3><a name="h3-Binary-Compatibility">Binary Compatibility</a></H3><PRE>
- It is not wise to count on portability of binary terminfo
- entries between commercial UNIX versions. The problem is
- that there are at least two versions of terminfo (under
+ It is not wise to count on portability of binary terminfo
+ entries between commercial UNIX versions. The problem is
+ that there are at least two versions of terminfo (under
HP-UX and AIX) which diverged from System V terminfo after
- SVr1, and have added extension capabilities to the string
- table that (in the binary format) collide with System V
+ SVr1, and have added extension capabilities to the string
+ table that (in the binary format) collide with System V
and XSI Curses extensions.
Searching for terminal descriptions in <STRONG>$HOME/.terminfo</STRONG> and
TERMINFO_DIRS is not supported by older implementations.
- Some SVr4 <STRONG>curses</STRONG> implementations, and all previous to
- SVr4, do not interpret the %A and %O operators in parame-
+ Some SVr4 <STRONG>curses</STRONG> implementations, and all previous to
+ SVr4, do not interpret the %A and %O operators in parame-
ter strings.
- SVr4/XPG4 do not specify whether <STRONG>msgr</STRONG> licenses movement
- while in an alternate-character-set mode (such modes may,
- among other things, map CR and NL to characters that do
- not trigger local motions). The <STRONG>ncurses</STRONG> implementation
- ignores <STRONG>msgr</STRONG> in <STRONG>ALTCHARSET</STRONG> mode. This raises the possi-
- bility that an XPG4 implementation making the opposite
- interpretation may need terminfo entries made for <STRONG>ncurses</STRONG>
+ SVr4/XPG4 do not specify whether <STRONG>msgr</STRONG> licenses movement
+ while in an alternate-character-set mode (such modes may,
+ among other things, map CR and NL to characters that do
+ not trigger local motions). The <STRONG>ncurses</STRONG> implementation
+ ignores <STRONG>msgr</STRONG> in <STRONG>ALTCHARSET</STRONG> mode. This raises the possi-
+ bility that an XPG4 implementation making the opposite
+ interpretation may need terminfo entries made for <STRONG>ncurses</STRONG>
to have <STRONG>msgr</STRONG> turned off.
- The <STRONG>ncurses</STRONG> library handles insert-character and insert-
+ The <STRONG>ncurses</STRONG> library handles insert-character and insert-
character modes in a slightly non-standard way to get bet-
- ter update efficiency. See the <STRONG>Insert/Delete</STRONG> <STRONG>Character</STRONG>
+ ter update efficiency. See the <STRONG>Insert/Delete</STRONG> <STRONG>Character</STRONG>
subsection above.
- The parameter substitutions for <STRONG>set_clock</STRONG> and <STRONG>dis-</STRONG>
- <STRONG>play_clock</STRONG> are not documented in SVr4 or the XSI Curses
+ The parameter substitutions for <STRONG>set_clock</STRONG> and <STRONG>dis-</STRONG>
+ <STRONG>play_clock</STRONG> are not documented in SVr4 or the XSI Curses
standard. They are deduced from the documentation for the
AT&T 505 terminal.
- Be careful assigning the <STRONG>kmous</STRONG> capability. The <STRONG>ncurses</STRONG>
- wants to interpret it as <STRONG>KEY_MOUSE</STRONG>, for use by terminals
- and emulators like xterm that can return mouse-tracking
- information in the keyboard-input stream.
+ Be careful assigning the <STRONG>kmous</STRONG> capability. The <STRONG>ncurses</STRONG>
+ library wants to interpret it as <STRONG>KEY_MOUSE</STRONG>, for use by
+ terminals and emulators like xterm that can return mouse-
+ tracking information in the keyboard-input stream.
X/Open Curses does not mention italics. Portable applica-
- tions must assume that numeric capabilities are signed
- 16-bit values. This includes the <EM>no</EM><STRONG>_</STRONG><EM>color</EM><STRONG>_</STRONG><EM>video</EM> (ncv)
- capability. The 32768 mask value used for italics with
- ncv can be confused with an absent or cancelled ncv. If
- italics should work with colors, then the ncv value must
+ tions must assume that numeric capabilities are signed
+ 16-bit values. This includes the <EM>no</EM><STRONG>_</STRONG><EM>color</EM><STRONG>_</STRONG><EM>video</EM> (ncv)
+ capability. The 32768 mask value used for italics with
+ ncv can be confused with an absent or cancelled ncv. If
+ italics should work with colors, then the ncv value must
be specified, even if it is zero.
- Different commercial ports of terminfo and curses support
- different subsets of the XSI Curses standard and (in some
+ Different commercial ports of terminfo and curses support
+ different subsets of the XSI Curses standard and (in some
cases) different extension sets. Here is a summary, accu-
rate as of October 1995:
- <STRONG>SVR4,</STRONG> <STRONG>Solaris,</STRONG> <STRONG>ncurses</STRONG> -- These support all SVr4 capabili-
- ties.
+ <STRONG>o</STRONG> <STRONG>SVR4,</STRONG> <STRONG>Solaris,</STRONG> <STRONG>ncurses</STRONG> -- These support all SVr4 capa-
+ bilities.
- <STRONG>SGI</STRONG> -- Supports the SVr4 set, adds one undocumented
- extended string capability (<STRONG>set_pglen</STRONG>).
+ <STRONG>o</STRONG> <STRONG>SGI</STRONG> -- Supports the SVr4 set, adds one undocumented
+ extended string capability (<STRONG>set_pglen</STRONG>).
- <STRONG>SVr1,</STRONG> <STRONG>Ultrix</STRONG> -- These support a restricted subset of ter-
- minfo capabilities. The booleans end with <STRONG>xon_xoff</STRONG>; the
- numerics with <STRONG>width_status_line</STRONG>; and the strings with
- <STRONG>prtr_non</STRONG>.
+ <STRONG>o</STRONG> <STRONG>SVr1,</STRONG> <STRONG>Ultrix</STRONG> -- These support a restricted subset of
+ terminfo capabilities. The booleans end with
+ <STRONG>xon_xoff</STRONG>; the numerics with <STRONG>width_status_line</STRONG>; and the
+ strings with <STRONG>prtr_non</STRONG>.
- <STRONG>HP/UX</STRONG> -- Supports the SVr1 subset, plus the SVr[234]
- numerics <STRONG>num_labels</STRONG>, <STRONG>label_height</STRONG>, <STRONG>label_width</STRONG>, plus func-
- tion keys 11 through 63, plus <STRONG>plab_norm</STRONG>, <STRONG>label_on</STRONG>, and
- <STRONG>label_off</STRONG>, plus some incompatible extensions in the string
- table.
+ <STRONG>o</STRONG> <STRONG>HP/UX</STRONG> -- Supports the SVr1 subset, plus the SVr[234]
+ numerics <STRONG>num_labels</STRONG>, <STRONG>label_height</STRONG>, <STRONG>label_width</STRONG>, plus
+ function keys 11 through 63, plus <STRONG>plab_norm</STRONG>, <STRONG>label_on</STRONG>,
+ and <STRONG>label_off</STRONG>, plus some incompatible extensions in
+ the string table.
- <STRONG>AIX</STRONG> -- Supports the SVr1 subset, plus function keys 11
- through 63, plus a number of incompatible string table
- extensions.
+ <STRONG>o</STRONG> <STRONG>AIX</STRONG> -- Supports the SVr1 subset, plus function keys 11
+ through 63, plus a number of incompatible string table
+ extensions.
- <STRONG>OSF</STRONG> -- Supports both the SVr4 set and the AIX extensions.
+ <STRONG>o</STRONG> <STRONG>OSF</STRONG> -- Supports both the SVr4 set and the AIX exten-
+ sions.
</PRE><H2><a name="h2-FILES">FILES</a></H2><PRE>
</PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
- <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>, <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>, <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG>printf(3)</STRONG>, <STRONG><A HREF="term.5.html">term(5)</A></STRONG>.
- <STRONG><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>.
+ <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>, <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>, <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>,
+ <STRONG>printf(3)</STRONG>, <STRONG><A HREF="term.5.html">term(5)</A></STRONG>. <STRONG><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>.
</PRE><H2><a name="h2-AUTHORS">AUTHORS</a></H2><PRE>
<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
<ul>
+<li><a href="#h3-Terminfo-Entry-Syntax">Terminfo Entry Syntax</a></li>
+<li><a href="#h3-Terminfo-Capabilities-Syntax">Terminfo Capabilities Syntax</a></li>
+<li><a href="#h3-Similar-Terminals">Similar Terminals</a></li>
<li><a href="#h3-Predefined-Capabilities">Predefined Capabilities</a></li>
<li><a href="#h3-User-Defined-Capabilities">User-Defined Capabilities</a></li>
<li><a href="#h3-A-Sample-Entry">A Sample Entry</a></li>
<li><a href="#h3-Color-Handling">Color Handling</a></li>
<li><a href="#h3-Miscellaneous">Miscellaneous</a></li>
<li><a href="#h3-Glitches-and-Braindamage">Glitches and Braindamage</a></li>
-<li><a href="#h3-Similar-Terminals">Similar Terminals</a></li>
<li><a href="#h3-Pitfalls-of-Long-Entries">Pitfalls of Long Entries</a></li>
<li><a href="#h3-Binary-Compatibility">Binary Compatibility</a></li>
</ul>