X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ANNOUNCE;h=e0603d622394c8420f71cd0465476b18b41749df;hp=858c7f2fb3cbca9f3cf2023749859fe7560fa1b6;hb=21b36e89c00f2188954d680bf9fea60328b4538c;hpb=02f02dcd4464143580e783ae32c822d8eb8cdcbf diff --git a/ANNOUNCE b/ANNOUNCE index 858c7f2f..e0603d62 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,4 +1,4 @@ - Announcing ncurses 6.0 + Announcing ncurses 6.2 Overview @@ -6,8 +6,8 @@ Overview 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 is better known today as - X/Open 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 @@ -17,7 +17,7 @@ Overview * 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 - OSX. + 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 @@ -26,440 +26,374 @@ Overview * 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 + * 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 - * [8]tset, to initialize the terminal + * tset, to initialize the terminal Full manual pages are provided for the library and tools. - The ncurses distribution is available via anonymous FTP at the GNU - distribution site + The ncurses distribution is available at ncurses' homepage: - [9]ftp://ftp.gnu.org/gnu/ncurses/ . + ftp://ftp.invisible-island.net/ncurses/ or + https://invisible-mirror.net/archives/ncurses/ . - It is also available at + It is also available via anonymous FTP at the GNU distribution site - [10]ftp://invisible-island.net/ncurses/ . + ftp://ftp.gnu.org/gnu/ncurses/ . Release Notes - These notes are for ncurses 6.0, released August 8, 2015. + These notes are for ncurses 6.2, released February 12, 2020. This release is designed to be source-compatible with ncurses 5.0 - through 5.9; providing a new 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 which are - generally useful, but binary-incompatible with ncurses 5: - * Extend the cchar_t structure to allow more than 16 colors to be - encoded. - * Modify the encoding of mouse state to make room for a 5th mouse - button. That allows one to use ncurses with a wheel mouse with - xterm or similar X terminal emulators. - - There are, of course, numerous other improvements, including - * fixes made based on the Clang and Coverity static analyzers. - * memory leak fixes using Valgrind - - The release notes mention some bug-fixes, but are focused on new - features and improvements to existing features log since ncurses 5.9 - release. - - While the intent of the release is to provide a new stable ABI, there - are other development activities which are summarized below. - * The original release plan, e.g., for "5.10" was to improve the - MinGW port. Ultimately that was completed (wide-character support, - mouse, etc), but was deferred to focus on termcap support and - performance issues. Also, pinpointing the problems with Console2 - took a while. - * A review of termcap compatibility in 2011 led to several minor - fixes in the library and improvements to utilities. To do this - properly, a review of the various extent termcap implementations - was needed. - The [11]termcap library checker (tctest) (not part of ncurses) was - one result. A followup review of performance using - [12]ncurses-examples in 2014 led to additional improvements. - * Output buffering provided a further, but worthwhile distraction. A - bug report in 2012 regarding the use of signal handlers in - ncurses) pointed out [13]a problem with the use of unsafe - functions for handling SIGTSTP. Other signals could be addressed - with workarounds; repairing SIGTSTP required a different approach. - The solution required changing internal behavior of the library: - how it handles output buffering. - Now ncurses buffers its own output, independently of the standard - output. A few applications relied upon the library's direct reuse - of the standard output buffering; however that is unspecified - behavior and has never been a recommended practice. Identifying - these applications as well as refining the change to permit - low-level applications to work consistently took time. - * Since the introduction of the experimental support for 256 colors - early in [14]2005 (released in [15]ncurses 5.5), there has been - increased user interest. Almost all packagers continue providing - the ncurses ABI 5 which cannot support 256 colors. - * Symbol versioning, or the lack of it in ncurses, is the main - reason why packagers would be reluctant to add a new ncurses ABI. - This release provides the new ABI along with script-generated - lists of versioned symbols which can be used for both ABI 5 and 6 - (with distinct names to keep the two separate). This took time to - development, as reported in [16]Symbol versioning in ncurses. + through 6.1; providing extensions to the application binary interface + (ABI). Although the source can still be configured to support the + ncurses 5 ABI, the reason for the release is to reflect improvements + to the ncurses 6 ABI and the supporting utility programs. + + There are, of course, numerous other improvements, listed in this + announcement. + + The most important bug-fixes/improvements dealt with user-defined + capabilities in terminal descriptions. The release notes also mention + some other bug-fixes, but are focused on new features and improvements + to existing features since ncurses 6.1 release. Library improvements - Output buffering - - X/Open curses provides more than one initialization function: - * [17]initscr (the simplest) accepts no parameters. - * [18]newterm accepts parameters for the stream input and output - * [19]setupterm (the low-level function) accepts a parameter for the - file descriptor of the output. - - They are documented in X/Open as if initscr calls newterm using stdout - for output stream, and in turn newterm calls setupterm using - fileno(stdout) for the file descriptor. As long as an implementation - acts as if it does this, it conforms. In practice, implementations do - what is implied. This creates a problem: the low-level setupterm - function's file descriptor is unbuffered, while newterm implies - buffered output. X/Open Curses says that all output is done through - the file descriptor, and does not say how the output stream is - actually used. - - Initially, ncurses used the file descriptor (obtained from the output - stream passed to newterm) for changing the terminal modes, and relied - upon the output parameter of newterm for buffered output. Later (to - avoid using unsafe buffered I/O in signal handlers), ncurses was - modified to use the file descriptor (unbuffered output) when cleaning - up on receipt of a signal. Otherwise (when not handling a signal), it - continued to use the buffered output. - - That approach worked reasonably well and as a side effect, using the - same buffered output as an application might use for printf meant that - no flushing was needed when switching between normal- and - screen-modes. - - There were a couple of problems: - * to get good performance, curses (not only ncurses, but SVr4 curses - in general) set an output buffer using setbuf or similar function. - There is no standard (or portable) way to turn that output buffer - off, and revert to line-buffering. The [20]NCURSES_NO_SETBUF - environment variable did make it optional. - * to handle SIGTSTP (the "stop" signal), ncurses relied upon unsafe - functions. That is, due to the complexity of the feature, it - relied upon reusing existing functions which should not have been - called via the signal handler. - - Conveniently, solving the second problem (by making ncurses do its own - output buffering) also fixed the first one. But there were special - cases to resolve: [21]low-level functions such as mvcur, putp, vidattr - explicitly use the standard output. Those functions were reused - internally, and required modification to distinguish whether they were - used by the high-level or low-level interfaces. - - Finally, there may still be a few programs which should be modified to - improve their portability, e.g., adding an - -fflush(stdout); - - when switching from "[22]shell" mode to "[23]program" (curses) mode. - Those are fairly rare because most programmers have learned not to mix - printf and [24]printw. - - Symbol versioning - - This release introduces symbol-versioning to ncurses because without - it, the change of ABI would be less successful. A lengthy discussion - will be presented in [25]Symbol versioning in ncurses. These notes - summarize what has changed, and what can be done with the new release. - - Symbol-versioning allows the developers of a library to mark each - public symbol (both data and functions) with an identifier denoting - the library name and the version for which it was built. By doing - this, users of the library have a way to help ensure that applications - do not accidentally load an incompatible library. In addition, private - symbols can be hidden entirely. - - This release provides sample files for the four principal - configurations of ncurses libraries: ncurses, ncursesw, ncursest and - ncursestw. Each sample is given in two forms: - - ".map" - These list all public symbols, together with version names. - - ".sym" - These list all public symbols, without version names. - - The sample files are generated by scripts which take into account a - few special cases such as [26]tack to omit many of the ncurses private - symbols (beginning with "_nc_"). Here are counts of globals versus - locals: - - Config Symbols Globals Locals "_nc_" - ncurses 976 796 180 332 - ncursesw 1089 905 184 343 - ncursest 979 804 175 358 - ncursestw 1098 914 184 372 - - Although only four sample configurations are presented, each is formed - by merging symbols from several combinations of configure-script - options, taking into account advice from downstream packagers. Because - they are formed by merging, the sample files may list a symbol which - is not in a given package. That is expected. The samples have been - tested and are working with systems (such as Fedora, FreeBSD and - Debian) which fully support this feature. There are other systems - which do not support the feature, and a few (such as Solaris) which - provide incomplete support. - - The version-naming convention used allows these sample files to build - distinct libraries for ABI 5 and 6. Version names consist of - * configuration name, e.g., "NCURSESW" for the wide-character - libraries - * ABI version (if not 5) - * library name for two special cases which have the same interface - across configurations: "TINFO" and "TIC" - * release version - * patch date (for the release version) - - For example, running nm -D on the libraries in the ncurses6 test - package shows these symbol-versions: - -0000000000000000 A NCURSES6_TIC_5.0.19991023 -0000000000000000 A NCURSES6_TIC_5.1.20000708 -0000000000000000 A NCURSES6_TIC_5.5.20051010 -0000000000000000 A NCURSES6_TIC_5.7.20081102 -0000000000000000 A NCURSES6_TIC_5.9.20150530 -0000000000000000 A NCURSES6_TINFO_5.0.19991023 -0000000000000000 A NCURSES6_TINFO_5.1.20000708 -0000000000000000 A NCURSES6_TINFO_5.2.20001021 -0000000000000000 A NCURSES6_TINFO_5.3.20021019 -0000000000000000 A NCURSES6_TINFO_5.4.20040208 -0000000000000000 A NCURSES6_TINFO_5.5.20051010 -0000000000000000 A NCURSES6_TINFO_5.6.20061217 -0000000000000000 A NCURSES6_TINFO_5.7.20081102 -0000000000000000 A NCURSES6_TINFO_5.8.20110226 -0000000000000000 A NCURSES6_TINFO_5.9.20150530 -0000000000000000 A NCURSESW6_5.1.20000708 -0000000000000000 A NCURSESW6_5.3.20021019 -0000000000000000 A NCURSESW6_5.4.20040208 -0000000000000000 A NCURSESW6_5.5.20051010 -0000000000000000 A NCURSESW6_5.6.20061217 -0000000000000000 A NCURSESW6_5.7.20081102 -0000000000000000 A NCURSESW6_5.8.20110226 -0000000000000000 A NCURSESW6_5.9.20150530 - - As a special case, this release (which makes the final change for ABI - 5) is marked with release version 5.9 and patch date 20150530. - - Miscellaneous - - The new release has several improvements for performance and building. - For instance: - * several files in ncurses- and progs-directories were modified to - allow const data used in internal tables to be put by the linker - into the readonly text segment. - * various improvements were made to building the Ada95 binding, both - in simplifying the generated files as well as improving the way it - uses gnatmake - - There are also new features in the libraries: - * added [27]use_tioctl function - * added [28]wgetdelay to retrieve _delay member of WINDOW if it - happens to be opaque, e.g., in the pthread configuration. - * added [29]A_ITALIC extension. - * added form library extension [30]O_DYNAMIC_JUSTIFY option which - can be used to override the different treatment of justification - for static versus dynamic fields . - * rewrote [31]putwin and [32]getwin, making an extended version - which is capable of reading screen-dumps between the wide/normal - ncurses configurations. These are text files, except for a magic - code at the beginning: - -0 string \210\210 Screen-dump (ncurses) - - * several changes to mouse support include: - + added decoder for xterm SGR 1006 mouse mode. - + added experimental support for "%u" format to terminfo. - + improved behavior of wheel-mice for xterm protocol: noting - that there are only button-presses for buttons "4" and "5", - so there is no need to wait to combine events into - double-clicks . - - There are a few new configure options dealing with library - customization: - * add "--enable-ext-putwin" configure option to turn on the extended - putwin/getwin. By default, this is enabled for ABI 6 and disabled - with ABI 5. - * add "--enable-string-hacks" option to control whether strlcat and - strlcpy may be used. Because ncurses already does the requisite - buffer-limit checks, this feature is mainly of interest to quiet - compiler-warnings on a few systems. - * add configure option "--with-tparm-arg" to allow [33]tparm's - parameters to be something more likely to be the same size as a - pointer, e.g., intptr_t (again, the default is set for ABI 6). + New features + + There are several new features: + * O_EDGE_INSERT_STAY tells the form library to optionally delay + cursor movement on a field edge/boundary + * O_INPUT_FIELD extension to form library allows a dynamic field to + shrink if the new limit is smaller than the current field size. + * added exit_curses and exit_terminfo to replace internal symbols + for leak-checking. + * added curses_trace, to replace trace(). + + Additionally, to improve performance other changes (and extensions) + are provided in this release: + * mouse decoding now handles shift/control/alt logic when decoding + xterm's 1006 mode + * ncurses now defines a limit for wgetnstr, wgetn_wstr when length + is negative or "too large". + * reordered loop-limit checks in winsnstr in case the string has no + terminating null and only the number of characters is used. + * there is now no buffer-size limit when reading the $TERMCAP + variable. + * the $TERMCAP variable may be interpreted as a fallback to a + terminfo entry + * mvcur now decides whether to use hard-tabs, using xt, tbc and hts + as clues. + * extended colors are improved by modifying an internal call to + vid_puts to pass extended color pairs e.g., from tty_update.c and + lib_mvcur.c + * the initialization functions now avoid relying upon persistent + data for the result from getenv + * scrolling is improved: + + a limit check in newline_forces_scroll handles the case where + the row is inside scroll-margins, but not at the end. + + improved loop limits in _nc_scroll_window handle a case where + the scrolled data is a pad which is taller than the window. + + Other improvements + + These are revised features: + * used "const" in some prototypes rather than NCURSES_CONST where + X/Open Curses was updated to do this, e.g., wscanw, newterm, the + terminfo interface. Also use "const" for consistency in the + termcap interface, which was withdrawn by X/Open Curses in Issue 5 + (2007). As of Issue 7, X/Open Curses still lacks "const" for + certain return values, e.g., keyname. + * modified wbkgd and wbkgrnd to improve compatibility with SVr4 + curses, changing the way the window rendition is updated when the + background character is modified + * improved terminfo write/read by modifying the fourth item of the + extended header to denote the number of valid strings in the + extended string table (see term(5)). + * modified the initialization checks for mouse so that the + xterm+sm+1006 block will work with terminal descriptions not + mentioning xterm. + + These were done to limit or ultimately deprecate features: + * deprecated safe-sprintf, since the vsnprintf function, which does + what was needed, was standardized long ago. + * marked vwprintw and vwscanw as deprecated; recommend using + vw_printw and vw_scanw, respectively. + * added deprecation warnings for internal functions called by older + versions of tack. + * removed unused _nc_import_termtype2 function. + + These are improvements to existing features: + * check parameter of set_escdelay, return ERR if negative. + * check parameter of set_tabsize, return ERR if not greater than + zero + * correct a status-check in _nc_read_tic_entry() so that if reading + a hex/b64 $TERMINFO, and the $TERM does not match, fall-through to + the compiled-in search list. + * amend check for repeat_char to handle a case where setlocale() was + called after initscr + * move macro for is_linetouched inside NCURSES_NOMACROS ifndef. + * use _nc_copy_termtype2 rather than direct assignment in setupterm, + in case it is called repeatedly using fallback terminfo + descriptions + * improve workaround for Solaris wcwidth versus line-drawing + characters + * add checks in repair_subwindows to keep the current position and + scroll-margins inside the resized subwindow. + * correct a buffer-limit in write_entry.c for systems that use + caseless filenames. + * improved build-time utility report_offsets: + + add categories, e.g., "w" for wide-character, "t" for threads + to make the report more readable. Reorganized the structures + reported to make the categories more apparent. + + add NCURSES_GLOBALS and NCURSES_PRESCREEN to report to show + how similar the different libtinfo configurations are. + * modified some header files to ensure that those include necessary + files except for the previously-documented cases + * added some traces in initialization to show whether a fallback + entry is used. + * made minor optimization to reduce calls to _nc_reserve_pairs + + These are corrections to existing features: + * fix a special case in PutAttrChar where a cell is marked as + alternate-character set, but the terminal does not actually + support the given graphic character. This would happen in an older + terminal such as vt52, which lacks most line-drawing capability. + * corrected flag for "seq" method of db 1.8.5 interface, needed by + toe on some of the BSDs. + * modify comparison in make_hash.c to correct a special case in + collision handling for Caps-hpux11 + * add extended_slk_color{,_sp} symbols to the appropriate + package/*.{map,sym} files + * modify lib_setup to avoid calling pthread_self() without first + verifying that the address is valid, i.e., for weak symbols + * add a couple of broken-linker symbols to the list of versioned + symbols to help with link-time optimization versus weak symbols. Program improvements - Utilities - - Most of the termcap-related changes based on development of [34]tctest - (termcap library checker) are implemented in the tic and infocmp - programs rather than affecting the library. As noted in the - [35]discussion of tctest, ncurses's ability to translate between - terminfo and termcap formats has been improved at different times, but - subject to feedback from "real" termcap users. There are very few of - those. Nowadays, virtually all termcap users are using ncurses (or - NetBSD, with its own terminfo library) and their programs are actually - using terminfo rather than termcap data. - - Still, there are a few. A comment about the translation of the ASCII - NUL character prompted a review: - * Both terminfo and termcap store string capabilities as - NUL-terminated strings. - * In terminfo, a \0 in a terminal description is stored as \200. - * There are no (known) terminals which would behave differently when - sent \0 or \200. - * When translating to terminfo format (or displaying a printable - version of an entry using infocmp), ncurses shows \200 as \0. - * It has done this since 1998 (quoting from the NEWS file): - -[36]980103 -... - + modify _nc_tic_expand() to generate \0 rather than \200. -... - + correct translation of terminfo "^@", to \200, like \0. - - * However, the _nc_tic_expand function (which optionally produces - terminfo or termcap format) did not address this special case for - termcap. Even the later 4.4BSD [37]cgetstr interprets a \0 - literally, ending that string (rather than using the terminfo - improvement). - - As a result of the review, several improvements were made to ncurses - translation to/from termcap format -- and improving the checks made in - tic for consistency of entries. Most of these are not of general - interest, except for two new command-line options for tic and infocmp: - * the "-0" option generates termcap/terminfo source on a single - line. - * the "-K" option provides stricter BSD-compatibility for termcap - output. - - Other user-visible improvements and new features include: - * added "-D" option to tic and infocmp, to show the database - locations that it could use. - * added "-s" option to toe, to sort its output. - * extended "-c" and "-n" options of infocmp to allow comparing more - than two entries. - * modified toe's report when "-a" and "-s" options are combined, to - add a column showing which entries belong to a given database. - * modified the clear program to take into account the "E3" extended - capability to clear the terminal's scrollback buffer. + Several improvements were made to the utility programs: + + clear + + + improved logic for clearing with the E3 extension, in case + the terminal scrolls content onto its saved-lines before + actually clearing the display, by clearing the saved-lines + after clearing the display + + infocmp + + + omit filtering of "OTxx" names which are used for obsolete + capabilities, when the output is sorted by long-names. This + change helps when making a table of the short/long capability + names. + + tic + + + added check for consistent alternate character set + capabilities. + + added check for paired indn/rin. + + added check for terminals with parm_dch vs parm_ich. + + added check for the case where setf/setb are given using + different strings, but provide identical results to + setaf/setab. + + corrected check for ich1. + + changed a too-large terminal entry from a fatal error to a + warning. + + toe + + + ignores any hex/b64 $TERMINFO value in the list of terminfo + databases. + + tset + + + replace check in reset command for obsolete "pt" capability + using tbc and hts capabilities as clues + + modify reset to allow for tabstops at intervals other than 8. + + change reset's behavior for margins to simply clear + soft-margins if possible, rather than clearing and then + setting them according to the terminal's width. + + tput + + + add "x" to getopt string so that "tput -x clear" works. + + Several changes were made to the generated ncurses*config scripts and + the analogous ".pc" files to reduce differences between the + configurations they report: + * modified the ncurse*-config and pc-files to more closely match for + the -I and -l options. + * filtered out linker-specs from the --libs report. + * amended the ncurses*-config and pc-files to take into account the + rpath hack which differed between those files. + * modified generated ncurses*config and ncurses.pc, ncursesw.pc, + etc., to list helper libraries such as gpm for static linking. Examples - Along with the library and utilities, many improvements were made to - the [38]ncurses-examples. Some were made to allow building (and - comparison-testing) against NetBSD curses and PDCurses. Both lack some - of the X/Open Curses features, necessitating customization. But this - activity was useful because it showed some remaining performance - issues (which have been resolved in this release). - - These changes were made to verify compatibility or compare performance - of ncurses: - * made workarounds for compiling test-programs with NetBSD curses, - though it lacks some common functions such as [39]use_env. - * added dots_termcap test-program - * added dots_curses test-program, for comparison with the low-level - examples. - * added test_setupterm test-proram to demonstrate normal/error - returns from the setupterm and restartterm functions. - * added "-d", "-e" and "-q" options to the demo_terminfo and - demo_termcap test-programs. - * added "-y" option to demo_termcap and test/demo_terminfo - test-programs to demonstrate behavior with/without extended - capabilities. - * modified demo_termcap and demo_terminfo test-programs to make - their options more directly comparable, and add "-i" option to - specify a terminal description filename to parse for names to - lookup. - * rewrote the tests for [40]mvderwin and test for recursive - [41]mvwin in the movewindow test-program. - - These changes were made to help with the MinGW port: - * added test-screens to the ncurses test-program to show - 256-characters at a time, to help with MinGW port. - * modified the view test-program to load UTF-8 when built with MinGW - by using regular win32 API because the MinGW functions mblen and - mbtowc do not work. - * added "-s" option to the view test-program to allow it to start in - single-step mode, reducing size of trace files when it is used for - debugging MinGW changes. - - These changes were made to verify new extensions in ncurses: - * added [42]form_driver_w entrypoint to wide-character forms - library, as well as form_driver_w test-program. - * modified ncurses test-program's b/B tests to display lines only - for the attributes which a given terminal supports, to make room - for an italics test. - * modified ncurses test-program, adding "-E" and "-T" options to - demonstrate use_env versus use_tioctl. - * modified ncurses test-program's c/C tests to cycle through subsets - of the total number of colors, to better illustrate - 8/16/88/256-colors by providing directly comparable screens. - * modified the ncurses test-program to also show position reports in - 'a' test. - - These changes were made to make the examples more useful: - * added scripts for building dpkg and rpm test-packages - * modified the hanoi test-program to show the minimum number of - moves possible for the given number of tiles. - * modified the knight test-program to show the number of choices - possible for each position in automove option, e.g., to allow user - to follow Warnsdorff's rule to solve the puzzle. + Along with the library and utilities, improvements were made to the + ncurses-examples. Most of this activity aimed at improving the + test-packages. A few changes are more generally useful, e.g., for the + main ncurses test-program, and for analyzing traces using the + tracemunch script: + * improve recovery from error when reading command-character in + test/ncurses.c, showing the relevant error message and not exiting + on EINTR. + * improve tracemunch, by keeping track of TERMINAL* values, and if + tracing was first turned on after initialization, attempt to show + distinct screen, window and terminal names anyway. + * modify tracemunch to accept filename parameters in addition to use + as a pipe/filter. + * update tracemunch to work with perl 5.26.2, which changed the + rules for escaping regular expressions. + * add some checks in tracemunch for undefined variables. + * modify TurnOn/TurnOff macros (in lib_vidattr.c and lib_vid_attr.c) + to avoid expansion of "CUR" in trace. + + There are other new demo/test programs and reusable examples: + + color_content + Demonstrate the color_content and extended_color_content + functions. + + demo_tabs + A simple demo of tabs in curses. + + dump_window + A portable curses screen-dump, used to compare ncurses screen + contents with Solaris. + + pair_content + Demonstrate the pair_content and extended_pair_content + functions. + + report_hashing + Check hash-tables used for terminfo and termcap names. + + parse_rgb + Sample implementation of the ncurses RGB extension from + user_caps.5, used in picsmap and savescreen programs. + + A variety of improvements were made to existing programs, both new + features as well as options added to make the set of programs more + consistent. + * add "-l" option to test/background, to dump screen contents in a + form that lets different curses implementations be compared. + * add "@" command to test/ncurses F-test, to allow rapid jump to + different character pages. + * added enum, regex examples to test/demo_forms + * amend Scaled256() macro in test/picsmap.c to cover the full range + 0..1000 + * corrected pathname used in Ada95 sample programs for explain.txt, + to work with test-packages, and used an awk script to split the + resulting pathname when it would be too long for a single line. + * ignore interrupted system-call in test/ncurses's command-line, + e.g., if the terminal were resized. + * improved ifdef's for TABSIZE variable, to help with AIX/HPUX + ports. Terminal database - This release provides improvements to tic's "-c" checking option, - which was used for example to - * make sgr in several entries agree with other caps. - * correct padding in some entries where earlier versions had - miscounted the number of octal digits. - There are several new terminal descriptions: - * [43]mlterm is now aliased to mlterm3 - * [44]nsterm is now derived from nsterm-256color - * [45]putty-sco - * [46]teken is FreeBSD's "xterm" console. - * [47]terminator - * [48]terminology - * [49]tmux is derived from screen. - * several screen.XXX entries support the respective variations for - 256 colors. - * [50]simpleterm is now 0.5 - * [51]vte is aliased to vte-2012 - * [52]vt520ansi + + alacritty, domterm, kitty, mintty, mintty-direct, ms-terminal, + n7900, nsterm-build309, nsterm-direct, screen5, ti703, ti707, + ti703-w, ti707-w vscode, vscode-direct, xterm-mono, xterm.js + + There are many changes to existing terminal descriptions. Some were + updates to several descriptions: + * use ansi+rep in a dozen places + * add rs1 to konsole, mlterm + * improve several flash capabilities with trailing mandatory delays + * drop ich1 from rxvt-basic, Eterm and mlterm to improve + compatibility with old non-curses programs + * add/use xterm+keypad in xterm-new + * use xterm+sl-twm for consistency, nine places + * improve xm example in xterm+x11mouse and xterm+sm_1006. + + while others affected specific descriptions. These were retested, to + take into account changes by their developers: + + terminator, st + + while these are specific fixes based on reviewing documentation, user + reports, or warnings from tic: + + adds200: + + + fix typo + + gnome-256color + + + base entry on "gnome", not "vte", for consistency + + interix + + + trim unnecessary setf/setb + + linux-16color + + + accommodate Linux console driver incompatibility introduced + in early 2018 + + nsterm-256color: + + + add nsterm-build309 to replace nsterm-256color, assigning the + latter as an alias of nsterm, to make mouse work with + nsterm-256color + + regent40: + + + renumber function-keys to match manual + + regent60: + + + add cd (clr_eos) + + corrected acsc + + add shifted function-keys + + tvi950: + + + added function-key definitions to agree with Televideo 950 + manual + + corrected acsc + + remove bogus kf0 + + add bel + + tvi955: + + + fix typo + + vi200: + + + add acsc string, including right/down-arrow + + wy50: + + + corrected acsc + + wy50 and wy60: + + + add shifted function-keys as kF1 to kF16 + + xterm+x11hilite: + + + eliminate unused p5 parameter. A few entries use extensions (user-defined terminal capabilities): - * E3, used in linux, putty and xterm-basic is tested in the - [53]clear program to erase a terminal's scrollback. - * TS is used in the [54]xterm+sl building block to help deprecate - the misuse of tsl for xterm's title-string. - * XT is used in some terminfo entries to improve usefulness for - other applications than screen, which would like to pretend that - xterm's title is a status-line. - * xm is used in examples [55]xterm-1005 and [56]xterm-1006 to - illustrate a way to make mouse handling more general - - A few terminals support italics and/or dim capabilities. In - particular, screen does not. Documented that, and accommodated the - terminals where this feature works with the A_ITALIC extension. - * konsole, mlterm3 (italics) - * nsterm (dim) - * screen (dim) - * vte (dim, italics) - * xterm (dim, italics) + * use xterm+sm+1006 (aka "SGR 1006 mouse") for konsole-base and + putty + * add Smol/Rmol user-defined capability to tmux and vte-2018 + * add Smulx user-defined capability to tmux, vte-2018 Documentation @@ -468,325 +402,279 @@ fflush(stdout); * attempts to improve the description of features which users have found confusing * fills in overlooked descriptions of features which were described - in the [57]NEWS file but treated sketchily in manual pages. - - In addition, the mechanism for producing HTML versions of the - documentation has been improved: - * use an improved version of [58]man2html to generate html manpages. - * regenerated [59]NCURSES-Programming-HOWTO.html to fix some of the - broken html emitted by docbook. + 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: + + correct error-returns listed in manual pages for a few form + functions + + corrected prototypes in several manpages using script to + extract those in compilable form. + + fix typo in term.5, improve explanation of format + * Clarify in manual pages that vwprintw and vwscanw are obsolete. + They have not been part of X/Open Curses since 2007. + * New/improved history and portability sections: + + curs_addch.3x gives some background for ACS symbols. + + curs_getcchar.3x explains a difference between ncurses and + X/Open Curses. + + curs_getstr.3x gives historical/portability background for + the length parameter of wgetnstr. + + curs_slk.3x lists a few differences between SVr4 curses and + X/Open Curses for soft-keys. + + curs_terminfo.3x explains that the initial implementation of + terminfo in SVr2 was mostly replaced by other developers in + SVr3. + + infocmp.1 explains that the initial version of terminfo had + no tool for decompiling descriptions. That came later, with + SVr3, with a different developer. + + tabs.1 tells more than you wanted to know about the tool. + + tic.1 explains that the initial version of terminfo had a + rudimentary tool (based on termcap) for compiling entries. + The tool used with Unix was developed by others for SVr3. + + toe.1 explains the origin of this tool. + * Improvements for user_caps.5: + + mention meml, memu and box1 + + expanded description of XM + + add a clarification regarding the RGB capability. + + mention user_caps.5 in the tic and infocmp manual pages. + * Other improvements: + + curs_add_wch.3x adds note about Unicode terminology for the + line-drawing characters. + + curs_color.3x improves discussion of error returns and + extensions. + + curs_mouse.3x explains how the kmous and XM capabilities are + used for xterm-mouse input. + + curs_refresh.3x improves documentation regarding the virtual + and physical screens. + + curs_util.3x mentions a difference between SVr4 and X/Open + Curses for unctrl.h + + curs_variables.3x improves description of the init_tabs + capability and TABSIZE variable. + + ncurses.3x improves documentation regarding feature-test + macros in curses.h + + resizeterm.3x about top-level windows which touch the + screen's borders. + + tput.1 clarifies how tput determines the terminal size. + + There are no new manual pages (all of the manual page updates are to + existing pages). + + Some of the improvements are more subtle, relating to the way the + information is presented. For instance, the generated terminfo.5 file + uses a different table layout, allowing it to use space on wide + terminals more effectively. Interesting bug-fixes - * Ada95 binding: - + modify makefile rules to ensure that the PIC option is not - used when building a static library - + make Ada95 build-fix for big-endian architectures such as - sparc. This undoes one of the fixes from [60]20110319, which - added an "Unused" member to representation clauses, replacing - that with pragmas to suppress warnings about unused bits. - * Color and attributes: - + parenthesize parameter of COLOR_PAIR and PAIR_NUMBER in - curses.h in case it happens to be a comma-expression. - + improve [61]20021221 workaround for broken acs, handling a - case where that ACS_xxx character is not in the acsc string - but there is a known wide-character which can be used. - + modify [62]init_pair to accept -1's for color value after - [63]assume_default_colors has been called. - + add a check in [64]start_color to limit color-pairs to 256 - when extended colors are not supported. - * Resizing the screen: - + propagate error-returns from wresize, i.e., the internal - increase_size and decrease_size functions through - [65]resize_term. - + add check for zero/negative dimensions for resizeterm and - resize_term. - + modify resizeterm to always push a KEY_RESIZE onto the fifo, - even if screensize is unchanged. Modify library to push a - KEY_RESIZE if there was a SIGWINCH, even if it does not call - resizeterm). These changes eliminate the case where a - SIGWINCH is received, but ERR is returned from wgetch or - wgetnstr because the screen dimensions did not change. - * Low-level interfaces - + fix an old bug in the termcap emulation; "%i" was ignored in - tparm because the parameters to be incremented were already - on the internal stack. - + change "%l" behavior in tparm to push the string length onto - the stack rather than saving the formatted length into the - output buffer. - + modify name-comparison for tgetstr, etc., to accommodate - legacy applications as well as to improve compatbility with - BSD 4.2 termcap implementations (see note for [66]980725). - * High-level interfaces - + modify internal recursion in wgetch which handles cooked mode - to check if the call to wgetnstr returned an error. This can - happen when both nocbreak and nodelay are set, for instance - (see note for [67]960418). - + add a check in internal function waddch_nosync to ensure that - tab characters are treated as control characters; some broken - locales claim they are printable. - + modify menu library to ensure that a menu's top-row is - adjusted as needed to ensure that the current item is on the - screen - + fix special case where double-width character overwrites a - single- width character in the first column. + While there were many bugs fixed during development of ncurses 6.2, + only a few (the reason for this release) were both important and + interesting. Most of the bug-fixes were for local issues which did not + affect compatibility across releases. Since those are detailed in the + NEWS file no elaboration is needed here. + + The interesting bugs were in tic/infocmp's handling of user-defined + capabilities. These were not recent bugs. Initially it was a simple + problem: + * The user-defined capabilities can be any type (boolean, number or + string), but once given a type all uses of the name must conform + to that type--unless some special support for a particular + multi-typed name is built into ncurses. + * One of simpleterm's contributors copied some definitions for using + tmux's user-defined capabilities in late in 2016. + +diff --git a/st.info b/st.info +@@ -185,7 +185,10 @@ st| simpleterm, + tsl=\E]0;, + xenl, + vpa=\E[%i%p1%dd, +- ++# Tmux unofficial extensions, see TERMINFO EXTENSIONS in tmux(1) ++ Se, ++ Ss, ++ Tc, + + st-256color| simpleterm with 256 colors, + use=st, + + * Later, in (referring to a version from mid-2017), a user asked to + have it updated in ncurses. + * However, it had an error from the change in late 2016. The + terminal description made what tmux expected to be string actually + a boolean. + Over the years, there were problems with each of simpleterm's + terminal descriptions. I repaired those, and usually dealt with + the problem. + * The difference in this case was that when compiling the terminal + database, tic may have in memory the definitions for more than one + terminal description (so that it can resolve "use=" clauses). + Seeing two different types for the same name, in certain + situations it would incorrectly merge the symbol tables for the + two terminal descriptions. + * On simpleterm's side, their bug was finally fixed in late 2019, + three years after the bug was created. + + For ncurses, the elapsed time to fix this bug was less than three + years. Someone reported a problem with the terminal description a few + weeks after releasing ncurses 6.1 (in tmux #1264), and the terminal + description was updated that week (ncurses patch 20180224): + +20180224 + + modify _nc_resolve_uses2() to detect incompatible types when merging + a "use=" clause of extended capabilities. The problem was seen in a + defective terminfo integrated from simpleterm sources in 20171111, + compounded by repair in 20180121. + + correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD + + The larger part of that change added a check to prevent a simple merge + of terminal descriptions where the same user-defined name was used + with different types. But it raised some questions: + * Was there a reliable way to manage terminal descriptions which + used the same extended name in different ways? + * Should ncurses provide a registry of well-known extended names, + with their types? + + Since the correction to terminfo.src could have been readily adopted + by packagers, there was nothing more to be done from ncurses' + standpoint on that part. But improving ncurses to prevent issues like + that is the reason for making a release. + + Nothing more (constructive) was mentioned with regard to simpleterm. + But a few problems were found in the handling of user-defined + capabilities: + * Forward-references to user-defined capabilities in a "use=" clause + did not allocate new data for each use. In tic, successive + compilation of terminal entries could add user-defined + capabilities to the wrong terminal entry. + This was not noticed before, since xterm's terminal descriptions + were the main users of the feature, and almost all of the uses of + the building-blocks which contained user-defined capabilities were + backward-references. + * There is one (documented) case where ncurses 6.1 supports a + user-defined capability that could be any type (i.e., "RGB"). The + check added in February 2018 to guard against mismatches did not + handle all of the combinations needed. + + Both of these issues dated from the original implementation of + user-defined capabilities. Fixing them does not change the terminal + database, but a older tic without the fixes will not be able to handle + terminfo sources which rely upon those fixes. Starting in June 2019, + the download link for the terminfo source file was capped at that + date. The development sources have an up-to-date copy of the file, for + people with a legitimate need for it. + + The "-c" (check) option of tic is not very useful if it cannot offer + advice on parameters needed for user-defined capabilities. The various + Caps files were reorganized to reduce redundancy, and in the common + portion (Caps-ncurses), a registry of user-defined capabilities is + provided for use by tic. While users can still define their own custom + capabilities, tic will not offer any advice when their parameters do + not match. + + In ncurses 6.2, tic makes a special check to allow any type for RGB, + but its being able to do this relies upon fixes made in the ncurses + library in mid-2019. Configuration changes Major changes - The ncurses 6.0 configure script makes changes to the default value of - several configure options, depending on the --with-abi-version option - (i.e., whether its value is "5" or "6"): - - --enable-const - Feature introduced in [68]970405 supports the use of const - where X/Open Curses should have, but did not. NetBSD curses - does something similar with const. - - --enable-ext-colors - Extends the cchar_t structure to allow more than 16 colors to - be encoded. This applies only to the wide-character - (--enable-widec) configuration. - - --enable-ext-mouse - Modifies the encoding of mouse state to make room for a 5th - mouse button. That allows one to use ncurses with a wheel mouse - with xterm or similar X terminal emulators. - - --enable-ext-putwin - Modifies the file-format written by putwin to use printable - text rather than binary files, allowing getwin to read screen - dumps written by differently-configured ncurses libraries. The - extended getwin can still read binary screen dumps from the - same configuration of ncurses. This does not change the ABI - (the binary interface seen by calling applications). - - --enable-interop - Modifies the FIELDTYPE structure used for the form library to - make it more generic. - - --enable-lp64 - Allows an application to define _LP64 to declare chtype and - mmask_t as simply "unsigned" rather than the configured types - using the --with-chtype and --with-mmask_t options. - - --enable-sp-funcs - Compile-in support for extended functions which accept a SCREEN - pointer, reducing the need for juggling the global SP value - with [69]set_term and [70]delscreen. - - --with-chtype=uint32_t - Makes chtype explicitly a 32-bit unsigned value. - - --with-mmask_t=uint32_t - Makes mmask_t explicitly a 32-bit unsigned value. - - --with-tparm-arg=intptr_t - X/Open Curses declares [71]tparm using long for each of the - parameters aside from the formatting string, presuming that - long and char* are the same size. This configure option uses - intptr_t which provides a better guarantee of the sizes. - - The configure script no longer checks for antique compilers; c89 is - assumed as a minimum. There are a few features from later revisions - which are used when available. The configure script makes checks to - turn on useful warnings from clang, gcc and icc. You should be able to - build ncurses 6.0 with any of the current (or not so current) C - compilers available in 2015. - - The configure script, by the way, makes changes which do not work with - systems whose /bin/sh is non-POSIX. This mainly affects Solaris (the - other vendor unix systems have followed the POSIX guidelines for the - past twenty years). If you must build on Solaris, its [72]xpg4 - binaries suffice, e.g., - - #!/bin/sh - WHAT=`hostname|sed -e 's/\..*//'` - OUT=configure.out - cat >>$OUT <&1 | tee -a $OUT - - Other major changes to the configure script include: - * ABI 6 is now the default, intending that the existing ABI 5 should - build as before using the "--with-abi-version=5" option. - * added --with-extra-suffix option to help with installing - nonconflicting ncurses6 packages, e.g., avoiding header- and - library-conflicts. - NOTE: as a side-effect, this renames - - adacurses-config to adacurses5-config and - adacursesw-config to adacursesw5-config - * the configure script looks for gnatgcc if the Ada95 binding is - built, in preference to the default gcc/cc. The script also - ensures that the Ada95 binding is built with the level of - optimization as the C libraries. - * the configure script captures define's related to -D_XOPEN_SOURCE - from the configure check and adds those to the *-config and *.pc - files, to simplify use for the wide-character libraries. + There are no major changes. Several new options were added to ease + integration of packages with systems using different versions of GNAT + and ncurses. Also, improvements were made to configure checks. Configuration options - There are several new (or extended) configure options: + There are a few new/modified configure options: - --disable-db-install - Do not install the terminal database. This is used to omit - features for packages, as done with --without-progs. The option - simplifies building cross-compile support packages. + --with-config-suffix + helps work around a filename conflict with Debian packages + versus test-packages. - --disable-gnat-projects - This option is used for regression testing + --with-ada-libname + allows one to rename the "AdaCurses" library (at least one + packager prefers a lowercase name). - --disable-lib-suffixes - Suppress the "w", "t" or "tw" suffixes which normally would be - added to the library names for the --enable-widec and - --with-pthread options. + --with-fallbacks + now ensures there is a value, and adds the fallback information + to top-level Makefile summary. - --with-cxx-shared - When --with-shared is set, build libncurses++ as a shared - library. This implicitly relies upon building with gcc/g++, - since other compiler suites may have differences in the way - shared libraries are built. libtool by the way has similar - limitations. + --with-pcre2 + check for pcre-posix library to help with MinGW port. - --with-hashed-db - Extended this configure option to simplify building with - different versions of Berkeley database using FreeBSD ports. + --with-tic-path and - --with-pc-suffix - If ".pc" files are installed, optionally add a suffix to the - files and corresponding package names to separate unusual - configurations. If no option value is given (or if it is - "none"), no suffix is added. This option is used in the test - package for ncurses6. + --with-infocmp-path + help work around problems building fallback source using + pre-6.0 tic/infocmp. - --with-xterm-kbs - Configure xterm's terminfo entries to use either BS (^H, i.e., - ASCII backspace) or DEL (^?, or 127). + --with-versioned-syms + option value can now be a relative pathname. Portability - MinGW - - Most of the portability-related work since [73]ncurses 5.9 extended - and improved the MinGW port introduced in [74]ncurses 5.8. - - The MinGW port can be readily cross-compiled: - * modified configure script to allow creating dll's for MinGW when - cross-compiling. - * enforced Windows-style path-separator if cross-compiling, - * added scripts for test-builds of cross-compiled packages for - ncurses6 to MinGW. - * added pc-files to the MinGW cross-compiling test-packages. - * added script for building test-packages of binaries cross-compiled - to MinGW using NSIS. - * added nc_mingw.h to installed headers for MinGW port; this is - needed for cross-compiling [75]ncurses-examples. - * added test-packages for cross-compiling ncurses-examples using the - MinGW test-packages. - - The MinGW-specific Windows driver accounts for several changes: - * wide-character display is made usable by replacing MinGW's - non-working wcrtomb and wctomb functions. - * implemented some display features: [76]beep, [77]flash, - [78]curs_set. - * the driver handles repainting on endwin/refresh combination. - * modified treatment of TERM variable for MinGW port to allow - explicit use of the Windows console driver by checking if $TERM is - set to "#win32console" or an abbreviation of that. - * the Windows driver also matches the special TERM value "unknown" - * the driver now returns characters for special keys, (like ansi.sys - does), when keypad mode is off, rather than returning nothing at - all. - * the driver checks a new environment variable [79]NCURSES_CONSOLE2 - to optionally work around a deficiency in Console2 (and its - descendent ConsoleZ) which hang when an application creates a - console buffer. - - Finally, there are other improvements: - * MinGW is one of the configurations where ncurses installs by - default into /usr - * configuration for cross-compiling uses AC_CHECK_TOOLS in - preference to AC_PATH_PROGS when searching for ncurses*-config, - e.g., in Ada95/configure and test/configure. - * extend Windows support to work with MSYS2; - + this works with a scenario where there is an ANSI-escape - handler such as ansicon running in the console window. - + wrap isatty calls with a macro, provide a corresponding set - of support routines to address differences between MinGW and - MSYS2. - * ensure WINVER is defined in makefiles rather than using headers. - * add check for the gnatprep "-T" option. - * work around a bug introduced by [80]gcc 4.8.1 in MinGW which - breaks "trace" feature. - * add a driver-name method to each of the drivers. - - Other ports - - These changes affect certain platforms (ports): - * the configure script knows how to build shared libraries with - DragonFlyBSD and Interix. - * support for AIX shared libraries is improved, tested with AIX 5.3, - 6.1 and 7.1 with both gcc 4.2.4 and cc: - + the shared-library suffix for AIX 5 and 6 is now ".so" - + the -brtl option is used with AIX 5-7; it is needed to link - with the shared libraries. - * the configure --enable-pc-files option takes into account the - [81]PKG_CONFIG_PATH variable. - * the configure option --with-pkg-config-libdir provides control - over the actual directory into which pc-files are installed. - * the build scripts add explicit -ltinfo, etc., to the generated - ".pc" file when ld option "--as-needed" is used, or when ncurses - and tinfo are installed without using rpath. - * the configure script disallows conflicting options - "--with-termlib" and "--enable-term-driver". - * the check for missing c++ compiler to work when no error is - reported, and no variables set is improved (see note for - [82]20021206). - * the misc/gen_edit.sh script selects a "linux" entry which works - with the current kernel rather than assuming it is always - "linux3.0" - * the test/configure script makes it simpler to override names of - curses-related libraries, to help with linking with pdcurses in - MinGW environment. - * the configure-script/ifdef's allow the BSD OLD_TTY feature to be - suppressed if the type of ospeed is configured using the option - --with-ospeed to not be a short. By default, it is a short for - termcap-compatibility. - * the MKlib_gen.sh script works around a recent change in gcc 5 - (released [83]mid-2015) which essentially emits multiple #line - statements for the same position in a file. - * the configure script works with Minix3.2 (see [84]note on - portability) - * OS/2 redux: - + the configure script supports OS/2 kLIBC. - + the --with-lib-prefix option allows configuring for old/new - flavors of OS/2 EMX. - * improved configure-script checks for _XOPEN_SOURCE: - + the definition works starting with Solaris 10. - + the definition is suppressed for IRIX64, since its header - files have a conflict versus _SGI_SOURCE. + Many of the portability changes are implemented via the configure + script: + * ignore $TERMINFO as a default value in configure script if it came + from the infocmp -Q option. + * distinguish gcc from icc and clang when the --enable-warnings + option is not used, to avoid unnecessary warnings about + unrecognized inline options + * consistently prepend new libraries as they are found during + configuration, rather than relying upon the linker to resolve + order dependencies of libraries. + * modified configure scripts to reduce relinking/ranlib during + library install : + + use "install -p" when available, to avoid need for ranlib of + static libraries. + + scripts which use "--disable-relink;" add a 1-second sleep to + work around tools which use whole-second timestamps, e.g., in + utime rather than the actual file system resolution. + * add configure check for getenv to work around implementation shown + in Emscripten which overwrites the previous return value on each + call. + Use that to optionally suppress START_TRACE macro, whose call to + getenv may not work properly + * change target configure level for _XOPEN_SOURCE to 600 to address + use of vsscanf and setenv. + * reduce use of _GNU_SOURCE for current glibc where _DEFAULT_SOURCE + combines with _XOPEN_SOURCE + Allow for Cygwin's newlib when checking for the _DEFAULT_SOURCE + symbol. + MidnightBSD is now checked for the _XOPEN_SOURCE-related + definitions. + * If the check for va_copy or __va_copy fails, + + configure now tries copying the pointers for va_list, or as + an array. + + alternatively, it checks for __builtin_va_copy(), which could + be used with AIX xlc in c89 mode. + * several changes to support a port to Ultrix 3.1: + + check if "b" binary feature of fopen works + + check for missing feature of locale.h + + add fallback for strstr() in test-programs + + add fallback for STDOUT_FILENO in test-programs + * The test/configure script (used for ncurses-examples) is improved: + + work around non-ncurses termcap.h file, e.g., in Slackware. + + check for TABSIZE variable. + + checks for the X11/Intrinsic.h header, accommodate recent + MacOS changes which largely emptied /usr/include. + + Here are some of the other portability fixes: + * added dummy "check" rule in top-level and test-Makefile to + simplify building test-packages for ArchLinux. + * dropped library-dependency on psapi for MinGW port, since + win_driver.c defines PSAPI_VERSION to 2, making it use + GetProcessImageFileName from kernel32.dll + * made build-fixes for configuration using --program-suffix with + Ada95, noticed with MacOS but applicable to other platforms + without libpanelw, etc. + * modified ncurses/Makefile.in to fix a case where Debian/testing + changes to the ld --as-needed configuration broke ncurses-examples + test packages. + * used _WIN32/_WIN64 in preference to __MINGW32__/__MINGW64__ + symbols to simplify building with Microsoft Visual C++, since the + former are defined in both compiler configurations. _________________________________________________________________ Features of ncurses @@ -863,10 +751,10 @@ Features of ncurses 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 [85]tic/[86]captoinfo utility provided with ncurses has the - ability to translate many termcaps from the XENIX, IBM and AT&T - extension sets. - * A BSD-like [87]tset utility is provided. + * The tic/captoinfo utility provided with ncurses has the ability to + translate many termcaps from the XENIX, IBM and AT&T extension + sets. + * A BSD-like tset utility is provided. * The ncurses library and utilities will automatically read terminfo entries from $HOME/.terminfo if it exists, and compile to that directory if it exists and the user has no write access to the @@ -881,132 +769,152 @@ Features of ncurses 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 [88]toe makes it easy for users to - see exactly what terminal types are available on the system. + * 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. - * Extensive documentation is provided (see the [89]Additional - Reading section of the [90]ncurses FAQ for online documentation). + * 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 - [91]ncurses-examples + ncurses-examples The ncurses library has been tested with a wide variety of applications including: + aptitude + FrontEnd to Apt, the debian package manager + + https://wiki.debian.org/Aptitude + cdk Curses Development Kit - [92]http://invisible-island.net/cdk/ + https://invisible-island.net/cdk/ ded directory-editor - [93]http://invisible-island.net/ded/ + https://invisible-island.net/ded/ dialog the underlying application used in Slackware's setup, and the basis for similar install/configure applications on many systems. - [94]http://invisible-island.net/dialog/ + https://invisible-island.net/dialog/ lynx the text WWW browser - [95]http://lynx.isc.org/ - - Midnight Commander - file manager - - [96]http://www.midnight-commander.org/ + https://lynx.invisible-island.net/ mutt mail utility - [97]http://www.mutt.org/ + http://www.mutt.org/ ncftp file-transfer utility - [98]http://www.ncftp.com/ + https://www.ncftp.com/ nvi New vi uses ncurses. - [99]https://sites.google.com/a/bostic.com/keithbostic/nvi + https://sites.google.com/a/bostic.com/keithbostic/vi + + ranger + A console file manager with VI key bindings in Python. + + https://ranger.github.io/ tin newsreader, supporting color, MIME - [100]http://www.tin.org/ + http://www.tin.org/ + + vifm + File manager with vi like keybindings + + https://vifm.info/ as well as some that use ncurses for the terminfo support alone: minicom terminal emulator for serial modem connections - [101]http://alioth.debian.org/projects/minicom/ + https://alioth.debian.org/projects/minicom/ mosh a replacement for ssh. - [102]https://mosh.mit.edu/ + https://mosh.mit.edu/ tack terminfo action checker - [103]http://invisible-island.net/ncurses/tack.html + https://invisible-island.net/ncurses/tack.html tmux terminal multiplexor - [104]http://tmux.github.io/ + https://github.com/tmux/tmux/wiki vile vi-like-emacs may be built to use the terminfo, termcap or curses interfaces. - [105]http://invisible-island.net/vile/ + https://invisible-island.net/vile/ and finally, those which use only the termcap interface: emacs text editor - [106]http://www.gnu.org/software/emacs/ + 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 - [107]http://www.gnu.org/software/screen/ + https://www.gnu.org/software/screen/ vim text editor - [108]http://www.vim.org/ + 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 [109]Thomas Dickey. Thomas Dickey also - acts as the maintainer for the Free Software Foundation, which holds - the [110]copyright on ncurses. + 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 + holds a copyright on ncurses for releases 4.2 through 6.1. Following + the release of ncurses 6.1, effective as of release 6.2, copyright for + ncurses reverted to Thomas E. Dickey (see the ncurses FAQ for + additional information). Contact the current maintainers at - [111]bug-ncurses@gnu.org + bug-ncurses@gnu.org To join the ncurses mailing list, please write email to - [112]bug-ncurses-request@gnu.org + bug-ncurses-request@gnu.org containing the line: @@ -1015,211 +923,60 @@ Development activities 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 + Beta versions of ncurses are made available at + + ftp://ftp.invisible-island.net/ncurses/current/ and + https://invisible-mirror.net/archives/ncurses/current/ . + + Patches to the current release are made available at - [113]ftp://invisible-island.net/ncurses/ . + ftp://ftp.invisible-island.net/ncurses/6.1/ and + https://invisible-mirror.net/archives/ncurses/6.1/ . There is an archive of the mailing list here: - [114]http://lists.gnu.org/archive/html/bug-ncurses (also - [115]https) + http://lists.gnu.org/archive/html/bug-ncurses (also https) Related resources The release notes make scattered references to these pages, which may be interesting by themselves: - * [116]man2html - * [117]ncurses licensing - * [118]Symbol versioning in ncurses - * [119]The MinGW port of ncurses - * [120]tack - terminfo action checker - * [121]tar versus portability - * [122]tctest - termcap library checker - * [123]Terminal Database + * ncurses licensing + * Symbol versioning in ncurses + * Comments on ncurses versus slang (S-Lang) + * tack - terminfo action checker + * tctest - termcap library checker + * Terminal Database Other resources The distribution provides a newer version of the terminfo-format - terminal description file once maintained by [124]Eric Raymond . - Unlike the older version, the termcap and terminfo data are provided - in the same file, and provides several user-definable extensions - beyond the X/Open specification. + terminal description file once maintained by Eric Raymond . Unlike the + older version, the termcap and terminfo data are provided in the same + file, which also provides several user-definable extensions beyond the + X/Open specification. You can find lots of information on terminal-related topics not - covered in the terminfo file at [125]Richard Shuford's archive . - - * [126]Overview - * [127]Release Notes - + [128]Library improvements - o [129]Output buffering - o [130]Symbol versioning - o [131]Miscellaneous - + [132]Program improvements - o [133]Utilities - o [134]Examples - + [135]Terminal database - + [136]Documentation - + [137]Interesting bug-fixes - + [138]Configuration changes - o [139]Major changes - o [140]Configuration options - + [141]Portability - o [142]MinGW - o [143]Other ports - * [144]Features of ncurses - * [145]Applications using ncurses - * [146]Development activities - * [147]Related resources - * [148]Other resources - -References - - 1. http://invisible-island.net/ncurses/man/captoinfo.1m.html - 2. http://invisible-island.net/ncurses/man/clear.1.html - 3. http://invisible-island.net/ncurses/man/infocmp.1m.html - 4. http://invisible-island.net/ncurses/man/tabs.1.html - 5. http://invisible-island.net/ncurses/man/tic.1m.html - 6. http://invisible-island.net/ncurses/man/toe.1m.html - 7. http://invisible-island.net/ncurses/man/tput.1.html - 8. http://invisible-island.net/ncurses/man/tset.1.html - 9. ftp://ftp.gnu.org/gnu/ncurses/ - 10. ftp://invisible-island.net/ncurses/ - 11. http://invisible-island.net/ncurses/tctest.html - 12. http://invisible-island.net/ncurses/ncurses-examples.html - 13. http://lists.gnu.org/archive/html/bug-ncurses/2012-07/msg00029.html - 14. http://invisible-island.net/ncurses/NEWS.html#t20050101 - 15. http://invisible-island.net/ncurses/announce-5.5.html - 16. http://invisible-island.net/ncurses/ncurses-mapsyms.html - 17. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-initscr - 18. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-newterm - 19. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Initialization - 20. http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_NO_SETBUF - 21. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html - 22. http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode - 23. http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-reset_prog_mode_-reset_shell_mode - 24. http://invisible-island.net/ncurses/man/curs_printw.3x.html - 25. http://invisible-island.net/ncurses/ncurses-mapsyms.html - 26. http://invisible-island.net/ncurses/tack.html - 27. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_tioctl - 28. http://invisible-island.net/ncurses/man/curs_opaque.3x.html - 29. http://invisible-island.net/ncurses/man/curs_attr.3x.html#h2-PORTABILITY - 30. http://invisible-island.net/ncurses/man/form_field_opts.3x.html - 31. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin - 32. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-putwin_getwin - 33. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output - 34. http://invisible-island.net/ncurses/tctest.html - 35. http://invisible-island.net/ncurses/tctest.html#my-better-translation - 36. http://invisible-island.net/ncurses/NEWS.html#t980103 - 37. https://svnweb.freebsd.org/base/head/lib/libc/gen/getcap.c?revision=244092&view=markup#l784 - 38. http://invisible-island.net/ncurses/ncurses-examples.html - 39. http://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_env - 40. http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-derwin - 41. http://invisible-island.net/ncurses/man/curs_window.3x.html#h3-mvwin - 42. http://invisible-island.net/ncurses/man/form_driver.3x.html#h3-form_driver_w - 43. http://invisible-island.net/ncurses/terminfo.src.html#toc-_M_L_T_E_R_M - 44. http://invisible-island.net/ncurses/terminfo.src.html#tic-nsterm - 45. http://invisible-island.net/ncurses/terminfo.src.html#tic-putty-sco - 46. http://invisible-island.net/ncurses/terminfo.src.html#tic-teken - 47. http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_A_T_O_R - 48. http://invisible-island.net/ncurses/terminfo.src.html#toc-_T_E_R_M_I_N_O_L_O_G_Y - 49. http://invisible-island.net/ncurses/terminfo.src.html#tic-tmux - 50. http://invisible-island.net/ncurses/terminfo.src.html#toc-_S_I_M_P_L_E_T_E_R_M - 51. http://invisible-island.net/ncurses/terminfo.src.html#tic-vte - 52. http://invisible-island.net/ncurses/terminfo.src.html#tic-vt520ansi - 53. http://aerie.jexium-island.net/ncurses/man/clear.1.html - 54. http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_sl - 55. http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1005 - 56. http://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-1006 - 57. http://invisible-island.net/ncurses/NEWS.html - 58. http://invisible-island.net/scripts/man2html.html - 59. http://invisible-island.net/ncurses/NCURSES-Programming-HOWTO.html - 60. http://invisible-island.net/ncurses/NEWS.html#t20110319 - 61. http://invisible-island.net/ncurses/NEWS.html#t20021221 - 62. http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions - 63. http://invisible-island.net/ncurses/man/default_colors.3x.html - 64. http://invisible-island.net/ncurses/man/curs_color.3x.html#h3-Routine-Descriptions - 65. http://invisible-island.net/ncurses/man/resizeterm.3x.html - 66. http://invisible-island.net/ncurses/NEWS.html#t980725 - 67. http://invisible-island.net/ncurses/NEWS.html#t960418 - 68. http://invisible-island.net/ncurses/NEWS.html#t970405 - 69. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-set_term - 70. http://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-delscreen - 71. http://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output - 72. http://docs.oracle.com/cd/E19253-01/html/817-0552/fhkpy.html - 73. http://invisible-island.net/ncurses/announce-5.9.html - 74. http://invisible-island.net/ncurses/announce-5.8.html - 75. http://invisible-island.net/ncurses/ncurses-examples.html - 76. http://invisible-island.net/ncurses/man/curs_beep.3x.html - 77. http://invisible-island.net/ncurses/man/curs_beep.3x.html - 78. http://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-curs_set - 79. http://invisible-island.net/ncurses/man/ncurses.3x.html#h3-NCURSES_CONSOLE2 - 80. http://stackoverflow.com/questions/20877689/gcc-4-8-1-minggw-d-option-does-not-work-as-usual - 81. http://linux.die.net/man/1/pkg-config - 82. http://invisible-island.net/ncurses/NEWS.html#t20021206 - 83. https://gcc.gnu.org/gcc-5/ - 84. http://invisible-island.net/autoconf/portability-test.html - 85. http://invisible-island.net/ncurses/man/tic.1m.html - 86. http://invisible-island.net/ncurses/man/captoinfo.1m.html - 87. http://invisible-island.net/ncurses/man/tset.1.html - 88. http://invisible-island.net/ncurses/man/toe.1m.html - 89. http://invisible-island.net/ncurses/ncurses.faq.html#additional_reading - 90. http://invisible-island.net/ncurses/ncurses.faq.html - 91. http://invisible-island.net/ncurses/ncurses-examples.html - 92. http://invisible-island.net/cdk/ - 93. http://invisible-island.net/ded/ - 94. http://invisible-island.net/dialog/ - 95. http://lynx.isc.org/ - 96. http://www.midnight-commander.org/ - 97. http://www.mutt.org/ - 98. http://www.ncftp.com/ - 99. https://sites.google.com/a/bostic.com/keithbostic/nvi - 100. http://www.tin.org/ - 101. http://alioth.debian.org/projects/minicom/ - 102. https://mosh.mit.edu/ - 103. http://invisible-island.net/ncurses/tack.html - 104. http://tmux.github.io/ - 105. http://invisible-island.net/vile/ - 106. http://www.gnu.org/software/emacs/ - 107. http://www.gnu.org/software/screen/ - 108. http://www.vim.org/ - 109. mailto:dickey@invisible-island.net - 110. http://invisible-island.net/ncurses/ncurses-license.html - 111. mailto:bug-ncurses@gnu.org - 112. mailto:bug-ncurses-request@gnu.org - 113. ftp://invisible-island.net/ncurses/ - 114. http://lists.gnu.org/archive/html/bug-ncurses - 115. https://lists.gnu.org/archive/html/bug-ncurses - 116. http://invisible-island.net/scripts/man2html.html - 117. http://invisible-island.nethttp://invisible-island.net/ncurses/ncurses-license.html - 118. http://invisible-island.net/ncurses/ncurses-mapsyms.html - 119. http://invisible-island.net/ncurses/ncurses-mingw.html - 120. http://invisible-island.net/ncurses/tack.html - 121. http://invisible-island.net/autoconf/portability-tar.html - 122. http://invisible-island.net/ncurses/tctest.html - 123. http://invisible-island.net/ncurses/ncurses.html#download_database - 124. http://www.catb.org/~esr/terminfo/ - 125. http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal - 126. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-overview - 127. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-release-notes - 128. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-library - 129. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-lib-setbuf - 130. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-lib-versioning - 131. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-lib-other - 132. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-programs - 133. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-utilities - 134. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-examples - 135. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-database - 136. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-documentation - 137. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-bug-fixes - 138. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-config-config - 139. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-config-major - 140. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-config-options - 141. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h3-portability - 142. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-port-mingw - 143. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h4-port-systems - 144. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-features - 145. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-who-uses - 146. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-development - 147. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-this-stuff - 148. file:///usr/build/ncurses/ncurses-6.0-20150808/doc/html/announce.html#h2-other-stuff + covered in the terminfo file at Richard Shuford's archive . The + collection of computer manuals at bitsavers.org has also been useful. + + * Overview + * Release Notes + + Library improvements + o New features + o Other improvements + + Program improvements + o Utilities + o Examples + + Terminal database + + Documentation + + Interesting bug-fixes + + Configuration changes + o Major changes + o Configuration options + + Portability + * Features of ncurses + * Applications using ncurses + * Development activities + * Related resources + * Other resources