The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, and more. It uses terminfo format, supports pads and color and multiple highlights and forms characters and function-key mapping, and has all the other SYSV-curses enhancements over BSD curses.
In mid-June 1995, the maintainer of 4.4BSD curses declared that he considered 4.4BSD curses obsolete, and is encouraging the keepers of Unix releases such as BSD/OS, freeBSD and netBSD to switch over to ncurses.
The ncurses code was developed under GNU/Linux. It should port easily to any ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp!
The distribution includes the library and support utilities, including a terminfo compiler tic(1), a decompiler infocmp(1), clear(1), tput(1), tset(1), and a termcap conversion tool captoinfo(1). Full manual pages are provided for the library and tools.
The ncurses distribution is available via anonymous FTP at the
GNU distribution site ftp://ftp.gnu.org/pub/gnu/ncurses.
It is also available at ftp://invisible-island.net/ncurses.
This release is designed to be upward compatible from ncurses 5.0 and 5.1; very few applications will require recompilation, depending on the platform. These are the highlights from the change-log since ncurses 5.1 release.
Interface changes:
ospeed variable back to
short to match its use in legacy applications. It was
altered after ncurses 4.2 to speed_t to repair a
type mismatch which was introduced after 1.9.4 in 1995. The
principal users of termcap continued to use
short, which is not the same size.
NOTE: A few applications will have to be
recompiled (about 1% of the programs in a typical Linux
distribution, 10% of the programs that use ncurses). These
are easy to identify with nm or
strings.
_nc_can_clear_with(), which was built with the
configure --enable-expanded option but not used.chtype values in the debug library, and
for better access and buffer limit checking.New features and improvements:
tgoto() to make it better support
existing termcap applications which use hardcoded strings
rather than obtain all of their information from the termcap
file. If the string does not appear to be a terminfo string
(i.e., does not refer to a "%p" parameter, or terminfo-style
padding), and termcap support is configured,
tgoto() will interpret it as termcap. Otherwise,
as before, it will use tparm().tgoto() changes work
properly, added checks to tic which report
capabilities that do not reference the expected number of
parameters.--disable-root-environ adds runtime
checks which tell ncurses to disregard $TERMINFO and
similar environment variables if the current user is root,
or running setuid/setgid.--disable-assumed-color allows you
to use the pre-5.1 convention of default colors used for
color-pair 0 to be configured (see
assume_default_colors()).--program-prefix, including the manpage names
and cross references.--with-database allows you to
specify a different terminfo source-file to install. On
OS/2 EMX, the default is misc/emx.src, otherwise
misc/terminfo.src--with-default-terminfo-dir allows
you to specify the default terminfo database
directory.--with-libtool allows you to build
with libtool.
NOTE: libtool uses a different
notation for numbering shared library versions from the
existing ncurses configuration.
--with-manpage-tbl causes the
manpages to be preprocessed by tbl(1) prior to
installation,--without-curses-h causes the
installation process to install curses.h as ncurses.h and
make appropriate changes to headers and manpages.--install-prefix
configure option from INSTALL_PREFIX to
DESTDIR (the latter has become common usage
although the name is misleading).ld -rpath options (e.g., Linux, and
Solaris) to use an absolute pathname for the build tree's
lib directory, avoiding confusion with directories relative
to the current one with the installed programs.misc/run_tic.in to use
tic -o, to eliminate dependency on
$TERMINFO variable for installs.screen's
terminfo entry since otherwise the FreeBSD port makes it
pass termcap equivalents to tgoto, which would
be misinterpreted by older versions of ncurses.curses_version()
string to report the version of ncurses with which they are
compiled rather than the NCURSES_VERSION string. The
function returns the patch level in addition to the major
and minor version numbers.tput program so it can be renamed
or invoked via a link as 'reset' or 'init', producing the
same effect as tput reset or
tput init.no_color_video with a logic expression which
is faster.Major bug fixes:
manlinks.sed script introduced in
ncurses 5.1 to avoid using ERE "\+", which is not understood by
standard versions of sed. This happens to work
with GNU sed, but is not portable, and was the
initial motivation for this release.tparm() to disallow arithmetic on
strings, analyze the varargs list to read strings as
strings and numbers as numbers.tparm()'s internal function
spop() to treat a null pointer as an empty
string.parse_format() in lib_tparm.c to
ignore precision if it is longer than 10000._nc_safe_strcat(), etc. Made other related
changes to check lengths used for strcat() and
strcpy().non_dest_scroll_region
in tty_update.c to clear text after it is shifted in rather
than before shifting out. Also correct row
computation.rs2 capability in xterm-r6 and
similar entries where cursor save/restore bracketed the
sequence for resetting video attributes. The cursor restore
would undo that._nc_utf8_outch() to avoid
sign-extension when checking for out-of-range value.$HOME
environment variable, to avoid retrieving terminfo
descriptions from ./.terminfo ._nc_parse_entry() and
postprocess_termcap() to avoid using
strtok(), because it is non-reentrant.fds[] array to 0's in
_nc_timed_wait(); apparently
poll() only sets the revents
members of that array when there is activity corresponding
to the related file.Make_Enum_Type().-fno-builtin
option.fgets() in comp_scan.c
next_char() function, in case tic
is run on a non-text file (fixes a core dump).tic to verify that its inputs are
really files, in case someone tries to read a directory (or
/dev/zero).open_tempfile() in tic.c which made "tic -I"
give an ambiguous error message about
tmpnam.adjust_cancels(), which
did not check both alternatives when reclassifying an
extended name between boolean, number and string, causing
an infinite loop in tic.tic for parameter counts
in capability strings, found/fixed several errors both in the
terminfo database and in the include/Caps file.
--srcdir and
--with-install-prefix.Portability:
$GCC and $GXX consistently
compare against 'yes' rather than test if they are nonnull,
since either may be set to the corresponding name of the C
or C++ compiler.configure --target will set a default
program-prefix.tcgetattr() to
allow for old implementations, e.g., on BeOS, which only
defined it as a macro.test in configure script to use quotes, for
instance fixing a problem in the
--disable-database option._nc_tracebits()
for CSIZE with a table to simplify working around
implementations that define random combinations of the
related macros to zero._nc_basename(),
used to consolidate related code in progs, as well as
accommodating OS/2 EMX pathnames.The ncurses package is fully compatible with SVr4 (System V Release 4) curses:
The ncurses package also has many useful extensions over SVr4:
wresize() allows you to resize
windows, preserving their data.use_default_colors() allows you
to use the terminal's default colors for the default color
pair, achieving the effect of transparent colors.keyok() and
define_key() allow you to better control the use
of function keys, e.g., disabling the ncurses KEY_MOUSE, or by
defining more than one control sequence to map to a given key
code.#undef.Numerous bugs present in earlier versions have been fixed; the library is far more reliable than it used to be. Bounds checking in many `dangerous' entry points has been improved. The code is now type-safe according to gcc -Wall. The library has been checked for malloc leaks and arena corruption by the Purify memory-allocation tester.
The ncurses code has been tested with a wide variety of applications including (versions starting with those noted):
as well as some that use ncurses for the terminfo support alone:
The ncurses distribution includes a selection of test programs (including a few games).
The original developers of ncurses are Zeyd Ben-Halim and Eric S. Raymond. Ongoing work is being done by Thomas Dickey and Jürgen Pfeifer. Thomas Dickey acts as the maintainer for the Free Software Foundation, which holds the copyright on ncurses. Contact the current maintainers at bug-ncurses@gnu.org.
To join the ncurses mailing list, please write email to
bug-ncurses-request@gnu.org containing the line:
subscribe <name>@<host.domain>
This list is open to anyone interested in helping with the development and testing of this package.
Beta versions of ncurses and patches to the current release are made available at ftp://invisible-island.net/ncurses.
We need people to help with these projects. If you are interested in working on them, please join the ncurses list.
The distribution includes and uses a version of the terminfo-format terminal description file maintained by Eric Raymond. http://earthspace.net/~esr/terminfo.
You can find lots of information on terminal-related topics not covered in the terminfo file at Richard Shuford's archive.