Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
user_caps(5)			  File formats			    user_caps(5)

NAME
     user_caps - user-defined terminfo capability format

SYNOPSIS
     infocmp -x

     tic -x

DESCRIPTION
   Background
     Prior  to ncurses 5.0 (1999), terminfo databases used a fixed repertoire of
     terminal capabilities designed for the  SVr2  terminal  database  in  1984,
     added  to	in stages through SVr4 (1989), and standardized in X/Open Curses
     starting in 1995.

     Most such additions to this fixed repertoire  suppelmented  the  tables  of
     Boolean,  numeric, and string capabilities.  Rather than changing the mean-
     ing of an existing capability, a new name was added.  The terminfo database
     uses a binary format; binary compatibility was ensured by	using  a  header
     that counted the number of items in the tables for each type of capability.
     Because  each  curses vendor extended the standard capability lists in dis-
     tinct ways, a library could be programmed to recognize only compiled  term-
     info entries that it was prepared to interpret.  Standardization was incom-
     plete.

     *	 X/Open  Curses  describes only the source format, not its binary repre-
	 sentation on disk.

	 Library developers rely upon SVr4 documentation and reverse engineering
	 of compiled terminfo files to match the binary format.

     *	 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.

	 The  SVr2 format cannot represent very large numeric capability values,
	 nor can it represent large numbers of key definitions, as are	required
	 to  distinguish multiple modifier keys used in combination with a func-
	 tion key.

     *	 The tables of capability names differ between implementations.

	 Although they may provide all of the standard	capability  names,  each
	 arranges its table entries differently because some features were added
	 as needed, while others were added -- out of order -- for X/Open Curses
	 conformance.

	 While	ncurses's  capability  repertoire is closest to that of Solaris,
	 the set of capabilities supported by each  vendor's  terminfo	database
	 differs  from the list published by X/Open Curses.  ncurses can be con-
	 figured with tables that match the terminal databases for  AIX,  HP-UX,
	 or OSF/1, rather than the default Solaris-like configuration.

     *	 In SVr4 curses and ncurses, the terminal database is defined at compile
	 time by interpolating a text file that lists the different terminal ca-
	 pabilities.

	 In  principle, the text file can be extended, but doing so requires re-
	 compiling and reinstalling the library.  The text file used by  ncurses
	 for  terminal	capabilities  includes	details  of extensions to X/Open
	 Curses made by various systems.  For example, ncurses supports the fol-
	 lowing nonstandard capabilities in each configuration.

	     memory_lock
		  (meml) lock memory above cursor

	     memory_unlock
		  (memu) unlock memory

	     box_chars_1
		  (box1) box characters primary set

	 The memory lock/unlock capabilities were  included  because  they  were
	 used in the X11R6 terminal description for xterm(1).  tic uses the box1
	 capability to cope with terminal descriptions written for AIX.

     During  the  1990s, some application developers were reluctant to use term-
     info in spite of its performance (and other) advantages over termcap.

     *	 The fixed repertoire prevented users from adding support  for	terminal
	 features  unanticipated by X/Open Curses (or required them to reuse ex-
	 isting capabilities as a workaround).

     *	 The limitation to 16-bit signed integers was also  mentioned.	 Because
	 termcap  stores  everything as a string, it could represent larger num-
	 bers.

     Although termcap's extensibility was rarely used -- the claimant was  never
     an  implementor who had actually exercised it -- the criticism had a point.
     ncurses 5.0 provided a way to detect nonstandard capabilities, to determine
     their type, and to optionally store and retrieve them in a way that did not
     interfere with other applications.  ncurses terms these user-defined  capa-
     bilities  because	no  modifications  to  the  standard capability list are
     needed.

     The ncurses utilities tic and infocmp have a command-line	option	"-x"  to
     control  whether  the  nonstandard  capabilities  are  stored or retrieved.
     ncurses provides use_extended_names(3X) to programs for the same purpose.

     When compiling a terminal database, if "-x" is used, tic stores a	user-de-
     fined capability if the capability name is not standard.

     Because  ncurses  provides  a termcap library interface, these user-defined
     capabilities may be visible to termcap applications.

     *	 The termcap interface (like all implementations of  termcap)  restricts
	 capability names to two characters.

	 When  the capability is simple enough for use in a termcap application,
	 it is provided as a two-character name.

     *	 Other user-defined capabilities employ features not usable in	termcap,
	 such  as parameterized strings that use more than two parameters or re-
	 quire more powerful expressions than termcap supports.  Such  capabili-
	 ties  should, in the terminfo database, have names at least three char-
	 acters in length.

     *	 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 define a set of sixty  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 xterm(1)
	 to provide extended special-key names.

	 Fitting that into termcap's limitation of 2-character	names  would  be
	 pointless.  These extended keys are available only with terminfo.

   Recognized Capabilities
     The  ncurses  library employs user-definable capabilities.  While the term-
     info database may have other extensions, ncurses makes explicit checks  for
     the following.

	AX
	   (Boolean)  asserts  that the terminal interprets SGR 39 and SGR 49 by
	   resetting the foreground and background colors, respectively, to  the
	   default.

	   screen(1) recognizes this capability as well.

	E3
	   (string)  tells an application how to clear the terminal's scrollback
	   buffer.  When present, the clear(1) program sends this before  clear-
	   ing the terminal.

	   The command "tput clear" does the same thing.

	NQ
	   (Boolean)  suppresses  a  consistency  check  in  tic for the ncurses
	   string capabilities user6 (u6) through user9 (u9), which tell an  ap-
	   plication  how to query the terminal's cursor position and its device
	   attributes.

	RGB
	   (Boolean, numeric,  or  string)  asserts  that  the	set_a_foreground
	   (setaf)  and set_a_background (setab) capabilities employ direct col-
	   ors, using an RGB (red/green/blue) convention.  This  capability  al-
	   lows color_content(3X) to return appropriate values without requiring
	   the application to initialize colors using init_color(3X).

	   The capability type determines the values ncurses sees.

	   Boolean
	      implies  that  the number of bits for red, green, and blue are the
	      same.  Starting  with  the  value  of  the  capability  max_colors
	      (colors; termcap: co), ncurses adds two, divides the sum by three,
	      and assigns the result to red, green, and blue, in that order.

	      If  the  number  of  bits needed for the number of colors is not a
	      multiple of three, the blue (and green)  color  channels	lose  in
	      comparison to red.

	   numeric
	      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
	      Boolean case.

	   string
	      specify  the  quantity of bits used for red, green, and blue color
	      channels as a slash-separated list of decimal integers.

	   Because there are several RGB encodings  in	use,  applications  that
	   make  assumptions  about the number of bits per color channel are un-
	   likely to work reliably.  As a trivial case, one could  define  RGB#1
	   to  represent  the  standard eight ANSI X3.64/ECMA-48/ISO 6429 colors
	   using one bit per color channel.

	U8
	   (numeric) asserts whether ncurses must use Unicode values  for  line-
	   drawing characters, and that it should ignore the alternate character
	   set	(ACS) capabilities when the locale uses UTF-8 encoding.  See the
	   discussion  of  NCURSES_NO_UTF8_ACS	in  section   "ENVIRONMENT"   of
	   ncurses(3X).

	   Set this capability to a nonzero value to enable it.

	XM
	   (string)  override ncurses's built-in string that directs xterm(1) to
	   enable or disable mouse mode.

	   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 ter-
	   minal to tell the application what was done with the mouse.

	   The mouse protocol is enabled when the mask argument  to  the  mouse-
	   mask(3X)  function  is  nonzero.  By default, ncurses handles the re-
	   sponses for the X11 xterm mouse protocol.  It also  knows  about  the
	   SGR 1006  xterm  mouse  protocol,  but must to be told to look for it
	   specifically.  ncurses is not be able to guess which of the two modes
	   is used, because the responses are enough alike that  only  confusion
	   would result.

	   The	XM  capability	has a single numeric 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 re-
	   sponses to use the SGR 1006 xterm mouse protocol.

	   The xterm mouse protocol is used by other  terminal	emulators.   The
	   terminal  database  uses  building blocks for the various xterm mouse
	   protocols usable in customized terminal descriptions.

	   The terminal database building blocks for  this  mouse  feature  also
	   have  an  experimental  capability,	xm, that describes the mouse re-
	   sponse.  No known interpreter uses this information, which could make
	   mouse support completely data-driven.

	   xm shows the format of the mouse responses.	In this experimental ca-
	   pability, the parameters are as follows.

	     p1   y-ordinate

	     p2   x-ordinate

	     p3   button

	     p4   state, e.g., pressed or released

	     p5   y-ordinate starting region

	     p6   x-ordinate starting region

	     p7   y-ordinate ending region

	     p8   x-ordinate ending region

	   Here are examples from the terminal database for  the  most	commonly
	   used xterm mouse protocols.

	     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%;,

   Extended Key Definitions
     Several terminals provide the ability to send distinct strings for combina-
     tions  of	modified special keys.	There is no standard for what those keys
     can send.

     Since 1999, xterm(1) has supported shift, control, alt, and meta  modifiers
     which  produce  distinct  special-key  strings.  In a terminal description,
     ncurses has no special knowledge of the modifiers used.   Applications  can
     use  the naming convention established for xterm to find these special keys
     in the terminal description.

     Starting with the curses convention that capability  codes  describing  the
     input  generated  by a terminal's key caps begin with "k", and that shifted
     special keys use uppercase letters in their names, ncurses's terminal data-
     base defines the following names and codes to which a suffix is added.

	  Code	 Description
	  ----------------------------------------------------------------------
	  kDC	 shifted kdch1 (delete character)
	  kDN	 shifted kcud1 (cursor down)
	  kEND	 shifted kend (end)
	  kHOM	 shifted khome (home)
	  kLFT	 shifted kcub1 (cursor back)
	  kNXT	 shifted knext (next)
	  kPRV	 shifted kprev (previous)
	  kRIT	 shifted kcuf1 (cursor forward)
	  kUP	 shifted kcuu1 (cursor up)

     Keycap nomenclature on the Unix systems for which curses was developed dif-
     fers from today's ubiquitous descendants of the IBM PC/AT keyboard  layout.
     In  the  foregoing,  interpret  "backward" as "left", "forward" as "right",
     "next" as "page down", and "prev(ious)" as "page up".

     These are the suffixes used to denote the modifiers:

	  Value   Description
	  ----------------------------------
	  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

     ncurses defines no capabilities for modified F-keys; terminal  descriptions
     can  refer to names that ncurses allocates at runtime to key codes.  To use
     these keys in an ncurses program, an application could do this:

     *	 using a list of extended key names, ask tigetstr(3X) for their  values,
	 and

     *	 given	the  list  of values, ask key_defined(3X) for the key-code which
	 would be returned for those keys by wgetch(3X).

PORTABILITY
     The "-x" extension feature of tic and infocmp has been  adopted  in  NetBSD
     curses.  That implementation stores user-defined capabilities, but makes no
     use of these capabilities itself.

AUTHORS
     Thomas E. Dickey
     beginning with ncurses 5.0 (1999)

SEE ALSO
     infocmp(1M), tic(1M)

     In  the  source  form  of	the terminal database, terminfo.src, the section
     "NCURSES USER-DEFINABLE CAPABILITIES".  summarizes  commonly-used	user-de-
     fined  capabilities  employed  in the terminal descriptions.  Some of those
     features are mentioned in screen(1) or tmux(1).

     XTerm Control Sequences provides further information on the  xterm(1)  fea-
     tures that are used in these extended capabilities.

ncurses 6.6			   2025-11-11			    user_caps(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=user_caps&sektion=5&manpath=FreeBSD+Ports+15.1.quarterly>

home | help