The following environment symbols are useful for customizing the
runtime behavior of the ncurses
library. The most important ones
have been already discussed in detail.
CC command-character
When set, change occurrences of the command_character (i.e., the
cmdch
capability) of the loaded terminfo entries to the value of
this variable. Very few terminfo entries provide this feature.
Because this name is also used in development environments to
represent the C compiler's name, ncurses
ignores it if it does
not happen to be a single character.
BAUDRATE
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 baudrate. If no value is found,
ncurses
uses 9600. This allows testers to construct repeatable
test-cases that take into account costs that depend on baudrate.
COLUMNS
Specify 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
COLUMNS
value nor the terminal's screen size is available,
ncurses
uses the size which may be specified in the terminfo
database (i.e., the cols
capability).
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 COLUMNS
and/or LINES
overrides
the library's use of the screen size obtained from the operating
system.
Either COLUMNS
or LINES
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, lines
and cols
should not be
specified in a terminal description for terminals which are run
as emulations.
Use the use_env
function to disable all use of external
environment (but not including system calls) to determine the
screen size. Use the use_tioctl
function to update COLUMNS
or
LINES
to match the screen size obtained from system calls or the
terminal database.
ESCDELAY
Specifies the total time, in milliseconds, for which ncurses 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.
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.
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.
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 ESCDELAY in
either form, but setting the environment variable rather than the
global variable does not create problems when compiling an
application.
HOME
Tells ncurses
where your home directory is. That is where it may
read and write auxiliary terminal descriptions:
$HOME/.termcap
$HOME/.terminfo
LINES
Like COLUMNS, specify the height of the screen in characters.
See COLUMNS for a detailed description.
MOUSE_BUTTONS_123
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:
1 = left
2 = right
3 = middle.
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, ncurses
uses 132.
NCURSES_ASSUMED_COLORS
Override the compiled-in assumption that the terminal's default
colors are white-on-black (see default_colors
(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 ncurses 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 max_colors
value is
allowed.
NCURSES_CONSOLE2
This applies only to the MinGW port of ncurses.
The Console2
program's handling of the Microsoft Console API call
CreateConsoleScreenBuffer
is defective. Applications which use
this 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 NCGDB
has the same effect.
NCURSES_GPM_TERMS
This applies only to ncurses configured to use the GPM interface.
If present, the environment variable is a list of one or more
terminal names against which the TERM
environment variable is
matched. Setting it to an empty value disables the GPM
interface; using the built-in support for xterm, etc.
If the environment variable is absent, ncurses will attempt to
open GPM if TERM
contains 'linux'.
NCURSES_NO_HARD_TABS
Ncurses
may use tabs as part of the cursor movement optimization.
In some cases, your terminal driver may not handle these
properly. Set this environment variable to disable the feature.
You can also adjust your stty
settings to avoid the problem.
NCURSES_NO_MAGIC_COOKIE
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.
NCURSES_NO_PADDING
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. 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.
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.
Set the NCURSES_NO_PADDING environment variable to disable all
but mandatory padding. Mandatory padding is used as a part of
special control sequences such as flash.
NCURSES_NO_SETBUF
This setting is obsolete. Before changes
• started with 5.9 patch 20120825 and
• continued though 5.9 patch 20130126
ncurses
enabled buffered output during terminal initialization.
This was done (as in SVr4 curses) for performance reasons. For
testing purposes, both of ncurses
and certain applications, this
feature was made optional. Setting the NCURSES_NO_SETBUF
variable disabled output buffering, leaving the output in the
original (usually line buffered) mode.
In the current implementation, ncurses performs its own buffering
and does not require this workaround. It does not modify the
buffering of the standard output.
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 stdio calls with
ncurses calls and (usually) work. This is no longer possible
since ncurses 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 putp
still use the standard output. But
high-level curses calls do not.
NCURSES_NO_UTF8_ACS
During initialization, the ncurses
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.
Ncurses checks the TERM
environment variable for these. For
other special cases, you should set this environment variable.
Doing this tells ncurses 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.
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'.
As an alternative to the environment variable, ncurses checks for
an extended terminfo capability U8
. This is a numeric capability
which can be compiled using @TIC@ -x
. For example
# linux console, if patched to provide working
# VT100 shift-in/shift-out, with corresponding font.
linux-vt100|linux console with VT100 line-graphics,
U8#0, use=linux,
# uxterm with vt100Graphics resource set to false
xterm-utf8|xterm relying on UTF-8 line-graphics,
U8#1, use=xterm,
The name 'U8' is chosen to be two characters, to permit it to be
used by applications that use ncurses' termcap interface.
NCURSES_TRACE
During initialization, the ncurses
debugging library checks the
NCURSES_TRACE environment variable. If it is defined, to a
numeric value, ncurses
calls the trace
function, using that value
as the argument.
The argument values, which are defined in curses.h
, provide
several types of information. When running with traces enabled,
your application will write the file trace
to the current
directory.
See curs_trace
(3X) for more information.
TERM
Denotes your terminal type. Each terminal type is distinct,
though many are similar.
TERM
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.
If you set TERM
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 (xterm
being a rare exception), terminal emulators which
allow you to specify TERM
as a parameter or configuration value
do not change their behavior to match that setting.
TERMCAP
If the ncurses
library has been configured with termcap support,
ncurses
will check for a terminal's description in termcap form
if it is not available in the terminfo database.
The TERMCAP
environment variable contains either a terminal
description (with newlines stripped out), or a file name telling
where the information denoted by the TERM
environment variable
exists. In either case, setting it directs ncurses
to ignore the
usual place for this information, e.g., /etc/termcap.
TERMINFO
ncurses
can be configured to read from multiple terminal
databases. The TERMINFO
variable overrides the location for the
default terminal database. Terminal descriptions (in terminal
format) are stored in terminal databases:
• Normally these are stored in a directory tree, using
subdirectories named by the first letter of the terminal
names therein.
This is the scheme used in System V, which legacy Unix
systems use, and the TERMINFO
variable is used by curses
applications on those systems to override the default
location of the terminal database.
• If ncurses
is built to use hashed databases, then each entry
in this list may be the path of a hashed database file, e.g.,
/usr/share/terminfo.db
rather than
/usr/share/terminfo/
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.
• If ncurses
is built with a support for reading termcap files
directly, then an entry in this list may be the path of a
termcap file.
• If the TERMINFO
variable begins with 'hex:' or 'b64:',
ncurses
uses the remainder of that variable as a compiled
terminal description. You might produce the base64 format
using infocmp
(1M):
TERMINFO="$(infocmp -0 -Q2 -q)"
export TERMINFO
The compiled description is used if it corresponds to the
terminal identified by the TERM
variable.
Setting TERMINFO
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:
• the last terminal database to which ncurses
wrote, if any,
is searched first
• the location specified by the TERMINFO environment
variable
• $HOME/.terminfo
• locations listed in the TERMINFO_DIRS environment variable
• one or more locations whose names are configured and
compiled into the ncurses library, i.e.,
• @TERMINFO_DIRS@ (corresponding to the TERMINFO_DIRS
variable)
• @TERMINFO@ (corresponding to the TERMINFO variable)
TERMINFO_DIRS
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 TERMINFO
variable. The list
is separated by colons (i.e., ":") on Unix, semicolons on OS/2
EMX.
There is no corresponding feature in System V terminfo; it is an
extension developed for ncurses
.
TERMPATH
If TERMCAP
does not hold a file name then ncurses
checks the
TERMPATH
environment variable. This is a list of filenames
separated by spaces or colons (i.e., ":") on Unix, semicolons on
OS/2 EMX.
If the TERMPATH
environment variable is not set, ncurses
looks in
the files
/etc/termcap, /usr/share/misc/termcap and $HOME/.termcap,
in that order.
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:
$TERMINFO, $TERMINFO_DIRS, $TERMPATH, as well as $HOME.