.\"***************************************************************************
.\" Copyright 2018-2020,2021 Thomas E. Dickey                                *
.\" Copyright 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            *
.\" "Software"), to deal in the Software without restriction, including      *
.\" without limitation the rights to use, copy, modify, merge, publish,      *
.\" distribute, distribute with modifications, sublicense, and/or sell       *
.\" copies of the Software, and to permit persons to whom the Software is    *
.\" furnished to do so, subject to the following conditions:                 *
.\"                                                                          *
.\" The above copyright notice and this permission notice shall be included  *
.\" in all copies or substantial portions of the Software.                   *
.\"                                                                          *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
.\"                                                                          *
.\" Except as contained in this notice, the name(s) of the above copyright   *
.\" holders shall not be used in advertising or otherwise to promote the     *
.\" sale, use or other dealings in this Software without prior written       *
.\" authorization.                                                           *
.\"***************************************************************************
.\"
.\" $Id: user_caps.5,v 1.17 2021/06/17 21:30:22 tom Exp $
.TH user_caps 5
.ie \n(.g .ds `` \(lq
.el       .ds `` ``
.ie \n(.g .ds '' \(rq
.el       .ds '' ''
.de NS
.ie n  .sp
.el    .sp .5
.ie n  .in +4
.el    .in +2
.nf
.ft C			\" Courier
..
.de NE
.fi
.ft R
.ie n  .in -4
.el    .in -2
..
.de bP
.ie n  .IP \(bu 4
.el    .IP \(bu 2
..
.SH NAME
user_caps \- user-defined terminfo capabilities
.SH SYNOPSIS
.B @TIC@ -x, @INFOCMP@ -x
.SH DESCRIPTION
.SS Background
.PP
Before ncurses 5.0,
terminfo databases used a \fIfixed repertoire\fP of terminal
capabilities designed for the SVr2 terminal database in 1984,
and extended in stages through SVr4 (1989),
and standardized in the Single Unix Specification beginning in 1995.
.PP
Most of the \fIextensions\fP in this fixed repertoire were additions
to the tables of boolean, numeric and string capabilities.
Rather than change the meaning of an existing capability, a new name was added.
The terminfo database uses a binary format; binary compatibility was
ensured by using a header which gave the number of items in the
tables for each type of capability.
The standardization was incomplete:
.bP
The \fIbinary format\fP itself is not described
in the X/Open Curses documentation.
Only the \fIsource format\fP is described.
.IP
Library developers rely upon the SVr4 documentation,
and reverse-engineering the compiled terminfo files to match the binary format.
.bP
Lacking a standard for the binary format, most implementations
copy the SVr2 binary format, which uses 16-bit signed integers,
and is limited to 4096-byte entries.
.IP
The format cannot represent very large numeric capabilities,
nor can it represent large numbers of special keyboard definitions.
.bP
The tables of capability names differ between implementations.
.IP
Although they \fImay\fP provide all of the standard capability names,
the position in the tables differs because some features were added as needed,
while others were added (out of order) to comply with X/Open Curses.
.IP
While ncurses' repertoire of predefined capabilities is closest to Solaris,
Solaris's terminfo database has a few differences from
the list published by X/Open Curses.
For example, ncurses can be configured with tables which match the
terminal databases for AIX, HP-UX or OSF/1,
rather than the default Solaris-like configuration.
.bP
In SVr4 curses and ncurses,
the terminal database is defined at compile-time using a text file
which lists the different terminal capabilities.
.IP
In principle, the text-file can be extended,
but doing this requires recompiling and reinstalling the library.
The text-file used in ncurses for terminal capabilities includes
details for various systems past the documented X/Open Curses features.
For example, ncurses supports these capabilities in each configuration:
.RS 8
.TP 5
memory_lock
(meml)
lock memory above cursor
.TP 5
memory_unlock
(memu)
unlock memory
.TP 5
box_chars_1
(box1)
box characters primary set
.RE
.IP
The memory lock/unlock capabilities were included because they were used
in the X11R6 terminal description for \fBxterm\fP.
The \fIbox1\fP capability is used in @TIC@ to help with terminal descriptions
written for AIX.
.PP
During the 1990s, some users were reluctant to use terminfo
in spite of its performance advantages over termcap:
.bP
The fixed repertoire prevented users from adding features
for unanticipated terminal improvements
(or required them to reuse existing capabilities as a workaround).
.bP
The limitation to 16-bit signed integers was also mentioned.
Because termcap stores everything as a string,
it could represent larger numbers.
.PP
Although termcap's extensibility was rarely used
(it was never the \fIspeaker\fP who had actually used the feature),
the criticism had a point.
ncurses 5.0 provided a way to detect nonstandard capabilities,
determine their
type and optionally store and retrieve them in a way which did not interfere
with other applications.
These are referred to as \fIuser-defined capabilities\fP because no
modifications to the toolset's predefined capability names are needed.
.PP
The ncurses utilities \fB@TIC@\fP and \fB@INFOCMP@\fP have a command-line
option \*(``\-x\*('' to control whether the nonstandard capabilities
are stored or retrieved.
A library function \fBuse_extended_names\fP
is provided for the same purpose.
.PP
When compiling a terminal database, if \*(``\-x\*('' is set,
\fB@TIC@\fP will store a user-defined capability if the capability name is not
one of the predefined names.
.PP
Because ncurses provides a termcap library interface,
these user-defined capabilities may be visible to termcap applications:
.bP
The termcap interface (like all implementations of termcap)
requires that the capability names are 2-characters.
.IP
When the capability is simple enough for use in a termcap application,
it is provided as a 2-character name.
.bP
There are other
user-defined capabilities which refer to features not usable in termcap,
e.g., parameterized strings that use more than two parameters
or use more than the trivial expression support provided by termcap.
For these, the terminfo database should have only capability names with
3 or more characters.
.bP
Some terminals can send distinct strings for special keys (cursor-,
keypad- or function-keys) depending on modifier keys (shift, control, etc.).
While terminfo and termcap have a set of 60 predefined function-key names,
to which a series of keys can be assigned,
that is insufficient for more than a dozen keys multiplied by more than
a couple of modifier combinations.
The ncurses database uses a convention based on \fBxterm\fP to
provide extended special-key names.
.IP
Fitting that into termcap's limitation of 2-character names
would be pointless.
These extended keys are available only with terminfo.
.SS Recognized capabilities
.PP
The ncurses library uses the user-definable capabilities.
While the terminfo database may have other extensions,
ncurses makes explicit checks for these:
.RS 3
.TP 3
AX
\fIboolean\fP, asserts that the terminal interprets SGR 39 and SGR 49
by resetting the foreground and background color, respectively, to the default.
.IP
This is a feature recognized by the \fBscreen\fP program as well.
.TP 3
E3
\fIstring\fP, tells how to clear the terminal's scrollback buffer.
When present, the \fBclear\fP(1) program sends this before clearing
the terminal.
.IP
The command \*(``\fBtput clear\fP\*('' does the same thing.
.TP 3
RGB
\fIboolean\fP, \fInumber\fP \fBor\fP \fIstring\fP,
to assert that the
\fBset_a_foreground\fP and
\fBset_a_background\fP capabilities correspond to \fIdirect colors\fP,
using an RGB (red/green/blue) convention.
This capability allows the \fBcolor_content\fP function to
return appropriate values without requiring the application
to initialize colors using \fBinit_color\fP.
.IP
The capability type determines the values which ncurses sees:
.RS 3
.TP 3
\fIboolean\fP
implies that the number of bits for red, green and blue are the same.
Using the maximum number of colors,
ncurses adds two, divides that sum by three, and assigns the result
to red, green and blue in that order.
.IP
If the number of bits needed for the number of colors is not a multiple
of three, the blue (and green) components lose in comparison to red.
.TP 3
\fInumber\fP
tells ncurses what result to add to red, green and blue.
If ncurses runs out of bits,
blue (and green) lose just as in the \fIboolean\fP case.
.TP 3
\fIstring\fP
explicitly list the number of bits used for red, green and blue components
as a slash-separated list of decimal integers.
.RE
.IP
Because there are several RGB encodings in use,
applications which make assumptions about the number of bits per color
are unlikely to work reliably.
As a trivial case, for example, one could define \fBRGB#1\fP
to represent the standard eight ANSI colors, i.e., one bit per color.
.TP 3
U8
\fInumber\fP,
asserts that ncurses must use Unicode values for line-drawing characters,
and that it should ignore the alternate character set capabilities
when the locale uses UTF-8 encoding.
For more information, see the discussion of
\fBNCURSES_NO_UTF8_ACS\fP in \fBncurses\fP(3X).
.IP
Set this capability to a nonzero value to enable it.
.TP 3
XM
\fIstring\fP,
override ncurses's built-in string which
enables/disables \fBxterm\fP mouse mode.
.IP
ncurses sends a character sequence to the terminal to initialize mouse mode,
and when the user clicks the mouse buttons or (in certain modes) moves the
mouse, handles the characters sent back by the terminal to tell it what
was done with the mouse.
.IP
The mouse protocol is enabled when
the \fImask\fP passed in the \fBmousemask\fP function is nonzero.
By default, ncurses handles the responses for the X11 xterm mouse protocol.
It also knows about the \fISGR 1006\fP xterm mouse protocol,
but must to be told to look for this specifically.
It will not be able to guess which mode is used,
because the responses are enough alike that only confusion would result.
.IP
The \fBXM\fP capability has a single parameter.
If nonzero, the mouse protocol should be enabled.
If zero, the mouse protocol should be disabled.
ncurses inspects this capability if it is present,
to see whether the 1006 protocol is used.
If so, it expects the responses to use the \fISGR 1006\fP xterm mouse protocol.
.IP
The xterm mouse protocol is used by other terminal emulators.
The terminal database uses building-blocks for the various xterm mouse
protocols which can be used in customized terminal descriptions.
.IP
The terminal database building blocks for this mouse
feature also have an experimental capability \fIxm\fP.
The \*(``xm\*('' capability describes the mouse response.
Currently there is no interpreter which would use this
information to make the mouse support completely data-driven.
.IP
\fIxm\fP shows the format of the mouse responses.
In this experimental capability, the parameters are
.RS 5
.TP 5
.I p1
y-ordinate
.TP 5
.I p2
x-ordinate
.TP 5
.I p3
button
.TP 5
.I p4
state, e.g., pressed or released
.TP 5
.I p5
y-ordinate starting region
.TP 5
.I p6
x-ordinate starting region
.TP 5
.I p7
y-ordinate ending region
.TP 5
.I p8
x-ordinate ending region
.RE
.IP
Here are examples from the terminal database for the most commonly used
xterm mouse protocols:
.IP
.nf
  xterm+x11mouse|X11 xterm mouse protocol,
          kmous=\\E[M, XM=\\E[?1000%?%p1%{1}%=%th%el%;,
          xm=\\E[M
             %?%p4%t%p3%e%{3}%;%'\ '%+%c
             %p2%'!'%+%c
             %p1%'!'%+%c,

  xterm+sm+1006|xterm SGR-mouse,
          kmous=\\E[<, XM=\\E[?1006;1000%?%p1%{1}%=%th%el%;,
          xm=\\E[<%i%p3%d;
             %p1%d;
             %p2%d;
             %?%p4%tM%em%;,
.fi
.
.SS Extended key-definitions
.PP
Several terminals provide the ability to send distinct strings for
combinations of modified special keys.
There is no standard for what those keys can send.
.PP
Since 1999, \fBxterm\fP has supported
\fIshift\fP, \fIcontrol\fP, \fIalt\fP, and \fImeta\fP modifiers which produce
distinct special-key strings.
In a terminal description, ncurses has no special knowledge of the
modifiers used.
Applications can use the \fInaming convention\fP established for \fBxterm\fP
to find these special keys in the terminal description.
.PP
Starting with the curses convention that \fIkey names\fP begin with \*(``k\*(''
and that shifted special keys are an uppercase name,
ncurses' terminal database defines these names to which a suffix is added:
.RS 5
.TS
tab(/) ;
l l .
\fIName\fR/\fIDescription\fR
_
kDC/special form of kdch1 (delete character)
kDN/special form of kcud1 (cursor down)
kEND/special form of kend (End)
kHOM/special form of khome (Home)
kLFT/special form of kcub1 (cursor-left or cursor-back)
kNXT/special form of knext (Next, or Page-Down)
kPRV/special form of kprev (Prev, or Page-Up)
kRIT/special form of kcuf1 (cursor-right, or cursor-forward)
kUP/special form of kcuu1 (cursor-up)
.TE
.RE
.PP
These are the suffixes used to denote the modifiers:
.RS 5
.TS
tab(/) ;
l l .
\fIValue\fR/\fIDescription\fR
_
2/Shift
3/Alt
4/Shift + Alt
5/Control
6/Shift + Control
7/Alt + Control
8/Shift + Alt + Control
9/Meta
10/Meta + Shift
11/Meta + Alt
12/Meta + Alt + Shift
13/Meta + Ctrl
14/Meta + Ctrl + Shift
15/Meta + Ctrl + Alt
16/Meta + Ctrl + Alt + Shift
.TE
.RE
.PP
None of these are predefined; terminal descriptions can refer to \fInames\fP
which ncurses will allocate at runtime to \fIkey-codes\fP.
To use these keys in an ncurses program, an application could do this:
.bP
using a list of extended key \fInames\fP,
ask \fBtigetstr\fP(3X) for their values, and
.bP
given the list of values,
ask \fBkey_defined\fP(3X) for the \fIkey-code\fP which
would be returned for those keys by \fBwgetch\fP(3X).
.PP
.\"
.SH PORTABILITY
.PP
The \*(``\-x\*('' extension feature of \fB@TIC@\fP and \fB@INFOCMP@\fP
has been adopted in NetBSD curses.
That implementation stores user-defined capabilities,
but makes no use of these capabilities itself.
.\"
.SH SEE ALSO
.PP
\fB@INFOCMP@\fR(1M),
\fB@TIC@\fR(1M).
.PP
The terminal database section
.I "NCURSES USER-DEFINABLE CAPABILITIES"
summarizes commonly-used user-defined capabilities
which are used in the terminal descriptions.
Some of those features are mentioned in \fBscreen\fR(1) or \fBtmux\fR(1).
.PP
.I "XTerm Control Sequences"
provides further information on the \fBxterm\fP features
which are used in these extended capabilities.
.\"
.SH AUTHORS
.PP
Thomas E. Dickey
.br
beginning with ncurses 5.0 (1999)
