- a terminfo compiler tic(1), a decompiler infocmp(1), clear(1),
- tput(1), tset(1), and a termcap conversion tool captoinfo(1). Full
- manual pages are provided for the library and tools.
-
- The ncurses distribution is available via anonymous FTP at the GNU
- distribution site [1]ftp://ftp.gnu.org/gnu/ncurses/ .
- It is also available at [2]ftp://invisible-island.net/ncurses/ .
-
- Release Notes
-
- This release is designed to be upward compatible from ncurses 5.0
- through 5.6; very few applications will require recompilation,
- depending on the platform. These are the highlights from the
- change-log since ncurses 5.6 release.
-
- Interface changes:
- * generate linkable stubs for some macros:
- getattrs
-
- New features and improvements:
- * library
- + new flavor of the ncurses library provides rudimentary
- support for POSIX threads. Several functions are reentrant,
- but most require either a window-level or screen-level mutex.
- (This is API-compatible, but not ABI-compatible with the
- normal library).
- + add NCURSES_OPAQUE symbol to curses.h, will use to make
- structs opaque in selected configurations.
- + add NCURSES_EXT_FUNCS and NCURSES_EXT_COLORS symbols to
- curses.h to make it simpler to tell if the extended functions
- and/or colors are declared.
- + add wresize() to C++ binding
- + eliminate fixed-buffer vsprintf() calls in C++ binding.
- + add several functions to C++ binding which wrap C functions
- that pass a WINDOW* parameter.
- + adapt mouse-handling code from menu library in form-library
- + improve tracing for form library, showing created forms,
- fields, etc.
- + make $NCURSES_NO_PADDING feature work for termcap interface .
- + add check to trace-file open, if the given name is a
- directory, add ".log" to the name and try again.
- + several new manpages: curs_legacy.3x, curs_memleaks.3x,
- curs_opaque.3x and curs_threads.3x
- * programs:
- + modified three test-programs to demonstrate the threading
- support in this version: ditto, rain, worm.
- + several new test-programs: demo_panels, dots_mvcur,
- inch_wide, inchs, key_name, key_names, savescreen,
- savescreen.sh test_arrays, test_get_wstr, test_getstr,
- test_instr, test_inwstr and test_opaque.
- + add adacurses-config to the Ada95 install.
- + modify tic -f option to format spaces as \s to prevent them
- from being lost when that is read back in unformatted
- strings.
- + The tack program is now distributed separately from ncurses.
- * terminal database
- + added entries:
- o Eterm-256color, Eterm-88color and rxvt-88color
- o aterm
- o konsole-256color
- o mrxvt
- o screen.mlterm
- o screen.rxvt
- o teraterm4.59 is now the primary primary teraterm entry,
- renamed original to teraterm2.3
- o 9term terminal
- o Newbury Data entries
- + updated/improved entries:
- o gnome to version 2.22.3
- o h19, z100
- o konsole to version 1.6.6
- o mlterm, mlterm+pcfkeys
- o xterm, and building-blocks for function-keys to [3]xterm
- patch #230.
-
- Major bug fixes:
- * add logic to tic for cancelling strings in user-defined
- capabilities (this is needed for current konsole terminfo entry).
- * modify mk-1st.awk so the generated makefile rules for linking or
- installing shared libraries do not first remove the library, in
- case it is in use, e.g., libncurses.so by /bin/sh.
- * correct check for notimeout() in wgetch().
- * fix a sign-extension bug in infocmp's repair_acsc() function.
- * change winnstr() to stop at the end of the line.
- * make Ada95 demo_panels() example work.
- * fix for adding a non-spacing character at the beginning of a line.
- * fill in extended-color pair to make colors work for
- wide-characters using extended-colors.
- * improve refresh of window on top of multi-column characters,
- taking into account split characters on left/right window
- boundaries.
- * modify win_wchnstr() to ensure that only a base cell is returned
- for each multi-column character.
- * improve waddch() and winsch() handling of EILSEQ from mbrtowc() by
- using unctrl() to display illegal bytes rather than trying to
- append further bytes to make up a valid sequence.
- * restore curs_set() state after endwin()/refresh()
- * modify keyname() to use "^X" form only if meta() has been called,
- or if keyname() is called without initializing curses, e.g., via
- initscr() or newterm().
- * modify unctrl() to check codes in 128-255 range versus isprint().
- If they are not printable, and locale was set, use a "M-" or "~"
- sequence.
- * improve resizeterm() by moving ripped-off lines, and repainting
- the soft-keys.
- * modify form library to accept control characters such as newline
- in set_field_buffer(), which is compatible with Solaris.
- * use NCURSES_MOUSE_MASK() in definition of BUTTON_RELEASE(), etc.,
- to make those work properly with the --enable-ext-mouse
- configuration
- * correct some functions in Ada95 binding which were using return
- value from C where none was returned.
- * reviewed/fixed issues reported by Coverity and Klocwork tools.
-
- Portability:
- * configure script:
- + new options:
-
- --disable-big-strings
- control whether static string tables are generated
- as single large strings (to improve startup
- performance), or as array of individual strings.
-
- --disable-relink
- control whether shared libraries are relinked
- (during install) when rpath is enabled.
-
- --disable-tic-depends
- make explicit whether tic library depends on
- ncurses/ncursesw library.
-
- --enable-mixed-case
- override the configure script's check if the
- filesystem supports mixed-case filenames. This
- allows one to control how the terminal database
- maps to the filesystem. For filesystems that do not
- support mixed-case, the library uses generate
- 2-character (hexadecimal) codes for the lower-level
- of the filesystem terminfo database
-
- --enable-reentrant
- builds a different flavor of the ncurses library
- (ncursest) which improves reentrant use of the
- library by reducing global and static variables
- (see the "--with-pthread" option for the threaded
- support).
-
- --enable-weak-symbols
- use weak-symbols for linking to the POSIX thread
- library, and use the same soname for the ncurses
- shared library as the normal library (caveat: the
- ABI is for the threaded library, which makes global
- data accessed via functions).
-
- --with-pthread
- build with the POSIX thread library (tested with
- AIX, Linux, FreeBSD, OpenBSD, HPUX, IRIX64,
- Solaris, Tru64).
-
- --with-ticlib
- build/install the tic-support functions in a
- separate library
-
- + improved options:
-
- --enable-ext-colors
- requires the wide-character configuration.
-
- --with-chtype
- ignore option value "unsigned" is always added to
- the type in curses.h; do the same for
- --with-mmask-t.
-
- --with-dmalloc
- build-fix for redefinition of strndup.
-
- --with-hashed-db
- accepts a parameter which is the install-prefix of
- a given Berkeley Database.
-
- --with-hashed-db
- the $LIBS environment variable overrides the search
- for the db library.
-
- --without-hashed-db
- assumed when "--disable-database" is used.
-
- * other configure/build issues:
- + build-fixes for LynxOS
- + modify shared-library rules to allow FreeBSD 3.x to use
- rpath.
- + build-fix for FreeBSD "contemporary" TTY interface.
- + build-fixes for AIX with libtool.
- + build-fixes for Darwin and libtool.
- + modify BeOS-specific ifdef's to build on Haiku.
- + corrected gcc options for building shared libraries on
- Solaris and IRIX64.
- + change shared-library configuration for OpenBSD, make rpath
- work.
- + build-fixes for using libutf8, e.g., on OpenBSD 3.7
- + add "-e" option in ncurses/Makefile.in when generating
- source-files to force earlier exit if the build environment
- fails unexpectedly.
- + add support for shared libraries for QNX.
- + change delimiter in MKlib_gen.sh from '%' to '@', to avoid
- substitution by IBM xlc to '#' as part of its extensions to
- digraphs.
- * library:
- + rewrite wrapper for wcrtomb(), making it work on Solaris.
- This is used in the form library to determine the length of
- the buffer needed by field_buffer.
- + add/use configure script macro CF_SIG_ATOMIC_T, use the
- corresponding type for data manipulated by signal handlers.
- + set locale in misc/ncurses-config.in since it uses a range
- + disable GPM mouse support when $TERM does not happen to
- contain "linux", since Gpm_Open() no longer limits its
- assertion to terminals that it might handle, e.g., within
- "screen" in xterm.
- + reset mouse file-descriptor when unloading GPM library.
- * test programs:
- + update test programs to build/work with various UNIX curses
- for comparisons.
-
- Features of Ncurses
-
- The ncurses package is fully compatible with SVr4 (System V Release 4)
- curses:
- * All 257 of the SVr4 calls have been implemented (and are
- documented).
- * Full support for SVr4 curses features including keyboard mapping,
- color, forms-drawing with ACS characters, and automatic
+ * 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
+ * tset, to initialize the terminal
+
+ Full manual pages are provided for the library and tools.
+
+ The ncurses distribution is available at ncurses' homepage:
+
+ https://invisible-island.net/archives/ncurses/ or
+ https://invisible-mirror.net/archives/ncurses/ .
+
+ It is also available at the GNU distribution site
+
+ https://ftp.gnu.org/gnu/ncurses/ .
+
+Release Notes
+
+ These notes are for ncurses 6.5, released April 27, 2024.
+
+ This release is designed to be source-compatible with ncurses 5.0
+ 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, listed in this
+ announcement.
+
+ 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
+
+ New features
+
+ 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
+
+ This release drops compatibility with obsolete versions of tack, e.g.,
+ pre-1.08
+
+ Other improvements
+
+ 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
+
+ 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
+
+ Several improvements were made to the utility programs. Some were done
+ to make the infocmp option "-u" option help refactor the terminal
+ database.
+
+ infocmp
+
+ + 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.
+
+ tic
+
+ + 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
+
+ tput and tset
+
+ + 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, 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
+
+ There is one new demo/test programs:
+
+ test/test_endwin.c
+ This program shows the return-status from endwin with different
+ combinations of endwin (repeated), initscr, newterm.
+
+ Terminal database
+
+ There are several new terminal descriptions:
+ * 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
+
+ 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).
+
+ 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
+
+ As usual, this release
+ * improves documentation by describing new features,
+ * attempts to improve the description of features which users have
+ found confusing
+ * fills in overlooked descriptions of features which were described
+ in the NEWS file but treated sketchily in manual pages.
+
+ 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
+
+ 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
+
+ These are the major changes (aside from introducing tiparm_s):
+ * use wide-character (ncursesw) by default
+ * use opaque typedefs by default
+
+ 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.
+
+ 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 a few new configure options:
+
+ --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.
+
+ 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.
+
+ --enable-check-size
+ Compile-in feature to detect screensize for terminals which do
+ not advertise their screensize, e.g., serial terminals.
+
+ --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-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.
+
+ These configure options are modified:
+
+ --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
+
+ 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
+
+ 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
+
+ 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 the features of SVr4 curses including keyboard
+ mapping, color, form drawing with ACS characters, and automatic