Announcing ncurses 6.5

Overview

The ncurses (new curses) library is a free software emulation of 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 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 releases such as BSD/OS, FreeBSD and NetBSD to switch over to ncurses.

Since 1995, ncurses has been ported to many systems:

The distribution includes the library and support utilities, including

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:

This release drops compatibility with obsolete versions of tack, e.g., pre-1.08

Other improvements

These are improvements to existing features:

These are corrections to existing features:

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
tic
tput and tset

Examples

Along with the library and utilities, improvements were made to the ncurses-examples:

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:

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:

Documentation

As usual, this release

In addition to providing background information to explain these features and show how they evolved, there are corrections, clarifications, etc.:

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):

However, most of the work on configure scripts was done to reduce warnings within the configure script:

Other improvements made to configure checks include

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:

Here are some of the other portability fixes:


Features of ncurses

The ncurses package is fully upward-compatible with SVr4 (System V Release 4) curses:

The ncurses package also has many useful extensions over SVr4:

Applications using ncurses

The ncurses distribution includes a selection of test programs (including a few games). These are available separately as 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

https://invisible-island.net/cdk/

ded

directory-editor

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.

https://invisible-island.net/dialog/

lynx

the text WWW browser

https://lynx.invisible-island.net/

mutt

mail utility

http://www.mutt.org/

ncftp

file-transfer utility

https://www.ncftp.com/

nvi

New vi uses ncurses.

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

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

https://salsa.debian.org/minicom-team/minicom

mosh

a replacement for ssh.

https://mosh.org/

tack

terminfo action checker

https://invisible-island.net/ncurses/tack.html

tmux

terminal multiplexor

https://github.com/tmux/tmux/wiki

vile

vi-like-emacs may be built to use the terminfo, termcap or curses interfaces.

https://invisible-island.net/vile/

and finally, those which use only the termcap interface:

emacs

text editor

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

https://www.gnu.org/software/screen/

vim

text editor

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. Jürgen 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

bug-ncurses@gnu.org

To join the ncurses mailing list, please write email to

bug-ncurses-request@gnu.org
containing the line:

subscribe <name>@<host.domain>

This list is open to anyone interested in helping with the development and testing of this package.

Beta versions of ncurses are made available at

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:

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:

Other resources

The distribution provides a newer version of the terminfo-format 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 in Richard Shuford's archive (original). The collection of computer manuals at bitsavers.org has also been useful.