X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ANNOUNCE;h=0684b3dc41d7e5df96990f73f9201f4b40b7d747;hp=5a2a139850d892ffa8efa3b34501cbf10710a5f0;hb=HEAD;hpb=55ccd2b959766810cf7db8d1c4462f338ce0afc8 diff --git a/ANNOUNCE b/ANNOUNCE index 5a2a1398..6abf551c 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,266 +1,475 @@ - Announcing ncurses 5.5 + Announcing ncurses 6.5 + +Overview The ncurses (new curses) library is a free software emulation of - curses in System V Release 4.0, 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 SYSV-curses - enhancements over BSD curses. + 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 + considered 4.4BSD curses obsolete, and encouraged the keepers of unix releases such as BSD/OS, FreeBSD and NetBSD to switch over to ncurses. - The ncurses code was developed under GNU/Linux. It has been in use for - some time with OpenBSD as the system curses library, and on FreeBSD - and NetBSD as an external package. It should port easily to any - ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp! + 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 - a terminfo compiler tic(1), a decompiler infocmp(1), clear(1), - tput(1), tset(1), and a termcap conversion tool captoinfo(1). Full - manual pages are provided for the library and tools. - - The ncurses distribution is available via anonymous FTP at the GNU - distribution site [1]ftp://ftp.gnu.org/gnu/ncurses/ . - It is also available at [2]ftp://invisible-island.net/ncurses/ . - - Release Notes - - This release is designed to be upward compatible from ncurses 5.0 - through 5.4; very few applications will require recompilation, - depending on the platform. These are the highlights from the - change-log since ncurses 5.4 release. - - Interface changes: - * terminfo installs "xterm-new" as "xterm" entry rather than - "xterm-old" (aka xterm-r6). - * terminfo data is installed using the tic -x option (few systems - still use ncurses 4.2). - * modify C++ binding to work with newer C++ compilers by providing - initializers and using modern casts. Old-style header names are - still used in this release to allow compiling with not-so-old - compilers. - * modify parameter type in c++ binding for insch() and mvwinsch() to - be consistent with underlying ncurses library (was char, is - chtype). - * change NCursesWindow::err_handler() to a virtual function. - * form and menu libraries now work with wide-character data. - Applications which bypassed the form library and manipulated the - FIELD.buf data directly will not work properly with libformw, - since that no longer points to an array of char. The - set_field_buffer() and field_buffer() functions translate to/from - the actual field data. - * add symbol to curses.h which can be used to suppress include of - stdbool.h, e.g., - #define NCURSES_ENABLE_STDBOOL_H 0 - #include - - * change SP->_current_attr to a pointer, adjust ifdef's to ensure - that libtinfo.so and libtinfow.so have the same ABI. The reason - for this is that the corresponding data which belongs to the - upper-level ncurses library has a different size in each model. - * winnstr() now returns multibyte character strings for the - wide-character configuration. - * assume_default_colors() no longer requires that - use_default_colors() be called first. - * data_ahead() now works with wide-characters. - * slk_set() and slk_wset() now accept and store multibyte or - multicolumn characters. - * start_color() now returns OK if colors have already been started. - start_color() also returns ERR if it cannot allocate memory. - * pair_content() now returns -1 for consistency with init_pair() if - it corresponds to the default-color. - * unctrl() now returns null if its parameter does not correspond to - an unsigned char. - - New features and improvements: - * library - + environment variable NCURSES_NO_UTF8_ACS supports - miscellaneous terminal emulators which ignore alternate - character set escape sequences when in UTF-8 mode. - + modify initialization of key lookup table so that if an - extended capability (tic -x) string is defined, and its name - begins with 'k', ncurses will automatically treat it as a - key. - + change GPM initialization, using dl library to load it - dynamically at runtime. - + form, menu and panel libraries support debug-tracing. - * add NCURSES-Programming-HOWTO.html by Pradeep Padala (see - http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/). - * programs: - * infocmp: - + The -i option now matches 8-bit controls against its table - entries, e.g., so it can analyze the xterm-8bit entry. - + add "-x" option to infocmp like tic's "-x", for use in "-F" - comparisons. This modifies infocmp to only report extended - capabilities if the -x option is given, making this more - consistent with tic. Some scripts may break, since infocmp - previous gave this information without an option. - * tic: - + modify termcap-parsing to retain 2-character aliases at the - beginning of an entry if the "-x" option is used in tic. - + filter out long extended names when translating to termcap - format. Only two characters are permissible for termcap - capability names. - + correct translation of "%%" in terminfo format to termcap, - e.g., using "tic -C". - + modify the "-c -v" options to ignore delays when comparing - strings. Also modify it to ignore a canceled sgr string, - e.g., for terminals which cannot properly combine attributes - in one control sequence. - + add a check for improperly ended strings, i.e., where a - following line begins in column 1. - + add a check in tic for terminfo entries having an sgr0 but no - sgr string. This confuses Tru64 and HPUX curses when combined - with color, e.g., making them leave line-drawing characters - in odd places. - + add check (with debug configuration) that provides about the - runtime changes that would be made to sgr0 for termcap - applications. - * tset: - + add -c and -w options to allow user to suppress ncurses' - resizing of the terminal emulator window in the special case - where it is not able to detect the true size. - - Major bug fixes: - * improve logic in tgetent() which adjusts the termcap "me" string - to work with ISO-2022 string used in xterm-new. This is a feature - that was incompletely implemented in ncurses 5.3. ncurses attempts - to provide termcap clients with the portion of the sgr0 (termcap - "me") string that does not reset line-drawing. - * cells in the WINDOW which are continuations of a multicolumn - character are encoded differently, making repainting more - reliable. - * amend change to setupterm() in ncurses 5.4 (20030405) which would - reuse the value of cur_term if the same output was selected. This - now reuses it only when setupterm() is called from tgetent(), - which has no notion of separate SCREENs. Note that tgetent() must - be called after initscr() or newterm() to use this feature. - * make setcchar() now works when its wchar_t* parameter is pointing - to a string which contains more data than can be converted. - * win_wchnstr() now works for more than one cell. - * resizeterm() now processes all levels of window hierarchy. - * disable GPM mouse support when $TERM happens to be prefixed with - "xterm". Gpm_Open() would otherwise assert that it can deal with - mouse events in this case. - * add SP->_screen_acs_map[], used to ensure that mapping of missing - line-drawing characters is handled properly. For example, - ACS_DARROW is absent from xterm-new, and it was coincidentally - displayed the same as ACS_BTEE. - - Portability: - * configure script: - + new options: - - --enable-largefile - set compiler and linker flags to use largefile - support. - - --enable-ext-colors - Allow encoding of 256 foreground and background - colors, e.g., with the xterm-256color or - xterm-88color terminfo entries. This requires ABI 6 - because it changes the size of cchar_t. - - --enable-ext-mouse - This defines NCURSES_MOUSE_VERSION 2, and modifies - the encoding of mouse events to support wheel mice, - which may transmit buttons 4 and 5. This works with - xterm and similar terminal emulators. This requires - ABI 6 because it changes the encoding of mouse - events. - - --with-chtype - overriding of the non-LP64 model's use of chtype - - --with-mmask-t - overriding of the non-LP64 model's use of mmask_t - - --without-xterm-new - Installs "xterm-old" as the "xterm" entry of the - terminfo database. - - + The --with-termlib option now accepts a value which sets the - name of the terminfo library. This would allow a packager to - build libtinfow.so renamed to coincide with libtinfo.so - + fixes/improvements for cross-compiling: - o suppress $suffix in misc/run_tic.sh when - cross-compiling. This allows cross-compiles to use the - host's tic program to handle the "make install.data" - step. - o correct BUILD_CPPFLAGS substitution in - ncurses/Makefile.in, to allow cross-compiling from a - separate directory tree. - * library: - + add ifdef's for _LP64 in curses.h to avoid using wasteful - 64-bits for chtype and mmask_t, but add configure option - --disable-lp64 in case anyone used that configuration. - + modify C++ binding to use some C internal functions to make - it compile properly on Solaris (and other platforms). - + remove check in newwin() that prevents allocating windows - that extend beyond the screen (Solaris does this). - + check for nl_langinfo(CODESET), use it if available. This - replaces ad hoc tests of environment variables to check if - the terminal is setup for UTF-8 encoding. Applications which - do not call setlocale() should be corrected, to make them - work properly with UTF-8 encoding. - In particular, applications which assume (and do not call - setlocale()) that Latin-1 codes are printable will no longer - work in a UTF-8 locale since the ad hoc check of environment - variables to see if the locale was UTF-8 is not used when - nl_langinfo(CODESET) is available. - + use setlocale() to query the program's current locale rather - than using getenv(). This supports applications which rely - upon legacy treatment of 8-bit characters when the locale is - not initialized. - - Features of Ncurses - - The ncurses package is fully compatible with SVr4 (System V Release 4) - curses: - * All 257 of the SVr4 calls have been implemented (and are - documented). - * Full support for SVr4 curses features including keyboard mapping, - color, forms-drawing with ACS characters, and automatic + * 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.5, released April 27, 2024. + + This release is designed to be source-compatible with ncurses 5.0 + through 6.4; providing extensions to the application binary interface + (ABI). Although the source can still be configured to support the + ncurses 5 ABI, the reason for the release is to reflect improvements + to the ncurses 6 ABI and the supporting utility programs. + + There are, of course, numerous other improvements, listed in this + announcement. + + The most important bug-fixes/improvements dealt with robustness + issues. The release notes also mention some other bug-fixes, but are + focused on new features and improvements to existing features since + ncurses 6.4 release. + + Library improvements + + New features + + These are new features: + * The low-level terminfo and termcap interfaces are used both by the + higher-level curses library, as well as by many applications. + The functions which convert parameterized terminal capability + strings for output to the terminal (tiparm and tparm) analyze the + capability string to determine which parameters are strings (i.e., + addresses), versus numbers (not addresses). + The library's analysis of a capability string may differ from the + calling application's design if environment variables are used to + point to an invalid terminal database. This is a longstanding + problem with all implementations of terminfo, dating from the + early 1980s. + Two new functions address this problem: by providing a function + which allows the calling application to tell ncurses how many + string-parameters to expect: + + tiscan_s helps applications check formatting capabilities + that would be passed to tiparm_s. + + tiparm_s provides applications a way to tell ncurses what the + expected parameters are for a capability. + * The ncurses library supports a compile-time feature (enabled with + the configure --enable-check-size option) which simplifies + initialization with terminals which do not negotiate window + (screen) size. This is done in setupterm, by providing for using + ANSI cursor-position report (in user6/user7 terminfo capabilities) + to obtain the screen size if neither environment variables or + ioctl is used. + The ncurses test-program with options "-E -T" demonstrates this + feature. + * add functions to query tty-flags in SCREEN + + This release drops compatibility with obsolete versions of tack, e.g., + pre-1.08 + + Other improvements + + These are improvements to existing features: + * In addition to the new, safer function tiparm_s, ncurses adds + checks to make the older tiparm, tparm and tgoto functions safer: + + the terminfo functions tiparm and tparm ensure that the + capability string comes from the terminal description which + ncurses loads, rather than from random data which the + application happens to have. + + the tgoto function disallows capabilities which its analysis + shows will attempt to use string parameters. + + ncurses uses internal functions which correspond to tiparm, + and tgoto which ensure that the capability strings which are + passed to these functions come from the loaded terminal + description. + * improve check in lib_tparm.c, ensuring that a char* fits into a + TPARM_ARG + * modify _nc_syserr_abort to use _nc_env_access, rather than only + checking root uid + * improve thread lock in lib_trace.c + * modify flushinp to use file descriptors in SCREEN, rather than + from TERMINAL, and check if they are for a terminal, like SVr4 + * modify mcprint to use file descriptor in SCREEN, for consistency + * modify internal function _nc_read_file_entry to show relevant + filename in warnings + * improve checks in internal function convert_string for corrupt + terminfo entry + * review/improve handling of out-of-memory conditions + * limit delays to 30 seconds, i.e., padding delays in terminfo, as + well as napms and delay_output functions + * fix reallocation loop for vsnprintf in _nc_sprintf_string by + copying the va_list variable + * modify delscreen to limit the windows which it creates to just + those associated with the screen + * modify endwin to return an error if it is called again without an + intervening screen update + * modify wenclose to handle pads + * eliminate use of PATH_MAX in lib_trace.c + * provide for any CCHARW_MAX greater than 1 + + These are corrections to existing features: + * correct loop termination condition in waddnstr and waddnwstr + * improve parsing in internal function _nc_msec_cost, allowing a + single decimal point + * amend parameter check for entire string versus specific length in + winsnstr and wins_nwstr to match Solaris; make similar correction + to wins_nwstr + * correct internal function wadd_wch_literal when adding a + non-spacing character to a double-width character + * correct definition of Charable macro for non-wide ncurses library + . + + Program improvements + + Several improvements were made to the utility programs. Some were done + to make the infocmp option "-u" option help refactor the terminal + database. + + infocmp + + + add limit checks for processing extended capabilities with + the "-u" option + + correct initial alignment of extended capabilities, so that + the "-u" option can be used for more than two terminal types + + modify "-u" option to not report cancels for strings which + were already cancelled in a use'd chunk. + + correct an assignment "-u" for detecting if a boolean is + unset in a base entry and set in a use'd chunk, i.e., if it + was cancelled. + + tic + + + correct limit-check when dumping tc/use clause via "-I" + + check return value of _nc_save_str, in special case where + extended capabilities are processed but the terminal + description was not initialized + + modify check for multiply defined aliases to report problems + within the current runtime rather than for conflicts with + pre-existing terminal descriptions. + + disallow using $TERMINFO or $HOME/.terminfo when "-o" option + is used + + tput and tset + + + add "-v" option to tput, to show warnings + + modify reset command to avoid altering clocal if the terminal + uses a modem + + modify reset feature to avoid 1-second sleep if running in a + pseudo-terminal + + Examples + + Along with the library and utilities, improvements were made to the + ncurses-examples: + * modify test_tparm to account for extended capabilities + * corrected mouse mask in test/testcurs.c + * modify test/clip_printw.c to optionally test non-wrapped updates + * modify test/test_mouse.c to use curses api for raw/noraw + * modify test/clip_printw.c to optionally test non-wrapped updates + + There is one new demo/test programs: + + test/test_endwin.c + This program shows the return-status from endwin with different + combinations of endwin (repeated), initscr, newterm. + + Terminal database + + There are several new terminal descriptions: + * ansi+apparrows + * contour + * linux+kbs for terminals which imitate xterm's behavior with Linux + * rio, rio-direct + * mostlike + * ms-vt100-16color, winconsole + * vt100+noapp, vt100+noapp+pc, xterm+app+pc, xterm+decedit from + xterm #389 + * putty+cursor to reflect amending of modified cursor-keys in 2021 + * wezterm + + There are many changes to existing terminal descriptions. Some were + updates to several descriptions, using the infocmp "-u" option in a + script to determine which building-block entries could be used to + replace multiple capability settings (and trim redundant information). + + Other changes include: + * document XF, kxIN and kxOUT + * add note on sun regarding wscons/cmdtool/shelltool + * remove DECCOLM+DECSCLM from foot + * add xterm+focus to foot+base + * add ecma+strikeout to putty + * use CSI 3J in vte-2017 + * use oldxterm+sm+1006 in vte-2014 + * modify xgterm to work around line-drawing bug + * add xterm focus mode 1004 to xterm+focus as fe/fd capabilities, + like vim. + * add xterm+focus to alacritty+common + * add XR/xr, to work with vim, and use RV/rv to denote DA2 and its + response + * add XF flag to xterm+focus so that termcap applications can be + aware of terminals which may support focus in/out + * use xterm+focus in xterm-p370 and tmux + * remove xterm+sm+1006 from tmux + * NetBSD-related fixes for x68k and wsvt25 + + 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: + + add assignment in CF_MAN_PAGES to fill in value for + TERMINFO_DIRS in ncurses, terminfo and tic manpages. + + clarify interaction of -R option versus -C, -I and -r in + infocmp manpage. + + correct manpage description of panel_hidden. + + improve manpage description for addch versus unctrl format + used for non-printable characters. + + improve manpages discussing file descriptors in low-level + functions. + + improve description of search rules for terminal descriptions + in terminfo manpage. + + modify dist.mk to avoid passing developer's comments in + manpages into the generated html documentation. + + modify test-package "ncurses6-doc" to use manpage-aliases, + which in turn required a change to the configure script to + factor in the extra-suffix option when deriving alias names. + * New/improved history and portability sections: + + add information about "ttycap", termcap's forerunner, to + tset.1 + + document limitations of tparm, and error-returns in + curs_terminfo.3x + + document limitations of tgoto, and error-returns in + curs_termcap.3x + * Other improvements: + + This release has many changes to improve the formatting and + style of the manpages. + + Manpages now use consistent section-naming, page headers and + footers (including the modification date for each page). + + Table layout has been revised. + + There are no new manual pages (all of the manual page updates are to + existing pages). + + Interesting bug-fixes + + The changes to tparm, tgoto which improve the design of the low-level + interfaces are interesting, but are not bug-fixes per se. + + Configuration changes + + Major changes + + These are the major changes (aside from introducing tiparm_s): + * use wide-character (ncursesw) by default + * use opaque typedefs by default + + However, most of the work on configure scripts was done to reduce + warnings within the configure script: + * intrusive warnings from GNU grep regarding fgrep and egrep + * fatal errors in compile-checks, arising from recent "Modern C" + efforts by some developers which caused longstanding configure + checks to fail. + After repairing the configure script, none of that activity + affected ncurses because stricter warnings are used routinely in + development. + + Other improvements made to configure checks include + * use string-hacks in alloc_entry.c, alloc_type.c and hardscroll.c, + overlooked due to compiler changes in recent OpenBSD releases + * revise progs.priv.h to provide for NC_ISATTY reuse + * configure check for MB_LEN_MAX provides warning as needed + * trim a space after some "-R" options, fixing builds for + applications built using clang and ncurses on Solaris + * work around misconfiguration of MacPorts gcc13, which exposes + invalid definition of MB_LEN_MAX in gcc's fallback copy of + limits.h + * modified experimental Windows driver works with xterm mouse + protocol + + Configuration options + + There are a few new configure options: + + --disable-setuid-environ + Compile with environment restriction, so certain environment + variables are not available when running via a setuid/setgid + application. These are (for example $TERMINFO) those that allow + the search path for the terminfo or termcap entry to be + customized. + + A setuid/setgid application inherits its environment variables + from the current user, in contrast to sudo which may limit the + environment variables that ncurses uses. + + --enable-check-size + Compile-in feature to detect screensize for terminals which do + not advertise their screensize, e.g., serial terminals. + + --with-abi-altered=NUM + Override the displayed (rather than compiled-in) ABI. Only + packagers who have created configurations where the ABI differs + from ncurses should be interested in this option. + + --with-strip-program=XXX + When stripping executables during install, use the specified + program rather than "strip" overriding program chosen by the + install program for stripping executables. + + These configure options are modified: + + --with-pkg-config-libdir[=DIR] + The optional DIR parameter can now be "auto" to automatically + use pkg-config's library directory. + + The default is $(libdir). + + --with-xterm-kbs[=XXX] + The default is "auto" which tells the configure script to + choose BS or DEL according to platform defaults. + + Portability + + Many of the portability changes are implemented via the configure + script: + * add/use configure check for clock_gettime, to supersede + gettimeofday. + * modify configure script check for pkg-config library directory to + take into account an older version 0.15.0 which used + PKG_CONFIG_PATH but not PKG_CONFIG_LIBDIR + * allow for MinGW32-/64-bit configurations to use _DEFAULT_SOURCE + * modify CF_XOPEN_SOURCE macro's amend default case to avoid + undefining _XOPEN_SOURCE if _POSIX_C_SOURCE is defined + * updated configure script macro CF_XOPEN_SOURCE, for uClibc-ng + * modify version-check for gcc/g++, now works for msys2 + * build-fixes related to configure-options and/or platform: + + fix for --enable-fvisibility + + fix for unusual values of --with-rel-version + + fix for unusual values of --with-abi-version + + fix for --disable-tcap-names + + fix for termcap in nc_access.h + * other configure-script improvements: + + recent msys2 headers work with _DEFAULT_SOURCE; amend check + + use $ac_includes_default in most cases where stdlib.h should + work + + use #error consistently vs "make an error" + + add configure macro for gettimeofday vs inline check + + Here are some of the other portability fixes: + * modify configure scripts/makefiles to omit KEY_RESIZE if the + corresponding SIGWINCH feature is disabled + * increase MB_CUR_MAX to 16, matching glibc's MB_LEN_MAX + * add BSD erase2 to characters handled by tset/reset + * use getauxval when available, to improve setuid/setgid checks + * set dwShareMode in calls to CreateConsoleScreenBuffer + * use CreateFile with "CONIN$", "CONOUT$" rather than GetStdHandle + to obtain a handle on the actual console, avoiding redirection in + the MinGW/Win32 configurations + * modify MinGW driver to return KEY_BACKSPACE when an unmodified + VK_BACK virtual key is entered + * modify MinGW configuration to provide for running in MSYS/MSYS2 + shells, assuming ConPTY support + _________________________________________________________________ + +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 the features of SVr4 curses including keyboard + mapping, color, form drawing with ACS characters, and automatic recognition of keypad and function keys. - * An emulation of the SVr4 panels library, supporting a stack of - windows with backing store, is included. - * An emulation of the SVr4 menus library, supporting a uniform but - flexible interface for menu programming, is included. - * An emulation of the SVr4 form library, supporting data collection - through on-screen forms, is included. - * Binary terminfo entries generated by the ncurses tic(1) - implementation are bit-for-bit-compatible with the entry format - SVr4 curses uses. - * The 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. + * ncurses provides work-alike replacements of SVr4 supplemental + libraries based on curses, but which were not specified by X/Open + Curses: + + the panel library, supporting a stack of windows with backing + store + + the menu 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 that 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, but not all EXTENDED features). Most - EXTENDED-level features not directly concerned with wide-character - support are implemented, including many function calls not - supported under SVr4 curses (but portability of all calls is - documented so you can use the SVr4 subset only). + * 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 almost all 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 OS/2 - console windows. + * 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 + * The function wresize allows you to resize windows, preserving their data. - * The function use_default_colors() allows you to use the terminal's + * 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 16-color terminals, such as aixterm and XFree86 xterm. + * 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. @@ -268,7 +477,7 @@ 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. + 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 @@ -281,10 +490,10 @@ 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(1)/captoinfo utility provided with ncurses has the ability - to translate many termcaps from the XENIX, IBM and AT&T extension + * 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(1) utility is provided. + * 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 @@ -299,153 +508,226 @@ 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. - * A script (capconvert) is provided to help BSD users transition - from termcap to terminfo. It gathers the information in a TERMCAP - environment variable and/or a ~/.termcap local entries file and - converts it to an equivalent local terminfo tree under - $HOME/.terminfo. - * Automatic fallback to the /etc/termcap file can be compiled in - when it is not possible to build a terminfo tree. This feature is - neither fast nor cheap, you don't want to use it unless you have - to, but it's there. * 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 - have a corresponding function which may be linked (and will be - prototype-checked) if the macro definition is disabled with - #undef. - * An HTML "Introduction to Programming with NCURSES" document - provides a narrative introduction to the curses programming - interface. + * X/Open Curses permits most functions it specifies to be made + available as macros as well. ncurses does this + + to improve performance, e.g., for operations composed of + simpler functions such as cursor movement following by adding + text to the screen, + + to simplify the implementation by reusing functions which use + common parameters, e.g., the standard screen stdscr, and + + to provide functions that return values via their parameters + Except for the last case, ncurses provides a non-macro + implementation of the function. If the macro definition is + disabled with #undef, or by defining NCURSES_NOMACROS the function + may be linked (and its calls will be checked against the + prototype). + * 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 - State of the Package + The ncurses library has been tested with a wide variety of + applications including: - Numerous bugs present in earlier versions have been fixed; the library - is far more reliable than it used to be. Bounds checking in many - `dangerous' entry points has been improved. The code is now type-safe - according to gcc -Wall. The library has been checked for malloc leaks - and arena corruption by the Purify memory-allocation tester. + aptitude + FrontEnd to Apt, the debian package manager - The ncurses code has been tested with a wide variety of applications - including (versions starting with those noted): + https://wiki.debian.org/Aptitude cdk Curses Development Kit - [3]http://invisible-island.net/cdk/ - [4]http://www.vexus.ca/products/CDK/ + + https://invisible-island.net/cdk/ ded directory-editor - [5]http://invisible-island.net/ded/ + + https://invisible-island.net/ded/ dialog the underlying application used in Slackware's setup, and the - basis for similar applications on GNU/Linux. - [6]http://invisible-island.net/dialog/ + basis for similar install/configure applications on many + systems. + + https://invisible-island.net/dialog/ lynx - the character-screen WWW browser - [7]http://lynx.isc.org/release/ + the text WWW browser - Midnight Commander - file manager - [8]http://www.ibiblio.org/mc/ + https://lynx.invisible-island.net/ mutt mail utility - [9]http://www.mutt.org/ + + http://www.mutt.org/ ncftp file-transfer utility - [10]http://www.ncftp.com/ + + https://www.ncftp.com/ nvi - New vi versions 1.50 are able to use ncurses versions 1.9.7 and - later. - [11]http://www.bostic.com/vi/ + New vi uses ncurses. + + https://sites.google.com/a/bostic.com/keithbostic/the-berkeley- + vi-editor-home-page + + ranger + A console file manager with VI key bindings in Python. - pinfo - Lynx-like info browser. - [12]http://dione.ids.pl/~pborys/software/pinfo/ + https://ranger.github.io/ tin - newsreader, supporting color, MIME [13]http://www.tin.org/ + newsreader, supporting color, MIME - vh-1.6 - Volks-Hypertext browser for the Jargon File - [14]http://www.debian.org/Packages/unstable/text/vh.html + 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 - [15]http://www.netsonic.fi/~walker/minicom.html + terminal emulator for serial modem connections + + https://salsa.debian.org/minicom-team/minicom + + mosh + a replacement for ssh. + + https://mosh.org/ + + tack + terminfo action checker + + https://invisible-island.net/ncurses/tack.html + + tmux + terminal multiplexor + + https://github.com/tmux/tmux/wiki vile - vi-like-emacs - [16]http://invisible-island.net/vile/ + vi-like-emacs may be built to use the terminfo, termcap or + curses interfaces. - The ncurses distribution includes a selection of test programs - (including a few games). + https://invisible-island.net/vile/ -Who's Who and What's What + and finally, those which use only the termcap interface: - Zeyd Ben-Halim started it 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 work is being done - by [17]Thomas Dickey. Thomas Dickey acts as the maintainer for the - Free Software Foundation, which holds the copyright on ncurses. - Contact the current maintainers at [18]bug-ncurses@gnu.org. + emacs + text editor - To join the ncurses mailing list, please write email to - bug-ncurses-request@gnu.org containing the line: - subscribe @ + 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 @ 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 [19]ftp://invisible-island.net/ncurses/ . + Beta versions of ncurses are made available at + + https://invisible-island.net/archives/ncurses/current/ and + https://invisible-mirror.net/archives/ncurses/current/ . + + Patches to the current release are made available at + + https://invisible-island.net/archives/ncurses/6.4/ and + https://invisible-mirror.net/archives/ncurses/6.4/ . + + There is an archive of the mailing list here: -Future Plans + https://lists.gnu.org/archive/html/bug-ncurses . - * Extended-level XPG4 conformance, with internationalization - support. - * Ports to more systems, including DOS and Windows. +Related resources - We need people to help with these projects. If you are interested in - working on them, please join the ncurses list. + 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 Related Resources +Other resources The distribution provides a newer version of the terminfo-format - terminal description file maintained by [20]Eric Raymond . Unlike the + terminal description file once maintained by Eric Raymond . Unlike the older version, the termcap and terminfo data are provided in the same - file. + file, which also provides several user-definable extensions beyond the + X/Open Curses specification. You can find lots of information on terminal-related topics not - covered in the terminfo file at [21]Richard Shuford's archive . - -References - - 1. ftp://ftp.gnu.org/gnu/ncurses/ - 2. ftp://invisible-island.net/ncurses/ - 3. http://invisible-island.net/cdk/ - 4. http://www.vexus.ca/products/CDK/ - 5. http://invisible-island.net/ded/ - 6. http://invisible-island.net/dialog/ - 7. http://lynx.isc.org/release/ - 8. http://www.ibiblio.org/mc/ - 9. http://www.mutt.org/ - 10. http://www.ncftp.com/ - 11. http://www.bostic.com/vi/ - 12. http://dione.ids.pl/~pborys/software/pinfo/ - 13. http://www.tin.org/ - 14. http://www.debian.org/Packages/unstable/text/vh.html - 15. http://www.netsonic.fi/~walker/minicom.html - 16. http://invisible-island.net/vile/ - 17. mailto:dickey@invisible-island.net - 18. mailto:bug-ncurses@gnu.org - 19. ftp://invisible-island.net/ncurses/ - 20. http://www.catb.org/~esr/terminfo/ - 21. http://www.cs.utk.edu/~shuford/terminal_index.html + covered in the terminfo file in Richard Shuford's archive (original). + 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