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