libncurses: Import https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.5.tar.gz changes
Change-Id: I3433d30ca01359fd2e3623ede96b531f0b39cbfa
Signed-off-by: micky387 <mickaelsaibi@free.fr>
diff --git a/ANNOUNCE b/ANNOUNCE
index 858c7f2..6abf551 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -1,4 +1,4 @@
- Announcing ncurses 6.0
+ Announcing ncurses 6.5
Overview
@@ -6,8 +6,8 @@
curses in System V Release 4.0 (SVr4), 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 SVr4-curses
- enhancements over BSD curses. SVr4 curses is better known today as
- X/Open Curses.
+ enhancements over BSD curses. SVr4 curses became the basis of X/Open
+ Curses.
In mid-June 1995, the maintainer of 4.4BSD curses declared that he
considered 4.4BSD curses obsolete, and encouraged the keepers of unix
@@ -17,7 +17,7 @@
* It is used in almost every system based on the Linux kernel (aside
from some embedded applications).
* It is used as the system curses library on OpenBSD, FreeBSD and
- OSX.
+ MacOS.
* It is used in environments such as Cygwin and MinGW. The first of
these was EMX on OS/2 Warp.
* It is used (though usually not as the system curses) on all of the
@@ -26,440 +26,226 @@
* It should work readily on any ANSI/POSIX-conforming unix.
The distribution includes the library and support utilities, including
- * [1]captoinfo, a termcap conversion tool
- * [2]clear, utility for clearing the screen
- * [3]infocmp, the terminfo decompiler
- * [4]tabs, set tabs on a terminal
- * [5]tic, the terminfo compiler
- * [6]toe, list (table of) terminfo entries
- * [7]tput, utility for retrieving terminal capabilities in shell
+ * captoinfo, a termcap conversion tool
+ * clear, utility for clearing the screen
+ * infocmp, the terminfo decompiler
+ * tabs, set tabs on a terminal
+ * tic, the terminfo compiler
+ * toe, list (table of) terminfo entries
+ * tput, utility for retrieving terminal capabilities in shell
scripts
- * [8]tset, to initialize the terminal
+ * tset, to initialize the terminal
Full manual pages are provided for the library and tools.
- The ncurses distribution is available via anonymous FTP at the GNU
- distribution site
+ The ncurses distribution is available at ncurses' homepage:
- [9]ftp://ftp.gnu.org/gnu/ncurses/ .
+ https://invisible-island.net/archives/ncurses/ or
+ https://invisible-mirror.net/archives/ncurses/ .
- It is also available at
+ It is also available at the GNU distribution site
- [10]ftp://invisible-island.net/ncurses/ .
+ https://ftp.gnu.org/gnu/ncurses/ .
Release Notes
- These notes are for ncurses 6.0, released August 8, 2015.
+ These notes are for ncurses 6.5, released April 27, 2024.
This release is designed to be source-compatible with ncurses 5.0
- through 5.9; providing a new application binary interface (ABI).
- Although the source can still be configured to support the ncurses 5
- ABI, the intent of the release is to provide extensions which are
- generally useful, but binary-incompatible with ncurses 5:
- * Extend the cchar_t structure to allow more than 16 colors to be
- encoded.
- * Modify the encoding of mouse state to make room for a 5th mouse
- button. That allows one to use ncurses with a wheel mouse with
- xterm or similar X terminal emulators.
+ through 6.4; providing extensions to the application binary interface
+ (ABI). Although the source can still be configured to support the
+ ncurses 5 ABI, the reason for the release is to reflect improvements
+ to the ncurses 6 ABI and the supporting utility programs.
- There are, of course, numerous other improvements, including
- * fixes made based on the Clang and Coverity static analyzers.
- * memory leak fixes using Valgrind
+ There are, of course, numerous other improvements, listed in this
+ announcement.
- The release notes mention some bug-fixes, but are focused on new
- features and improvements to existing features log since ncurses 5.9
- release.
-
- While the intent of the release is to provide a new stable ABI, there
- are other development activities which are summarized below.
- * The original release plan, e.g., for "5.10" was to improve the
- MinGW port. Ultimately that was completed (wide-character support,
- mouse, etc), but was deferred to focus on termcap support and
- performance issues. Also, pinpointing the problems with Console2
- took a while.
- * A review of termcap compatibility in 2011 led to several minor
- fixes in the library and improvements to utilities. To do this
- properly, a review of the various extent termcap implementations
- was needed.
- The [11]termcap library checker (tctest) (not part of ncurses) was
- one result. A followup review of performance using
- [12]ncurses-examples in 2014 led to additional improvements.
- * Output buffering provided a further, but worthwhile distraction. A
- bug report in 2012 regarding the use of signal handlers in
- ncurses) pointed out [13]a problem with the use of unsafe
- functions for handling SIGTSTP. Other signals could be addressed
- with workarounds; repairing SIGTSTP required a different approach.
- The solution required changing internal behavior of the library:
- how it handles output buffering.
- Now ncurses buffers its own output, independently of the standard
- output. A few applications relied upon the library's direct reuse
- of the standard output buffering; however that is unspecified
- behavior and has never been a recommended practice. Identifying
- these applications as well as refining the change to permit
- low-level applications to work consistently took time.
- * Since the introduction of the experimental support for 256 colors
- early in [14]2005 (released in [15]ncurses 5.5), there has been
- increased user interest. Almost all packagers continue providing
- the ncurses ABI 5 which cannot support 256 colors.
- * Symbol versioning, or the lack of it in ncurses, is the main
- reason why packagers would be reluctant to add a new ncurses ABI.
- This release provides the new ABI along with script-generated
- lists of versioned symbols which can be used for both ABI 5 and 6
- (with distinct names to keep the two separate). This took time to
- development, as reported in [16]Symbol versioning in ncurses.
+ The most important bug-fixes/improvements dealt with robustness
+ issues. The release notes also mention some other bug-fixes, but are
+ focused on new features and improvements to existing features since
+ ncurses 6.4 release.
Library improvements
- Output buffering
+ New features
- X/Open curses provides more than one initialization function:
- * [17]initscr (the simplest) accepts no parameters.
- * [18]newterm accepts parameters for the stream input and output
- * [19]setupterm (the low-level function) accepts a parameter for the
- file descriptor of the output.
+ These are new features:
+ * The low-level terminfo and termcap interfaces are used both by the
+ higher-level curses library, as well as by many applications.
+ The functions which convert parameterized terminal capability
+ strings for output to the terminal (tiparm and tparm) analyze the
+ capability string to determine which parameters are strings (i.e.,
+ addresses), versus numbers (not addresses).
+ The library's analysis of a capability string may differ from the
+ calling application's design if environment variables are used to
+ point to an invalid terminal database. This is a longstanding
+ problem with all implementations of terminfo, dating from the
+ early 1980s.
+ Two new functions address this problem: by providing a function
+ which allows the calling application to tell ncurses how many
+ string-parameters to expect:
+ + tiscan_s helps applications check formatting capabilities
+ that would be passed to tiparm_s.
+ + tiparm_s provides applications a way to tell ncurses what the
+ expected parameters are for a capability.
+ * The ncurses library supports a compile-time feature (enabled with
+ the configure --enable-check-size option) which simplifies
+ initialization with terminals which do not negotiate window
+ (screen) size. This is done in setupterm, by providing for using
+ ANSI cursor-position report (in user6/user7 terminfo capabilities)
+ to obtain the screen size if neither environment variables or
+ ioctl is used.
+ The ncurses test-program with options "-E -T" demonstrates this
+ feature.
+ * add functions to query tty-flags in SCREEN
- They are documented in X/Open as if initscr calls newterm using stdout
- for output stream, and in turn newterm calls setupterm using
- fileno(stdout) for the file descriptor. As long as an implementation
- acts as if it does this, it conforms. In practice, implementations do
- what is implied. This creates a problem: the low-level setupterm
- function's file descriptor is unbuffered, while newterm implies
- buffered output. X/Open Curses says that all output is done through
- the file descriptor, and does not say how the output stream is
- actually used.
+ This release drops compatibility with obsolete versions of tack, e.g.,
+ pre-1.08
- Initially, ncurses used the file descriptor (obtained from the output
- stream passed to newterm) for changing the terminal modes, and relied
- upon the output parameter of newterm for buffered output. Later (to
- avoid using unsafe buffered I/O in signal handlers), ncurses was
- modified to use the file descriptor (unbuffered output) when cleaning
- up on receipt of a signal. Otherwise (when not handling a signal), it
- continued to use the buffered output.
+ Other improvements
- That approach worked reasonably well and as a side effect, using the
- same buffered output as an application might use for printf meant that
- no flushing was needed when switching between normal- and
- screen-modes.
+ These are improvements to existing features:
+ * In addition to the new, safer function tiparm_s, ncurses adds
+ checks to make the older tiparm, tparm and tgoto functions safer:
+ + the terminfo functions tiparm and tparm ensure that the
+ capability string comes from the terminal description which
+ ncurses loads, rather than from random data which the
+ application happens to have.
+ + the tgoto function disallows capabilities which its analysis
+ shows will attempt to use string parameters.
+ + ncurses uses internal functions which correspond to tiparm,
+ and tgoto which ensure that the capability strings which are
+ passed to these functions come from the loaded terminal
+ description.
+ * improve check in lib_tparm.c, ensuring that a char* fits into a
+ TPARM_ARG
+ * modify _nc_syserr_abort to use _nc_env_access, rather than only
+ checking root uid
+ * improve thread lock in lib_trace.c
+ * modify flushinp to use file descriptors in SCREEN, rather than
+ from TERMINAL, and check if they are for a terminal, like SVr4
+ * modify mcprint to use file descriptor in SCREEN, for consistency
+ * modify internal function _nc_read_file_entry to show relevant
+ filename in warnings
+ * improve checks in internal function convert_string for corrupt
+ terminfo entry
+ * review/improve handling of out-of-memory conditions
+ * limit delays to 30 seconds, i.e., padding delays in terminfo, as
+ well as napms and delay_output functions
+ * fix reallocation loop for vsnprintf in _nc_sprintf_string by
+ copying the va_list variable
+ * modify delscreen to limit the windows which it creates to just
+ those associated with the screen
+ * modify endwin to return an error if it is called again without an
+ intervening screen update
+ * modify wenclose to handle pads
+ * eliminate use of PATH_MAX in lib_trace.c
+ * provide for any CCHARW_MAX greater than 1
- There were a couple of problems:
- * to get good performance, curses (not only ncurses, but SVr4 curses
- in general) set an output buffer using setbuf or similar function.
- There is no standard (or portable) way to turn that output buffer
- off, and revert to line-buffering. The [20]NCURSES_NO_SETBUF
- environment variable did make it optional.
- * to handle SIGTSTP (the "stop" signal), ncurses relied upon unsafe
- functions. That is, due to the complexity of the feature, it
- relied upon reusing existing functions which should not have been
- called via the signal handler.
-
- Conveniently, solving the second problem (by making ncurses do its own
- output buffering) also fixed the first one. But there were special
- cases to resolve: [21]low-level functions such as mvcur, putp, vidattr
- explicitly use the standard output. Those functions were reused
- internally, and required modification to distinguish whether they were
- used by the high-level or low-level interfaces.
-
- Finally, there may still be a few programs which should be modified to
- improve their portability, e.g., adding an
-
-fflush(stdout);
-
- when switching from "[22]shell" mode to "[23]program" (curses) mode.
- Those are fairly rare because most programmers have learned not to mix
- printf and [24]printw.
-
- Symbol versioning
-
- This release introduces symbol-versioning to ncurses because without
- it, the change of ABI would be less successful. A lengthy discussion
- will be presented in [25]Symbol versioning in ncurses. These notes
- summarize what has changed, and what can be done with the new release.
-
- Symbol-versioning allows the developers of a library to mark each
- public symbol (both data and functions) with an identifier denoting
- the library name and the version for which it was built. By doing
- this, users of the library have a way to help ensure that applications
- do not accidentally load an incompatible library. In addition, private
- symbols can be hidden entirely.
-
- This release provides sample files for the four principal
- configurations of ncurses libraries: ncurses, ncursesw, ncursest and
- ncursestw. Each sample is given in two forms:
-
- ".map"
- These list all public symbols, together with version names.
-
- ".sym"
- These list all public symbols, without version names.
-
- The sample files are generated by scripts which take into account a
- few special cases such as [26]tack to omit many of the ncurses private
- symbols (beginning with "_nc_"). Here are counts of globals versus
- locals:
-
- Config Symbols Globals Locals "_nc_"
- ncurses 976 796 180 332
- ncursesw 1089 905 184 343
- ncursest 979 804 175 358
- ncursestw 1098 914 184 372
-
- Although only four sample configurations are presented, each is formed
- by merging symbols from several combinations of configure-script
- options, taking into account advice from downstream packagers. Because
- they are formed by merging, the sample files may list a symbol which
- is not in a given package. That is expected. The samples have been
- tested and are working with systems (such as Fedora, FreeBSD and
- Debian) which fully support this feature. There are other systems
- which do not support the feature, and a few (such as Solaris) which
- provide incomplete support.
-
- The version-naming convention used allows these sample files to build
- distinct libraries for ABI 5 and 6. Version names consist of
- * configuration name, e.g., "NCURSESW" for the wide-character
- libraries
- * ABI version (if not 5)
- * library name for two special cases which have the same interface
- across configurations: "TINFO" and "TIC"
- * release version
- * patch date (for the release version)
-
- For example, running nm -D on the libraries in the ncurses6 test
- package shows these symbol-versions:
-
-0000000000000000 A NCURSES6_TIC_5.0.19991023
-0000000000000000 A NCURSES6_TIC_5.1.20000708
-0000000000000000 A NCURSES6_TIC_5.5.20051010
-0000000000000000 A NCURSES6_TIC_5.7.20081102
-0000000000000000 A NCURSES6_TIC_5.9.20150530
-0000000000000000 A NCURSES6_TINFO_5.0.19991023
-0000000000000000 A NCURSES6_TINFO_5.1.20000708
-0000000000000000 A NCURSES6_TINFO_5.2.20001021
-0000000000000000 A NCURSES6_TINFO_5.3.20021019
-0000000000000000 A NCURSES6_TINFO_5.4.20040208
-0000000000000000 A NCURSES6_TINFO_5.5.20051010
-0000000000000000 A NCURSES6_TINFO_5.6.20061217
-0000000000000000 A NCURSES6_TINFO_5.7.20081102
-0000000000000000 A NCURSES6_TINFO_5.8.20110226
-0000000000000000 A NCURSES6_TINFO_5.9.20150530
-0000000000000000 A NCURSESW6_5.1.20000708
-0000000000000000 A NCURSESW6_5.3.20021019
-0000000000000000 A NCURSESW6_5.4.20040208
-0000000000000000 A NCURSESW6_5.5.20051010
-0000000000000000 A NCURSESW6_5.6.20061217
-0000000000000000 A NCURSESW6_5.7.20081102
-0000000000000000 A NCURSESW6_5.8.20110226
-0000000000000000 A NCURSESW6_5.9.20150530
-
- As a special case, this release (which makes the final change for ABI
- 5) is marked with release version 5.9 and patch date 20150530.
-
- Miscellaneous
-
- The new release has several improvements for performance and building.
- For instance:
- * several files in ncurses- and progs-directories were modified to
- allow const data used in internal tables to be put by the linker
- into the readonly text segment.
- * various improvements were made to building the Ada95 binding, both
- in simplifying the generated files as well as improving the way it
- uses gnatmake
-
- There are also new features in the libraries:
- * added [27]use_tioctl function
- * added [28]wgetdelay to retrieve _delay member of WINDOW if it
- happens to be opaque, e.g., in the pthread configuration.
- * added [29]A_ITALIC extension.
- * added form library extension [30]O_DYNAMIC_JUSTIFY option which
- can be used to override the different treatment of justification
- for static versus dynamic fields .
- * rewrote [31]putwin and [32]getwin, making an extended version
- which is capable of reading screen-dumps between the wide/normal
- ncurses configurations. These are text files, except for a magic
- code at the beginning:
-
-0 string \210\210 Screen-dump (ncurses)
-
- * several changes to mouse support include:
- + added decoder for xterm SGR 1006 mouse mode.
- + added experimental support for "%u" format to terminfo.
- + improved behavior of wheel-mice for xterm protocol: noting
- that there are only button-presses for buttons "4" and "5",
- so there is no need to wait to combine events into
- double-clicks .
-
- There are a few new configure options dealing with library
- customization:
- * add "--enable-ext-putwin" configure option to turn on the extended
- putwin/getwin. By default, this is enabled for ABI 6 and disabled
- with ABI 5.
- * add "--enable-string-hacks" option to control whether strlcat and
- strlcpy may be used. Because ncurses already does the requisite
- buffer-limit checks, this feature is mainly of interest to quiet
- compiler-warnings on a few systems.
- * add configure option "--with-tparm-arg" to allow [33]tparm's
- parameters to be something more likely to be the same size as a
- pointer, e.g., intptr_t (again, the default is set for ABI 6).
+ These are corrections to existing features:
+ * correct loop termination condition in waddnstr and waddnwstr
+ * improve parsing in internal function _nc_msec_cost, allowing a
+ single decimal point
+ * amend parameter check for entire string versus specific length in
+ winsnstr and wins_nwstr to match Solaris; make similar correction
+ to wins_nwstr
+ * correct internal function wadd_wch_literal when adding a
+ non-spacing character to a double-width character
+ * correct definition of Charable macro for non-wide ncurses library
+ .
Program improvements
- Utilities
+ Several improvements were made to the utility programs. Some were done
+ to make the infocmp option "-u" option help refactor the terminal
+ database.
- Most of the termcap-related changes based on development of [34]tctest
- (termcap library checker) are implemented in the tic and infocmp
- programs rather than affecting the library. As noted in the
- [35]discussion of tctest, ncurses's ability to translate between
- terminfo and termcap formats has been improved at different times, but
- subject to feedback from "real" termcap users. There are very few of
- those. Nowadays, virtually all termcap users are using ncurses (or
- NetBSD, with its own terminfo library) and their programs are actually
- using terminfo rather than termcap data.
+ infocmp
- Still, there are a few. A comment about the translation of the ASCII
- NUL character prompted a review:
- * Both terminfo and termcap store string capabilities as
- NUL-terminated strings.
- * In terminfo, a \0 in a terminal description is stored as \200.
- * There are no (known) terminals which would behave differently when
- sent \0 or \200.
- * When translating to terminfo format (or displaying a printable
- version of an entry using infocmp), ncurses shows \200 as \0.
- * It has done this since 1998 (quoting from the NEWS file):
+ + add limit checks for processing extended capabilities with
+ the "-u" option
+ + correct initial alignment of extended capabilities, so that
+ the "-u" option can be used for more than two terminal types
+ + modify "-u" option to not report cancels for strings which
+ were already cancelled in a use'd chunk.
+ + correct an assignment "-u" for detecting if a boolean is
+ unset in a base entry and set in a use'd chunk, i.e., if it
+ was cancelled.
-[36]980103
-...
- + modify _nc_tic_expand() to generate \0 rather than \200.
-...
- + correct translation of terminfo "^@", to \200, like \0.
+ tic
- * However, the _nc_tic_expand function (which optionally produces
- terminfo or termcap format) did not address this special case for
- termcap. Even the later 4.4BSD [37]cgetstr interprets a \0
- literally, ending that string (rather than using the terminfo
- improvement).
+ + correct limit-check when dumping tc/use clause via "-I"
+ + check return value of _nc_save_str, in special case where
+ extended capabilities are processed but the terminal
+ description was not initialized
+ + modify check for multiply defined aliases to report problems
+ within the current runtime rather than for conflicts with
+ pre-existing terminal descriptions.
+ + disallow using $TERMINFO or $HOME/.terminfo when "-o" option
+ is used
- As a result of the review, several improvements were made to ncurses
- translation to/from termcap format -- and improving the checks made in
- tic for consistency of entries. Most of these are not of general
- interest, except for two new command-line options for tic and infocmp:
- * the "-0" option generates termcap/terminfo source on a single
- line.
- * the "-K" option provides stricter BSD-compatibility for termcap
- output.
+ tput and tset
- Other user-visible improvements and new features include:
- * added "-D" option to tic and infocmp, to show the database
- locations that it could use.
- * added "-s" option to toe, to sort its output.
- * extended "-c" and "-n" options of infocmp to allow comparing more
- than two entries.
- * modified toe's report when "-a" and "-s" options are combined, to
- add a column showing which entries belong to a given database.
- * modified the clear program to take into account the "E3" extended
- capability to clear the terminal's scrollback buffer.
+ + add "-v" option to tput, to show warnings
+ + modify reset command to avoid altering clocal if the terminal
+ uses a modem
+ + modify reset feature to avoid 1-second sleep if running in a
+ pseudo-terminal
Examples
- Along with the library and utilities, many improvements were made to
- the [38]ncurses-examples. Some were made to allow building (and
- comparison-testing) against NetBSD curses and PDCurses. Both lack some
- of the X/Open Curses features, necessitating customization. But this
- activity was useful because it showed some remaining performance
- issues (which have been resolved in this release).
+ Along with the library and utilities, improvements were made to the
+ ncurses-examples:
+ * modify test_tparm to account for extended capabilities
+ * corrected mouse mask in test/testcurs.c
+ * modify test/clip_printw.c to optionally test non-wrapped updates
+ * modify test/test_mouse.c to use curses api for raw/noraw
+ * modify test/clip_printw.c to optionally test non-wrapped updates
- These changes were made to verify compatibility or compare performance
- of ncurses:
- * made workarounds for compiling test-programs with NetBSD curses,
- though it lacks some common functions such as [39]use_env.
- * added dots_termcap test-program
- * added dots_curses test-program, for comparison with the low-level
- examples.
- * added test_setupterm test-proram to demonstrate normal/error
- returns from the setupterm and restartterm functions.
- * added "-d", "-e" and "-q" options to the demo_terminfo and
- demo_termcap test-programs.
- * added "-y" option to demo_termcap and test/demo_terminfo
- test-programs to demonstrate behavior with/without extended
- capabilities.
- * modified demo_termcap and demo_terminfo test-programs to make
- their options more directly comparable, and add "-i" option to
- specify a terminal description filename to parse for names to
- lookup.
- * rewrote the tests for [40]mvderwin and test for recursive
- [41]mvwin in the movewindow test-program.
+ There is one new demo/test programs:
- These changes were made to help with the MinGW port:
- * added test-screens to the ncurses test-program to show
- 256-characters at a time, to help with MinGW port.
- * modified the view test-program to load UTF-8 when built with MinGW
- by using regular win32 API because the MinGW functions mblen and
- mbtowc do not work.
- * added "-s" option to the view test-program to allow it to start in
- single-step mode, reducing size of trace files when it is used for
- debugging MinGW changes.
-
- These changes were made to verify new extensions in ncurses:
- * added [42]form_driver_w entrypoint to wide-character forms
- library, as well as form_driver_w test-program.
- * modified ncurses test-program's b/B tests to display lines only
- for the attributes which a given terminal supports, to make room
- for an italics test.
- * modified ncurses test-program, adding "-E" and "-T" options to
- demonstrate use_env versus use_tioctl.
- * modified ncurses test-program's c/C tests to cycle through subsets
- of the total number of colors, to better illustrate
- 8/16/88/256-colors by providing directly comparable screens.
- * modified the ncurses test-program to also show position reports in
- 'a' test.
-
- These changes were made to make the examples more useful:
- * added scripts for building dpkg and rpm test-packages
- * modified the hanoi test-program to show the minimum number of
- moves possible for the given number of tiles.
- * modified the knight test-program to show the number of choices
- possible for each position in automove option, e.g., to allow user
- to follow Warnsdorff's rule to solve the puzzle.
+ test/test_endwin.c
+ This program shows the return-status from endwin with different
+ combinations of endwin (repeated), initscr, newterm.
Terminal database
- This release provides improvements to tic's "-c" checking option,
- which was used for example to
- * make sgr in several entries agree with other caps.
- * correct padding in some entries where earlier versions had
- miscounted the number of octal digits.
-
There are several new terminal descriptions:
- * [43]mlterm is now aliased to mlterm3
- * [44]nsterm is now derived from nsterm-256color
- * [45]putty-sco
- * [46]teken is FreeBSD's "xterm" console.
- * [47]terminator
- * [48]terminology
- * [49]tmux is derived from screen.
- * several screen.XXX entries support the respective variations for
- 256 colors.
- * [50]simpleterm is now 0.5
- * [51]vte is aliased to vte-2012
- * [52]vt520ansi
+ * ansi+apparrows
+ * contour
+ * linux+kbs for terminals which imitate xterm's behavior with Linux
+ * rio, rio-direct
+ * mostlike
+ * ms-vt100-16color, winconsole
+ * vt100+noapp, vt100+noapp+pc, xterm+app+pc, xterm+decedit from
+ xterm #389
+ * putty+cursor to reflect amending of modified cursor-keys in 2021
+ * wezterm
- A few entries use extensions (user-defined terminal capabilities):
- * E3, used in linux, putty and xterm-basic is tested in the
- [53]clear program to erase a terminal's scrollback.
- * TS is used in the [54]xterm+sl building block to help deprecate
- the misuse of tsl for xterm's title-string.
- * XT is used in some terminfo entries to improve usefulness for
- other applications than screen, which would like to pretend that
- xterm's title is a status-line.
- * xm is used in examples [55]xterm-1005 and [56]xterm-1006 to
- illustrate a way to make mouse handling more general
+ There are many changes to existing terminal descriptions. Some were
+ updates to several descriptions, using the infocmp "-u" option in a
+ script to determine which building-block entries could be used to
+ replace multiple capability settings (and trim redundant information).
- A few terminals support italics and/or dim capabilities. In
- particular, screen does not. Documented that, and accommodated the
- terminals where this feature works with the A_ITALIC extension.
- * konsole, mlterm3 (italics)
- * nsterm (dim)
- * screen (dim)
- * vte (dim, italics)
- * xterm (dim, italics)
+ Other changes include:
+ * document XF, kxIN and kxOUT
+ * add note on sun regarding wscons/cmdtool/shelltool
+ * remove DECCOLM+DECSCLM from foot
+ * add xterm+focus to foot+base
+ * add ecma+strikeout to putty
+ * use CSI 3J in vte-2017
+ * use oldxterm+sm+1006 in vte-2014
+ * modify xgterm to work around line-drawing bug
+ * add xterm focus mode 1004 to xterm+focus as fe/fd capabilities,
+ like vim.
+ * add xterm+focus to alacritty+common
+ * add XR/xr, to work with vim, and use RV/rv to denote DA2 and its
+ response
+ * add XF flag to xterm+focus so that termcap applications can be
+ aware of terminals which may support focus in/out
+ * use xterm+focus in xterm-p370 and tmux
+ * remove xterm+sm+1006 from tmux
+ * NetBSD-related fixes for x68k and wsvt25
Documentation
@@ -468,325 +254,163 @@
* attempts to improve the description of features which users have
found confusing
* fills in overlooked descriptions of features which were described
- in the [57]NEWS file but treated sketchily in manual pages.
+ in the NEWS file but treated sketchily in manual pages.
- In addition, the mechanism for producing HTML versions of the
- documentation has been improved:
- * use an improved version of [58]man2html to generate html manpages.
- * regenerated [59]NCURSES-Programming-HOWTO.html to fix some of the
- broken html emitted by docbook.
+ In addition to providing background information to explain these
+ features and show how they evolved, there are corrections,
+ clarifications, etc.:
+ * Corrections:
+ + add assignment in CF_MAN_PAGES to fill in value for
+ TERMINFO_DIRS in ncurses, terminfo and tic manpages.
+ + clarify interaction of -R option versus -C, -I and -r in
+ infocmp manpage.
+ + correct manpage description of panel_hidden.
+ + improve manpage description for addch versus unctrl format
+ used for non-printable characters.
+ + improve manpages discussing file descriptors in low-level
+ functions.
+ + improve description of search rules for terminal descriptions
+ in terminfo manpage.
+ + modify dist.mk to avoid passing developer's comments in
+ manpages into the generated html documentation.
+ + modify test-package "ncurses6-doc" to use manpage-aliases,
+ which in turn required a change to the configure script to
+ factor in the extra-suffix option when deriving alias names.
+ * New/improved history and portability sections:
+ + add information about "ttycap", termcap's forerunner, to
+ tset.1
+ + document limitations of tparm, and error-returns in
+ curs_terminfo.3x
+ + document limitations of tgoto, and error-returns in
+ curs_termcap.3x
+ * Other improvements:
+ + This release has many changes to improve the formatting and
+ style of the manpages.
+ + Manpages now use consistent section-naming, page headers and
+ footers (including the modification date for each page).
+ + Table layout has been revised.
+
+ There are no new manual pages (all of the manual page updates are to
+ existing pages).
Interesting bug-fixes
- * Ada95 binding:
- + modify makefile rules to ensure that the PIC option is not
- used when building a static library
- + make Ada95 build-fix for big-endian architectures such as
- sparc. This undoes one of the fixes from [60]20110319, which
- added an "Unused" member to representation clauses, replacing
- that with pragmas to suppress warnings about unused bits.
- * Color and attributes:
- + parenthesize parameter of COLOR_PAIR and PAIR_NUMBER in
- curses.h in case it happens to be a comma-expression.
- + improve [61]20021221 workaround for broken acs, handling a
- case where that ACS_xxx character is not in the acsc string
- but there is a known wide-character which can be used.
- + modify [62]init_pair to accept -1's for color value after
- [63]assume_default_colors has been called.
- + add a check in [64]start_color to limit color-pairs to 256
- when extended colors are not supported.
- * Resizing the screen:
- + propagate error-returns from wresize, i.e., the internal
- increase_size and decrease_size functions through
- [65]resize_term.
- + add check for zero/negative dimensions for resizeterm and
- resize_term.
- + modify resizeterm to always push a KEY_RESIZE onto the fifo,
- even if screensize is unchanged. Modify library to push a
- KEY_RESIZE if there was a SIGWINCH, even if it does not call
- resizeterm). These changes eliminate the case where a
- SIGWINCH is received, but ERR is returned from wgetch or
- wgetnstr because the screen dimensions did not change.
- * Low-level interfaces
- + fix an old bug in the termcap emulation; "%i" was ignored in
- tparm because the parameters to be incremented were already
- on the internal stack.
- + change "%l" behavior in tparm to push the string length onto
- the stack rather than saving the formatted length into the
- output buffer.
- + modify name-comparison for tgetstr, etc., to accommodate
- legacy applications as well as to improve compatbility with
- BSD 4.2 termcap implementations (see note for [66]980725).
- * High-level interfaces
- + modify internal recursion in wgetch which handles cooked mode
- to check if the call to wgetnstr returned an error. This can
- happen when both nocbreak and nodelay are set, for instance
- (see note for [67]960418).
- + add a check in internal function waddch_nosync to ensure that
- tab characters are treated as control characters; some broken
- locales claim they are printable.
- + modify menu library to ensure that a menu's top-row is
- adjusted as needed to ensure that the current item is on the
- screen
- + fix special case where double-width character overwrites a
- single- width character in the first column.
+ The changes to tparm, tgoto which improve the design of the low-level
+ interfaces are interesting, but are not bug-fixes per se.
Configuration changes
Major changes
- The ncurses 6.0 configure script makes changes to the default value of
- several configure options, depending on the --with-abi-version option
- (i.e., whether its value is "5" or "6"):
+ These are the major changes (aside from introducing tiparm_s):
+ * use wide-character (ncursesw) by default
+ * use opaque typedefs by default
- --enable-const
- Feature introduced in [68]970405 supports the use of const
- where X/Open Curses should have, but did not. NetBSD curses
- does something similar with const.
+ However, most of the work on configure scripts was done to reduce
+ warnings within the configure script:
+ * intrusive warnings from GNU grep regarding fgrep and egrep
+ * fatal errors in compile-checks, arising from recent "Modern C"
+ efforts by some developers which caused longstanding configure
+ checks to fail.
+ After repairing the configure script, none of that activity
+ affected ncurses because stricter warnings are used routinely in
+ development.
- --enable-ext-colors
- Extends the cchar_t structure to allow more than 16 colors to
- be encoded. This applies only to the wide-character
- (--enable-widec) configuration.
-
- --enable-ext-mouse
- Modifies the encoding of mouse state to make room for a 5th
- mouse button. That allows one to use ncurses with a wheel mouse
- with xterm or similar X terminal emulators.
-
- --enable-ext-putwin
- Modifies the file-format written by putwin to use printable
- text rather than binary files, allowing getwin to read screen
- dumps written by differently-configured ncurses libraries. The
- extended getwin can still read binary screen dumps from the
- same configuration of ncurses. This does not change the ABI
- (the binary interface seen by calling applications).
-
- --enable-interop
- Modifies the FIELDTYPE structure used for the form library to
- make it more generic.
-
- --enable-lp64
- Allows an application to define _LP64 to declare chtype and
- mmask_t as simply "unsigned" rather than the configured types
- using the --with-chtype and --with-mmask_t options.
-
- --enable-sp-funcs
- Compile-in support for extended functions which accept a SCREEN
- pointer, reducing the need for juggling the global SP value
- with [69]set_term and [70]delscreen.
-
- --with-chtype=uint32_t
- Makes chtype explicitly a 32-bit unsigned value.
-
- --with-mmask_t=uint32_t
- Makes mmask_t explicitly a 32-bit unsigned value.
-
- --with-tparm-arg=intptr_t
- X/Open Curses declares [71]tparm using long for each of the
- parameters aside from the formatting string, presuming that
- long and char* are the same size. This configure option uses
- intptr_t which provides a better guarantee of the sizes.
-
- The configure script no longer checks for antique compilers; c89 is
- assumed as a minimum. There are a few features from later revisions
- which are used when available. The configure script makes checks to
- turn on useful warnings from clang, gcc and icc. You should be able to
- build ncurses 6.0 with any of the current (or not so current) C
- compilers available in 2015.
-
- The configure script, by the way, makes changes which do not work with
- systems whose /bin/sh is non-POSIX. This mainly affects Solaris (the
- other vendor unix systems have followed the POSIX guidelines for the
- past twenty years). If you must build on Solaris, its [72]xpg4
- binaries suffice, e.g.,
-
- #!/bin/sh
- WHAT=`hostname|sed -e 's/\..*//'`
- OUT=configure.out
- cat >>$OUT <<EOF/
- ** `date`
- ** node: $WHAT
- ** user: `id`
- ** conf: $*
- EOF/
-
- SHELL=/bin/sh
- if test -f /usr/xpg4/bin/sh
- then
- CONFIG_SHELL=/usr/xpg4/bin/sh
- export CONFIG_SHELL
- SHELL=$CONFIG_SHELL
- fi
-
- rm -f config.status config.cache
- TOP=$HOME/$WHAT
- $SHELL ./configure --verbose \
- --disable-echo \
- --disable-overwrite \
- --enable-warnings \
- --with-warnings \
- --prefix=$TOP $* 2>&1 | tee -a $OUT
-
- Other major changes to the configure script include:
- * ABI 6 is now the default, intending that the existing ABI 5 should
- build as before using the "--with-abi-version=5" option.
- * added --with-extra-suffix option to help with installing
- nonconflicting ncurses6 packages, e.g., avoiding header- and
- library-conflicts.
- NOTE: as a side-effect, this renames
-
- adacurses-config to adacurses5-config and
- adacursesw-config to adacursesw5-config
- * the configure script looks for gnatgcc if the Ada95 binding is
- built, in preference to the default gcc/cc. The script also
- ensures that the Ada95 binding is built with the level of
- optimization as the C libraries.
- * the configure script captures define's related to -D_XOPEN_SOURCE
- from the configure check and adds those to the *-config and *.pc
- files, to simplify use for the wide-character libraries.
+ Other improvements made to configure checks include
+ * use string-hacks in alloc_entry.c, alloc_type.c and hardscroll.c,
+ overlooked due to compiler changes in recent OpenBSD releases
+ * revise progs.priv.h to provide for NC_ISATTY reuse
+ * configure check for MB_LEN_MAX provides warning as needed
+ * trim a space after some "-R" options, fixing builds for
+ applications built using clang and ncurses on Solaris
+ * work around misconfiguration of MacPorts gcc13, which exposes
+ invalid definition of MB_LEN_MAX in gcc's fallback copy of
+ limits.h
+ * modified experimental Windows driver works with xterm mouse
+ protocol
Configuration options
- There are several new (or extended) configure options:
+ There are a few new configure options:
- --disable-db-install
- Do not install the terminal database. This is used to omit
- features for packages, as done with --without-progs. The option
- simplifies building cross-compile support packages.
+ --disable-setuid-environ
+ Compile with environment restriction, so certain environment
+ variables are not available when running via a setuid/setgid
+ application. These are (for example $TERMINFO) those that allow
+ the search path for the terminfo or termcap entry to be
+ customized.
- --disable-gnat-projects
- This option is used for regression testing
+ A setuid/setgid application inherits its environment variables
+ from the current user, in contrast to sudo which may limit the
+ environment variables that ncurses uses.
- --disable-lib-suffixes
- Suppress the "w", "t" or "tw" suffixes which normally would be
- added to the library names for the --enable-widec and
- --with-pthread options.
+ --enable-check-size
+ Compile-in feature to detect screensize for terminals which do
+ not advertise their screensize, e.g., serial terminals.
- --with-cxx-shared
- When --with-shared is set, build libncurses++ as a shared
- library. This implicitly relies upon building with gcc/g++,
- since other compiler suites may have differences in the way
- shared libraries are built. libtool by the way has similar
- limitations.
+ --with-abi-altered=NUM
+ Override the displayed (rather than compiled-in) ABI. Only
+ packagers who have created configurations where the ABI differs
+ from ncurses should be interested in this option.
- --with-hashed-db
- Extended this configure option to simplify building with
- different versions of Berkeley database using FreeBSD ports.
+ --with-strip-program=XXX
+ When stripping executables during install, use the specified
+ program rather than "strip" overriding program chosen by the
+ install program for stripping executables.
- --with-pc-suffix
- If ".pc" files are installed, optionally add a suffix to the
- files and corresponding package names to separate unusual
- configurations. If no option value is given (or if it is
- "none"), no suffix is added. This option is used in the test
- package for ncurses6.
+ These configure options are modified:
- --with-xterm-kbs
- Configure xterm's terminfo entries to use either BS (^H, i.e.,
- ASCII backspace) or DEL (^?, or 127).
+ --with-pkg-config-libdir[=DIR]
+ The optional DIR parameter can now be "auto" to automatically
+ use pkg-config's library directory.
+
+ The default is $(libdir).
+
+ --with-xterm-kbs[=XXX]
+ The default is "auto" which tells the configure script to
+ choose BS or DEL according to platform defaults.
Portability
- MinGW
+ Many of the portability changes are implemented via the configure
+ script:
+ * add/use configure check for clock_gettime, to supersede
+ gettimeofday.
+ * modify configure script check for pkg-config library directory to
+ take into account an older version 0.15.0 which used
+ PKG_CONFIG_PATH but not PKG_CONFIG_LIBDIR
+ * allow for MinGW32-/64-bit configurations to use _DEFAULT_SOURCE
+ * modify CF_XOPEN_SOURCE macro's amend default case to avoid
+ undefining _XOPEN_SOURCE if _POSIX_C_SOURCE is defined
+ * updated configure script macro CF_XOPEN_SOURCE, for uClibc-ng
+ * modify version-check for gcc/g++, now works for msys2
+ * build-fixes related to configure-options and/or platform:
+ + fix for --enable-fvisibility
+ + fix for unusual values of --with-rel-version
+ + fix for unusual values of --with-abi-version
+ + fix for --disable-tcap-names
+ + fix for termcap in nc_access.h
+ * other configure-script improvements:
+ + recent msys2 headers work with _DEFAULT_SOURCE; amend check
+ + use $ac_includes_default in most cases where stdlib.h should
+ work
+ + use #error consistently vs "make an error"
+ + add configure macro for gettimeofday vs inline check
- Most of the portability-related work since [73]ncurses 5.9 extended
- and improved the MinGW port introduced in [74]ncurses 5.8.
-
- The MinGW port can be readily cross-compiled:
- * modified configure script to allow creating dll's for MinGW when
- cross-compiling.
- * enforced Windows-style path-separator if cross-compiling,
- * added scripts for test-builds of cross-compiled packages for
- ncurses6 to MinGW.
- * added pc-files to the MinGW cross-compiling test-packages.
- * added script for building test-packages of binaries cross-compiled
- to MinGW using NSIS.
- * added nc_mingw.h to installed headers for MinGW port; this is
- needed for cross-compiling [75]ncurses-examples.
- * added test-packages for cross-compiling ncurses-examples using the
- MinGW test-packages.
-
- The MinGW-specific Windows driver accounts for several changes:
- * wide-character display is made usable by replacing MinGW's
- non-working wcrtomb and wctomb functions.
- * implemented some display features: [76]beep, [77]flash,
- [78]curs_set.
- * the driver handles repainting on endwin/refresh combination.
- * modified treatment of TERM variable for MinGW port to allow
- explicit use of the Windows console driver by checking if $TERM is
- set to "#win32console" or an abbreviation of that.
- * the Windows driver also matches the special TERM value "unknown"
- * the driver now returns characters for special keys, (like ansi.sys
- does), when keypad mode is off, rather than returning nothing at
- all.
- * the driver checks a new environment variable [79]NCURSES_CONSOLE2
- to optionally work around a deficiency in Console2 (and its
- descendent ConsoleZ) which hang when an application creates a
- console buffer.
-
- Finally, there are other improvements:
- * MinGW is one of the configurations where ncurses installs by
- default into /usr
- * configuration for cross-compiling uses AC_CHECK_TOOLS in
- preference to AC_PATH_PROGS when searching for ncurses*-config,
- e.g., in Ada95/configure and test/configure.
- * extend Windows support to work with MSYS2;
- + this works with a scenario where there is an ANSI-escape
- handler such as ansicon running in the console window.
- + wrap isatty calls with a macro, provide a corresponding set
- of support routines to address differences between MinGW and
- MSYS2.
- * ensure WINVER is defined in makefiles rather than using headers.
- * add check for the gnatprep "-T" option.
- * work around a bug introduced by [80]gcc 4.8.1 in MinGW which
- breaks "trace" feature.
- * add a driver-name method to each of the drivers.
-
- Other ports
-
- These changes affect certain platforms (ports):
- * the configure script knows how to build shared libraries with
- DragonFlyBSD and Interix.
- * support for AIX shared libraries is improved, tested with AIX 5.3,
- 6.1 and 7.1 with both gcc 4.2.4 and cc:
- + the shared-library suffix for AIX 5 and 6 is now ".so"
- + the -brtl option is used with AIX 5-7; it is needed to link
- with the shared libraries.
- * the configure --enable-pc-files option takes into account the
- [81]PKG_CONFIG_PATH variable.
- * the configure option --with-pkg-config-libdir provides control
- over the actual directory into which pc-files are installed.
- * the build scripts add explicit -ltinfo, etc., to the generated
- ".pc" file when ld option "--as-needed" is used, or when ncurses
- and tinfo are installed without using rpath.
- * the configure script disallows conflicting options
- "--with-termlib" and "--enable-term-driver".
- * the check for missing c++ compiler to work when no error is
- reported, and no variables set is improved (see note for
- [82]20021206).
- * the misc/gen_edit.sh script selects a "linux" entry which works
- with the current kernel rather than assuming it is always
- "linux3.0"
- * the test/configure script makes it simpler to override names of
- curses-related libraries, to help with linking with pdcurses in
- MinGW environment.
- * the configure-script/ifdef's allow the BSD OLD_TTY feature to be
- suppressed if the type of ospeed is configured using the option
- --with-ospeed to not be a short. By default, it is a short for
- termcap-compatibility.
- * the MKlib_gen.sh script works around a recent change in gcc 5
- (released [83]mid-2015) which essentially emits multiple #line
- statements for the same position in a file.
- * the configure script works with Minix3.2 (see [84]note on
- portability)
- * OS/2 redux:
- + the configure script supports OS/2 kLIBC.
- + the --with-lib-prefix option allows configuring for old/new
- flavors of OS/2 EMX.
- * improved configure-script checks for _XOPEN_SOURCE:
- + the definition works starting with Solaris 10.
- + the definition is suppressed for IRIX64, since its header
- files have a conflict versus _SGI_SOURCE.
+ Here are some of the other portability fixes:
+ * modify configure scripts/makefiles to omit KEY_RESIZE if the
+ corresponding SIGWINCH feature is disabled
+ * increase MB_CUR_MAX to 16, matching glibc's MB_LEN_MAX
+ * add BSD erase2 to characters handled by tset/reset
+ * use getauxval when available, to improve setuid/setgid checks
+ * set dwShareMode in calls to CreateConsoleScreenBuffer
+ * use CreateFile with "CONIN$", "CONOUT$" rather than GetStdHandle
+ to obtain a handle on the actual console, avoiding redirection in
+ the MinGW/Win32 configurations
+ * modify MinGW driver to return KEY_BACKSPACE when an unmodified
+ VK_BACK virtual key is entered
+ * modify MinGW configuration to provide for running in MSYS/MSYS2
+ shells, assuming ConPTY support
_________________________________________________________________
Features of ncurses
@@ -794,20 +418,21 @@
The ncurses package is fully upward-compatible with SVr4 (System V
Release 4) curses:
* All of the SVr4 calls have been implemented (and are documented).
- * ncurses supports all of the for SVr4 curses features including
- keyboard mapping, color, forms-drawing with ACS characters, and
- automatic recognition of keypad and function keys.
- * ncurses provides these SVr4 add-on libraries (not part of X/Open
- Curses):
- + the panels library, supporting a stack of windows with
- backing store.
- + the menus library, supporting a uniform but flexible
- interface for menu programming.
+ * ncurses supports the features of SVr4 curses including keyboard
+ mapping, color, form drawing with ACS characters, and automatic
+ recognition of keypad and function keys.
+ * ncurses provides work-alike replacements of SVr4 supplemental
+ libraries based on curses, but which were not specified by X/Open
+ Curses:
+ + the panel library, supporting a stack of windows with backing
+ store
+ + the menu library, supporting a uniform but flexible interface
+ for menu programming
+ the form library, supporting data collection through
- on-screen forms.
+ on-screen forms
* ncurses's terminal database is fully compatible with that used by
SVr4 curses.
- + ncurses supports user-defined capabilities which it can see,
+ + ncurses supports user-defined capabilities that it can see,
but which are hidden from SVr4 curses applications using the
same terminal database.
+ It can be optionally configured to match the format used in
@@ -817,14 +442,15 @@
curses.
* The ncurses utilities have options to allow you to filter terminfo
entries for use with less capable curses/terminfo versions such as
- the HP/UX and AIX ports.
+ the HP-UX and AIX ports.
The ncurses package also has many useful extensions over SVr4:
- * The API is 8-bit clean and base-level conformant with the X/OPEN
- curses specification, XSI curses (that is, it implements all BASE
- level features, and most EXTENDED features). It includes many
- function calls not supported under SVr4 curses (but portability of
- all calls is documented so you can use the SVr4 subset only).
+ * The API is 8-bit clean and base-level conformant with the X/Open
+ Curses specification, XSI curses (that is, it implements all BASE
+ level features, and almost all EXTENDED features). It includes
+ many function calls not supported under SVr4 curses (but
+ portability of all calls is documented so you can use the SVr4
+ subset only).
* Unlike SVr3 curses, ncurses can write to the rightmost-bottommost
corner of the screen if your terminal has an insert-character
capability.
@@ -841,6 +467,7 @@
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.
+ * Support for direct-color terminals, such as modern xterm.
* Support for 256-color terminals, such as modern xterm.
* Support for 16-color terminals, such as aixterm and modern xterm.
* Better cursor-movement optimization. The package now features a
@@ -863,10 +490,10 @@
types even when no terminfo tree or termcap file is accessible
(this may be useful for support of screen-oriented programs that
must run in single-user mode).
- * The [85]tic/[86]captoinfo utility provided with ncurses has the
- ability to translate many termcaps from the XENIX, IBM and AT&T
- extension sets.
- * A BSD-like [87]tset utility is provided.
+ * The tic/captoinfo utility provided with ncurses has the ability to
+ translate many termcaps from the XENIX, IBM and AT&T extension
+ sets.
+ * A BSD-like tset utility is provided.
* The ncurses library and utilities will automatically read terminfo
entries from $HOME/.terminfo if it exists, and compile to that
directory if it exists and the user has no write access to the
@@ -881,132 +508,162 @@
other entries in the same source file (as in System V) but also to
compiled entries in either the system terminfo directory or the
user's $HOME/.terminfo directory.
- * The table-of-entries utility [88]toe makes it easy for users to
- see exactly what terminal types are available on the system.
- * The library meets the XSI requirement that every macro entry point
- have a corresponding function which may be linked (and will be
- prototype-checked) if the macro definition is disabled with
- #undef.
- * Extensive documentation is provided (see the [89]Additional
- Reading section of the [90]ncurses FAQ for online documentation).
+ * The table-of-entries utility toe makes it easy for users to see
+ exactly what terminal types are available on the system.
+ * X/Open Curses permits most functions it specifies to be made
+ available as macros as well. ncurses does this
+ + to improve performance, e.g., for operations composed of
+ simpler functions such as cursor movement following by adding
+ text to the screen,
+ + to simplify the implementation by reusing functions which use
+ common parameters, e.g., the standard screen stdscr, and
+ + to provide functions that return values via their parameters
+ Except for the last case, ncurses provides a non-macro
+ implementation of the function. If the macro definition is
+ disabled with #undef, or by defining NCURSES_NOMACROS the function
+ may be linked (and its calls will be checked against the
+ prototype).
+ * Extensive documentation is provided (see the Additional Reading
+ section of the ncurses FAQ for online documentation).
Applications using ncurses
The ncurses distribution includes a selection of test programs
(including a few games). These are available separately as
- [91]ncurses-examples
+ ncurses-examples
The ncurses library has been tested with a wide variety of
applications including:
+ aptitude
+ FrontEnd to Apt, the debian package manager
+
+ https://wiki.debian.org/Aptitude
+
cdk
Curses Development Kit
- [92]http://invisible-island.net/cdk/
+ https://invisible-island.net/cdk/
ded
directory-editor
- [93]http://invisible-island.net/ded/
+ https://invisible-island.net/ded/
dialog
the underlying application used in Slackware's setup, and the
basis for similar install/configure applications on many
systems.
- [94]http://invisible-island.net/dialog/
+ https://invisible-island.net/dialog/
lynx
the text WWW browser
- [95]http://lynx.isc.org/
-
- Midnight Commander
- file manager
-
- [96]http://www.midnight-commander.org/
+ https://lynx.invisible-island.net/
mutt
mail utility
- [97]http://www.mutt.org/
+ http://www.mutt.org/
ncftp
file-transfer utility
- [98]http://www.ncftp.com/
+ https://www.ncftp.com/
nvi
New vi uses ncurses.
- [99]https://sites.google.com/a/bostic.com/keithbostic/nvi
+ https://sites.google.com/a/bostic.com/keithbostic/the-berkeley-
+ vi-editor-home-page
+
+ ranger
+ A console file manager with VI key bindings in Python.
+
+ https://ranger.github.io/
tin
newsreader, supporting color, MIME
- [100]http://www.tin.org/
+ http://www.tin.org/
+
+ vifm
+ File manager with vi like keybindings
+
+ https://vifm.info/
as well as some that use ncurses for the terminfo support alone:
minicom
terminal emulator for serial modem connections
- [101]http://alioth.debian.org/projects/minicom/
+ https://salsa.debian.org/minicom-team/minicom
mosh
a replacement for ssh.
- [102]https://mosh.mit.edu/
+ https://mosh.org/
tack
terminfo action checker
- [103]http://invisible-island.net/ncurses/tack.html
+ https://invisible-island.net/ncurses/tack.html
tmux
terminal multiplexor
- [104]http://tmux.github.io/
+ https://github.com/tmux/tmux/wiki
vile
vi-like-emacs may be built to use the terminfo, termcap or
curses interfaces.
- [105]http://invisible-island.net/vile/
+ https://invisible-island.net/vile/
and finally, those which use only the termcap interface:
emacs
text editor
- [106]http://www.gnu.org/software/emacs/
+ https://www.gnu.org/software/emacs/
+
+ less
+ The most commonly used pager (a program that displays text
+ files).
+
+ http://www.greenwoodsoftware.com/less/
screen
terminal multiplexor
- [107]http://www.gnu.org/software/screen/
+ https://www.gnu.org/software/screen/
vim
text editor
- [108]http://www.vim.org/
+ https://www.vim.org/
Development activities
Zeyd Ben-Halim started ncurses from a previous package pcurses,
written by Pavel Curtis. Eric S. Raymond continued development.
- Juergen Pfeifer wrote most of the form and menu libraries. Ongoing
- development work is done by [109]Thomas Dickey. Thomas Dickey also
- acts as the maintainer for the Free Software Foundation, which holds
- the [110]copyright on ncurses.
+ Juergen Pfeifer wrote most of the form and menu libraries.
+
+ Ongoing development work is done by Thomas E. Dickey. Thomas E. Dickey
+ has acted as the maintainer for the Free Software Foundation, which
+ held a copyright on ncurses for releases 4.2 through 6.1. Following
+ the release of ncurses 6.1, effective as of release 6.2, copyright for
+ ncurses reverted to Thomas E. Dickey (see the ncurses FAQ for
+ additional information).
Contact the current maintainers at
- [111]bug-ncurses@gnu.org
+ bug-ncurses@gnu.org
To join the ncurses mailing list, please write email to
- [112]bug-ncurses-request@gnu.org
+ bug-ncurses-request@gnu.org
containing the line:
@@ -1015,211 +672,62 @@
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
+ Beta versions of ncurses are made available at
- [113]ftp://invisible-island.net/ncurses/ .
+ https://invisible-island.net/archives/ncurses/current/ and
+ https://invisible-mirror.net/archives/ncurses/current/ .
+
+ Patches to the current release are made available at
+
+ https://invisible-island.net/archives/ncurses/6.4/ and
+ https://invisible-mirror.net/archives/ncurses/6.4/ .
There is an archive of the mailing list here:
- [114]http://lists.gnu.org/archive/html/bug-ncurses (also
- [115]https)
+ https://lists.gnu.org/archive/html/bug-ncurses .
Related resources
The release notes make scattered references to these pages, which may
be interesting by themselves:
- * [116]man2html
- * [117]ncurses licensing
- * [118]Symbol versioning in ncurses
- * [119]The MinGW port of ncurses
- * [120]tack - terminfo action checker
- * [121]tar versus portability
- * [122]tctest - termcap library checker
- * [123]Terminal Database
+ * ncurses licensing
+ * Symbol versioning in ncurses
+ * Comments on ncurses versus slang (S-Lang)
+ * Comments on OpenBSD
+ * tack - terminfo action checker
+ * tctest - termcap library checker
+ * Terminal Database
Other resources
The distribution provides a newer version of the terminfo-format
- terminal description file once maintained by [124]Eric Raymond .
- Unlike the older version, the termcap and terminfo data are provided
- in the same file, and provides several user-definable extensions
- beyond the X/Open specification.
+ terminal description file once maintained by Eric Raymond . Unlike the
+ older version, the termcap and terminfo data are provided in the same
+ file, which also provides several user-definable extensions beyond the
+ X/Open Curses specification.
You can find lots of information on terminal-related topics not
- covered in the terminfo file at [125]Richard Shuford's archive .
+ covered in the terminfo file in Richard Shuford's archive (original).
+ The collection of computer manuals at bitsavers.org has also been
+ useful.
- * [126]Overview
- * [127]Release Notes
- + [128]Library improvements
- o [129]Output buffering
- o [130]Symbol versioning
- o [131]Miscellaneous
- + [132]Program improvements
- o [133]Utilities
- o [134]Examples
- + [135]Terminal database
- + [136]Documentation
- + [137]Interesting bug-fixes
- + [138]Configuration changes
- o [139]Major changes
- o [140]Configuration options
- + [141]Portability
- o [142]MinGW
- o [143]Other ports
- * [144]Features of ncurses
- * [145]Applications using ncurses
- * [146]Development activities
- * [147]Related resources
- * [148]Other resources
-
-References
-
- 1. http://invisible-island.net/ncurses/man/captoinfo.1m.html
- 2. http://invisible-island.net/ncurses/man/clear.1.html
- 3. http://invisible-island.net/ncurses/man/infocmp.1m.html
- 4. http://invisible-island.net/ncurses/man/tabs.1.html
- 5. http://invisible-island.net/ncurses/man/tic.1m.html
- 6. http://invisible-island.net/ncurses/man/toe.1m.html
- 7. http://invisible-island.net/ncurses/man/tput.1.html
- 8. http://invisible-island.net/ncurses/man/tset.1.html
- 9. ftp://ftp.gnu.org/gnu/ncurses/
- 10. ftp://invisible-island.net/ncurses/
- 11. http://invisible-island.net/ncurses/tctest.html
- 12. http://invisible-island.net/ncurses/ncurses-examples.html
- 13. http://lists.gnu.org/archive/html/bug-ncurses/2012-07/msg00029.html
- 14. http://invisible-island.net/ncurses/NEWS.html#t20050101
- 15. http://invisible-island.net/ncurses/announce-5.5.html
- 16. http://invisible-island.net/ncurses/ncurses-mapsyms.html
- 17. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-initscr
- 18. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-newterm
- 19. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Initialization
- 20. http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_NO_SETBUF
- 21. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html
- 22. http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode
- 23. http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode
- 24. http://invisible-island.net/ncurses/man/curs_printw.3x.html
- 25. http://invisible-island.net/ncurses/ncurses-mapsyms.html
- 26. http://invisible-island.net/ncurses/tack.html
- 27. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_tioctl
- 28. http://invisible-island.net/ncurses/man/curs_opaque.3x.html
- 29. http://invisible-island.net/ncurses/man/curs_attr.3x.html#h2-PORTABILITY
- 30. http://invisible-island.net/ncurses/man/form_field_opts.3x.html
- 31. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin
- 32. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin
- 33. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output
- 34. http://invisible-island.net/ncurses/tctest.html
- 35. http://invisible-island.net/ncurses/tctest.html#my-better-translation
- 36. http://invisible-island.net/ncurses/NEWS.html#t980103
- 37. https://svnweb.freebsd.org/base/head/lib/libc/gen/getcap.c?revision=244092&view=markup#l784
- 38. http://invisible-island.net/ncurses/ncurses-examples.html
- 39. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_env
- 40. http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-derwin
- 41. http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-mvwin
- 42. http://invisible-island.net/ncurses/man/form_driver.3x.html#h3-form_driver_w
- 43. http://invisible-island.net/ncurses/terminfo.src.html#toc-_M_L_T_E_R_M
- 44. http://invisible-island.net/ncurses/terminfo.src.html#tic-nsterm
- 45. http://invisible-island.net/ncurses/terminfo.src.html#tic-putty-sco
- 46. http://invisible-island.net/ncurses/terminfo.src.html#tic-teken
- 47. http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_A_T_O_R
- 48. http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_O_L_O_G_Y
- 49. http://invisible-island.net/ncurses/terminfo.src.html#tic-tmux
- 50. http://invisible-island.net/ncurses/terminfo.src.html#toc-_S_I_M_P_L_E_T_E_R_M
- 51. http://invisible-island.net/ncurses/terminfo.src.html#tic-vte
- 52. http://invisible-island.net/ncurses/terminfo.src.html#tic-vt520ansi
- 53. http://aerie.jexium-island.net/ncurses/man/clear.1.html
- 54. http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_sl
- 55. http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1005
- 56. http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1006
- 57. http://invisible-island.net/ncurses/NEWS.html
- 58. http://invisible-island.net/scripts/man2html.html
- 59. http://invisible-island.net/ncurses/NCURSES-Programming-HOWTO.html
- 60. http://invisible-island.net/ncurses/NEWS.html#t20110319
- 61. http://invisible-island.net/ncurses/NEWS.html#t20021221
- 62. http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions
- 63. http://invisible-island.net/ncurses/man/default_colors.3x.html
- 64. http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions
- 65. http://invisible-island.net/ncurses/man/resizeterm.3x.html
- 66. http://invisible-island.net/ncurses/NEWS.html#t980725
- 67. http://invisible-island.net/ncurses/NEWS.html#t960418
- 68. http://invisible-island.net/ncurses/NEWS.html#t970405
- 69. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-set_term
- 70. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-delscreen
- 71. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output
- 72. http://docs.oracle.com/cd/E19253-01/html/817-0552/fhkpy.html
- 73. http://invisible-island.net/ncurses/announce-5.9.html
- 74. http://invisible-island.net/ncurses/announce-5.8.html
- 75. http://invisible-island.net/ncurses/ncurses-examples.html
- 76. http://invisible-island.net/ncurses/man/curs_beep.3x.html
- 77. http://invisible-island.net/ncurses/man/curs_beep.3x.html
- 78. http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-curs_set
- 79. http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_CONSOLE2
- 80. http://stackoverflow.com/questions/20877689/gcc-4-8-1-minggw-d-option-does-not-work-as-usual
- 81. http://linux.die.net/man/1/pkg-config
- 82. http://invisible-island.net/ncurses/NEWS.html#t20021206
- 83. https://gcc.gnu.org/gcc-5/
- 84. http://invisible-island.net/autoconf/portability-test.html
- 85. http://invisible-island.net/ncurses/man/tic.1m.html
- 86. http://invisible-island.net/ncurses/man/captoinfo.1m.html
- 87. http://invisible-island.net/ncurses/man/tset.1.html
- 88. http://invisible-island.net/ncurses/man/toe.1m.html
- 89. http://invisible-island.net/ncurses/ncurses.faq.html#additional_reading
- 90. http://invisible-island.net/ncurses/ncurses.faq.html
- 91. http://invisible-island.net/ncurses/ncurses-examples.html
- 92. http://invisible-island.net/cdk/
- 93. http://invisible-island.net/ded/
- 94. http://invisible-island.net/dialog/
- 95. http://lynx.isc.org/
- 96. http://www.midnight-commander.org/
- 97. http://www.mutt.org/
- 98. http://www.ncftp.com/
- 99. https://sites.google.com/a/bostic.com/keithbostic/nvi
- 100. http://www.tin.org/
- 101. http://alioth.debian.org/projects/minicom/
- 102. https://mosh.mit.edu/
- 103. http://invisible-island.net/ncurses/tack.html
- 104. http://tmux.github.io/
- 105. http://invisible-island.net/vile/
- 106. http://www.gnu.org/software/emacs/
- 107. http://www.gnu.org/software/screen/
- 108. http://www.vim.org/
- 109. mailto:dickey@invisible-island.net
- 110. http://invisible-island.net/ncurses/ncurses-license.html
- 111. mailto:bug-ncurses@gnu.org
- 112. mailto:bug-ncurses-request@gnu.org
- 113. ftp://invisible-island.net/ncurses/
- 114. http://lists.gnu.org/archive/html/bug-ncurses
- 115. https://lists.gnu.org/archive/html/bug-ncurses
- 116. http://invisible-island.net/scripts/man2html.html
- 117. http://invisible-island.nethttp://invisible-island.net/ncurses/ncurses-license.html
- 118. http://invisible-island.net/ncurses/ncurses-mapsyms.html
- 119. http://invisible-island.net/ncurses/ncurses-mingw.html
- 120. http://invisible-island.net/ncurses/tack.html
- 121. http://invisible-island.net/autoconf/portability-tar.html
- 122. http://invisible-island.net/ncurses/tctest.html
- 123. http://invisible-island.net/ncurses/ncurses.html#download_database
- 124. http://www.catb.org/~esr/terminfo/
- 125. http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal
- 126. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-overview
- 127. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-release-notes
- 128. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-library
- 129. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-lib-setbuf
- 130. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-lib-versioning
- 131. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-lib-other
- 132. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-programs
- 133. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-utilities
- 134. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-examples
- 135. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-database
- 136. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-documentation
- 137. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-bug-fixes
- 138. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-config-config
- 139. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-config-major
- 140. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-config-options
- 141. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-portability
- 142. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-port-mingw
- 143. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-port-systems
- 144. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-features
- 145. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-who-uses
- 146. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-development
- 147. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-this-stuff
- 148. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-other-stuff
+ * Overview
+ * Release Notes
+ + Library improvements
+ o New features
+ o Other improvements
+ + Program improvements
+ o Utilities
+ o Examples
+ + Terminal database
+ + Documentation
+ + Interesting bug-fixes
+ + Configuration changes
+ o Major changes
+ o Configuration options
+ + Portability
+ * Features of ncurses
+ * Applications using ncurses
+ * Development activities
+ * Related resources
+ * Other resources