The ncurses (new curses) library is a free software emulation of
curses in System V Release 4.0, and more. It uses terminfo format,
@@ -22,8 +23,11 @@ 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 ncurses code was developed under GNU/Linux.
+It has been in use for some time with OpenBSD as the system curses library,
+and on FreeBSD and NetBSD as an external package.
+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),
@@ -32,333 +36,304 @@ the library and tools.
-This release is designed to be upward compatible from ncurses 5.0 and 5.1;
+This release is designed to be upward compatible from ncurses 5.0 and 5.3;
very few applications will require recompilation, depending on the platform.
-These are the highlights from the change-log since ncurses 5.1 release.
+These are the highlights from the change-log since ncurses 5.3 release.
Interface changes:
-
change type of 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.
-
-
remove a private function _nc_can_clear_with(), which
- was built with the configure --enable-expanded option but not used.
-
-
add several private functions (prefixed with "_nc_") for tracing
- chtype values in the debug library, and for better
- access and buffer limit checking.
+
add the remaining functions for X/Open curses wide-character
+ support.
+
+
pecho_wchar()
+
slk_wset()
+
+ These are only available if the library is configured using the
+ --enable-widec option.
+
+
write getyx() and related 2-return macros in terms of
+ getcury(),
+ getcurx(), etc.
+
+
simplify ifdef for bool declaration in curses.h
+
+
modify ifdef's in curses.h that disabled use of
+ __attribute__() for g++, since recent versions
+ implement the cases which ncurses uses.
+
+
add key_defined() function, to tell which keycode a
+ string is bound to.
New features and improvements:
-
rewrote 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().
-
-
to ensure that the tgoto() changes work properly,
- added checks to tic which report capabilities that do
- not reference the expected number of parameters.
-
-
new configure script options:
-
-
option --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.
-
-
option --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()).
-
-
implement configure script options that transform installed
- program names, e.g., --program-prefix, including the
- manpage names and cross references.
-
-
option --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
-
-
option --with-default-terminfo-dir allows you to
- specify the default terminfo database directory.
-
-
option --with-libtool allows you to build with
- libtool.
NOTE: libtool
- uses a different notation for numbering shared library versions
- from the existing ncurses configuration.
-
-
option --with-manpage-tbl causes the manpages to be
- preprocessed by tbl(1) prior to installation,
-
-
option --without-curses-h causes the installation
- process to install curses.h as ncurses.h and make appropriate
- changes to headers and manpages.
-
-
-
modified configure script options:
-
-
change symbol used by the --install-prefix configure
- option from INSTALL_PREFIX to DESTDIR
- (the latter has become common usage although the name is
- misleading).
-
-
modify 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.
-
-
modified misc/run_tic.in to use
- tic -o, to eliminate dependency on
- $TERMINFO variable for installs.
-
-
-
terminfo database:
-
-
updated xterm terminfo entries to match XFree86 xterm patch #146.
-
-
added amiga-vnc,
- Matrix Orbital, and
- QNX qansi to misc/terminfo.src.
-
-
added os2 entry to misc/emx.src.
-
-
add S0 and E0 extensions to 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.
-
-
-
improvements to program usability:
-
-
modify programs to use 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.
-
-
modify 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.
-
-
add error checking to infocmp's -v and -m options to ensure that
- the option value is indeed a number.
-
-
-
improved performance:
-
-
replace a lookup table in lib_vidattr.c used to decode
- no_color_video with a logic expression which is faster.
-
-
+
library
+
+
implement logic in lib_mouse.c to handle position reports which
+ are generated when XFree86 xterm is initialized with private
+ modes 1002 or 1003. These are returned to the application as the
+ REPORT_MOUSE_POSITION mask, which was not implemented.
+
modify soft-key initialization to use A_REVERSE if A_STANDOUT
+ would not be shown when colors are used, i.e., if ncv#1 is set in
+ the terminfo as is done in "screen".
+
add configure option for FreeBSD sysmouse, --with-sysmouse, and
+ implement library support for that.
+
+
+
programs:
+
+
+
tack:
+
+
+
allow it to run from fallback terminfo data.
+
reset colors after each color test, correct a place
+ where exit_standout_mode was used instead of
+ exit_attribute_mode.
+
improve bce test by making it set colors other
+ than black on white.
+
+
+
tic:
+
+
+
handle a case where an entry has no
+ description, and capabilities begin on the same line as the entry
+ name.
+
allow a terminfo entry with a leading 2-character name.
+
improved warnings when suppressing items to fit in termcap's
+ 1023-byte limit.
+
add check for multiple "tc=" clauses in a termcap.
+
correct logic for resolving "use=" clauses
+ allow infocmp and tic to show cancelled capabilities.
+
check for incomplete line-drawing character mapping.
+
check for missing/empty/illegal terminfo name.
+
+
+
tput:
+
+
modify tput to use the same parameter analysis as tparm() does,
+ to provide for user-defined strings, e.g., for xterm title, a
+ corresponding capability might be
+ title=\E]2;%p1%s^G,
+
+
+
tset:
+
+
+
use the system's default values for CKILL and other default
+ control characters.
+
correct interchanged defaults for kill and interrupt
+ characters, which caused it to report unnecessarily.
+
+
+
Major bug fixes:
-
correct 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.
-
-
remove "hpux10.*" case from CF_SHARED_OPTS configure script macro.
- This differed from the "hpux*" case by using reversed symbolic
- links, which made the 5.1 version not match the configuration of
- 5.0 shared libraries.
-
-
guard against corrupt terminfo data:
-
-
modify tparm() to disallow arithmetic on strings,
- analyze the varargs list to read strings as strings and numbers as
- numbers.
-
-
modify tparm()'s internal function
- spop() to treat a null pointer as an empty string.
-
-
modify parse_format() in lib_tparm.c to ignore
- precision if it is longer than 10000.
-
-
rewrote limit checks in lib_mvcur.c using new functions
- _nc_safe_strcat(), etc. Made other related changes to
- check lengths used for strcat() and
- strcpy().
-
-
-
corrections to screen optimization:
+
prevent recursion in wgetch() via wgetnstr() if the connection
+ cannot be switched between cooked/raw modes because it is not a TTY.
+
+
correct a case in _nc_remove_string(), used by
+ define_key(), to avoid infinite loop if the given string
+ happens to be a substring of other strings which are assigned to keys.
+
+
modify logic of acsc to use the original character if no mapping is
+ defined, rather than a null.
+
+
several improvements for handling multi-cell display of wide
+ characters.
+
+
modify setcchar() to allow converting control characters to complex
+ characters.
+
correct handling of multibyte characters in waddch_literal() which
+ force wrapping because they are started too late on the line.
+
modify setcchar() to allow for wchar_t input strings that have
+ more than one spacing character.
+
+
+
other fixes for wide-character support:
-
added special case in lib_vidattr.c to reset underline and
- standout for devices that have no sgr0 defined.
-
-
change handling of 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.
-
-
modify 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.
+
rewrote lib_acs.c to allow PutAttrChar() to decide how to render
+ alternate-characters, i.e., to work with Linux console and UTF-8
+ locale.
+
implement a workaround so that line-drawing works with screen's
+ crippled UTF-8 support (tested with 3.9.13). This only works with
+ the wide-character support (--enable-widec); the normal library
+ will simply suppress line-drawing when running in a UTF-8 locale in
+ screen.
+
corrections to lib_get_wstr.c:
+
+
null-terminate buffer passed to setcchar(), which occasionally
+ failed.
+
map special characters such as erase- and kill-characters into
+ key-codes so those will work as expected even if they are not
+ mentioned in the terminfo.
+
-
UTF-8 support:
-
-
when checking LC_ALL, LC_CTYPE, and LANG environment variables
- for UTF-8 locale, ignore those which are set to an empty value, as
- per SUSV2.
-
-
encode 0xFFFD in UTF-8 with 3 bytes, not 2.
-
-
modify _nc_utf8_outch() to avoid sign-extension when
- checking for out-of-range value.
-
-
-
other library fixes:
-
-
added checks for an empty $HOME environment
- variable, to avoid retrieving terminfo descriptions from
- ./.terminfo .
-
-
change functions _nc_parse_entry() and
- postprocess_termcap() to avoid using
- strtok(), because it is non-reentrant.
-
-
initialize 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.
-
-
add a check for null pointer in Make_Enum_Type().
-
-
fix a heap problem with the c++ binding.
-
-
correct missing includes for <string.h> in several places,
- including the C++ binding. This is not noted by gcc unless we use
- the -fno-builtin option.
-
-
-
several fixes for tic:
-
-
add a check for empty buffers returned by fgets() in
- comp_scan.c next_char() function, in case
- tic is run on a non-text file (fixes a core dump).
-
-
modify tic to verify that its inputs are really files,
- in case someone tries to read a directory (or
- /dev/zero).
-
-
correct an uninitialized parameter to open_tempfile()
- in tic.c which made "tic -I" give an ambiguous error message about
- tmpnam.
-
-
correct logic in adjust_cancels(), which did not check
- both alternatives when reclassifying an extended name between
- boolean, number and string, causing an infinite loop in
- tic.
-
-
-
using new checks in tic for parameter counts in
- capability strings, found/fixed several errors both in the
- terminfo database and in the include/Caps file.
-
-
modified several terminfo capability strings, including the
- definitions for setaf, setab, in include/Caps to indicate that the
- entries are parameterized. This information is used to tell which
- strings are translated when converting to termcap. This fixes a
- problem where the generated termcap would contain a spurious "%p1"
- for the terminfo "%p1%d".
-
-
correct parameter counts in include/Caps for dclk as well as some
- printer-specific capabilities: csnm, defc, scs, scsd, smgtp, smglp.
-
-
-
various fixes for install scripts used to support configure
- --srcdir and --with-install-prefix.
-
-
correct several mismatches between manpage filename and ".TH"
- directives, renaming dft_fgbg.3x to default_colors.3x and
- menu_attribs.3x to menu_attributes.3x.
+
modify setupterm() to check if the terminfo and
+ terminal-modes have already been read. This ensures that it does not
+ reinvoke def_prog_mode() when an application calls more
+ than one function, such as tgetent() and
+ initscr().
+
+
fix form_driver() cases for REQ_CLR_EOF, REQ_CLR_EOL, REQ_DEL_CHAR,
+ REQ_DEL_PREV and REQ_NEW_LINE, which did not ensure the cursor was at
+ the editing position before making modifications.
+
+
correct keybound(), which reported definitions in the
+ wrong table, i.e., the list of definitions which are disabled by
+ keyok().
+
+
fixes related to safe_sprintf.c:
+
+
correct an allocation size in safe_sprintf.c for the "*" format
+ code.
+
correct safe_sprintf.c to not return a null pointer if the format
+ happens to be an empty string.
+
make return value from _nc_printf_string() consistent. Before,
+ depending on whether --enable-safe-sprintf was used, it might not
+ be cached for reallocating.
+
+
+
other low-level improvements to the optimization code include:
+
+
if the output is a socket or other non-tty device, use 1
+ millisecond
+ for the cost in mvcur; previously it was 9 milliseconds because the
+ baudrate was not known.
+
modify lib_getch.c to avoid recursion via wgetnstr() when the
+ input
+ is not a tty and consequently mode-changes do not work.
+
fix several places in tack/pad.c which tested and used the
+ parameter- and parameterless strings inconsistently.
+
change several tputs() calls in scrolling code to use putp(), to
+ enable padding which may be needed for some terminals.
+
improve mvcur() by checking if it is safe to move when video
+ attributes are set (msgr), and if not, reset/restore attributes
+ within that function rather than doing it separately in the GoTo()
+ function in tty_update.c.
+
use tputs() rather than putp() in a few cases in tty_update.c
+ since the corresponding delays are proportional to the number of
+ lines affected: repeat_char, clr_eos, change_scroll_region.
+
+
+
correct line/column reference in adjust_window(), needed to make
+ special windows such as curscr track properly when resizing.
+
+
fix a potential recursion between napms() and _nc_timed_wait()
+
+
rewrote lib_insch.c, combining it with lib_insstr.c so both handle
+ tab and other control characters consistently.
+
+
do not try to open gpm mouse driver if standard output is not a
+ tty; the gpm library does not make this check.
Portability:
-
configure script:
-
-
newer config.guess, config.sub, including changes to support OS/2
- EMX. The configure script for OS/2 EMX still relies on a patch
- since there is no (working) support for that platform in the main
- autoconf distribution.
-
-
make configure script checks on variables $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.
-
-
change configure script to use AC_CANONICAL_SYSTEM rather than
- AC_CANONICAL_HOST, which means that configure --target
- will set a default program-prefix.
-
-
modify the check for big-core to force a couple of memory
- accesses, which may work as needed for older/less-capable machines
- (if not, there's still the explicit configure option).
-
-
modify configure test for tcgetattr() to allow for
- old implementations, e.g., on BeOS, which only defined it as a
- macro.
-
-
add configure check for filesystems (such as OS/2 EMX) which do
- not distinguish between upper/lowercase filenames, use this to fix
- tags rules in makefiles.
-
-
add MKncurses_def.sh to generate fallback definitions for
- ncurses_cfg.h, to quiet gcc -Wundef warnings, modified ifdef's in
- code to consistently use "#if" rather than "#ifdef".
-
-
change most remaining unquoted parameters of test in
- configure script to use quotes, for instance fixing a problem in the
- --disable-database option.
-
-
modify scripts so that "make install.data" works on OS/2 EMX.
-
-
modify scripts and makefiles so the Ada95 directory builds on
- OS/2 EMX.
-
-
-
library:
-
-
replaced case-statement in _nc_tracebits() for CSIZE
- with a table to simplify working around implementations that define
- random combinations of the related macros to zero.
-
-
improved OS/2 mouse support by retrying as a 2-button mouse if code
- fails to set up a 3-button mouse.
-
-
added private entrypoint _nc_basename(), used to
- consolidate related code in progs, as well as accommodating OS/2 EMX
- pathnames.
-
-
alter definition of NCURSES_CONST to make it non-empty.
-
-
redefine 'TEXT' in menu.h for AMIGA, since it is reported to have
- an (unspecified) symbol conflict.
-
-
-
programs:
-
-
modified progs/tset.c and tack/sysdep.c to build with sgttyb
- interface if neither termio or termios is available. Tested this
- with FreeBSD 2.1.5 (which does have termios - but the sgttyb does
- work).
-
-
+
configure script:
+
+
new options:
+
+
--with-abi-version option.
+
addresses platforms where packagers have diverged from
+ ncurses ABI numbering.
+
--with-manpage-format=catonly
+
addresses
+ behavior of BSDI, allow install of man+cat files on NetBSD,
+ whose behavior has diverged by requiring both to be present.
+
--with-manpage-aliases
+
extends
+ "--with-manpage-aliases" to provide the option of generating
+ ".so" files rather than symbolic links for manpage aliases.
+
--with-rel-version
+
workaround to force
+ libtool on Darwin generate the "same" library names as with
+ the "--with-shared" option. The Darwin ld program does not
+ work well with a zero as the minor-version value.
+
--with-trace
+
simplifies defining TRACE to incorporate trace() in libraries.
+
+
+
fixes/improvements for cross-compiling:
+
+
+
allow BUILD_CC and related configure script variables to be
+ overridden from the environment.
+
use AC_CHECK_TOOL to get proper values for AR and LD for cross
+ compiling.
+
use $cross_compiling variable in configure script
+ rather than comparing $host_alias and
+ $target alias, since "host" is traditionally misused
+ in autoconf to refer to the target platform.
+
modify run_tic.in to avoid using wrong shared libraries when
+ cross-compiling.
+
+
+
fixes for Mac OS X:
+
+
fix a redefinition of $RANLIB in the configure
+ script when libtool is used.
+
modify MKlib_gen.sh to avoid passing "#" tokens through the C
+ preprocessor. This works around Mac OS X's preprocessor, which
+ insists on adding a blank on each side of the token.
+
+
+
workarounds for broken tools:
+
+
add configure check for wchar_t and wint_t types, rather than
+ rely on preprocessor definitions. Also work around for gcc
+ fixinclude bug which creates a shadow copy of
+ curses.h if it sees these symbols apparently typedef'd.
+
modify configure script to omit -Winline for gcc 3.3, since
+ that feature is broken.
+
several script fixes to work around the ironically named
+ POSIXLY_CORRECT feature of GNU sed 4.0.
+
modify configure script to avoid using "head -1", which does
+ not work if POSIXLY_CORRECT (sic) is set.
+
update configure script to reflect fix for
+ AC_PROG_GCC_TRADITIONAL, which is broken in autoconf 2.5x for Mac
+ OS X 10.2.3.
+
repair check for missing C++ compiler, which is broken in
+ autoconf 2.5x by hardcoding it to g++.
+
+
+
corrected ifdef's relating to configure check for wchar_t, etc.
+
remove configure script check to allow -Wconversion for older
+ versions of gcc
+
modify configure script to accommodate libtool 1.5, as well as
+ add an parameter to the "--with-libtool" option which can specify
+ the pathname of libtool.
+
change several sed scripts to avoid using "\+" since it is not a
+ BRE (basic regular expression). One instance caused terminfo.5 to
+ be misformatted on FreeBSD.
+
use '%' as sed substitute delimiter in run_tic script to avoid
+ problems with pathname delimiters such as ':' and '@'.
+
add -D_XOPEN_SOURCE=500 if needed when configuring with
+ "--enable-widec", to get mbstate_t declaration on HPUX
+ 11.11.
+
+
+
library:
+
+
adjust include-options in CF_ETIP_DEFINES to avoid missing
+ ncurses_dll.h, fixing special definitions that may be needed for
+ etip.h.
+
modify CF_LIB_SUFFIX for Itanium releases of HP-UX, which use a
+ ".so" suffix.
+
improve ifdef's to guard against redefinition of wchar_t and wint_t
+ in curses.h.
+
remove an #undef for KEY_EVENT from curses.tail used in the
+ experimental NCURSES_WGETCH_EVENTS feature. The #undef confuses
+ Debian dpkg's build script.
+
Features of Ncurses
@@ -474,61 +449,60 @@ including (versions starting with those noted):
-The original developers of ncurses are Zeyd Ben-Halim and
-Eric S. Raymond.
+Zeyd Ben-Halim
+started it from a previous package pcurses, written by Pavel Curtis.
+Eric S. Raymond
+continued development.
+Jürgen Pfeifer wrote most of the form and menu libraries.
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.
+Thomas Dickey.
+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.
@@ -561,7 +535,7 @@ This list is open to anyone interested in helping with the development and
testing of this package.
@@ -573,14 +547,16 @@ on them, please join the ncurses list.
Other Related Resources
-The distribution includes and uses a version of the terminfo-format
-terminal description file maintained by Eric Raymond.
-http://earthspace.net/~esr/terminfo.
+The distribution provides a newer version of the terminfo-format
+terminal description file maintained by
+Eric Raymond .
+Unlike the older version, the termcap and terminfo data are provided
+in the same file.
You can find lots of information on terminal-related topics
not covered in the terminfo file at
Richard Shuford's
-archive.
+archive .