]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - man/ncurses.3x
ncurses 6.5 - patch 20240504
[ncurses.git] / man / ncurses.3x
index 0dd20c793166259cfc3f606bff7d9a3b763f169f..9aaa7adf54bf535f8d6865af8231ca7023c9ae1d 100644 (file)
@@ -28,8 +28,8 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: ncurses.3x,v 1.204 2024/03/23 20:42:29 tom Exp $
-.TH ncurses 3X 2024-03-23 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls"
+.\" $Id: ncurses.3x,v 1.214 2024/04/27 17:55:43 tom Exp $
+.TH ncurses 3X 2024-04-27 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls"
 .ie \n(.g \{\
 .ds `` \(lq
 .ds '' \(rq
 .el    .IP \(bu 2
 ..
 .
+.\" Add supplementary paragraph tag on its own line after TP.
+.\" Adapted from TQ (which would produce mandoc warnings).
+.de tQ
+.  br
+.  ns
+.  TP
+..
+.
 .ds d @TERMINFO@
 .SH NAME
 \fB\%ncurses\fP \-
@@ -67,8 +75,10 @@ System V Release 4 Unix (\*(``SVr4\*('')
 and
 4.4BSD Unix,
 the development of which ceased in the 1990s.
-This describes \fI\%ncurses\fP
-version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@).
+This document describes
+.I \%ncurses
+version @NCURSES_MAJOR@.@NCURSES_MINOR@
+(patch @NCURSES_PATCH@).
 .PP
 .I \%ncurses
 permits control of the terminal screen's contents;
@@ -84,11 +94,12 @@ the definition and use of
 .I "soft label"
 keys;
 .I \%term\%info
-capabilities;
+capability access;
 a
-.I \%term\%cap
+.I termcap
 compatibility interface;
-and access to low-level terminal-manipulation routines.
+and an abstraction of the system's API for manipulating the terminal
+(such as \fI\%termios\fP(3)).
 .PP
 .I \%ncurses
 implements the standard interface described by
@@ -99,90 +110,123 @@ emulates the
 .I curses
 library of SVr4 and provides numerous useful extensions.
 .PP
-\fI\%ncurses\fP man pages employ several sections to clarify matters of
-usage and interoperability with other \fIcurses\fP implementations.
+.I \%ncurses
+man pages employ several sections to clarify matters of usage and
+interoperability with other
+.I curses
+implementations.
 .bP
-\*(``NOTES\*('' describes matters and caveats of which any user of the
-\fI\%ncurses\fP API should be aware,
+\*(``NOTES\*('' describes issues and caveats of which any user of the
+.I \%ncurses
+API should be aware,
 such as limitations on the size of an underlying integral type or the
 availability of a preprocessor macro exclusive of a function definition
 (which prevents its address from being taken).
 This section also describes implementation details that will be
 significant to the programmer but which are not standardized.
 .bP
-\*(``EXTENSIONS\*('' presents \fI\%ncurses\fP innovations beyond the
-X/Open Curses standard and/or the SVr4 \fIcurses\fP implementation.
-They are termed \fIextensions\fP to indicate that they cannot be
-implemented solely by using the library API, but require access to the
-library's internal state.
+\*(``EXTENSIONS\*('' presents
+.I \%ncurses
+innovations beyond the X/Open Curses standard and/or the SVr4
+.I curses
+implementation.
+They are termed
+.I extensions
+to indicate that they cannot be implemented solely by using the library
+API,
+but require access to the library's internal state.
 .bP
 \*(``PORTABILITY\*('' discusses matters
 (beyond the exercise of extensions)
-that should be considered when writing to a \fIcurses\fP standard,
-or to multiple implementations.
+that should be considered when writing to a
+.I curses
+standard,
+or for multiple implementations.
 .bP
-\*(``HISTORY\*('' examines points of detail in \fI\%ncurses\fP and other
-\fIcurses\fP implementations over the decades of their development,
+\*(``HISTORY\*('' examines points of detail in
+.I \%ncurses
+and other
+.I curses
+implementations over the decades of their development,
 particularly where precedent or inertia have frustrated better design
 (and,
 in a few cases,
 where such inertia has been overcome).
 .PP
-A program using these routines must be linked with the \fB\-lncurses\fP option,
-or (if it has been generated) with the debugging library \fB\-lncurses_g\fP.
-(Your system integrator may also have installed these libraries under
-the names \fB\-lcurses\fP and \fB\-lcurses_g\fP.)
-The ncurses_g library generates trace logs
-(in a file called \*(``trace\*('' in the current directory)
-that describe curses actions.
+A
+.I curses
+application must be linked with the library;
+use the
+.B \-lncurses
+option to your compiler or linker.
+A debugging version of the library may be available;
+if so,
+link with it using
+.BR \-lncurses_g .
+(Your system integrator may have installed these libraries such that you
+can use the options
+.B \-lcurses
+and
+.BR \-lcurses_g ,
+respectively.)
+The
+.I \%ncurses_g
+library generates trace logs
+(in a file called
+.I \%trace
+in the current directory)
+that describe
+.I \%ncurses
+actions.
 See section \*(``ALTERNATE CONFIGURATIONS\*('' below.
-.SS Initialization
-The library uses the locale which the calling program has initialized.
-That is normally done with \fBsetlocale\fP(3):
+.SS "Application Structure"
+A
+.I curses
+application uses information from the system locale;
+\fI\%setlocale\fP(3) prepares it for
+.I curses
+library calls.
 .PP
 .RS 4
 .EX
-\fBsetlocale(LC_ALL, "");\fP
+setlocale(LC_ALL, "");
 .EE
 .RE
 .PP
-If the locale is not initialized,
-the library assumes that characters are printable as in ISO\-8859\-1,
+If the locale is not thus initialized,
+the library assumes that characters are printable as in ISO\ 8859-1,
 to work with certain legacy programs.
-You should initialize the locale and not rely on specific details of
-the library when the locale has not been set up.
+You should initialize the locale;
+do not expect consistent behavior from the library when the locale has
+not been set up.
 .PP
-The function \fBinitscr\fP or \fBnewterm\fP
-must be called to initialize the library
-before any of the other routines that deal with windows
-and screens are used.
-The routine \fBendwin\fP(3X) must be called before exiting.
+\fB\%initscr\fP(3X) or \fB\%newterm\fP(3X)
+must be called to initialize
+.I curses
+before use of any functions that deal with windows and screens.
 .PP
-To get character-at-a-time input without echoing (most
-interactive, screen oriented programs want this), the following
-sequence should be used:
+To get character-at-a-time input without echoing\(emmost interactive,
+screen-oriented programs want this\(emuse the following sequence.
 .PP
 .RS 4
 .EX
-\fBinitscr(); cbreak(); noecho();\fP
+initscr(); cbreak(); noecho();
 .EE
 .RE
 .PP
-Most programs would additionally use the sequence:
+Most applications perform further setup as follows.
 .PP
 .RS 4
 .EX
-\fBintrflush(stdscr, FALSE);\fP
-\fBkeypad(stdscr, TRUE);\fP
+intrflush(stdscr, FALSE);
+keypad(stdscr, TRUE);
 .EE
 .RE
 .PP
-Before a \fBcurses\fP program is run, the tab stops of the terminal
-should be set and its initialization strings, if defined, must be output.
-This can be done by executing the \fB@TPUT@ init\fP command
-after the shell environment variable \fITERM\fP has been exported.
-(The BSD-style \fB\%@TSET@\fP(1) utility also performs this function.)
-See subsection \*(``Tabs and Initialization\*('' of \fBterminfo\fP(5).
+A
+.I curses
+program then often enters an event loop of some sort.
+Call \fB\%endwin\fP(3X) before exiting.
 .SS Overview
 A
 .I curses
@@ -197,20 +241,23 @@ addressed by row and column coordinates
 .RI ( y ,
 .IR x ),
 with the upper left corner as (0, 0).
-A window called \fB\%stdscr\fP,
+A window called
+.BR \%stdscr ,
 the same size as the terminal screen,
 is always available.
 Create others with \fB\%newwin\fP(3X).
 .PP
 A
 .I curses
-library does not manage overlapping windows.
-(See \fBpanel\fP(3X) if you desire this.)
-You can either use \fB\%stdscr\fP to manage one screen-filling window,
+library does not manage overlapping windows
+(but see below).
+You can either use
+.B \%stdscr
+to manage one screen-filling window,
 or tile the screen into non-overlapping windows and not use
-\fB\%stdscr\fP at all.
-Mixing the two approaches will result in unpredictable,
-and undesired,
+.B \%stdscr
+at all.
+Mixing the two approaches will result in unpredictable and undesired
 effects.
 .PP
 Functions permit manipulation of a window and the
@@ -218,45 +265,14 @@ Functions permit manipulation of a window and the
 identifying the cell within it at which the next output operation will
 occur.
 Among those,
-the most basic are \fBmove\fP(3X) and \fB\%addch\fP(3X):
+the most basic are \fB\%move\fP(3X) and \fB\%addch\fP(3X):
 these place the cursor and write a character to
 .BR \%stdscr ,
 respectively.
-As a rule,
-window-addressing functions feature names prefixed
-(or infixed,
-see below)
-with \*(``w\*('';
-these allow the user to specify a pointer to a
-.IR \%WINDOW .
-Counterparts not thus prefixed
-(or infixed)
-affect \fB\%stdscr\fP.
-Because moving the cursor prior to another operation is so common,
-.I curses
-generally also provides functions with a \*(``mv\*('' prefix as a
-convenience.
-Thus,
-the library defines all of
-\fB\%addch\fP,
-\fB\%waddch\fP,
-\fB\%mvaddch\fP,
-and
-\fB\%mvwaddch\fP.
-When both prefixes are present,
-the order of arguments is a
-.I \%WINDOW
-pointer first,
-then a
-.I y
-and
-.I x
-coordinate pair.
 .PP
-Updating the terminal screen with every
-.I curses
-call can cause unpleasant flicker or inefficient use of the
-communications channel to the device.
+Frequent changes to the terminal screen can cause unpleasant flicker or
+inefficient use of the communication channel to the device,
+so the library does not generally update it automatically.
 Therefore,
 after using
 .I curses
@@ -264,7 +280,7 @@ functions to accumulate a set of desired updates that make sense to
 present together,
 call \fB\%refresh\fP(3X) to tell the library to make the user's screen
 look like \fBstdscr\fP.
-.I \%ncurses
+The library
 .\" X/Open Curses Issue 7 assumes some optimization will be done, but
 .\" does not mandate it in any way.
 .I optimizes
@@ -278,7 +294,9 @@ a feature of every standard
 .I curses
 implementation.
 .PP
-Special windows called \fIpads\fP may also be manipulated.
+Special windows called
+.I pads
+may also be manipulated.
 These are windows that are not constrained to the size of the terminal
 screen and whose contents need not be completely displayed.
 See \fB\%curs_pad\fP(3X).
@@ -291,12 +309,10 @@ or in color on terminals that support such display enhancements.
 See \fB\%curs_attr\fP(3X).
 .PP
 .I curses
-predefines constants for a small set of line-drawing and other graphics
+predefines constants for a small set of forms-drawing graphics
 corresponding to the DEC Alternate Character Set (ACS),
 a feature of VT100 and other terminals.
-See
-\fB\%waddch\fP(3X) and
-\fB\%wadd_wch\fP(3X).
+See \fB\%waddch\fP(3X).
 .PP
 .I curses
 is implemented using the operating system's terminal driver;
@@ -317,7 +333,13 @@ appears as a control character or a multibyte
 translates these into unique
 .I "key codes."
 See \fB\%getch\fP(3X).
-.SS "Effects of GUIs and Environment Variables"
+.PP
+.I \%ncurses
+provides reimplementations of the SVr4 \fBpanel\fP(3X), \fBform\fP(3X),
+and \fBmenu\fP(3X) libraries to ease construction of user interfaces
+with
+.IR curses .
+.SS "Initialization"
 The selection of an appropriate value of
 .I TERM
 in the process environment is essential to correct
@@ -330,7 +352,20 @@ A well-configured system selects a correct
 value automatically;
 \fB\%tset\fP(1) may assist with troubleshooting exotic situations.
 .PP
-If the environment variables \fILINES\fP and \fI\%COLUMNS\fP are set,
+If you change the terminal type,
+export the
+.I TERM
+environment variable in the shell,
+then run \fB\%tset\fP(1) or the
+.RB \*(`` "@TPUT@ init" \*(''
+command.
+See subsection \*(``Tabs and Initialization\*('' of \fB\%terminfo\fP(5).
+.PP
+If the environment variables
+.I \%LINES
+and
+.I \%COLUMNS
+are set,
 or if the
 .I curses
 program is executing in a graphical windowing environment,
@@ -341,23 +376,35 @@ An
 extension supports resizable terminals;
 see \fB\%wresize\fP(3X).
 .PP
-If the environment variable \fI\%TERMINFO\fP is defined,
+If the environment variable
+.I \%TERMINFO
+is defined,
 a
 .I curses
 program checks first for a terminal type description in the location it
 identifies.
 .I \%TERMINFO
 is useful for developing experimental type descriptions or when write
-permission to \fI\*d\fP is not available.
+permission to
+.I \%\*d
+is not available.
 .PP
 See section \*(``ENVIRONMENT\*('' below.
 .SS "Naming Conventions"
-Many
 .I curses
-functions have two or more versions.
-Those prefixed with \*(``w\*('' require a window argument.
+offers many functions in variant forms using a regular set of
+alternatives to the name of an elemental one.
+Those prefixed with \*(``w\*('' require a
+.I \%WINDOW
+pointer argument;
+those with a \*(``mv\*('' prefix first perform cursor movement using
+\fB\%wmove\fP(3X);
+a \*(``mvw\*('' prefix indicates both.
+The \*(``w\*('' function is typically the elemental one;
+the removal of this prefix usually indicates operation on
+.BR \%stdscr .
+.PP
 Four functions prefixed with \*(``p\*('' require a pad argument.
-Those without a prefix generally operate on \fB\%stdscr\fP.
 .PP
 In function synopses,
 .I \%ncurses
@@ -367,8 +414,12 @@ man pages apply the following names to parameters.
 center;
 Li L.
 bf     \fIbool\fP (\fBTRUE\fP or \fBFALSE\fP)
-win    pointer to \fIWINDOW\fP
-pad    pointer to \fIWINDOW\fP that is a pad
+c      a \fIchar\fP or \fIint\fP
+ch     a \fIchtype\fP
+wc     a \fIwchar_t\fP or \fIwint_t\fP
+wch    a \fIcchar_t\fP
+win    pointer to a \fIWINDOW\fP
+pad    pointer to a \fIWINDOW\fP that is a pad
 .TE
 .SS "Wide and Non-wide Character Configurations"
 This manual page describes functions that appear in any configuration
@@ -416,7 +467,7 @@ characters.
 corresponds to the non-wide configuration's
 .IR \%chtype .
 It always a structure type,
-because it stores more data than fits into an integral type.
+because it stores more data than fit into a standard scalar type.
 A character code may not be representable as a
 .IR \%char ,
 and moreover more than one character may occupy a cell
@@ -436,10 +487,10 @@ Each cell of a
 is stored as a
 .IR \%cchar_t .
 .PP
-The \fB\%setcchar\fP(3X) and \fB\%getcchar\fP(3X)
-functions store and retrieve the data from a
+\fB\%setcchar\fP(3X) and \fB\%getcchar\fP(3X)
+store and retrieve
 .I \%cchar_t
-structure.
+data.
 The wide library API of
 .I \%ncurses
 depends on two data types standardized by ISO C95.
@@ -482,13 +533,19 @@ where a non-wide function name contains \*(``ch\*('' or \*(``str\*('',
 prefix it with \*(``_w\*('' to obtain the wide counterpart.
 For example,
 \fB\%waddch\fP becomes \fB\%wadd_wch\fP.
+(Exceptions that add only \*(``w\*('' comprise
+.BR \%addwstr ,
+.BR \%inwstr ,
+and their variants.)
 .IP
 This convention is inapplicable to some non-wide function names,
 so other transformations are used for the wide configuration:
-in the window background management functions,
-\*(``bkgd\*('' becomes \*(``bkgrnd\*('';
+the window background management function \*(``bkgd\*('' becomes
+\*(``bkgrnd\*('';
 the window border-drawing and -clearing functions are suffixed with
-\*(``_set\*(''.
+\*(``_set\*('';
+and character attribute manipulation functions like
+\*(``attron\*('' become \*(``attr_on\*(''.
 .\"
 .SS "Function Name Index"
 The following table lists the
@@ -497,7 +554,7 @@ functions provided in the non-wide and wide APIs and the corresponding
 man pages that describe them.
 Those flagged with \*(``*\*(''
 are
-.IR \%ncurses -specific,
+.IR \%ncurses "-specific,"
 neither described by X/Open Curses nor present in SVr4.
 .PP
 .TS
@@ -578,6 +635,7 @@ find_pair/\fBnew_pair\fP(3X)*
 flash/\fBcurs_beep\fP(3X)
 flushinp/\fBcurs_util\fP(3X)
 free_pair/\fBnew_pair\fP(3X)*
+get_escdelay/\fBcurs_threads\fP(3X)*
 get_wch/\fBcurs_get_wch\fP(3X)
 get_wstr/\fBcurs_get_wstr\fP(3X)
 getattrs/\fBcurs_attr\fP(3X)
@@ -802,6 +860,8 @@ scrl/\fBcurs_scroll\fP(3X)
 scroll/\fBcurs_scroll\fP(3X)
 scrollok/\fBcurs_outopts\fP(3X)
 set_curterm/\fBcurs_terminfo\fP(3X)
+set_escdelay/\fBcurs_threads\fP(3X)*
+set_tabsize/\fBcurs_threads\fP(3X)*
 set_term/\fBcurs_initscr\fP(3X)
 setcchar/\fBcurs_getcchar\fP(3X)
 setscrreg/\fBcurs_outopts\fP(3X)
@@ -861,7 +921,9 @@ use_default_colors/\fBdefault_colors\fP(3X)*
 use_env/\fBcurs_util\fP(3X)
 use_extended_names/\fBcurs_extend\fP(3X)*
 use_legacy_coding/\fBlegacy_coding\fP(3X)*
+use_screen/\fBcurs_threads\fP(3X)*
 use_tioctl/\fBcurs_util\fP(3X)*
+use_window/\fBcurs_threads\fP(3X)*
 vid_attr/\fBcurs_terminfo\fP(3X)
 vid_puts/\fBcurs_terminfo\fP(3X)
 vidattr/\fBcurs_terminfo\fP(3X)
@@ -958,275 +1020,404 @@ wvline/\fBcurs_border\fP(3X)
 wvline_set/\fBcurs_border_set\fP(3X)
 .TE
 .PP
-Depending on the configuration,
-additional sets of functions may be available:
-.RS 3
-.TP 5
-\fBcurs_memleaks\fP(3X) - curses memory-leak checking
-.TP 5
-\fBcurs_sp_funcs\fP(3X) - curses screen-pointer extension
-.TP 5
-\fBcurs_threads\fP(3X) - curses thread support
-.TP 5
-\fBcurs_trace\fP(3X) - curses debugging routines
-.RE
+.IR \%ncurses 's
+.I "screen-pointer extension"
+adds additional functions corresponding to many of the above,
+each with an \*(``_sp\*('' suffix;
+see \fBcurs_sp_funcs\fP(3X).
+.PP
+The availability of some extensions is configurable when
+.I \%ncurses
+is compiled;
+see sections \*(``ALTERNATE CONFIGURATIONS\*('' and \*(``EXTENSIONS\*(''
+below.
 .SH RETURN VALUE
 Unless otherwise noted,
-functions that return an integer return \fBOK\fP on success and
-\fBERR\fP on failure.
-Functions that return pointers return \fBNULL\fP on failure.
+functions that return an integer return
+.B OK
+on success and
+.B ERR
+on failure.
+Functions that return pointers return
+.B NULL
+on failure.
 Typically,
 .I \%ncurses
 treats a null pointer passed as a function parameter as a failure.
-.PP
-Functions with a \*(``mv\*('' prefix first perform cursor movement using
-\fB\%wmove\fP and fail if the position is outside the window,
-or
-(for \*(``mvw\*('' functions)
-if the
-.I \%WINDOW
-pointer is null.
+Functions prefixed with \*(``mv\*('' first perform cursor movement and
+fail if the position
+.RI ( y ,
+.IR x )
+is outside the window boundaries.
 .SH ENVIRONMENT
-The following environment symbols are useful for customizing the
-runtime behavior of the \fI\%ncurses\fP library.
-The most important ones have been already discussed in detail.
+The following symbols from the process environment customize the
+runtime behavior of
+.I \%ncurses
+applications.
+The library may be configured to disregard the variables
+.IR \%TERMINFO ,
+.IR \%TERMINFO_DIRS ,
+.IR \%TERMPATH ,
+and
+.IR HOME ,
+if the user is the superuser (root),
+or the application uses \fI\%setuid\fP(2) or \fI\%setgid\fP(2).
+.SS "\fIBAUDRATE\fP"
+The debugging library checks this variable when the application has
+redirected output to a file.
+Its integral value is used for the baud rate.
+If that value is absent or invalid,
+.I \%ncurses
+uses 9600.
+This feature allows testers to construct repeatable test cases
+that take into account optimization decisions that depend on baud rate.
 .SS "\fICC\fP (command character)"
 When set,
-change the
+the
 .B \%command_character
 .RB ( \%cmdch )
 capability value of loaded
 .I \%term\%info
-entries to the value of this variable.
+entries changes to the value of this variable.
 Very few
 .I \%term\%info
 entries provide this feature.
 .PP
 Because this name is also used in development environments to represent
 the C compiler's name,
-\fI\%ncurses\fP ignores it if it does not happen to be a single
-character.
-.SS "\fIBAUDRATE\fP"
-The debugging library checks this environment variable when the application
-has redirected output to a file.
-The variable's numeric value is used for the baud rate.
-If no value is found, \fI\%ncurses\fP uses 9600.
-This allows testers to construct repeatable test-cases
-that take into account costs that depend on baud rate.
+.I \%ncurses
+ignores its value if it is not one character in length.
 .SS "\fICOLUMNS\fP"
-Specify the width of the screen in characters.
+This variable specifies the width of the screen in characters.
 Applications running in a windowing environment usually are able to
 obtain the width of the window in which they are executing.
-If neither the \fI\%COLUMNS\fP value
-nor the terminal's screen size is available,
-\fI\%ncurses\fP uses the size which may be specified in the terminfo
-database
-(i.e., the \fBcols\fP capability).
+If
+.I \%COLUMNS
+is not defined and the terminal's screen size is not available from the
+terminal driver,
+.I \%ncurses
+uses the size specified by the
+.B \%columns
+.RB ( \%cols )
+capability of the terminal type's entry in the
+.I \%term\%info
+database,
+if any.
+.PP
+It is important that your application use the correct screen size.
+Automatic detection thereof is not always possible because an
+application may be running on a host that does not honor NAWS
+(Negotiations About Window Size)
+or as a different user ID than the owner of the terminal device file.
+Setting
+.I \%COLUMNS
+and/or
+.I \%LINES
+overrides the library's use of the screen size obtained from the
+operating system.
+.PP
+The
+.I \%COLUMNS
+and
+.I \%LINES
+variables may be specified independently.
+This property is useful to circumvent misfeatures of legacy terminal
+type descriptions;
+\fI\%xterm\fP(1) descriptions specifying 65 lines were once notorious.
+For best results,
+avoid specifying
+.B cols
+and
+.B lines
+capability codes in
+.I \%term\%info
+descriptions of terminal emulators.
 .PP
-It is important that your application use a correct size for the screen.
-This is not always possible because your application may be
-running on a host which does not honor NAWS (Negotiations About Window
-Size), or because you are temporarily running as another user.
-However,
-setting \fI\%COLUMNS\fP and/or \fILINES\fP overrides the library's use
-of the screen size obtained from the operating system.
-.PP
-Either \fI\%COLUMNS\fP or \fILINES\fP symbols may be specified
-independently.
-This is mainly useful to circumvent legacy misfeatures of terminal descriptions,
-e.g., xterm which commonly specifies a 65 line screen.
-For best results, \fBlines\fP and \fBcols\fP should not be specified in
-a terminal description for terminals which are run as emulations.
-.PP
-Use the \fBuse_env\fP function to disable all use of external environment
-(but not including system calls) to determine the screen size.
-Use the \fBuse_tioctl\fP function to update \fI\%COLUMNS\fP or
-\fILINES\fP to match the screen size obtained from system calls or the
-terminal database.
+\fBuse_env\fP(3X) can disable use of the process environment
+in determining the screen size.
+\fBuse_tioctl\fP(3X) can update
+.I \%COLUMNS
+and
+.I \%LINES
+to match the screen size obtained from system calls or the terminal
+database.
 .SS "\fIESCDELAY\fP"
-Specifies the total time,
-in milliseconds,
-for which \fI\%ncurses\fP will await a character sequence,
-e.g.,
-a function key.
-The default value, 1000 milliseconds, is enough for most uses.
-However, it is made a variable to accommodate unusual applications.
+For
+.I curses
+to distinguish the ESC character resulting from a user's press of the
+\*(``Escape\*('' key on the input device from one beginning an
+.I "escape sequence"
+(as commonly produced by function keys),
+it waits after receiving the escape character to see if further
+characters are available on the input stream within a short interval.
+A global variable
+.B \%ESCDELAY
+stores this interval in milliseconds.
+The default value of 1000
+(one second)
+is adequate for most uses.
+This environment variable overrides it.
 .PP
 The most common instance where you may wish to change this value
-is to work with slow hosts, e.g., running on a network.
-If the host cannot read characters rapidly enough, it will have the same
-effect as if the terminal did not send characters rapidly enough.
-The library will still see a timeout.
-.PP
-Note that xterm mouse events are built up from character sequences
-received from the xterm.
-If your application makes heavy use of multiple-clicking, you may
-wish to lengthen this default value because the timeout applies
-to the composed multi-click event as well as the individual clicks.
-.PP
-In addition to the environment variable,
-this implementation provides a global variable with the same name.
-Portable applications should not rely upon the presence of \fB\%ESCDELAY\fP
+is to work with a remote host over a slow communication channel.
+If the host running a
+.I curses
+application does not receive the characters of an escape sequence in a
+timely manner,
+the library can interpret them as multiple key stroke events.
+.PP
+\fI\%xterm\fP(1) mouse events are a form of escape sequence;
+therefore,
+if your application makes heavy use of multiple-clicking,
+you may wish to lengthen the default value because the delay applies
+to the composite multi-click event as well as the individual clicks.
+.PP
+Portable applications should not rely upon the presence of
+.B \%ESCDELAY
 in either form,
 but setting the environment variable rather than the global variable
 does not create problems when compiling an application.
-.SS "\fIHOME\fP"
-Tells \fI\%ncurses\fP where your home directory is.
-That is where it may read and write auxiliary terminal descriptions:
 .PP
-.RS 4
-.EX
-$HOME/.termcap
-$HOME/.terminfo
-.EE
-.RE
+If \fB\%keypad\fP(3X) is disabled for the
+.I curses
+window receiving input,
+a program must disambiguate escape sequences itself.
+.SS "\fIHOME\fP"
+.I \%ncurses
+may read and write auxiliary terminal descriptions in
+.I \%.termcap
+and
+.I \%.terminfo
+files in the user's home directory.
 .SS "\fILINES\fP"
-Like \fI\%COLUMNS\fP, specify the height of the screen in characters.
-See \fI\%COLUMNS\fP for a detailed description.
+This counterpart to
+.I \%COLUMNS
+specifies the height of the screen in characters.
+The corresponding
+.I \%term\%info
+capability and code is
+.BR \%lines .
+See the description of the
+.I \%COLUMNS
+variable above.
 .SS "\fIMOUSE_BUTTONS_123\fP"
-This applies only to the OS/2 EMX port.
-It specifies the order of buttons on the mouse.
-OS/2 numbers a 3-button mouse inconsistently from other
-platforms:
-.PP
-.RS 4
-.EX
-1 = left
-2 = right
-3 = middle.
-.EE
-.RE
-.PP
-This variable lets you customize the mouse.
-The variable must be three numeric digits 1\-3 in any order, e.g., 123 or 321.
-If it is not specified, \fI\%ncurses\fP uses 132.
+(OS/2 EMX port only)
+OS/2 numbers a three-button mouse inconsistently with other platforms,
+such that 1 is the left button,
+2 the right,
+and 3 the middle.
+This variable customizes the mouse button numbering.
+Its value must be three digits 1\-3 in any order.
+By default,
+.I \%ncurses
+assumes a numbering of \*(``132\*(''.
 .SS "\fINCURSES_ASSUMED_COLORS\fP"
-Override the compiled-in assumption that the
-terminal's default colors are white-on-black
-(see \fBdefault_colors\fP(3X)).
-You may set the foreground and background color values with this environment
-variable by proving a 2-element list: foreground,background.
-For example, to tell \fI\%ncurses\fP to not assume anything
-about the colors, set this to "\-1,\-1".
-To make it green-on-black, set it to "2,0".
-Any positive value from zero to the terminfo \fBmax_colors\fP value is allowed.
-.SS "\fINCURSES_CONSOLE2\fP"
-This applies only to the MinGW port of \fI\%ncurses\fP.
+If set,
+this variable overrides the
+.I \%ncurses
+library's compiled-in assumption that the terminal's default colors are
+white on black;
+see \fB\%default_colors\fP(3X).
+Set the foreground and background color values with this environment
+variable by assigning it two integer values separated by a comma,
+indicating foregound and background color numbers,
+respectively.
 .PP
-The \fBConsole2\fP program's handling of the Microsoft Console API call
-\fBCreateConsoleScreenBuffer\fP is defective.
-Applications which use this will hang.
-However, it is possible to simulate the action of this call by
-mapping coordinates,
+For example,
+to tell
+.I \%ncurses
+not to assume anything about the colors,
+use a value of \*(``\-1,\-1\*(''.
+To make the default color scheme green on black,
+use \*(``2,0\*(''.
+.I \%ncurses
+accepts integral values from \-1 up to the value of the
+.I \%term\%info
+.B \%max_colors
+.RB ( colors )
+capability.
+.SS "\fINCURSES_CONSOLE2\fP"
+(MinGW port only)
+The
+.I \%Console2
+.\" https://www.hanselman.com/blog/console2-a-better-windows-command-prompt
+program defectively handles the Microsoft Console API call
+.IR \%Create\%Console\%Screen\%Buffer .
+Applications that use it will hang.
+However,
+it is possible to simulate the action of this call by mapping
+coordinates,
 explicitly saving and restoring the original screen contents.
-Setting the environment variable \fBNCGDB\fP has the same effect.
+Setting the environment variable
+.I \%NCGDB
+has the same effect.
 .SS "\fINCURSES_GPM_TERMS\fP"
-This applies only to \fI\%ncurses\fP configured to use the GPM
-interface.
-.PP
-If present,
-the environment variable is a list of one or more terminal names
-against which the \fITERM\fP environment variable is matched.
-Setting it to an empty value disables the GPM interface;
-using the built-in support for xterm, etc.
-.PP
-If the environment variable is absent,
-\fI\%ncurses\fP will attempt to open GPM if \fITERM\fP contains
-\*(``linux\*(''.
+(Linux only)
+When
+.I \%ncurses
+is configured to use the GPM interface,
+this variable may list one or more terminal names
+against which the
+.I TERM
+variable
+(see below)
+is matched.
+An empty value disables the GPM interface,
+using
+.IR \%ncurses 's
+built-in support for \fIxterm\fP(1) mouse protocols instead.
+If the variable is absent,
+.I \%ncurses
+attempts to open GPM if
+.I TERM
+contains \*(``linux\*(''.
 .SS "\fINCURSES_NO_HARD_TABS\fP"
-\fI\%ncurses\fP may use tabs as part of cursor movement optimization.
+.I \%ncurses
+may use tab characters in cursor movement optimization.
 In some cases,
-your terminal driver may not handle these properly.
+your terminal driver may not handle them properly.
 Set this environment variable to any value to disable the feature.
-You can also adjust your \fBstty\fP(1) settings to avoid the problem.
+You can also adjust your \fI\%stty\fP(1) settings to avoid the problem.
 .SS "\fINCURSES_NO_MAGIC_COOKIE\fP"
-Some terminals use a magic-cookie feature which requires special handling
-to make highlighting and other video attributes display properly.
-You can suppress the highlighting entirely for these terminals by
-setting this environment variable to any value.
+Many terminals store video attributes as a property of a character cell,
+as
+.I curses
+does.
+Historically,
+some recorded changes in video attributes as data that logically
+.I occupies
+character cells on the display,
+switching attributes on or off,
+similarly to tags in a markup language;
+these are termed \*(``magic cookies\*('',
+and must be subsequently overprinted.
+If the
+.I \%term\%info
+entry for your terminal type does not adequately describe its handling
+of magic cookies,
+set this variable to any value to instruct
+.I \%ncurses
+to disable attributes entirely.
 .SS "\fINCURSES_NO_PADDING\fP"
-Most of the terminal descriptions in the terminfo database are written
-for real \*(``hardware\*('' terminals.
-Many people use terminal emulators
-which run in a windowing environment and use curses-based applications.
-Terminal emulators can duplicate
-all of the important aspects of a hardware terminal, but they do not
-have the same limitations.
-The chief limitation of a hardware terminal from the standpoint
-of your application is the management of dataflow, i.e., timing.
+Most terminal type descriptions in the
+.I \%term\%info
+database detail hardware devices.
+Many people use
+.IR curses -based
+applications in terminal emulator programs that run in a windowing
+environment.
+These programs can duplicate all of the important features of a hardware
+terminal,
+but often lack their limitations.
+Chief among these absent drawbacks is the problem of data flow
+management;
+that is,
+limiting the speed of communication to what the hardware could handle.
 Unless a hardware terminal is interfaced into a terminal concentrator
 (which does flow control),
-it (or your application) must manage dataflow, preventing overruns.
-The cheapest solution (no hardware cost)
-is for your program to do this by pausing after
-operations that the terminal does slowly, such as clearing the display.
-.PP
-As a result, many terminal descriptions (including the vt100)
-have delay times embedded.
-You may wish to use these descriptions,
-but not want to pay the performance penalty.
-.PP
-Set the \fI\%NCURSES_NO_PADDING\fP environment variable
-to disable all but mandatory padding.
-Mandatory padding is used as a part of special control
-sequences such as \fBflash\fP.
+an application must manage flow control itself to prevent overruns and
+data loss.
+.PP
+A solution that comes at no hardware cost is for an application to pause
+after directing a terminal to execute an operation that it performs
+slowly,
+such as clearing the display.
+Many terminal type descriptions,
+including that for the VT100,
+embed delay specifications in capabilities.
+You may wish to use these terminal descriptions without paying the
+performance penalty.
+Set
+.I \%NCURSES_NO_PADDING
+to any value to disable all but mandatory padding.
+Mandatory padding is used by such terminal capabilities as
+.B \%flash_screen
+.RB ( flash ).
 .SS "\fINCURSES_NO_SETBUF\fP"
-This setting is obsolete.
-Before changes
-.RS 3
-.bP
-started with 5.9 patch 20120825
-and
-.bP
-continued
-though 5.9 patch 20130126
-.RE
-.PP
-\fI\%ncurses\fP enabled buffered output during terminal initialization.
-This was done (as in SVr4 curses) for performance reasons.
-For testing purposes, both of \fI\%ncurses\fP and certain applications,
+(Obsolete)
+Prior to internal changes developed in
+.I \%ncurses
+5.9
+(patches 20120825 through 20130126),
+the library used \fI\%setbuf\fP(3) to enable fully buffered output when
+initializing the terminal.
+This was done,
+as in SVr4
+.IR curses ,
+to increase performance.
+For testing purposes,
+both of
+.I \%ncurses
+and of certain applications,
 this feature was made optional.
-Setting the \fI\%NCURSES_NO_SETBUF\fP variable
-disabled output buffering, leaving the output in the original (usually
-line buffered) mode.
-.PP
-In the current implementation,
-\fI\%ncurses\fP performs its own buffering and does not require this
-workaround.
-It does not modify the buffering of the standard output.
-.PP
-The reason for the change was to make the behavior for interrupts and
-other signals more robust.
-One drawback is that certain nonconventional programs would mix
-ordinary \fI\%stdio\fP(3) calls with \fI\%ncurses\fP calls and (usually)
-work.
-This is no longer possible since \fI\%ncurses\fP is not using
-the buffered standard output but its own output (to the same file descriptor).
-As a special case, the low-level calls such as \fBputp\fP still use the
-standard output.
-But high-level curses calls do not.
+Setting this variable disabled output buffering,
+leaving the output stream in the original
+(usually line-buffered)
+mode.
+.PP
+Nowadays,
+.I \%ncurses
+performs its own buffering and does not require this workaround;
+it does not modify the buffering of the standard output stream.
+This approach makes signal handling,
+as for interrupts,
+more robust.
+A drawback is that certain unconventional programs mixed
+\fI\%stdio\fP(3) calls with
+.I \%ncurses
+calls and (usually)
+got the behavior they expected.
+This is no longer the case;
+.I \%ncurses
+does not write to the standard output file descriptor through a
+.IR stdio -buffered
+stream.
+.PP
+As a special case,
+low-level API calls such as \fB\%putp\fP(3X) still use the
+standard output stream.
+High-level
+.I curses
+calls such as \fB\%printw\fP(3X) do not.
 .SS "\fINCURSES_NO_UTF8_ACS\fP"
-During initialization, the \fI\%ncurses\fP library
-checks for special cases where VT100 line-drawing (and the corresponding
-alternate character set capabilities) described in the terminfo are known
-to be missing.
-Specifically, when running in a UTF\-8 locale,
-the Linux console emulator and the GNU screen program ignore these.
-\fI\%ncurses checks the \fITERM\fP environment variable for these.
-For other special cases, you should set this environment variable.
-Doing this tells \fI\%ncurses\fP to use Unicode values which correspond
-to the VT100 line-drawing glyphs.
-That works for the special cases cited,
-and is likely to work for terminal emulators.
-.PP
-When setting this variable, you should set it to a nonzero value.
-Setting it to zero (or to a nonnumber)
-disables the special check for \*(``linux\*('' and \*(``screen\*(''.
-.PP
-As an alternative to the environment variable,
-\fI\%ncurses\fP checks for an extended terminfo capability \fBU8\fP.
-This is a numeric capability which can be compiled using \fB@TIC@\ \-x\fP.
-For example
+At initialization,
+.I \%ncurses
+inspects the
+.I TERM
+environment variable for special cases where VT100 forms-drawing
+characters
+(and the corresponding alternate character set
+.I \%term\%info
+capabilities)
+are known to be unsupported by terminal types that otherwise claim VT100
+compatibility.
+Specifically,
+when running in a UTF-8 locale,
+the Linux virtual console device and the GNU \fI\%screen\fP(1)
+program ignore them.
+Set this variable to a nonzero value to instruct
+.I \%ncurses
+that the terminal's ACS support is broken;
+the library then outputs Unicode code points that correspond to the
+forms-drawing
+characters.
+Set it to zero
+(or a non-integer)
+to disable the special check for terminal type names matching
+\*(``linux\*('' or \*(``screen\*('',
+directing
+.I \%ncurses
+to assume that the ACS feature works if the terminal type description
+advertises it.
+.PP
+As an alternative to use of this variable,
+.I \%ncurses
+checks for an extended
+.I \%term\%info
+numeric capability \fBU8\fP
+that can be compiled using
+.RB \*(`` "@TIC@ \-x" \*(''.
+Examples follow.
 .PP
 .RS 3
 .EX
@@ -1241,171 +1432,220 @@ xterm\-utf8|xterm relying on UTF\-8 line\-graphics,
 .EE
 .RE
 .PP
-The name \*(``U8\*('' is chosen to be two characters,
-to permit it to be used by applications that use \fI\%ncurses\fP'
-termcap interface.
+The two-character name \*(``U8\*('' was chosen to permit its use via
+.IR \%ncurses 's
+.I termcap
+interface.
 .SS "\fINCURSES_TRACE\fP"
-During initialization, the \fI\%ncurses\fP debugging library
-checks the \fI\%NCURSES_TRACE\fP environment variable.
-If it is defined,
-to a numeric value,
-\fI\%ncurses\fP calls the \fBtrace\fP function,
-using that value as the argument.
-.PP
-The argument values, which are defined in \fBcurses.h\fP, provide several
-types of information.
-When running with traces enabled, your application will write the
-file \fBtrace\fP to the current directory.
-.PP
-See \fBcurs_trace\fP(3X) for more information.
+At initialization,
+.I \%ncurses
+(in its debugging configuration)
+checks for this variable's presence.
+If defined with an integral value,
+the library calls \fB\%curses_trace\fP(3X) with that value as the
+argument.
 .SS "\fITERM\fP"
-Denotes your terminal type.
-Each terminal type is distinct, though many are similar.
-.PP
-\fITERM\fP is commonly set by terminal emulators to help
-applications find a workable terminal description.
-Some of those choose a popular approximation, e.g.,
-\*(``ansi\*('', \*(``vt100\*('', \*(``xterm\*('' rather than an exact fit.
-Not infrequently, your application will have problems with that approach,
-e.g., incorrect function-key definitions.
-.PP
-If you set \fITERM\fP in your environment,
-it has no effect on the operation of the terminal emulator.
-It only affects the way applications work within the terminal.
-Likewise, as a general rule (\fBxterm\fP(1) being a rare exception),
-terminal emulators which allow you to
-specify \fITERM\fP as a parameter or configuration value do
-not change their behavior to match that setting.
+The
+.I TERM
+variable denotes the terminal type.
+Each is distinct,
+though many are similar.
+It is commonly set by terminal emulators to help applications find a
+workable terminal description.
+Some choose a popular approximation such as \*(``ansi\*('',
+\*(``vt100\*('', or \*(``xterm\*('' rather than an exact fit to their
+capabilities.
+Not infrequently,
+an application will have problems with that approach;
+for example,
+a key stroke may not operate correctly,
+or produce no effect but seeming garbage characters on the screen.
+.PP
+Setting
+.I TERM
+has no effect on hardware operation;
+it affects the way applications communicate with the terminal.
+Likewise,
+as a general rule
+(\fIxterm\fP(1) being a rare exception),
+terminal emulators that allow you to specify
+.I TERM
+as a parameter or configuration value do not change their behavior to
+match that setting.
 .SS "\fITERMCAP\fP"
-If the \fI\%ncurses\fP library has been configured with \fItermcap\fP
-support, \fI\%ncurses\fP will check for a terminal's description in
-termcap form if it is not available in the terminfo database.
-.PP
-The \fI\%TERMCAP\fP environment variable contains
-either a terminal description (with newlines stripped out),
-or a file name telling where the information denoted by
-the \fITERM\fP environment variable exists.
-In either case, setting it directs \fI\%ncurses\fP to ignore
-the usual place for this information, e.g., /etc/termcap.
+If
+.I \%ncurses
+is configured with
+.I termcap
+support,
+it checks for a terminal type description in
+.I termcap
+format if one in
+.I \%term\%info
+format is not available.
+Setting this variable directs
+.I \%ncurses
+to ignore the usual
+.I termcap
+database location,
+.IR \%/etc/termcap ;
+see
+.I \%TERMPATH
+below.
+.I \%TERMCAP
+should contain either a terminal description
+(with newlines stripped out),
+or a file name indicating where the information required by the
+.I TERM
+environment variable is stored.
 .SS "\fITERMINFO\fP"
-\fI\%ncurses\fP can be configured to read from multiple terminal
-databases.
-The \fI\%TERMINFO\fP variable overrides the location for
-the default terminal database.
-Terminal descriptions (in terminal format) are stored in terminal databases:
+.I \%ncurses
+can be configured to read terminal type description databases in various
+locations using different formats.
+This variable overrides the default location.
 .bP
-Normally these are stored in a directory tree,
-using subdirectories named by the first letter of the terminal names therein.
-.IP
-This is the scheme used in System V, which legacy Unix systems use,
-and the \fI\%TERMINFO\fP variable is used by \fIcurses\fP applications
-on those
-systems to override the default location of the terminal database.
-.IP \(bu 4
-If \fI\%ncurses\fP is built to use hashed databases,
-then each entry in this list may be the path of a hashed database file, e.g.,
-.RS 4
-.PP
-.RS 4
-.EX
-/usr/share/terminfo.db
-.EE
-.RE
-.PP
+Descriptions in
+.I \%term\%info
+format are normally stored in a directory tree using subdirectories
+named by the common first letters of the terminal types named therein.
+This is the scheme used in System\ V.
+.bP
+If
+.I \%ncurses
+is configured to use hashed databases,
+then
+.I \%TERM\%INFO
+may name its location,
+such as
+.IR \%/usr/share/terminfo.db ,
 rather than
+.IR \%/usr/share/terminfo/ .
 .PP
-.RS 4
-.EX
-/usr/share/terminfo/
-.EE
-.RE
-.PP
-The hashed database uses less disk-space and is a little faster than the
+The hashed database uses less disk space and is a little faster than the
 directory tree.
 However,
 some applications assume the existence of the directory tree,
-reading it directly
-rather than using the terminfo library calls.
-.RE
+and read it directly
+rather than using the
+.I \%term\%info
+API.
 .bP
-If \fI\%ncurses\fP is built with a support for reading termcap files
-directly, then an entry in this list may be the path of a termcap file.
-.IP \(bu 4
-If the \fI\%TERMINFO\fP variable begins with
-\*(``hex:\*('' or \*(``b64:\*('',
-\fI\%ncurses\fP uses the remainder of that variable as a compiled
-terminal description.
-You might produce the base64 format using \fBinfocmp\fP(1M):
-.RS 4
-.PP
+If
+.I \%ncurses
+is configured with
+.I termcap
+support,
+this variable may contain the location of a
+.I \%termcap
+file.
+.bP
+If the value of
+.I \%TERM\%INFO
+begins with \*(``hex:\*('' or \*(``b64:\*('',
+.I \%ncurses
+uses the remainder of the value as a compiled
+.I \%term\%info
+description.
+You might produce the base64 format using \fB\%infocmp\fP(1M).
 .RS 4
+.IP
 .EX
-TERMINFO="$(infocmp \-0 \-Q2 \-q)"
+TERMINFO=$(infocmp \-0 \-Q2 \-q)
 export TERMINFO
 .EE
 .RE
+.IP
+The compiled description is used only if it corresponds to the terminal
+type identified by
+.IR TERM .
 .PP
-The compiled description is used if it corresponds to the terminal identified
-by the \fITERM\fP variable.
-.RE
-.PP
-Setting \fI\%TERMINFO\fP is the simplest,
-but not the only way to set location of the default terminal database.
-The complete list of database locations in order follows:
-.RS 3
+Setting
+.I \%TERM\%INFO
+is the simplest,
+but not the only,
+way to direct
+.I \%ncurses
+to a terminal database.
+The search path is as follows.
 .bP
-the last terminal database to which \fI\%ncurses\fP wrote,
-if any, is searched first
+the last terminal database to which the running
+.I \%ncurses
+application wrote,
+if any
 .bP
-the location specified by the \fI\%TERMINFO\fP environment variable
+the location specified by the
+.I \%TERM\%INFO
+environment variable
 .bP
-$HOME/.terminfo
+.I $HOME/.terminfo
 .bP
-locations listed in the \fI\%TERMINFO_DIRS\fP environment variable
+locations listed in the
+.I \%TERMINFO_DIRS
+environment variable
+.ds td \" empty
+.if !'@TERMINFO_DIRS@'no default value' .as td @TERMINFO_DIRS@
+.if !'@TERMINFO@\*(td'' \{\
 .bP
-one or more locations whose names are configured and compiled into the
-\fI\%ncurses\fP library, i.e.,
+location(s) configured and compiled into
+.I \%ncurses
 .RS 3
+.if !'\*(td'' \{\
 .bP
-@TERMINFO_DIRS@ (corresponding to the \fI\%TERMINFO_DIRS\fP variable)
+.I \%@TERMINFO_DIRS@
+.\}
+.if !'@TERMINFO'' .if !'\*(td'@TERMINFO@' \{\
 .bP
-@TERMINFO@ (corresponding to the \fITERMINFO\fP variable)
-.RE
+.I \%@TERMINFO@
+.\}
+.\}
 .RE
 .SS "\fITERMINFO_DIRS\fP"
-Specifies a list of locations to search for terminal descriptions.
-Each location in the list is a terminal database as described in
-the section on the \fI\%TERMINFO\fP variable.
-The list is separated by colons (i.e., ":") on Unix, semicolons on OS/2 EMX.
-.PP
-There is no corresponding feature in System V terminfo;
-it is an extension developed for \fI\%ncurses\fP.
+This variable specifies a list of locations,
+akin to
+.IR PATH ,
+in which
+.I \%ncurses
+searches for the terminal type descriptions described by
+.I \%TERMINFO
+above.
+The list items are separated by colons on Unix
+and semicolons on OS/2 EMX.
+System\ V
+.I \%term\%info
+lacks a corresponding feature;
+.I \%TERMINFO_DIRS
+is an
+.I \%ncurses
+extension.
 .SS "\fITERMPATH\fP"
-If \fI\%TERMCAP\fP does not hold a file name then \fI\%ncurses\fP checks
-the \fI\%TERMPATH\fP environment variable.
-This is a list of filenames separated by spaces or colons (i.e., ":") on Unix,
-semicolons on OS/2 EMX.
-.PP
-If the \fI\%TERMPATH\fP environment variable is not set,
-\fI\%ncurses\fP looks in the files
-.PP
-.RS 4
-.EX
-/etc/termcap, /usr/share/misc/termcap and $HOME/.termcap,
-.EE
-.RE
+If
+.I \%TERMCAP
+does not hold a terminal type description or file name,
+then
+.I \%ncurses
+checks the contents of
+.IR \%TERMPATH ,
+a list of locations,
+akin to
+.IR PATH ,
+in which it searches for
+.I termcap
+terminal type descriptions.
+The list items are separated by colons on Unix
+and semicolons on OS/2 EMX.
 .PP
+If both
+.I \%TERMCAP
+and
+.I \%TERMPATH
+are unset or invalid,
+.I \%ncurses
+searches for the files
+.IR \%/etc/termcap ,
+.IR \%/usr/share/misc/termcap ,
+and
+.IR \%$HOME/.termcap ,
 in that order.
-.PP
-The library may be configured to disregard the following variables when the
-current user is the superuser (root), or if the application uses setuid or
-setgid permissions:
-.PP
-.RS 4
-.EX
-$TERMINFO, $TERMINFO_DIRS, $TERMPATH, as well as $HOME.
-.EE
-.RE
 .SH "ALTERNATE CONFIGURATIONS"
 Many different
 .I \%ncurses
@@ -1420,7 +1660,7 @@ A few are of particular significance to the application developer
 employing
 .IR \%ncurses .
 .TP 5
-\-\-disable\-overwrite
+.B \-\-disable\-overwrite
 The standard include for \fI\%ncurses\fP is as noted in \fBSYNOPSIS\fP:
 .RS 5
 .PP
@@ -1446,7 +1686,7 @@ It also omits a symbolic link which would allow you to use \fB\-lcurses\fP
 to build executables.
 .RE
 .TP 5
-\-\-enable\-widec
+.B \-\-enable\-widec
 The configure script renames the library and
 (if the \fB\-\-disable\-overwrite\fP option is used)
 puts the header files in a different subdirectory.
@@ -1471,7 +1711,8 @@ you link with
 You must also enable the wide-character features in the header file
 when compiling for the wide-character library
 to use the extended (wide-character) functions.
-The symbol which enables these features has changed since XSI Curses, Issue 4:
+The symbol which enables these features has changed
+since X/Open Curses, Issue 4:
 .bP
 Originally, the wide-character feature required the symbol
 \fB_XOPEN_SOURCE_EXTENDED\fP
@@ -1500,7 +1741,7 @@ to allow applications to be built using either library
 from the same set of headers.
 .RE
 .TP 5
-\-\-with\-pthread
+.B \-\-with\-pthread
 The configure script renames the library.
 All of the library names have a \*(``t\*('' appended to them
 (before any \*(``w\*('' added by \fB\-\-enable\-widec\fP).
@@ -1510,20 +1751,20 @@ allow read-only access.
 At the same time, setter-functions are provided to set these values.
 Some applications (very few) may require changes to work with this convention.
 .TP 5
-\-\-with\-shared
-.TP
-\-\-with\-normal
-.TP
-\-\-with\-debug
-.TP
-\-\-with\-profile
+.B \-\-with\-shared
+.tQ
+.B \-\-with\-normal
+.tQ
+.B \-\-with\-debug
+.tQ
+.B \-\-with\-profile
 The shared and normal (static) library names differ by their suffixes,
 e.g., \fBlibncurses.so\fP and \fBlibncurses.a\fP.
 The debug and profiling libraries add a \*(``_g\*(''
 and a \*(``_p\*('' to the root names respectively,
 e.g., \fBlibncurses_g.a\fP and \fBlibncurses_p.a\fP.
 .TP 5
-\-\-with\-termlib
+.B \-\-with\-termlib
 Low-level functions which do not depend upon whether the library
 supports wide-characters, are provided in the tinfo library.
 .IP
@@ -1550,7 +1791,7 @@ database
 \fB\%curs_util\fP(3X) \- miscellaneous \fIcurses\fP utility routines
 .RE
 .TP 5
-\-\-with\-trace
+.B \-\-with\-trace
 The \fBtrace\fP function normally resides in the debug library,
 but it is sometimes useful to configure this in the shared library.
 Configure scripts should check for the function's existence rather
@@ -1584,15 +1825,15 @@ If the standard output file descriptor of an
 .I \%ncurses
 program is redirected to something that is not a terminal device,
 the library writes screen updates to the standard error file descriptor.
-This was an undocumented feature of SVr3.
+This was an undocumented feature of SVr3
+.IR curses .
 .PP
-See subsection \*(``Header files\*('' below regarding symbols exposed by
+See subsection \*(``Header Files\*('' below regarding symbols exposed by
 inclusion of \fI\%curses.h\fP.
 .SH EXTENSIONS
 .I \%ncurses
 enables an application to capture mouse events on certain terminals,
-including
-.IR \%xterm ;
+including \fI\%xterm\fP(1);
 see \fB\%curs_mouse\fP(3X).
 .PP
 .I \%ncurses
@@ -1609,10 +1850,11 @@ see \fB\%has_key\fP(3X).
 .I \%ncurses
 extends the fixed set of function key capabilities specified by X/Open
 Curses by allowing the application programmer to define additional key
-sequences at runtime;
+events at runtime;
 see
 \fB\%define_key\fP(3X),
 \fB\%key_defined\fP(3X),
+\fB\%keybound\fP(3X),
 and
 \fB\%keyok\fP(3X).
 .PP
@@ -1629,9 +1871,9 @@ See \fB\%default_colors\fP(3X).
 .PP
 An
 .I \%ncurses
-application can choose to hide the internal details of
+application can eschew knowledge of
 .I \%WINDOW
-structures,
+structure internals,
 instead using accessor functions such as
 \fB\%is_scrollok\fP(3X).
 .PP
@@ -1647,10 +1889,13 @@ and \fB\%extended_slk_color\fP(3X) as a form of \fB\%slk_color\fP(3X)
 that can gather color information from them when many colors are
 supported.
 .PP
-Some extensions are only available if
+Some extensions are available only if
+.I \%ncurses
+permits modification of \fB\%unctrl\fP(3X)'s behavior;
+see \fB\%use_legacy_coding\fP(3X).
 .I \%ncurses
 is compiled to support them;
-see section \*(``ALTERNATE CONFIGURATIONS\*('' above.
+section \*(``ALTERNATE CONFIGURATIONS\*('' describes how.
 .bP
 Rudimentary support for multi-threaded applications may be available;
 see \fBcurs_threads\fP(3X).
@@ -1658,6 +1903,15 @@ see \fBcurs_threads\fP(3X).
 Functions that ease the management of multiple screens can be exposed;
 see \fBcurs_sp_funcs\fP(3X).
 .bP
+To aid applications to debug their memory usage,
+.I ncurses
+optionally offers functions to more aggressively free memory it
+dynamically allocates itself;
+see \fBcurs_memleaks\fP(3X).
+.bP
+The library facilitates auditing and troubleshooting of its behavior;
+see \fBcurs_trace\fP(3X).
+.bP
 The compiler option
 .B \%\-DUSE_GETCAP
 causes the library to fall back to reading
@@ -1688,8 +1942,8 @@ The latter includes several additional features,
 such as wide-character and color support.
 .I \%ncurses
 intends base-level conformance with X/Open Curses,
-and supports nearly all its enhanced features.
-.\" XXX: What's missing?  GBR counts untic(1), and that's all.
+and supports all features of its enhanced level
+except the \fB\%untic\fP utility.
 .PP
 Differences between X/Open Curses and
 .I \%ncurses
@@ -1699,125 +1953,308 @@ pages.
 In many cases, X/Open Curses is vague about error conditions,
 omitting some of the SVr4 documentation.
 .PP
-Unlike other implementations, this one checks parameters such as pointers
-to \fI\%WINDOW\fP structures to ensure they are not null.
-The main reason for providing this behavior is to guard against programmer
-error.
+Unlike other implementations,
+.I \%ncurses
+checks pointer parameters,
+such as those to
+.I \%WINDOW
+structures,
+to ensure that they are not null.
+This is done primarily to guard against programmer error.
 The standard interface does not provide a way for the library
-to tell an application which of several possible errors were detected.
-Relying on this (or some other) extension will adversely affect the
-portability of curses applications.
+to tell an application which of several possible errors occurred.
+Relying on this
+(or some other)
+extension adversely affects the portability of
+.I curses
+applications.
 .SS "Padding Differences"
-In historic curses versions, delays embedded in the capabilities \fBcr\fP,
-\fBind\fP, \fBcub1\fP, \fBff\fP and \fBtab\fP activated corresponding delay
-bits in the Unix tty driver.
-In this implementation, all padding is done by sending NUL bytes.
-This method is slightly more expensive, but narrows the interface
-to the Unix kernel significantly and increases the package's portability
-correspondingly.
+In historical
+.I curses
+implementations,
+delays embedded in the
+.I \%term\%info
+capabilities
+.B \%carriage_return
+.RB ( cr ),
+.B \%scroll_forward
+.RB ( ind ),
+.B \%cursor_left
+.RB ( cub1 ),
+.B \%form_feed
+.RB ( ff ),
+and
+.B \%tab
+.RB ( ht )
+activated corresponding delay bits in the Unix terminal driver.
+.I \%ncurses
+performs all padding by sending NUL bytes to the device.
+This method is slightly more expensive,
+but narrows the interface to the Unix kernel significantly and
+correspondingly increases the package's portability.
 .SS "Header Files"
-The header file \fI\%curses.h\fP itself includes the header files
-\fI\%stdio.h\fP and \fI\%unctrl.h\fP.
+The header file
+.I \%curses.h
+itself includes the header files
+.I \%stdio.h
+and
+.IR \%unctrl.h .
 .PP
 X/Open Curses has more to say,
-but does not finish the story:
 .RS 4
 .PP
-The inclusion of <curses.h> may make visible all symbols
-from the headers <stdio.h>, <term.h>, <termios.h>, and <wchar.h>.
+The inclusion of
+.I \%curses.h
+may make visible all symbols from the headers
+.IR \%stdio.h ,
+.IR \%term.h ,
+.IR \%termios.h ,
+and
+.IR \%wchar.h .
 .RE
 .PP
-Here is a more complete story:
+but does not finish the story.
+A more complete account follows.
 .bP
-Starting with BSD curses, all implementations have included <stdio.h>.
+Starting with 4BSD
+.I curses
+(1980)
+all implementations have provided a
+.I \%curses.h
+file.
 .IP
-BSD curses included <curses.h> and <unctrl.h> from an internal header
-file
-.I \%curses.ext
-(\*(``ext\*('' abbreviated \*(``externs\*('').
+BSD
+.I curses
+code included
+.I \%curses.h
+and
+.I \%unctrl.h
+from an internal header file
+.IR \%curses.ext ,
+where
+\*(``ext\*('' abbreviated \*(``externs\*(''.
 .IP
-BSD curses used <stdio.h> internally (for \fBprintw\fP and \fBscanw\fP),
-but nothing in <curses.h> itself relied upon <stdio.h>.
+The implementations of
+.I \%printw
+and
+.I \%scanw
+used undocumented internal functions of the standard I/O library
+.RI ( _doprnt
+and
+.IR _doscan ),
+but nothing in
+.I \%curses.h
+itself relied upon
+.IR \%stdio.h .
 .bP
-SVr2 curses added \fBnewterm\fP(3X), which relies upon <stdio.h>.
-That is, the function prototype uses \fBFILE\fP.
+SVr2
+.I curses
+added
+.IR \%newterm ,
+which relies upon
+.I \%stdio.h
+because its function prototype employs the
+.I FILE
+type.
 .IP
-SVr4 curses added \fBputwin\fP and \fBgetwin\fP, which also use <stdio.h>.
+SVr4
+.I curses
+added
+.I \%putwin
+and
+.IR \%getwin ,
+which also use
+.IR \%stdio.h .
 .IP
-X/Open Curses documents all three of these functions.
+X/Open Curses specifies all three of these functions.
 .IP
-SVr4 curses and X/Open Curses do not require the developer to
-include <stdio.h> before including <curses.h>.
-Both document curses showing <curses.h> as the only required header.
+SVr4
+.I curses
+and X/Open Curses do not require the developer to include
+.I \%stdio.h
+before
+.IR \%curses.h .
+Both document use of
+.I curses
+as requiring only
+.IR \%curses.h .
 .IP
-As a result, standard <curses.h> will always include <stdio.h>.
+As a result,
+standard
+.I \%curses.h
+always includes
+.IR \%stdio.h .
 .bP
-X/Open Curses is inconsistent with respect to SVr4 regarding <unctrl.h>.
+X/Open Curses and SVr4
+.I curses
+are inconsistent with respect to
+.IR \%unctrl.h .
 .IP
 As noted in \fBcurs_util\fP(3X),
-\fI\%ncurses\fP includes <unctrl.h> from <curses.h>
-(like SVr4).
+.I \%ncurses
+includes
+.I \%unctrl.h
+from
+.I \%curses.h
+(as SVr4 does).
 .bP
-X/Open's comments about <term.h> and <termios.h> may refer to HP-UX and AIX:
+X/Open Curses's comments about
+.I \%term.h
+and
+.I \%termios.h
+may refer to HP-UX and AIX.
 .IP
-HP-UX curses includes <term.h> from <curses.h>
-to declare \fBsetupterm\fP in curses.h,
-but \fI\%ncurses\fP (and Solaris curses) do not.
+HP-UX
+.I curses
+includes
+.I \%term.h
+from
+.I \%curses.h
+to declare
+.I \%setupterm
+in
+.IR \%curses.h ,
+but
+.I \%ncurses
+and Solaris
+.I curses
+do not.
 .IP
-AIX curses includes <term.h> and <termios.h>.
-Again, \fI\%ncurses\fP (and Solaris curses) do not.
+AIX
+.I curses
+includes
+.I \%term.h
+and
+.IR \% termios.h .
+Again,
+.I \%ncurses
+and Solaris
+.I curses
+do not.
 .bP
-X/Open says that <curses.h> \fImay\fP include <term.h>,
-but there is no requirement that it do that.
+X/Open Curses says that
+.I \%curses.h
+.B may
+include
+.IR \%term.h ,
+but does not require it to do so.
 .IP
-Some programs use functions declared in both <curses.h> and <term.h>,
-and must include both headers in the same module.
-Very old versions of AIX curses required including <curses.h>
-before including <term.h>.
+Some programs use functions declared in both
+.I \%curses.h
+and
+.IR \%term.h ,
+and must include both header files in the same module.
+Very old versions of AIX
+.I curses
+required inclusion of
+.I \%curses.h
+before
+.IR \%term.h .
 .IP
-Because \fI\%ncurses\fP header files include the headers needed to
-define datatypes used in the headers,
-\fI\%ncurses\fP header files can be included in any order.
-But for portability, you should include <curses.h> before <term.h>.
+The header files supplied by
+.I \%ncurses
+include the standard library headers required for its declarations,
+so
+.IR \%ncurses 's
+own header files can be included in any order.
+But for portability,
+you should include
+.I \%curses.h
+before
+.IR \%term.h .
 .bP
-X/Open Curses says \fI"may make visible"\fP
-because including a header file does not necessarily make all symbols
-in it visible (there are ifdef's to consider).
+X/Open Curses says \*(``may make visible\*('' because including a header
+file does not necessarily make visible all of the symbols in it
+(consider
+.B \%#ifdef
+and similar).
 .IP
-For instance, in \fI\%ncurses\fP <wchar.h> \fImay\fP be included if
-the proper symbol is defined, and if \fI\%ncurses\fP is configured for
-wide-character support.
-If the header is included, its symbols may be made visible.
-That depends on the value used for \fB_XOPEN_SOURCE\fP
+For instance,
+.IR \%ncurses 's
+.I \%curses.h
+.B may \" bold to contrast with preceding italic
+include
+.I \%wchar.h
+if the proper symbol is defined,
+and if
+.I \%ncurses
+is configured for wide-character support.
+If
+.I \%wchar.h
+is included,
+its symbols
+.B may \" bold for consistency in this paragraph
+be made visible depending on the value of the
+.B _XOPEN_SOURCE
 feature test macro.
 .bP
-X/Open Curses documents one required header,
-in a special case: <stdarg.h> before <curses.h> to prototype
-the \fBvw_printw\fP and \fBvw_scanw\fP functions
+X/Open Curses mandates an application's inclusion of one standard C
+library header in a special case:
+.I \%stdarg.h
+before
+.I \%curses.h
+to prototype the functions
+.I \%vw_printw
+and
+.I \%vw_scanw
 (as well as the obsolete
-the \fBvwprintw\fP and \fBvwscanw\fP functions).
-Each of those uses a \fBva_list\fP parameter.
+.I \%vwprintw
+and
+.IR \%vwscanw ).
+Each of these takes a variadic argument list,
+a
+.I \%va_list
+parameter,
+like that of \fI\%printf\fP(3).
 .IP
-The two obsolete functions were introduced in SVr3.
-The other functions were introduced in X/Open Curses.
-In between, SVr4 curses provided for the possibility that
-an application might include either <varargs.h> or <stdarg.h>.
-Initially, that was done by using \fBvoid*\fP for the \fBva_list\fP
+SVr3
+.I curses
+introduced
+the two obsolete functions,
+and X/Open Curses the others.
+In between,
+SVr4
+.I curses
+provided for the possibility that an application might include either
+.I \%varargs.h
+or
+.IR \%stdarg.h .
+These represented contrasting approaches to handling variadic
+argument lists.
+The older interface,
+.IR \%varargs.h ,
+used a pointer to
+.I char \" V7, 32V, System III, 3BSD
+for variadic functions'
+.I \%va_list
 parameter.
-Later, a special type (defined in <stdio.h>) was introduced,
-to allow for compiler type-checking.
-That special type is always available,
-because <stdio.h> is always included by <curses.h>.
+Later,
+the list acquired its own standard data type,
+.IR \%va_list ,
+defined in
+.IR \%stdarg.h ,
+empowering the compiler to check the types of a function call's actual
+parameters against the formal ones declared in its prototype.
 .IP
-None of the X/Open Curses implementations require an application
-to include <stdarg.h> before <curses.h> because they either
-have allowed for a special type,
-or
-(like \fI\%ncurses\fP)
-include <stdarg.h> directly to provide a portable interface.
+No conforming implementations of X/Open Curses require an application
+to include
+.I \%stdarg.h
+before
+.I \%curses.h
+because they either have allowed for a special type,
+or,
+like
+.IR \%ncurses ,
+they include
+.I \%stdarg.h
+themselves to provide a portable interface.
 .SH AUTHORS
-Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.
-Based on \fIpcurses\fP by Pavel Curtis.
+Zeyd M. Ben-Halim,
+Eric S. Raymond,
+Thomas E. Dickey.
+Based on
+.I \%pcurses
+by Pavel Curtis.
 .SH SEE ALSO
 \fB\%curs_variables\fP(3X),
 \fB\%terminfo\fP(5),