                            Announcing ncurses 6.4

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:
     * 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
       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
       vendor  unix  systems,  e.g.,  AIX,  HP-UX,  IRIX64, SCO, Solaris,
       Tru64.
     * It should work readily on any ANSI/POSIX-conforming unix.

   The distribution includes the library and support utilities, including
     * 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.4, released December 31, 2022.

   This  release  is  designed  to  be source-compatible with ncurses 5.0
   through  6.3; 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.3 release.

  Library improvements

    New features

   There are no new features in this release.

    Other improvements

   These are improvements to existing features:
     * modify  delscreen  to  more  effectively delete all windows on the
       given screen.
     * modify  wnoutrefresh  to  call  pnoutrefresh if its parameter is a
       pad,  rather than treating it as an error, and modify new_panel to
       permit its window-parameter to be a pad
     * modify  curses_trace()  to  show  the trace-mask as symbols, e.g.,
       TRACE_ORDINARY, DEBUG_LEVEL(3).
     * improve  checks  for valid mouse events when an intermediate mouse
       state is not part of the mousemask specified by the caller
     * allow extended-color number in opts parameter of wattr_on.
     * improve _tracecchar_t2 formatting of base+combining character.
     * trim  out some unwanted linker options from ncurses*config and .pc
       files seen in Fedora 36+.
     * improve shell-scripts with shellcheck
     * improve use of "trap" in shell scripts, using a script.
     * modify make-tar.sh scripts to make timestamps more predictable.

   These are corrections to existing features:
     * modify  misc/gen-pkgconfig.in  to  allow  for  the  case where the
       library  directory  does  not  yet  exist, since this is processed
       before doing an install
     * set trailing null on string passed from winsnstr to wins_nwstr.
     * modify  waddch_literal  to  allow  for double-width base character
       when merging a combining character

  Program improvements

   Several improvements were made to the utility programs:

   infocmp

          + rewrite  canonical_name  function of infocmp to ensure buffer
            size
          + improve  readability  of  long parameterized expressions with
            the  infocmp  "-f"  option  by  allowing  split before a "%p"
            marker.
          + modify   verbose-option   of  infocmp,  tic,  toe  to  enable
            debug-tracing if that is configured.

   tabs
          limit tab-stop values to max-columns

   tic
          add   consistency   check   in   tic  for  u6/u7/u8/u9  and  NQ
          capabilities.

   tput
          corrected use of original tty-modes in init/reset subcommands

    Examples

   Along  with  the  library and utilities, improvements were made to the
   ncurses-examples.  Most  of  this  activity  aimed  at  improving  the
   test-packages:
     * add  minimal  -h  (usage)  and  -V  (version)  getopt logic to all
       ncurses-examples programs.
     * fix an error in "@" command in test/ncurses.c F-menu
     * add curses_trace to ifdef's for START_TRACE in test/test.priv.h
     * improve pthread-configuration for test/worm.c
     * add setlocale call to several test-programs.
     * workaround  in  test/picsmap.c  for  use of floating point for rgb
       values by ImageMagick 6.9.11, which appears to use the wrong upper
       limit.
     * use  static libraries for AdaCurses test-package for Mageia, since
       no gprbuild package is available.
     * install  Ada95  sample  programs  in  libexecdir, adding a wrapper
       script to invoke those.
     * install  ncurses-examples programs in libexecdir, adding a wrapper
       script to invoke those.

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

   test/combine
          demonstrate combining characters

   test/test_delwin
          demonstrate deleting a window

   test/test_mouse
          observe  mouse  events  in  the  raw terminal or parsed ncurses
          modes

   test/test_unget_wch
          demonstrate the unget_wch and unget functions

  Terminal database

   There are several new terminal descriptions:
     * mosh
     * mosh-256color
     * teken-16color
     * teken-sc
     * teken-vt
     * xgterm

   There  are  many  changes to existing terminal descriptions. Some were
   updates to several descriptions:
     * make description-fields distinct
     * fix errata in description fields
     * add/use several building-blocks:
          + aixterm+sl
          + ansi+cpr
          + apollo+vt132
          + decid+cpr
          + ncr260vp+sl
          + wyse+sl
          + x10term+sl
          + xterm+acs
          + xterm+alt47

   while  others  affected specific descriptions. These were retested, to
   take into account changes by their developers:
     * kitty
     * teken

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

   att610+cvis0
          amended note as per documentation for att610, att620, att730

   kon, kon2, jfbterm
          revise to undo "linux2.6" change to smacs/rmacs/enacs

   st-0.6
          add dim, ecma+strikeout

   foot+base
          add xterm+sl-alt

   dec+sl
          correct dsl in dec+sl

   mintty and tmux
          correct setal in mintty/tmux entries, add to vte-2018

   nsterm
          modify nsterm to use xterm+alt1049

   putty
          modify putty to use xterm+alt1049

   vte-2018
          add blink and setal

   A few entries use extensions (user-defined terminal capabilities):
     * use  ansi+enq  and  decid+cpr in cases where the terminal probably
       supported the u6-u9 extension
     * remove u6-u9 from teken-2018
     * use  NQ  to flag entries where the terminal does not support query
       and response
     * add/use bracketed+paste to help identify terminals supporting this
       xterm feature
     * modify  samples  for xterm mouse 1002/1003 modes to use 1006 mode,
       and also provide for focus in/out responses
     * xterm  patch  #371 supports DEC-compatible status-line. add dec+sl
       to  xterm-new, per xterm #371, add xterm-p371, add xterm-p370, for
       use  in  older  terminals, and set "xterm-new" to "xterm-p370" (to
       ease adoption).

  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:
          + remove a stray '/' from description of %g in terminfo(5).
          + correct/improve  font-formatting in curs_getch.3x, as well as
            other manual pages.
     * New/improved history and portability sections:
          + add portability notes for delscreen and delwin in manual.
          + improve curs_slk.3x discussion of extensions and portability
     * Other improvements:
          + improve  curs_bkgd.3x,  explaining  that  bkgdset  can affect
            results for bkgd
          + add note on portable memory-leak checking in curs_memleaks.3x
          + expanded description in resizeterm.3x
          + add  section  on  releasing  memory  to  curs_termcap.3x  and
            curs_terminfo.3x manpages.
          + add  clarification  of  the  scope  of  dynamic  variables in
            terminfo(5).
          + improve formatting of ncurses-intro.html and hackguide.html
          + improve curs_clear.3x links to other pages
          + update  ncurses-howto,  making documentation fixes along with
            corrections to example programs.
          + use  newer  version  1.36 of gnathtml for generating Ada html
            files.
          + update external links in Ada95.html

   There  are  no new manual pages (all of the manual page updates are to
   existing pages).

  Interesting bug-fixes

   While  there  were  many bugs fixed during development of ncurses 6.4,
   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 those dealing with memory leaks and buffer
   overflows.  Although  the utilities are designed for text files (which
   they do properly), some choose to test them with non-text files.
     * Text  files  contain  no  embedded  nulls.  Also,  they end with a
       newline.  Feeding tic non-text files exposed a few cases where the
       program  did  not  check  for  those  issues. As a result, further
       processing  of the input found limit-checks whose assumptions were
       invalid.
     * Fixing  the limit-checks (first) found a problem with tic managing
       the  list  of  strings  in  a terminal description. In merging two
       terminal  descriptions  (i.e.,  the  "use="  feature), tic was not
       allocating  a  complete copy. A quick repair for that introduced a
       memory leak.
     * The  checks  for non-text files are improved (i.e., embedded nulls
       in  the  input  file  will  cause  tic  to  reject  it rather than
       attempting to process it).
     * The string allocations in tic are likewise improved.

  Configuration changes

    Major changes

   There  are  no  major  changes.  No  new  options  were added. Several
   improvements were made to configure checks.

    Configuration options

   There are a few new/modified configure options:

   --with-abi-version
          add ABI 7 defaults to configure script.

   --with-caps
          add   warning   in  configure  script  if  file  specified  for
          "--with-caps" does not exist.

   --with-manpage-format
          bzip2 and xz compression are now supported

   --with-xterm-kbs
          add    check/warning    in    configure    script   if   option
          "--with-xterm-kbs" is missing or inconsistent

  Portability

   Many  of  the  portability  changes  are implemented via the configure
   script:
     * amend  configure option's auto-search to account for systems where
       none of the directories known to pkg-config exist
     * corrected regex needed for older pkg-config used in Solaris 10
     * improve  handling of --with-pkg-config-libdir option, allowing for
       the case where either $PKG_CONFIG_LIBDIR or the option value has a
       colon-separated list of directories
     * if   the   --with-pkg-config-libdir   option  is  not  given,  use
       ${libdir}/pkgconfig as a default
     * improve search-path check for pkg-config, e.g., for Debian testing
       which installs pkg-config with architecture-prefixes.
     * build-fix for cross-compiling to MingW, conditionally add -lssp
     * improve configure check for getttynam
     * fixes to build with dietlibc:
          + add configure check for fpathconf
          + add   configure   check   for  math  sine/cosine,  needed  in
            test/tclock, and eliminate pow() from test/hanoi
          + use wcsnlen as an alternative to wmemchr if it is not found
     * modify  configure macro CF_BUILD_CC to check if the build-compiler
       works,  rather  than that it is different from the cross-compiler,
       e.g.,  to  accommodate  a  compiler  which  can be used for either
       purpose with different flags
     * modify  configure/scripts  to work around interference by GNU grep
       3.8

   Here are some of the other portability fixes:
     * change  man_db.renames  to  template,  to  handle  ncurses*-config
       script with the --extra-suffix configure option.
     * update   CF_XOPEN_SOURCE  macro,  adding  variants  "gnueabi"  and
       "gnueabihf" to get _DEFAULT_SOURCE special case, as well as adding
       GNU  libc  suffixes for "abi64", "abin32", "x32" to distinguish it
       from other libc flavors.
     * work  around  musl's  nonstandard  use  of  feature test macros by
       adding  a  definition  for NCURSES_WIDECHAR to the generated ".pc"
       and *-config files.
     * use  "command  -v"  rather than "type" in Ada95/gen/Makefile.in to
       fix a portability issue.
     _________________________________________________________________

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  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.
          + the   form   library,   supporting  data  collection  through
            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,
            but  which are hidden from SVr4 curses applications using the
            same terminal database.
          + It  can  be optionally configured to match the format used in
            related systems such as AIX and Tru64.
          + Alternatively,  ncurses  can  be  configured  to  use  hashed
            databases  rather  than  the  directory of files used by SVr4
            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 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).
     * Unlike  SVr3 curses, ncurses can write to the rightmost-bottommost
       corner  of  the  screen  if  your terminal has an insert-character
       capability.
     * Ada95 and C++ bindings.
     * Support  for mouse event reporting with X Window xterm and FreeBSD
       and OS/2 console windows.
     * Extended mouse support via Alessandro Rubini's gpm package.
     * The  function  wresize  allows  you  to resize windows, preserving
       their data.
     * The  function  use_default_colors allows you to use the terminal's
       default colors for the default color pair, achieving the effect of
       transparent colors.
     * The functions keyok and define_key allow you to better control the
       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
       cursor-local-movement computation more efficient than either BSD's
       or System V's.
     * Super   hardware   scrolling   support.   The  screen-update  code
       incorporates  a novel, simple, and cheap algorithm that enables it
       to  make  optimal  use  of hardware scrolling, line-insertion, and
       line-deletion  for  screen-line  movements. This algorithm is more
       powerful than the 4.4BSD curses quickch routine.
     * Real  support  for  terminals  with  the  magic-cookie glitch. The
       screen-update  code  will  refrain from drawing a highlight if the
       magic-   cookie  unattributed  spaces  required  just  before  the
       beginning  and  after the end would step on a non-space character.
       It  will  automatically  shift  highlight boundaries when doing so
       would  make it possible to draw the highlight without changing the
       visual appearance of the screen.
     * It  is  possible to generate the library with a list of pre-loaded
       fallback  entries linked to it so that it can serve those terminal
       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 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
       system  directory.  This feature makes it easier for users to have
       personal  terminfo  entries without giving up access to the system
       terminfo directory.
     * You  may  specify  a  path  of  directories to search for compiled
       descriptions  with  the  environment  variable TERMINFO_DIRS (this
       generalizes  the  feature  provided by TERMINFO under stock System
       V.)
     * In  terminfo  source files, use capabilities may refer not just to
       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  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
       has  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 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
   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.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.
   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

     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.3/ and
     https://invisible-mirror.net/archives/ncurses/6.3/ .

   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:
     * 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 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.

     * 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
