2 ****************************************************************************
3 * Copyright 2018-2019,2020 Thomas E. Dickey *
4 * Copyright 2017 Free Software Foundation, Inc. *
6 * Permission is hereby granted, free of charge, to any person obtaining a *
7 * copy of this software and associated documentation files (the *
8 * "Software"), to deal in the Software without restriction, including *
9 * without limitation the rights to use, copy, modify, merge, publish, *
10 * distribute, distribute with modifications, sublicense, and/or sell *
11 * copies of the Software, and to permit persons to whom the Software is *
12 * furnished to do so, subject to the following conditions: *
14 * The above copyright notice and this permission notice shall be included *
15 * in all copies or substantial portions of the Software. *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
20 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
21 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
22 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
23 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
25 * Except as contained in this notice, the name(s) of the above copyright *
26 * holders shall not be used in advertising or otherwise to promote the *
27 * sale, use or other dealings in this Software without prior written *
29 ****************************************************************************
30 * @Id: user_caps.5,v 1.15 2020/04/18 10:29:43 tom Exp @
32 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
35 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
36 <meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
37 <TITLE>user_caps 5</TITLE>
38 <link rel="author" href="mailto:bug-ncurses@gnu.org">
39 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
42 <H1 class="no-header">user_caps 5</H1>
44 <STRONG><A HREF="user_caps.5.html">user_caps(5)</A></STRONG> File Formats Manual <STRONG><A HREF="user_caps.5.html">user_caps(5)</A></STRONG>
49 </PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
50 user_caps - user-defined terminfo capabilities
53 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
54 <STRONG>tic</STRONG> <STRONG>-x,</STRONG> <STRONG>infocmp</STRONG> <STRONG>-x</STRONG>
57 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
59 </PRE><H3><a name="h3-Background">Background</a></H3><PRE>
60 Before ncurses 5.0, terminfo databases used a <EM>fixed</EM> <EM>repertoire</EM> of ter-
61 minal capabilities designed for the SVr2 terminal database in 1984, and
62 extended in stages through SVr4 (1989), and standardized in the Single
63 Unix Specification beginning in 1995.
65 Most of the <EM>extensions</EM> in this fixed repertoire were additions to the
66 tables of boolean, numeric and string capabilities. Rather than change
67 the meaning of an existing capability, a new name was added. The ter-
68 minfo database uses a binary format; binary compatibility was ensured
69 by using a header which gave the number of items in the tables for each
70 type of capability. The standardization was incomplete:
72 <STRONG>o</STRONG> The <EM>binary</EM> <EM>format</EM> itself is not described in the X/Open Curses doc-
73 umentation. Only the <EM>source</EM> <EM>format</EM> is described.
75 Library developers rely upon the SVr4 documentation, and reverse-
76 engineering the compiled terminfo files to match the binary format.
78 <STRONG>o</STRONG> Lacking a standard for the binary format, most implementations copy
79 the SVr2 binary format, which uses 16-bit signed integers, and is
80 limited to 4096-byte entries.
82 The format cannot represent very large numeric capabilities, nor
83 can it represent large numbers of special keyboard definitions.
85 <STRONG>o</STRONG> The tables of capability names differ between implementations.
87 Although they <EM>may</EM> provide all of the standard capability names, the
88 position in the tables differs because some features were added as
89 needed, while others were added (out of order) to comply with
92 While ncurses' repertoire of predefined capabilities is closest to
93 Solaris, Solaris's terminfo database has a few differences from the
94 list published by X/Open Curses. For example, ncurses can be con-
95 figured with tables which match the terminal databases for AIX, HP-
96 UX or OSF/1, rather than the default Solaris-like configuration.
98 <STRONG>o</STRONG> In SVr4 curses and ncurses, the terminal database is defined at
99 compile-time using a text file which lists the different terminal
102 In principle, the text-file can be extended, but doing this
103 requires recompiling and reinstalling the library. The text-file
104 used in ncurses for terminal capabilities includes details for var-
105 ious systems past the documented X/Open Curses features. For exam-
106 ple, ncurses supports these capabilities in each configuration:
109 (meml) lock memory above cursor
115 (box1) box characters primary set
117 The memory lock/unlock capabilities were included because they were
118 used in the X11R6 terminal description for <STRONG>xterm</STRONG>. The <EM>box1</EM> capa-
119 bility is used in tic to help with terminal descriptions written
122 During the 1990s, some users were reluctant to use terminfo in spite of
123 its performance advantages over termcap:
125 <STRONG>o</STRONG> The fixed repertoire prevented users from adding features for unan-
126 ticipated terminal improvements (or required them to reuse existing
127 capabilities as a workaround).
129 <STRONG>o</STRONG> The limitation to 16-bit signed integers was also mentioned.
130 Because termcap stores everything as a string, it could represent
133 Although termcap's extensibility was rarely used (it was never the
134 <EM>speaker</EM> who had actually used the feature), the criticism had a point.
135 ncurses 5.0 provided a way to detect nonstandard capabilities, deter-
136 mine their type and optionally store and retrieve them in a way which
137 did not interfere with other applications. These are referred to as
138 <EM>user-defined</EM> <EM>capabilities</EM> because no modifications to the toolset's
139 predefined capability names are needed.
141 The ncurses utilities <STRONG>tic</STRONG> and <STRONG>infocmp</STRONG> have a command-line option "-x"
142 to control whether the nonstandard capabilities are stored or
143 retrieved. A library function <STRONG>use_extended_names</STRONG> is provided for the
146 When compiling a terminal database, if "-x" is set, <STRONG>tic</STRONG> will store a
147 user-defined capability if the capability name is not one of the prede-
150 Because ncurses provides a termcap library interface, these user-
151 defined capabilities may be visible to termcap applications:
153 <STRONG>o</STRONG> The termcap interface (like all implementations of termcap)
154 requires that the capability names are 2-characters.
156 When the capability is simple enough for use in a termcap applica-
157 tion, it is provided as a 2-character name.
159 <STRONG>o</STRONG> There are other user-defined capabilities which refer to features
160 not usable in termcap, e.g., parameterized strings that use more
161 than two parameters or use more than the trivial expression support
162 provided by termcap. For these, the terminfo database should have
163 only capability names with 3 or more characters.
165 <STRONG>o</STRONG> Some terminals can send distinct strings for special keys (cursor-,
166 keypad- or function-keys) depending on modifier keys (shift, con-
167 trol, etc.). While terminfo and termcap have a set of 60 prede-
168 fined function-key names, to which a series of keys can be
169 assigned, that is insufficient for more than a dozen keys multi-
170 plied by more than a couple of modifier combinations. The ncurses
171 database uses a convention based on <STRONG>xterm</STRONG> to provide extended spe-
174 Fitting that into termcap's limitation of 2-character names would
175 be pointless. These extended keys are available only with ter-
179 </PRE><H3><a name="h3-Recognized-capabilities">Recognized capabilities</a></H3><PRE>
180 The ncurses library uses the user-definable capabilities. While the
181 terminfo database may have other extensions, ncurses makes explicit
184 AX <EM>boolean</EM>, asserts that the terminal interprets SGR 39 and SGR 49
185 by resetting the foreground and background color, respectively,
188 This is a feature recognized by the <STRONG>screen</STRONG> program as well.
190 E3 <EM>string</EM>, tells how to clear the terminal's scrollback buffer.
191 When present, the <STRONG><A HREF="clear.1.html">clear(1)</A></STRONG> program sends this before clearing the
194 The command "<STRONG>tput</STRONG> <STRONG>clear</STRONG>" does the same thing.
197 <EM>boolean</EM>, <EM>number</EM> <STRONG>or</STRONG> <EM>string</EM>, to assert that the <STRONG>set_a_foreground</STRONG>
198 and <STRONG>set_a_background</STRONG> capabilities correspond to <EM>direct</EM> <EM>colors</EM>,
199 using an RGB (red/green/blue) convention. This capability allows
200 the <STRONG>color_content</STRONG> function to return appropriate values without
201 requiring the application to initialize colors using <STRONG>init_color</STRONG>.
203 The capability type determines the values which ncurses sees:
206 implies that the number of bits for red, green and blue are
207 the same. Using the maximum number of colors, ncurses adds
208 two, divides that sum by three, and assigns the result to red,
209 green and blue in that order.
211 If the number of bits needed for the number of colors is not a
212 multiple of three, the blue (and green) components lose in
216 tells ncurses what result to add to red, green and blue. If
217 ncurses runs out of bits, blue (and green) lose just as in the
218 <EM>boolean</EM> case.
221 explicitly list the number of bits used for red, green and
222 blue components as a slash-separated list of decimal integers.
224 Because there are several RGB encodings in use, applications
225 which make assumptions about the number of bits per color are
226 unlikely to work reliably. As a trivial case, for example, one
227 could define <STRONG>RGB#1</STRONG> to represent the standard eight ANSI colors,
228 i.e., one bit per color.
230 U8 <EM>number</EM>, asserts that ncurses must use Unicode values for line-
231 drawing characters, and that it should ignore the alternate char-
232 acter set capabilities when the locale uses UTF-8 encoding. For
233 more information, see the discussion of <STRONG>NCURSES_NO_UTF8_ACS</STRONG> in
234 <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG>.
236 Set this capability to a nonzero value to enable it.
238 XM <EM>string</EM>, override ncurses's built-in string which enables/disables
239 <STRONG>xterm</STRONG> mouse mode.
241 ncurses sends a character sequence to the terminal to initialize
242 mouse mode, and when the user clicks the mouse buttons or (in
243 certain modes) moves the mouse, handles the characters sent back
244 by the terminal to tell it what was done with the mouse.
246 The mouse protocol is enabled when the <EM>mask</EM> passed in the <STRONG>mouse-</STRONG>
247 <STRONG>mask</STRONG> function is nonzero. By default, ncurses handles the
248 responses for the X11 xterm mouse protocol. It also knows about
249 the <EM>SGR</EM> <EM>1006</EM> xterm mouse protocol, but must to be told to look
250 for this specifically. It will not be able to guess which mode
251 is used, because the responses are enough alike that only confu-
254 The <STRONG>XM</STRONG> capability has a single parameter. If nonzero, the mouse
255 protocol should be enabled. If zero, the mouse protocol should
256 be disabled. ncurses inspects this capability if it is present,
257 to see whether the 1006 protocol is used. If so, it expects the
258 responses to use the <EM>SGR</EM> <EM>1006</EM> xterm mouse protocol.
260 The xterm mouse protocol is used by other terminal emulators.
261 The terminal database uses building-blocks for the various xterm
262 mouse protocols which can be used in customized terminal descrip-
265 The terminal database building blocks for this mouse feature also
266 have an experimental capability <EM>xm</EM>. The "xm" capability
267 describes the mouse response. Currently there is no interpreter
268 which would use this information to make the mouse support com-
271 <EM>xm</EM> shows the format of the mouse responses. In this experimental
272 capability, the parameters are
274 <EM>p1</EM> y-ordinate
276 <EM>p2</EM> x-ordinate
280 <EM>p4</EM> state, e.g., pressed or released
282 <EM>p5</EM> y-ordinate starting region
284 <EM>p6</EM> x-ordinate starting region
286 <EM>p7</EM> y-ordinate ending region
288 <EM>p8</EM> x-ordinate ending region
290 Here are examples from the terminal database for the most com-
291 monly used xterm mouse protocols:
293 xterm+x11mouse|X11 xterm mouse protocol,
294 kmous=\E[M, XM=\E[?1000%?%p1%{1}%=%th%el%;,
296 %?%p4%t%p3%e%{3}%;%' '%+%c
300 xterm+sm+1006|xterm SGR-mouse,
301 kmous=\E[<, XM=\E[?1006;1000%?%p1%{1}%=%th%el%;,
308 </PRE><H3><a name="h3-Extended-key-definitions">Extended key-definitions</a></H3><PRE>
309 Several terminals provide the ability to send distinct strings for com-
310 binations of modified special keys. There is no standard for what
313 Since 1999, <STRONG>xterm</STRONG> has supported <EM>shift</EM>, <EM>control</EM>, <EM>alt</EM>, and <EM>meta</EM> modifiers
314 which produce distinct special-key strings. In a terminal description,
315 ncurses has no special knowledge of the modifiers used. Applications
316 can use the <EM>naming</EM> <EM>convention</EM> established for <STRONG>xterm</STRONG> to find these spe-
317 cial keys in the terminal description.
319 Starting with the curses convention that <EM>key</EM> <EM>names</EM> begin with "k" and
320 that shifted special keys are an uppercase name, ncurses' terminal
321 database defines these names to which a suffix is added:
323 <EM>Name</EM> <EM>Description</EM>
324 ---------------------------------------------------------------
325 kDC special form of kdch1 (delete character)
326 kDN special form of kcud1 (cursor down)
327 kEND special form of kend (End)
328 kHOM special form of khome (Home)
329 kLFT special form of kcub1 (cursor-left or cursor-back)
330 kNXT special form of knext (Next, or Page-Down)
331 kPRV special form of kprev (Prev, or Page-Up)
332 kRIT special form of kcuf1 (cursor-right, or cursor-forward)
333 kUP special form of kcuu1 (cursor-up)
335 These are the suffixes used to denote the modifiers:
337 <EM>Value</EM> <EM>Description</EM>
338 ----------------------------------
345 8 Shift + Alt + Control
349 12 Meta + Alt + Shift
351 14 Meta + Ctrl + Shift
353 16 Meta + Ctrl + Alt + Shift
355 None of these are predefined; terminal descriptions can refer to <EM>names</EM>
356 which ncurses will allocate at runtime to <EM>key-codes</EM>. To use these keys
357 in an ncurses program, an application could do this:
359 <STRONG>o</STRONG> using a list of extended key <EM>names</EM>, ask <STRONG><A HREF="curs_terminfo.3x.html">tigetstr(3x)</A></STRONG> for their val-
362 <STRONG>o</STRONG> given the list of values, ask <STRONG><A HREF="key_defined.3x.html">key_defined(3x)</A></STRONG> for the <EM>key-code</EM>
363 which would be returned for those keys by <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG>.
366 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
367 The "-x" extension feature of <STRONG>tic</STRONG> and <STRONG>infocmp</STRONG> has been adopted in Net-
368 BSD curses. That implementation stores user-defined capabilities, but
369 makes no use of these capabilities itself.
372 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
373 <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>, <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>.
375 The terminal database section <EM>NCURSES</EM> <EM>USER-DEFINABLE</EM> <EM>CAPABILITIES</EM> sum-
376 marizes commonly-used user-defined capabilities which are used in the
377 terminal descriptions. Some of those features are mentioned in
378 <STRONG>screen(1)</STRONG> or <STRONG>tmux(1)</STRONG>.
380 <EM>XTerm</EM> <EM>Control</EM> <EM>Sequences</EM> provides further information on the <STRONG>xterm</STRONG> fea-
381 tures which are used in these extended capabilities.
384 </PRE><H2><a name="h2-AUTHORS">AUTHORS</a></H2><PRE>
386 beginning with ncurses 5.0 (1999)
390 <STRONG><A HREF="user_caps.5.html">user_caps(5)</A></STRONG>
394 <li><a href="#h2-NAME">NAME</a></li>
395 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
396 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
398 <li><a href="#h3-Background">Background</a></li>
399 <li><a href="#h3-Recognized-capabilities">Recognized capabilities</a></li>
400 <li><a href="#h3-Extended-key-definitions">Extended key-definitions</a></li>
403 <li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
404 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
405 <li><a href="#h2-AUTHORS">AUTHORS</a></li>