2 ****************************************************************************
3 * Copyright 2018-2020,2021 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.21 2022/07/03 20:01:04 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">
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
61 terminal capabilities designed for the SVr2 terminal database in 1984,
62 and extended in stages through SVr4 (1989), and standardized in the
63 Single 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
68 terminfo database uses a binary format; binary compatibility was
69 ensured by using a header which gave the number of items in the tables
70 for each 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
73 documentation. 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
95 configured with tables which match the terminal databases for AIX,
96 HP-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
105 various systems past the documented X/Open Curses features. For
106 example, 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(1)</STRONG>. The <EM>box1</EM>
119 capability is used in tic to help with terminal descriptions
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
126 unanticipated terminal improvements (or required them to reuse
127 existing 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,
136 determine their type and optionally store and retrieve them in a way
137 which did not interfere with other applications. These are referred to
138 as <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
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
157 application, 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,
167 control, etc.). While terminfo and termcap have a set of 60
168 predefined function-key names, to which a series of keys can be
169 assigned, that is insufficient for more than a dozen keys
170 multiplied by more than a couple of modifier combinations. The
171 ncurses database uses a convention based on <STRONG>xterm(1)</STRONG> to provide
172 extended special-key names.
174 Fitting that into termcap's limitation of 2-character names would
175 be pointless. These extended keys are available only with
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.
196 NQ used to suppress a consistency check in tic for the ncurses
197 capabilities in user6 through user9 (u6, u7, u8 and u9) which
198 tell how to query the terminal's cursor position and its device
202 <EM>boolean</EM>, <EM>number</EM> <STRONG>or</STRONG> <EM>string</EM>, used to assert that the
203 <STRONG>set_a_foreground</STRONG> and <STRONG>set_a_background</STRONG> capabilities correspond to
204 <EM>direct</EM> <EM>colors</EM>, using an RGB (red/green/blue) convention. This
205 capability allows the <STRONG>color_content</STRONG> function to return
206 appropriate values without requiring the application to
207 initialize colors using <STRONG>init_color</STRONG>.
209 The capability type determines the values which ncurses sees:
212 implies that the number of bits for red, green and blue are
213 the same. Using the maximum number of colors, ncurses adds
214 two, divides that sum by three, and assigns the result to red,
215 green and blue in that order.
217 If the number of bits needed for the number of colors is not a
218 multiple of three, the blue (and green) components lose in
222 tells ncurses what result to add to red, green and blue. If
223 ncurses runs out of bits, blue (and green) lose just as in the
224 <EM>boolean</EM> case.
227 explicitly list the number of bits used for red, green and
228 blue components as a slash-separated list of decimal integers.
230 Because there are several RGB encodings in use, applications
231 which make assumptions about the number of bits per color are
232 unlikely to work reliably. As a trivial case, for example, one
233 could define <STRONG>RGB#1</STRONG> to represent the standard eight ANSI colors,
234 i.e., one bit per color.
236 U8 <EM>number</EM>, asserts that ncurses must use Unicode values for line-
237 drawing characters, and that it should ignore the alternate
238 character set capabilities when the locale uses UTF-8 encoding.
239 For more information, see the discussion of <STRONG>NCURSES_NO_UTF8_ACS</STRONG>
240 in <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG>.
242 Set this capability to a nonzero value to enable it.
244 XM <EM>string</EM>, override ncurses's built-in string which enables/disables
245 <STRONG>xterm(1)</STRONG> mouse mode.
247 ncurses sends a character sequence to the terminal to initialize
248 mouse mode, and when the user clicks the mouse buttons or (in
249 certain modes) moves the mouse, handles the characters sent back
250 by the terminal to tell it what was done with the mouse.
252 The mouse protocol is enabled when the <EM>mask</EM> passed in the
253 <STRONG>mousemask</STRONG> function is nonzero. By default, ncurses handles the
254 responses for the X11 xterm mouse protocol. It also knows about
255 the <EM>SGR</EM> <EM>1006</EM> xterm mouse protocol, but must to be told to look
256 for this specifically. It will not be able to guess which mode
257 is used, because the responses are enough alike that only
258 confusion would result.
260 The <STRONG>XM</STRONG> capability has a single parameter. If nonzero, the mouse
261 protocol should be enabled. If zero, the mouse protocol should
262 be disabled. ncurses inspects this capability if it is present,
263 to see whether the 1006 protocol is used. If so, it expects the
264 responses to use the <EM>SGR</EM> <EM>1006</EM> xterm mouse protocol.
266 The xterm mouse protocol is used by other terminal emulators.
267 The terminal database uses building-blocks for the various xterm
268 mouse protocols which can be used in customized terminal
271 The terminal database building blocks for this mouse feature also
272 have an experimental capability <EM>xm</EM>. The "xm" capability
273 describes the mouse response. Currently there is no interpreter
274 which would use this information to make the mouse support
275 completely data-driven.
277 <EM>xm</EM> shows the format of the mouse responses. In this experimental
278 capability, the parameters are
280 <EM>p1</EM> y-ordinate
282 <EM>p2</EM> x-ordinate
286 <EM>p4</EM> state, e.g., pressed or released
288 <EM>p5</EM> y-ordinate starting region
290 <EM>p6</EM> x-ordinate starting region
292 <EM>p7</EM> y-ordinate ending region
294 <EM>p8</EM> x-ordinate ending region
296 Here are examples from the terminal database for the most
297 commonly used xterm mouse protocols:
299 xterm+x11mouse|X11 xterm mouse protocol,
300 kmous=\E[M, XM=\E[?1000%?%p1%{1}%=%th%el%;,
302 %?%p4%t%p3%e%{3}%;%' '%+%c
306 xterm+sm+1006|xterm SGR-mouse,
307 kmous=\E[<, XM=\E[?1006;1000%?%p1%{1}%=%th%el%;,
314 </PRE><H3><a name="h3-Extended-key-definitions">Extended key-definitions</a></H3><PRE>
315 Several terminals provide the ability to send distinct strings for
316 combinations of modified special keys. There is no standard for what
319 Since 1999, <STRONG>xterm(1)</STRONG> has supported <EM>shift</EM>, <EM>control</EM>, <EM>alt</EM>, and <EM>meta</EM>
320 modifiers which produce distinct special-key strings. In a terminal
321 description, ncurses has no special knowledge of the modifiers used.
322 Applications can use the <EM>naming</EM> <EM>convention</EM> established for <STRONG>xterm</STRONG> to
323 find these special keys in the terminal description.
325 Starting with the curses convention that <EM>key</EM> <EM>names</EM> begin with "k" and
326 that shifted special keys are an uppercase name, ncurses' terminal
327 database defines these names to which a suffix is added:
329 <STRONG>Name</STRONG> <STRONG>Description</STRONG>
330 ---------------------------------------------------------------
331 kDC special form of kdch1 (delete character)
332 kDN special form of kcud1 (cursor down)
333 kEND special form of kend (End)
334 kHOM special form of khome (Home)
335 kLFT special form of kcub1 (cursor-left or cursor-back)
336 kNXT special form of knext (Next, or Page-Down)
337 kPRV special form of kprev (Prev, or Page-Up)
338 kRIT special form of kcuf1 (cursor-right, or cursor-forward)
339 kUP special form of kcuu1 (cursor-up)
341 These are the suffixes used to denote the modifiers:
343 <STRONG>Value</STRONG> <STRONG>Description</STRONG>
344 ----------------------------------
351 8 Shift + Alt + Control
355 12 Meta + Alt + Shift
357 14 Meta + Ctrl + Shift
359 16 Meta + Ctrl + Alt + Shift
361 None of these are predefined; terminal descriptions can refer to <EM>names</EM>
362 which ncurses will allocate at runtime to <EM>key-codes</EM>. To use these keys
363 in an ncurses program, an application could do this:
365 <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
368 <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>
369 which would be returned for those keys by <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG>.
372 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
373 The "-x" extension feature of <STRONG>tic</STRONG> and <STRONG>infocmp</STRONG> has been adopted in
374 NetBSD curses. That implementation stores user-defined capabilities,
375 but makes no use of these capabilities itself.
378 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
379 <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>, <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>.
381 The terminal database section <EM>NCURSES</EM> <EM>USER-DEFINABLE</EM> <EM>CAPABILITIES</EM>
382 summarizes commonly-used user-defined capabilities which are used in
383 the terminal descriptions. Some of those features are mentioned in
384 <STRONG>screen(1)</STRONG> or <STRONG>tmux(1)</STRONG>.
386 <EM>XTerm</EM> <EM>Control</EM> <EM>Sequences</EM> provides further information on the <STRONG>xterm(1)</STRONG>
387 features which are used in these extended capabilities.
390 </PRE><H2><a name="h2-AUTHORS">AUTHORS</a></H2><PRE>
392 beginning with ncurses 5.0 (1999)
396 <STRONG><A HREF="user_caps.5.html">user_caps(5)</A></STRONG>
400 <li><a href="#h2-NAME">NAME</a></li>
401 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
402 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
404 <li><a href="#h3-Background">Background</a></li>
405 <li><a href="#h3-Recognized-capabilities">Recognized capabilities</a></li>
406 <li><a href="#h3-Extended-key-definitions">Extended key-definitions</a></li>
409 <li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
410 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
411 <li><a href="#h2-AUTHORS">AUTHORS</a></li>