Announcing ncurses 6.1

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:

ftp://ftp.invisible-island.net/ncurses/ or
https://invisible-mirror.net/archives/ncurses/ .

It is also available via anonymous FTP at the GNU distribution site

ftp://ftp.gnu.org/gnu/ncurses/ .

Release Notes

These notes are for ncurses 6.1, released January 27, 2018.

This release is designed to be source-compatible with ncurses 5.0 through 6.0; providing extensions to the 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 to the ncurses 6 ABI:

There are, of course, numerous other improvements, listed in this announcement.

The release notes also mention some bug-fixes, but are focused on new features and improvements to existing features since ncurses 6.0 release.

Library improvements

New features

The improved integration of tput and tset made only small changes to the libraries. However, supporting extended numeric capabilities required a few changes:

The motivation for making this extension came from noticing that termcap applications could (though not realistically) use larger numbers than would fit in 16-bits, and the fact that the number of color pairs for a 256-color xterm could not be expressed in terminfo (i.e., 32767 versus 65536). Also, a few terminals support direct-colors, which could use the extension.

Generally speaking, applications that use internal details of a library are unsupported. There was exactly one exception for ncurses: the tack program used the internal details of TERMINAL, because it provides an ncurses-specific feature for interactively modifying a terminfo description and writing the updated description to a text-file. It was possible to not only separate tack from these internal details of ncurses, but to generalize it so that the program works with Unix curses (omitting the ncurses-specific feature). That was released as tack 1.08 in July 2017.

While making changes to tack to eliminate its dependency upon ncurses internals, the publicly-visible details of those internals were reviewed, and some symbols were moved to private header files, while others were marked explicitly as ncurses internals. Future releases of ncurses may eliminate some of those symbols (such as those used by tack 1.07) because they are neither part of the API or the ABI.

Using the TERMTYPE2 extended numeric capabilities, it is possible to support both color pair values and color values past 32767. Taking compatibility into account, developers readily understand that neither function signatures nor structure offsets change. Also, existing functions have to operate with the extended numbers. Most of that work is internal to the library. For the external interfaces, a hybrid approach was used:

Additionally, to improve performance other changes (and extensions) are provided in this release:

Other improvements

These are new or revised features:

These were done to limit or ultimately deprecate features:

These are improvements to existing features:

These are corrections to existing features:

Program improvements

While reviewing user feedback, it became apparent that the differences between reset (an alias for tset) and “tput reset” were confusing:

On further investigation, it turned out that the differences were largely an accident due to the way those programs had evolved.

This release eliminates the unnecessary differences, using the same approach for tput's init (initialization), reset and clear operations as the separate reset and clear programs. Doing this does not change the command-line options; existing scripts are unaffected.

These are the user-visible changes for the three programs (tput, tset and clear):

Other user-visible improvements and new features include:

Other less-visible improvements and new features include:

Several of the less apparent features deal with translation of terminfo to termcap (and the reverse), with corresponding checks by tic:

Examples

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

These changes were made to demonstrate new extensions in ncurses:

There are other new example programs and a few scripts:

A variety of improvements were made to existing programs, both new features as well as options added to make the set of programs more consistent.

The ncurses program is the largest; a proportionately large number of changes were made to it:

These changes were made to the other examples:

Terminal database

There are several new terminal descriptions:

dumb-emacs-ansi, dvtm, dvtm-256color, fbterm, iterm2, linux-m1 minitel entries, putty-noapp, viewdata, and vt100+4bsd building-block.

xterm+noalt, xterm+titlestack, xterm+alt1049, xterm+alt+title building blocks and xterm+direct, xterm+indirect, xterm-direct. from xterm patch #331.

several other “-direct” descriptions to address the differences of other terminal emulators versus xterm-direct.

There are many changes to existing terminal descriptions. Some were updates to several descriptions:

while others affected specific descriptions. These were retested, to take into account new/undocumented changes by their developers:

iterm, minitel, st, viewdata, nsterm

while these are specific fixes based on user reports, or warnings from tic:

ansi building blocks
icl6402
interix
linux
pccon entries
tmux
vt100
vte
xterm

A few entries use extensions (user-defined terminal capabilities):

Documentation

As usual, this release

In particular,

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

There are new manual pages:

Some of the improvements are more subtle, relating to the way the information is presented:

Interesting bug-fixes

Configuration changes

Major changes

This release provides a new binary format for terminal descriptions that use extended numeric capabilities. Applications built with the wide-character ncursesw library can use these extended numbers.

Other applications (i.e., using the 8-bit ncurses library) which read the extended terminal descriptions see those numeric capabilities set to the maximum value for a signed 16-bit number.

Older versions of ncurses' tic accept out-of-range numeric capabilities, storing those as the maximum value for a signed 16-bit number. Other implementations of curses (mentioned in the discussion of picsmap) give zero for these out-of-range capabilities.

Configuration options

These changes provide support for tack 1.08, released in July 2017:

Other changes to the configure-script and generated files include

Portability

Many of the portability changes are implemented via the configure script:


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/vi

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://alioth.debian.org/projects/minicom/

mosh

a replacement for ssh.

https://mosh.mit.edu/

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 Dickey. Thomas Dickey also acts as the maintainer for the Free Software Foundation, which holds the copyright on ncurses.

Contact the current maintainers at

bug-ncurses@gnu.org

To join the ncurses mailing list, please write email to

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

subscribe <name>@<host.domain>

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

Beta versions of ncurses and patches to the current release are made available at

ftp://ftp.invisible-island.net/ncurses/ and
https://invisible-mirror.net/archives/ncurses/ .

There is an archive of the mailing list here:

http://lists.gnu.org/archive/html/bug-ncurses (also https)

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 specification.

You can find lots of information on terminal-related topics not covered in the terminfo file at Richard Shuford's archive .