Announcing ncurses 6.1


   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

   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
     * 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,
     * It should work readily on any ANSI/POSIX-conforming unix.

   The distribution includes the library and support utilities, including
     * [1]captoinfo, a termcap conversion tool
     * [2]clear, utility for clearing the screen
     * [3]infocmp, the terminfo decompiler
     * [4]tabs, set tabs on a terminal
     * [5]tic, the terminfo compiler
     * [6]toe, list (table of) terminfo entries
     * [7]tput,  utility  for  retrieving  terminal capabilities in shell
     * [8]tset, to initialize the terminal

   Full manual pages are provided for the library and tools.

   The ncurses distribution is available at ncurses' [9]homepage:

     [10] or
     [11] .

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

     [12] .

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:
     * improve integration of tput and tset
     * provide support for extended numeric capabilities.

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

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

  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  TERMINAL  structure  in  <term.h>  is  now opaque. Doing that
       allowed  making the structure larger, to hold the extended numeric
       A   few   applications  required  changes  during  development  of
       ncurses 6.1 because those applications misused the members of that
       structure,   e.g.,   directly   modifying  it  rather  than  using
     * Having  made  TERMINAL  opaque  (and  because  none of the library
       functions  use  anything  except  a  pointer  to TERMINAL), it was
       possible to increase the size of the structure, adding to the end.
       Existing   applications  which  were  linked  to  the  ncurses 6.0
       high-level   (ncurses,  ncursesw)  and  low-level  (tinfo,  tinfo)
       libraries should not require re-linking since the binary interface
       did  not  change,  nor  did  the  structure  offsets with TERMINAL
       A  few  applications use the inner TERMTYPE structure's offsets to
       refer to terminfo capabilities within that structure. Again, those
       do  not require modification because their offsets within TERMINAL
       did not change.
     * When configured for wide-characters, i.e., "ncursesw" the TERMINAL
       structure is extended.
       The  new  data in TERMINAL holds the same information as TERMTYPE,
       but  with  larger  numbers  ("int"  versus  "short").  It is named
       The  library  uses  this  structure  internally  in  preference to
       TERMTYPE,   referring  to  TERMTYPE  only  to  initialize  it  for
       applications that use the capabilities defined in <term.h>
     * When  configured  for  8-bit  (narrow)  characters,  the TERMTYPE2
       structure is not used.
     * The updated application binary interface is 6.1.20171230 (used for
       new  [14]versioned  symbols),  although the interface changes were
       developed several months previously.

   The  motivation  for  making  this  extension  came from noticing that
   [15]termcap  applications  could  (though  not  [16]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
   [17]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 [18]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:
     * X/Open  Curses  defined function prototypes such as wattr_set with
       an  unused parameter, for "future" use. After 25 years, the future
       is  here:  ncurses uses the parameter to augment color pair values
       as described in the [19]manual page.
     * Other  functions such as those defining color pairs did not have a
       corresponding  reserved  parameter.  For  those,  ncurses  defines
       extended  versions  such as init_extended_pair (versus init_pair),
       init_extended_color (versus init_color).

   Additionally,  to  improve  performance other changes (and extensions)
   are provided in this release:
     * Several  new  functions simplify management of large sets of color
       pairs: reset_color_pairs, alloc_pair, find_pair and free_pair.
     * New "RGB" extension capability for direct-color support is used to
       improve performance of color_content.
     * The  internal colorpair_t is now a struct, eliminating an internal
       8-bit limit on colors
     * Allocation  for  SCREEN's  color-pair table starts small, grows on
       demand up to the limit given in the terminal description.
     * setcchar and getcchar now treat a negative color-pair as an error.

    Other improvements

   These are new or revised features:
     * modify  c++/  to  accommodate  deprecation  of  throw and
       throws in c++17
     * add new function unfocus_current_field
     * add option to preserve leading whitespace in form fields
     * add  a  macro  for is_linetouched and adjust the function's return
       value  to  make  it possible for most applications to check for an
     * add  build-time  utility  report_offsets  to  help  show  when the
       various configurations of tinfo library are compatible or not.

   These were done to limit or ultimately deprecate features:
     * drop  two  symbols  obsoleted  in  2004:  _nc_check_termtype,  and
     * move  _nc_tracebits,  _tracedump and _tracemouse to curses.priv.h,
       since they are not part of the suggested ABI6.
     * mark  some  structs  in  form/menu/panel  libraries as potentially
       opaque without modifying API/ABI.
     * ifdef'd     header-file    definition    of    mouse_trafo    with
     * remove  initialization-check  for calling napms in the term-driver
       configuration; none is needed.
     * modify trace to avoid overwriting existing file

   These are improvements to existing features:
     * modify   make_hash   to  allow  building  with  address-sanitizer,
       assuming that --disable-leaks is configured.
     * move  SCREEN field for use_tioctl data before the ncursesw fields,
       and  limit  that  to the sp-funcs configuration to improve termlib
     * modify db-iterator:
          + ignore zero-length files in db-iterator; these are useful for
            instance to suppress $HOME/.terminfo when not wanted.
          + modify  update_getenv  to  ensure  that environment variables
            which  are  not  initially  set  will  be checked later if an
            application happens to set them
     * modify  _nc_outc_wrapper  to use the standard output if the screen
       was not initialized, rather than returning an error.
     * improve  checks for low-level terminfo functions when the terminal
       has not been initialized.
     * modify set_curterm to update ttytype[] data used by longname/p>
     * modify  _nc_get_screensize  to  allow  for  use_env and use_tioctl
       state  to  be  per-screen  when  sp-funcs  are  configured, better
       matching the behavior when using the term-driver configuration.
     * remove an early-return from _nc_do_color, which can interfere with
       data  needed  by  bkgd  when  ncurses  is configured with extended
     * incorporate A_COLOR mask into COLOR_PAIR, in case user application
       provides an out-of-range pair number
     * modify  logic for endwin-state to be able to detect the case where
       the screen was never initialized, using that to trigger a flush of
       ncurses'  buffer for mvcur, e.g., in the sample program dots_mvcur
       for the term-driver configuration.

   These are corrections to existing features:
     * fixes for writing extended color pairs in putwin.
     * modify no-leaks code for lib_cur_term.c to account for the tgetent
     * amend handling of the repeat_char capability in EmitRange to avoid
       scope  creep:  translate  the character to the alternate character
       set  when  the  alternate character set is enabled, and do not use
       repeat_char for characters past 255.
     * improve    wide-character    implementation    of   myADDNSTR   in
       frm_driver.c,    which    was   inconsistent   with   the   normal
     * modify winnstr and winchnstr to return error if the output pointer
       is  null,  as  well  as  adding a null pointer check of the window
       pointer for better compatibility with other implementations.
     * modify  setupterm  to  save  original  tty-modes so that erasechar
       works  as expected. Also modify _nc_setupscreen to avoid redundant
       calls to get original tty-modes.
     * modify  wattr_set  and wattr_get to return ERR if win-parameter is
       null, as documented.
     * correct   order  of  initialization  for  traces  in  use_env  and
       use_tioctl versus first _tracef calls.
     * correct parameters for copywin call in _nc_Synchronize_Attributes
     * flush  the  standard  output in _nc_flush for the case where SP is
       zero,  e.g.,  when  called  via  putp. This fixes a scenario where
       "tput flash" did not work after changes in 20130112.
     * amend  internal  use  of  tputs  to consistently use the number of
       lines  affected,  e.g.,  for  insert/delete  character operations.
       While  merging terminfo source early in 1995, several descriptions
       used  the "*" proportional delay for these operations, prompting a
       change in doupdate.
     * correct return-value of extended putwin.
     * double-width  multibyte  characters  were  not counted properly in
       winsnstr and wins_nwstr.
     * amend  fix  for  _nc_ripoffline from 20091031 to make test/ditto.c
       work in threaded configuration.
     * modify _nc_viscbuf2 and _tracecchar_t2 to trace wide-characters as
       a whole rather than their multibyte equivalents.
     * minor  fix  in  wadd_wchnstr  to ensure that each cell has nonzero
     * move PUTC_INIT calls next to wcrtomb calls, to avoid carry-over of
       error status when processing Unicode values which are not mapped.
     * add missing assignment in lib_getch.c to make notimeout work

  Program improvements

   While reviewing user feedback, it became apparent that the differences
   between [20]reset (an alias for tset) and "tput reset" were confusing:
     * one  ([21]tset)  updated the terminal modes, but used only part of
       the terminfo capabilities for initialization, while
     * the  other  ([22]tput) used all of the terminal capabilities while
       neglecting the terminal modes.

   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 [23]reset and [24]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):
     * add  the  terminal-mode  parts  of "reset" (aka tset) to the "tput
       reset"  command,  making  the  two  almost  the  same  except  for
     * improve  tput's  check  for  being  called as "init" or "reset" to
       allow for transformed names.
     * add "clear" as a possible link/alias to tput.
     * amend changes for tput to reset tty modes to "sane" if the program
       is  run  as  "reset",  like tset. Likewise, ensure that tset sends
       either reset- or init-strings.
     * add -x option to clear/tput to make the E3 extension optional
     * add functionality of "tset -w" to tput, like the "-c" feature this
       is not optional in tput.
     * add  options  -T  and  -V  to clear command for compatibility with
     * drop long-obsolete "-n" option from tset.
     * modify tset's assignment to TERM in its output to reflect the name
       by  which  the  terminal  description  is  found,  rather than the
       primary  name.  That  was  an  unnecessary  part  from the initial
       conversion  of  tset from termcap to terminfo. The termcap library
       in 4.3BSD did this to avoid using the short 2-character name
     * remove  a  restriction  in  tput's support for termcap names which
       omitted capabilities normally not shown in termcap translations
     * add usage message to clear command
     * improve usage messages for tset and tput.

   Other user-visible improvements and new features include:
     * modify  tic/infocmp  display  of numeric values to use hexadecimal
       when  they  are  "close" to a power of two, making the result more
     * add "-W" option to tic/infocmp to force long strings to wrap.
          + This  is in addition to the "-w" option which attempts to fit
            capabilities into a given line-length.
          + If  "-f"  option  splits  line,  do not further split it with
          + Begin a new line when adding "use=" after a wrapped line.
     * add  "-q"  option  to infocmp to suppress the "Reconstructed from"
       comment  from  the  header,  and  a corresponding option to tic to
       suppress all comments from the "tic -I" output.
     * Sorted options in usage message for infocmp, to make it simpler to
       see unused letters.
     * Updated usage message for tic, adding "-0" option.
     * add infocmp/tic "-Q" option, which allows one to dump the compiled
       form of the terminal entry, in hexadecimal or base64:
          + A  "b64:"  prefix in the TERMINFO variable tells the terminfo
            reader  to  use  base64  according  to  RFC-3548  as  well as
            RFC-4648 url/filename-safe format.
          + A   "hex:"   prefix  tells  the  terminfo  reader  to  accept
            hexadecimal data as generated by "infocmp -0qQ1".

   Other less-visible improvements and new features include:
     * modify  utility headers such as tic.h to make it clearer which are
       externals that are used by tack.
     * add  "reset"  to  list  of  programs  whose  names might change in
       manpages due to program-transformation configure options.
     * modify  "-T" option of clear and tput to call use_tioctl to obtain
       the operating system's notion of the screensize if possible.
     * add  check  in  tput for init/reset operands to ensure those use a
     * modify  programs clear, tabs, tput and tset to pass the actual tty
       file  descriptor  to  setupterm rather than the standard output or
       error, making padding work.
     * change  tset's initialization to allow it to get settings from the
       standard  input  as  well  as  /dev/tty, to be more effective when
       output or error are redirected.
     * amend  check  in  tput,  tabs  and clear to allow those to use the
       database-only  features  in cron if a "-T" option gives a suitable
       terminal name.
     * improve  error message from tset/reset when both stderr/stdout are
       redirected to a file or pipe.

   Several  of  the  less  apparent  features  deal  with  translation of
   terminfo  to  termcap  (and the reverse), with corresponding checks by
     * modify check in fmt_entry to handle a cancelled reset string. Make
       similar fixes in other parts of dump_entry.c and tput.c
     * correct  read of terminfo entry in which all strings are absent or
       explicitly  cancelled.  Before  this  fix, the result was that all
       were treated as only absent.
     * modify   infocmp   to   suppress   mixture   of   absent/cancelled
       capabilities that would only show as "NULL, NULL", unless the "-q"
       option is used, e.g., to show "-, @" or "@, -".
     * correct  a warning from tic about keys which are the same, to skip
       over missing/cancelled values.
     * add  check  in  tic for use of bold, etc., video attributes in the
       color  capabilities,  accounting  whether the feature is listed in
     * add  check  in  tic for unnecessary use of "2" to denote a shifted
       special key.
     * improve  check  in tic for delays by also warning about beep/flash
       when  a  delay  is not embedded, or if those use the VT100 reverse
       video escape without using a delay.
     * improve  checks  in trim_sgr0, comp_parse.c and parse_entry.c, for
       cancelled string capabilities.
     * add  check in tic for some syntax errors of delays, as well as use
       of proportional delays for non-line capabilities.
     * add  check  in  tic  for  conflict between ritm, rmso, rmul versus
     * add  check  in _nc_parse_entry for invalid entry name, setting the
       name to "invalid" to avoid problems storing entries.
     * improve _nc_tparm_analyze, using that to extend the checks made by
       tic  for  reporting inconsistencies between the expected number of
       parameters for a capability and the actual.
     * remove  tic  warning  about "^?" in string capabilities, which was
       marked  as  an extension; however all Unix implementations support
       this  and  X/Open  Curses  does not address it. On the other hand,
       [25]BSD   termcap   did   not  support  this  feature  (until  the
       in  _nc_infotocap,  added  a check to ensure that terminfo "^?" is
       not written to termcap.
     * modify  sscanf calls in _nc_infotocap for patterns "%{number}%+%c"
       and "%'char'%+%c" to check that the final character is really "c",
       avoiding a case in icl6404 which cannot be converted to termcap.
     * in  _nc_tic_expand and _nc_infotocap, improved string-length check
       when  deciding  whether  to  use "^X" or "\xxx" format for control
       characters, to make the output of tic/infocmp more predictable.
     * limited  termcap  "%d" width to 2 digits on input, and use "%2" in
       preference to "%02" on output.
     * correct  terminfo/termcap  conversion of "%02" and "%03" into "%2"
       and "%3"; the result repeated the last character.


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

   These changes were made to demonstrate new extensions in ncurses:
     * add   demo_new_pair   program,   to   demonstrate  [28]alloc_pair,
       [29]find_pair and [30]free_pair functions.
       This  program  iterates  over  the  possible  color  combinations,
       allocating  or  initializing color pairs. For best results, choose
       screen-width dividing evenly into the number of colors. e.g.,

     32x64,32x128   256 colors
     24x44,24x88    88 colors
     32x64,24x128   16 colors

     * add  extended_color program, like the older color_set program, but
       using   the   extended  color  functions,  with  and  without  the
       SP-functions interface.
     * add  picsmap  program  to  fill  in some testing issues not met by
       dots,  using  this  as  the  third  example in a comparison of the
       [31]ncurses versus slang libraries.
       The   program  can  directly  read  X  bitmap  and  pixmap  files,
       displaying  a  picture.  It  can  read  other  image  files  using
       ImageMagick's convert program to translate the image into text.
       For 16-, 88- and 256-color terminal descriptions, picsmap can load
       a  palette file which tells it which color palette entries to use.
       For direct-colors, the terminal descriptions use the RGB extension

   There are other new example programs and a few scripts:
     * add  dots_xcurses  program to illustrate a different approach used
       for extended colors which can be contrasted with dots_curses.
     * add  list_keys program show function keys for one or more terminal
       descriptions.  It  uses  ncurses's  convention  of  modifiers  for
       special keys, based on xterm.
     * add  padview  program,  to compare pads with direct updates in the
       view program.
     * add sp_tinfo program to exercise the SP-functions extension of the
       low-level terminfo library.
     * add test-programs for termattrs and term_attrs functions.
     * add  test_sgr  program  to  exercise  all  combinations of the sgr
     * add   tput-colorcube   demo  script,  imitating  xterm's  88-  and
       256-color scripts using tput.
     * add  tput-initc  script  to  demonstrate  how  tput may be used to
       initialize a color palette from a data file.

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

   The  ncurses program is the largest; a proportionately large number of
   changes were made to it:
     * modify  a/A  screens to make exiting on an escape character depend
       on  the start of keypad and timeout modes, to allow better testing
       of function-keys.
       add "t" toggle for notimeout function.
     * modify layout of b/B screens to allow for additional annotation on
       the  right  margin;  some  terminals  with partial support did not
       display well.
     * modify c/C screens to allow for extended color pairs.
       add z/Z zoom feature to make extended color pairs easier to test.
       modify  test-screens  to  take advantage of wide screens, reducing
       the number of lines used for 88- and 256-colors.
     * modify  "d"  edit-color  screen  to  optionally  read  xterm color
       palette directly from terminal, as well as handling KEY_RESIZE and
       screen-repainting with control/L and control/R.
     * add examples to "F" screen for WACS_D_PLUS and WACS_T_PLUS.
     * improve  "g"  screen,  correcting  ifdef which made the legend not
       reflect  changes  to  keypad-  and  scroll-modes.  Added check for
       return-value of putwin.
     * make "s" test easier to understand which subtests are available
       add a corresponding "S" wide-character overlap test-screen.
     * add "v" screen to show baudrate and other values.

   These changes were made to the other examples:
     * modify  blue  program  to  use Unicode values for card-glyphs when
       available, as well as improving the check for CP437 and CP850.
     * improve   demo_menus   program,   allowing   mouse-click   on  the
       menu-headers  to  switch  the  active  menu.  This  requires a new
       extension option O_MOUSE_MENU to tell the menu driver to put mouse
       events  which  do not apply to the active menu back into the queue
       so that the application can handle the event.
     * correct logic in demo_terminfo program for "-f" option
     * modify  ditto program to allow $XTERM_PROG environment variable to
       override "xterm" as the name of the program to run in the threaded
     * add several options to the "dots" test-programs.
     * modify filter program:
          + illustrate  an  alternative  to getnstr, that polls for input
            while  updating  a  clock  on  the  right  margin  as well as
            responding to window size-changes.
          + adapt  logic  used in [32]dialog [33]"--keep-tite" option for
            filter  program as the "-a" option. When set, filter attempts
            to suppress the alternate screen.
     * modify  knight  program  to  provide the "slow" solution for small
       screens  using  "R", noting that Warnsdorf's method is easily done
       with "a".
     * modify  the  savescreen program to add test patterns that exercise
       88-, 256-, etc., colors.
     * add  options  to  test_arrays,  for selecting termcap vs terminfo,
     * modify the view program:
          + expand  tabs  using  the  ncurses  library rather than in the
          + eliminate the "-n" option by simply reading the whole file.
          + implement page up/down commands.
          + remove the very old SIGWINCH example; just use KEY_RESIZE.
     * improve  animation  in  xmas  program  by  adding  a time-delay in
     * modify  several  test-programs  which  call  use_default_colors to
       consistently do this only if the "-d" option is given.
     * modify the install-rule for ncurses-examples to put the data files
       in the data directory, e.g., /usr/share/ncurses-examples.
     * modify  several  test  programs  to  use  new popup_msgs function,
       adapted from the help-screen used in the edit_field program.
     * modify   test   data   for   xterm   palettes  to  use  the  newer
       color4/color12 values.
     * improve the tracemunch script:
          + show screenXX pointers and thread identifiers as names.
          + chang   address-parameters   of  add_wch,  color_content  and
            pair_content to dummy parameters.

  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

     xterm+noalt,   xterm+titlestack,   xterm+alt1049,   xterm+alt+title
     building  blocks  and  xterm+direct,  xterm+indirect, xterm-direct.
     from [34]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:
     * use  xterm+sm+1006  in  several  terminal  descriptions which were
       validated  as  supporting  the  extended  mouse  feature for their
       respective terminal emulators.
     * corrected  sgr/sgr0 strings in a few cases reported by tic, making
       those  correspond  to  the non-sgr settings where they differ, but
       otherwise use ECMA-48 consistently.
     * add  0.1sec  mandatory delay to flash capabilities using the VT100
       reverse-video control

   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

   [35]ansi building blocks

          + restored  rmir/smir  in  ansi+idc  to  better  match original
            ansiterm+idc, add alias ansiterm


          + corrected missing comma-separator between string capabilities
            in icl6402 and m2-nam


          + updated using tack and SFU with Windows 7 Ultimate.
          + used ^? for kdch1


          + made linux3.0 entry the default linux entry
          + modify  linux2.6  entry  to  improve line-drawing so that the
            linux3.0 entry can be used in non-UTF-8 mode
          + omitted  selection  of  ISO-8859-1 for G0 in enacs capability
            from  linux2.6 entry, to avoid conflict with the user-defined
            mapping. The reset feature uses ISO-8859-1 in any case.
          + modify flash capability for linux and wyse entries to put the
            delay between the reverse/normal escapes rather than after
          + modify  linux-16color  to  not  mask dim, standout or reverse
            with the ncv capability

   [39]pccon entries

          + fixed some inconsistencies in the pccon* entries
          + add bold to pccon+sgr+acs and pccon-base
          + add keys f12-f124 to pccon+keys


          + corrected  sgr  string,  which  used screen's "standout" code
            rather than the standard code.
          + add  settings  corresponding  to xterm-keys option to reflect
            upcoming change to make that option "on" by default
          + uncanceled Ms


          + modify  vt100  rs2  string  to  reset vt52 mode and scrolling
          + corrected rs2 string for vt100-nam
          + made  minor  fixes  for  vt100+4bsd,  e.g.,  delay in sgr for


          + moved SGR 24 and 27 from vte-2014 to vte-2012
          + add a few capabilities fixed in recent VTE development


          + add rep to xterm-new, available since [44]late 1996.
          + modify  xterm+256color  and  xterm+256setaf  to  use  correct
            number of color pairs.
          + modify    rs1    for    xterm-16color,    xterm-88color   and
            xterm-256color  to  reset palette using oc string as in linux
          + add rs1 capability to xterm-256color
          + add  oc  capability to xterm+256color, allowing palette reset
            for xterm
          + add op to xterm+256setaf
          + modify xterm-r5, xterm-r6 and xterm-xf86-v32 to use xterm+kbs
            to match [45]xterm #272, reflecting packager's changes
          + used  ANSI  reply for u8 in xterm-new, to reflect vt220-style
            responses that could be returned.
          + made xterm-pcolor sgr consistent with other capabilities

   A few entries use extensions (user-defined terminal capabilities):
     * add rmxx/smxx ECMA-48 strikeout extension to tmux and xterm-basic
     * used RGB capability in new *-direct entries to denote direct-color


   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 [46]NEWS file but treated sketchily in manual pages.

   In particular,
     * Since   the   underlying  features  for  [47]tset,  [48]tput,  and
       [49]clear  have  been  better  integrated,  the  documentation now
       includes information on how those tools evolved.
       In  addition  to explaining the improved integration of the tools,
       the  manual  pages made it easier to see how the tools are similar
       and how they are different.
     * The    addch   manual   page   has   additional   information   on
       [50]portability and differences from other implementations.
     * The  discussion  of  color-pairs  in the attributes manual page is
       improved in its [51]history section.
     * The  documentation  of the chtype, cchar_t types and the attribute
       values  which  can  be  stored  in  those types, in particular the
       [52]history  and [53]portability sections of the attributes manual
       page, has been improved.
     * improve discussion of [54]portability in the mouse manual.
     * The   pad  manual  page  has  a  section  on  the  [55]origin  and
       portability of pads.
     * Differences between SVr4 and X/Open Curses soft-keys are discussed
       in a new section on [56]portability.
     * There   are   updated/improved   notes   on   portability  in  the
       [57]resizeterm and [58]wresize manual pages.

   In  addition  to  providing  background  information  to explain these
   features   and   show   how   they  evolved,  there  are  corrections,
   clarifications, etc.:
     * add  note  in  the  [59]addch  manual  about  line-drawing when it
       depends upon UTF-8.
     * improve  discussion  of line-drawing characters in the [60]add_wch
     * explain  in [61]clear's manual page that it writes to the standard
     * improve description of [62]endwin.
     * improve  discussion  of  field  validation  in the [63]form driver
       manual page.
     * clarify the use of wint_t vs wchar_t in [64]get_wstr manual page.
     * clarify  in  the  [65]getch manual that the keypad mode affects an
       application's ability to read KEY_MOUSE codes, but does not affect
       trim  some  obsolete/incorrect  wording about EINTR from the getch
       manual page
       improve  manual  pages  for [66]getch and [67]get_wch to point out
       that   they   might  return  user-defined  values  which  have  no
       predefined names in <curses.h>
     * improve  description  of  the  -R option in the [68]infocmp manual
     * clarify in the [69]resizeterm manual page how KEY_RESIZE is pushed
       onto the input stream.
     * document return value of [70]use_extended_names
     * document  differences  in [71]ESCDELAY versus AIX's implementation
       in the variables manual page.
     * The   _nc_free_tinfo   function   is   now   documented   in   the
       [72]memory-leaks manual page, because it could be used in tack for
       memory-leak checking.
     * add a note to the [73]tic manual page about -W versus -f options.
     * improve terminfo manual description of [74]terminfo syntax.
       improve  terminfo  manual  page  discussion  of  [75]control-  and
       graphics- characters.
       improve [76]color-handling section in terminfo manual page
     * clarify  description in [77]tput manual page regarding support for
       termcap names
       update  [78]tput  manual  page  to  reflect  changes to manipulate
       terminal modes by sharing functions with tset.
     * clarify  in manual pages that the optional verbose option level of
       [79]tic   and  [80]infocmp  is  available  only  when  ncurses  is
       configured for tracing.
     * improve   manual   page   description   of  [81]tset/reset  versus
     * improve description of [82]tgoto parameters

   There are new manual pages:
     * [83]user_caps documents the terminfo extensions used by ncurses.
     * [84]scr_dump documents the screen-dump format.

   Some  of  the  improvements  are  more subtle, relating to the way the
   information is presented:
     * Made minor fixes to manpage NAME/SYNOPSIS sections to consistently
       use  rule  that  either  all  functions  which  are  prototyped in
       SYNOPSIS  are  listed in the NAME section, or the manual-page name
       is the sole item listed in the NAME section. The latter is used to
       reduce  clutter,  e.g.,  for the top-level library manual pages as
       well  as  for  certain  feature-pages  such  as  [85]SP-funcs  and
     * improve  manual  pages  for utilities with respect to POSIX versus
       X/Open Curses.
     * improve  organization  of  the [87]attributes and [88]color manual

  Interesting bug-fixes

     * modify  toe  to not exit if unable to read a terminal description,
       e.g., if there is a permission problem.
     * correct 20100515 change for weak signals versus sigprocmask
     * work  around  Ada  tool-breakage in Debian 9 and later by invoking
       gprconfig  to  specify  the C compiler to be used by gnatmake, and
       conditionally   suppressing   Library_Options   line   for  static
     * There were, as well, several bug-fixes to handle illegal input for
       tic.   Because   those  did  not  correspond  to  useful  terminal
       descriptions, most users are unaffected.

  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.
     * This includes utilities such as tic and infocmp, because (as noted
       in  [89]New features), the feature relies upon an extension to the
       low-level tinfo library.
     * A  few  software  packagers  use a configuration option of ncurses
       which  allows the low-level tinfo library to be shared between the
       high-level  ncurses  and  ncursesw libraries. This new feature was
       designed to work in that configuration as well.

   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 [90]picsmap) give zero for these out-of-range capabilities.

    Configuration options

   These  changes  provide  support  for  tack 1.08, released in [91]July
     * add   --without-tack   configure  option  to  refine  --with-progs
       configure option. Normally tack is built outside the ncurses tree,
       but  a  few packagers combine it during the build. If term_entry.h
       is installed, there is no advantage to in-tree builds.
     * adjust   configure-script   to  define  HAVE_CURSES_DATA_BOOLNAMES
       symbol  needed  for  tack  1.08  when  built  in-tree. Rather than
       relying upon internal "_nc_" functions, tack now uses the boolean,
       number  and  string capability name-arrays provided by ncurses and
       SVr4  Unix  curses. It still uses term_entry.h for the definitions
       of the extended capability arrays.
     * add  dependency  upon  ncurses_cfg.h  to  tic's  header-files; any
       program  using  tic-library  will have to supply this file. Legacy
       tack  versions  supply  this  file;  ongoing  tack development has
       dropped  the dependency upon tic-library and new releases will not
       be affected.

   Other changes to the configure-script and generated files include
     * add  configure  options to disable checks for form, menu and panel
       libraries  so  that  ncurses-examples  can  be built with non-SVr4
       curses implementations.
     * add  configure  option  --enable-opaque-curses for ncurses library
       and similar options for the other libraries.
     * add configure option --disable-wattr-macros for use in cases where
       one   wants   to   use  the  same  headers  for  ncurses5/ncurses6
       development,  by suppressing the wattr* macros which differ due to
       the introduction of extended colors
     * modify  configure macro for shared-library rules to use -Wl,-rpath
       rather than -rpath to work around a bug in scons
     * improve  ncurses-examples'  configure  script  to define as needed
       NCURSES_WIDECHAR  for  platforms where _XOPEN_SOURCE_EXTENDED does
       not  work.  Also  modified  the  test  program  to  ensure that if
       building  with  ncurses,  that  the cchar_t type is checked, since
       that  is  normally  (since [92]20111030) ifdef'd depending on this
     * modify  configure  script  to handle the case where tic-library is
       renamed,  but  the  --with-debug  option is used by itself without
       normal or shared libraries
     * modify  editing  script which generates to work with
       the clang configuration on recent FreeBSD, which gives an error on
       an empty "local" section.
     * improve configure check for setting the WILDCARD_SYMS variable; on
       ppc64 the variable is in the Data section rather than Text.
     * correct  result  of  configure  option  --without-fallbacks, which
       caused FALLBACK_LIST to be set to "no"
     * modify  --with-pkg-config-libdir  option  to  make  it possible to
       install  ".pc"  files  even if pkg-config is not found. Limit this
       change,  to suppress the actual install if it is not overridden to
       a valid directory at install time.
     * disallow "no" as a possible value for --with-shlib-version option,
       overlooked in cleanup-changes for [93]20000708.


   Many  of  the  portability  changes  are implemented via the configure
     * improve  configure  script's  CF_CC_ENV_FLAGS  macro  to allow for
       compiler  wrappers  such  as  ccache.  This  change moves only the
       preprocessor,  optimization  and  warning  flags  to  CPPFLAGS and
       CFLAGS,  leaving the residue in CC. That happens to work for gcc's
       various   "model"  options,  but  may  require  tuning  for  other
     * modify  ncurses-examples'  configure  script to use pkg-config for
       the  extra  form/menu/panel  libraries, to be more consistent with
       the handling of the curses/ncurses library.
     * add  configuration  checks  to build with [94]NetBSD curses, which
       for example lacks [95]use_env.
     * change  ncurses-examples  to use attr_t vs chtype to follow X/Open
       documentation   more   closely   since  Solaris  xpg4-curses  uses
       different  values for WA_xxx vs A_xxx that rely on attr_t being an
       unsigned  short.  Tru64  aka  OSF1, HPUX, AIX did as ncurses does,
       equating the two sets.
     * modify  several  test  programs  to  reflect  that  ncurses honors
       existing  signal  handlers in initscr, while other implementations
       do not.
     * add  configure  check  for  openpty to ncurses-examples' configure
       script, for ditto.
     * improve check for working poll function by using posix_openpt as a
       fallback in case there is no valid terminal on the standard input
     * modify  ncurses-examples'  configure  script  to check for pthread
       dependency  of  ncursest  or  ncursestw  library when building the
       ncurses examples, e.g., in case weak symbols are used.
     * add   checks   in  ncurses-examples'  configure  script  for  some
       functions neither in 4.3BSD curses, nor based on X/Open Curses:
          + modify  a  loop limit in firework.c to work around absense of
            limit checks in some libraries.
          + fill the last row of a window with "?" in firstlast if waddch
            does not return ERR on the lower-right corner.
     * build-fixes for the Portland Group (PGI) compilers
          + accept whitespace in sed expression for generating expanded.c
          + modify  configure  check  that  g++ compiler warnings are not
          + add  configure  check  for  -fPIC  option  needed  for shared
     * modify  configure  script  for  clang  as used on FreeBSD, to work
       around clang's differences in exit codes vs gcc.
     * fixes for configure/build using clang on OSX
          + do   not   redefine   "inline"  in  ncurses_cfg.h;  this  was
            originally to solve a problem with gcc/g++, but is aggravated
            by clang's misuse of symbols to pretend it is gcc.
          + add  braces  to configure script to prevent unwanted addition
            of "-lstdc++" option to the CXXLIBS symbol.
          + improve/update  test-program  used  for checking existence of
            stdc++ library.
          + if $CXXLIBS is set, the linkage test uses that in addition to
     * fixes for OS/2:
          + use  button  instead  of  kbuf[0]  in  EMX-specific  part  of
          + support building with libtool on OS/2
          + use stdc++ library with OS/2 kLIBC
          + clear  configure  script's  cf_XOPEN_SOURCE for OS/2, to work
            with its header files
     * add  "newer"  baudrate symbols to the [96]baudrate function in the
       ncurses library as well as to a corresponding table in tset.
     * modify ncurses-examples savescreen to work with AIX and HPUX.
     * define WIN32_LEAN_AND_MEAN for MinGW port, making builds faster.
     * add  a configure check for wcwidth versus the ncurses line-drawing
       characters,  to  use  in  special-casing  systems such as Solaris.
       Solaris,  however,  requires  a  special  case  that  maps Unicode
       line-drawing  characters  into  the  acsc  string  for non-Unicode
       locales.  Solaris also has a misconfigured wcwidth which marks all
       of the line drawing characters as double-width.
     * string-hacks (non-standard):
          + fix  configure  script  to  record  when  strlcat is found on
          + add   --enable-string-hacks   option   to   ncurses-examples'
            configure script.
          + completed  string-hacks  for  sprintf,  etc.,  including  the
            ncurses-examples programs.
          + make   --enable-string-hacks   option  work  with  Debian  by
            checking   for   the   "bsd"   library   and  its  associated
            "<bsd/string.h>" header.
     * workaround for Debian's antique/unmaintained version of mawk:
          + see  Debian  #65617,  which  was  fixed  in  mawk's  upstream
            releases in [97]2009.
          + related fixes when building link_test.

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
          + 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
     * 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
     * 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
     * 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  [98]tic/[99]captoinfo  utility  provided with ncurses has the
       ability  to  translate  many termcaps from the XENIX, IBM and AT&T
       extension sets.
     * A BSD-like [100]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
     * 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 [101]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
       have  a  corresponding  function  which may be linked (and will be
       prototype-checked)  if  the  macro  definition  is  disabled  with
     * Extensive  documentation  is  provided  (see  the  [102]Additional
       Reading section of the [103]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

   The   ncurses   library  has  been  tested  with  a  wide  variety  of
   applications including:

          FrontEnd to Apt, the debian package manager


          Curses Development Kit




          the  underlying  application used in Slackware's setup, and the
          basis   for  similar  install/configure  applications  on  many


          the text WWW browser


          mail utility


          file-transfer utility


          New vi uses ncurses.


          A console file manager with VI key bindings in Python.


          newsreader, supporting color, MIME


          File manager with vi like keybindings


   as well as some that use ncurses for the terminfo support alone:

          terminal emulator for serial modem connections


          a replacement for ssh.


          terminfo action checker


          terminal multiplexor


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


   and finally, those which use only the termcap interface:

          text editor


          The  most  commonly  used  pager  (a program that displays text


          terminal multiplexor


          text editor


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

   Contact the current maintainers at


   To join the ncurses mailing list, please write email to


   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

     [129] and
     [130] .

   There is an archive of the mailing list here:

     [131]            (also

Related resources

   The  release notes make scattered references to these pages, which may
   be interesting by themselves:
     * [133]ncurses licensing
     * [134]Symbol versioning in ncurses
     * [135]Comments on ncurses versus slang (S-Lang)
     * [136]tack - terminfo action checker
     * [137]tctest - termcap library checker
     * [138]Terminal Database

Other resources

   The  distribution  provides  a  newer  version  of the terminfo-format
   terminal  description  file  once  maintained  by  [139]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 [140]Richard Shuford's archive .

     * [141]Overview
     * [142]Release Notes
          + [143]Library improvements
               o [144]New features
               o [145]Other improvements
          + [146]Program improvements
               o [147]Utilities
               o [148]Examples
          + [149]Terminal database
          + [150]Documentation
          + [151]Interesting bug-fixes
          + [152]Configuration changes
               o [153]Major changes
               o [154]Configuration options
          + [155]Portability
     * [156]Features of ncurses
     * [157]Applications using ncurses
     * [158]Development activities
     * [159]Related resources
     * [160]Other resources


  88. file:///ncurses/man/curs_color.3x.html

Thomas E. Dickey <>

Attachment: signature.asc
Description: Digital signature

If you have a working or partly working program that you'd like
to offer to the GNU project as a GNU package,

Reply via email to