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


Announcing ncurses 6.2

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.2, released February 12, 2020.

This release is designed to be source-compatible with ncurses 5.0 through 6.1; 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 user-defined capabilities in terminal descriptions. The release notes also mention some other bug-fixes, but are focused on new features and improvements to existing features since ncurses 6.1 release.

Library improvements

New features

There are several new features:

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

Other improvements

These are 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

Several improvements were made to the utility programs:

clear
infocmp
tic
toe
tset
tput

Several changes were made to the generated ncurses*config scripts and the analogous “.pc” files to reduce differences between the configurations they report:

Examples

Along with the library and utilities, improvements were made to the ncurses-examples. Most of this activity aimed at improving the test-packages. A few changes are more generally useful, e.g., for the main ncurses test-program, and for analyzing traces using the tracemunch script:

There are other new demo/test programs and reusable examples:

color_content
Demonstrate the color_content and extended_color_content functions.
demo_tabs
A simple demo of tabs in curses.
dump_window
A portable curses screen-dump, used to compare ncurses screen contents with Solaris.
pair_content
Demonstrate the pair_content and extended_pair_content functions.
report_hashing
Check hash-tables used for terminfo and termcap names.
parse_rgb
Sample implementation of the ncurses RGB extension from user_caps.5, used in picsmap and savescreen programs.

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.

Terminal database

There are several new terminal descriptions:

alacritty, domterm, kitty, mintty, mintty-direct, ms-terminal, n7900, nsterm-build309, nsterm-direct, screen5, ti703, ti707, ti703-w, ti707-w vscode, vscode-direct, xterm-mono, xterm.js

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 changes by their developers:

terminator, st

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

adds200:
gnome-256color
interix
linux-16color
nsterm-256color:
regent40:
regent60:
tvi950:
tvi955:
vi200:
wy50:
wy50 and wy60:
xterm+x11hilite:

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

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

Some of the improvements are more subtle, relating to the way the information is presented. For instance, the generated terminfo.5 file uses a different table layout, allowing it to use space on wide terminals more effectively.

Interesting bug-fixes

While there were many bugs fixed during development of ncurses 6.2, only a few (the reason for this release) were both important and interesting. Most of the bug-fixes were for local issues which did not affect compatibility across releases. Since those are detailed in the NEWS file no elaboration is needed here.

The interesting bugs were in tic/infocmp's handling of user-defined capabilities. These were not recent bugs. Initially it was a simple problem:

For ncurses, the elapsed time to fix this bug was less than three years. Someone reported a problem with the terminal description a few weeks after releasing ncurses 6.1 (in tmux #1264), and the terminal description was updated that week (ncurses patch 20180224):

20180224
        + modify _nc_resolve_uses2() to detect incompatible types when merging
          a "use=" clause of extended capabilities.  The problem was seen in a
          defective terminfo integrated from simpleterm sources in 20171111,
          compounded by repair in 20180121.
        + correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD

The larger part of that change added a check to prevent a simple merge of terminal descriptions where the same user-defined name was used with different types. But it raised some questions:

Since the correction to terminfo.src could have been readily adopted by packagers, there was nothing more to be done from ncurses' standpoint on that part. But improving ncurses to prevent issues like that is the reason for making a release.

Nothing more (constructive) was mentioned with regard to simpleterm. But a few problems were found in the handling of user-defined capabilities:

Both of these issues dated from the original implementation of user-defined capabilities. Fixing them does not change the terminal database, but a older tic without the fixes will not be able to handle terminfo sources which rely upon those fixes. Starting in June 2019, the download link for the terminfo source file was capped at that date. The development sources have an up-to-date copy of the file, for people with a legitimate need for it.

The “-c” (check) option of tic is not very useful if it cannot offer advice on parameters needed for user-defined capabilities. The various Caps files were reorganized to reduce redundancy, and in the common portion (Caps-ncurses), a registry of user-defined capabilities is provided for use by tic. While users can still define their own custom capabilities, tic will not offer any advice when their parameters do not match.

In ncurses 6.2, tic makes a special check to allow any type for RGB, but its being able to do this relies upon fixes made in the ncurses library in mid-2019.

Configuration changes

Major changes

There are no major changes. Several new options were added to ease integration of packages with systems using different versions of GNAT and ncurses. Also, improvements were made to configure checks.

Configuration options

There are a few new/modified configure options:

--with-config-suffix

helps work around a filename conflict with Debian packages versus test-packages.

--with-ada-libname

allows one to rename the “AdaCurses” library (at least one packager prefers a lowercase name).

--with-fallbacks

now ensures there is a value, and adds the fallback information to top-level Makefile summary.

--with-pcre2

check for pcre-posix library to help with MinGW port.

--with-tic-path and
--with-infocmp-path

help work around problems building fallback source using pre-6.0 tic/infocmp.

--with-versioned-syms

option value can now be a relative pathname.

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/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 E. Dickey. Thomas E. Dickey has acted as the maintainer for the Free Software Foundation, which holds 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

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

Patches to the current release are made available at

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

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 . The collection of computer manuals at bitsavers.org has also been useful.