X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ANNOUNCE;h=e0603d622394c8420f71cd0465476b18b41749df;hp=95ae5be25603f8da267c560fe068c19ceeb7df22;hb=d30f99439fcc8d4bb4c38e5c4afb4f6555fc6ad4;hpb=3a9b6a3bf0269231bef7de74757a910dedd04e0c diff --git a/ANNOUNCE b/ANNOUNCE index 95ae5be2..e0603d62 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,231 +1,982 @@ + Announcing ncurses 6.2 + +Overview + + The ncurses (new curses) library is a free software emulation of + curses in System V Release 4.0 (SVr4), and more. It uses terminfo + format, supports pads and color and multiple highlights and forms + characters and function-key mapping, and has all the other SVr4-curses + enhancements over BSD curses. SVr4 curses became the basis of X/Open + Curses. + + In mid-June 1995, the maintainer of 4.4BSD curses declared that he + considered 4.4BSD curses obsolete, and encouraged the keepers of unix + releases such as BSD/OS, FreeBSD and NetBSD to switch over to ncurses. + + Since 1995, ncurses has been ported to many systems: + * 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. - Announcing ncurses 4.1 - - The ncurses (new curses) library is a freeware emulation of System V - Release 4.0 curses. 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. - - In mid-June 1995, the maintainer of 4.4BSD curses declared that he - considered 4.4BSD curses obsolete, and is encouraging the keepers of - Unix releases such as BSD/OS, freeBSD and netBSD to switch over to - ncurses. - - The ncurses code was developed under Linux. It should port easily to - any ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp! - 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: - [1]ftp://ftp.clark.net/pub/dickey/ncurses. and - [2]ftp://ftp.netcom.com/pub/zm/zmbenhal/ncurses. It is also carried on - the GNU distribution site at [3]ftp://prep.ai.mit.edu/pub/gnu. - - Features of ncurses - - The ncurses package is fully compatible with SVr4 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 - recognition of keypad and function keys. - * An emulation of the System V Release 4 panels library, supporting - a stack of windows with backing store, is included. - * An emulation of the System V Release 4 menus library, supporting a - uniform but flexible interface for menu programming, is included. - * An emulation of the System V Release 4 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. - + * 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: + + ftp://ftp.invisible-island.net/ncurses/ or + https://invisible-mirror.net/archives/ncurses/ . + + It is also available via anonymous FTP at the GNU distribution site + + ftp://ftp.gnu.org/gnu/ncurses/ . + +Release Notes + + These notes are for ncurses 6.2, released February 12, 2020. + + This release is designed to be source-compatible with ncurses 5.0 + through 6.1; providing extensions to the application binary interface + (ABI). Although the source can still be configured to support the + ncurses 5 ABI, the reason for the release is to reflect improvements + to the ncurses 6 ABI and the supporting utility programs. + + There are, of course, numerous other improvements, listed in this + announcement. + + The most important bug-fixes/improvements dealt with user-defined + capabilities in terminal descriptions. The release notes also mention + some other bug-fixes, but are focused on new features and improvements + to existing features since ncurses 6.1 release. + + Library improvements + + New features + + There are several new features: + * 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 + + 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, 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 + + There are several new terminal descriptions: + + alacritty, domterm, kitty, mintty, mintty-direct, ms-terminal, + n7900, nsterm-build309, nsterm-direct, screen5, ti703, ti707, + ti703-w, ti707-w vscode, vscode-direct, xterm-mono, xterm.js + + There are many changes to existing terminal descriptions. Some were + updates to several descriptions: + * 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): + * 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 + + 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: + + 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 + + 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 + + There are no major changes. Several new options were added to ease + integration of packages with systems using different versions of GNAT + and ncurses. Also, improvements were made to configure checks. + + Configuration options + + There are a few new/modified configure options: + + --with-config-suffix + helps work around a filename conflict with Debian packages + versus test-packages. + + --with-ada-libname + allows one to rename the "AdaCurses" library (at least one + packager prefers a lowercase name). + + --with-fallbacks + now ensures there is a value, and adds the fallback information + to top-level Makefile summary. + + --with-pcre2 + check for pcre-posix library to help with MinGW port. + + --with-tic-path and + + --with-infocmp-path + help work around problems building fallback source using + pre-6.0 tic/infocmp. + + --with-versioned-syms + option value can now be a relative pathname. + + Portability + + Many of the portability changes are implemented via the configure + script: + * 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 + + The ncurses package is fully upward-compatible with SVr4 (System V + Release 4) curses: + * All of the SVr4 calls have been implemented (and are documented). + * ncurses supports all of the for SVr4 curses features including + keyboard mapping, color, forms-drawing with ACS characters, and + automatic recognition of keypad and function keys. + * ncurses provides these SVr4 add-on libraries (not part of X/Open + Curses): + + the panels library, supporting a stack of windows with + backing store. + + the menus library, supporting a uniform but flexible + interface for menu programming. + + the form library, supporting data collection through + on-screen forms. + * ncurses's terminal database is fully compatible with that used by + SVr4 curses. + + ncurses supports user-defined capabilities which it can see, + but which are hidden from SVr4 curses applications using the + same terminal database. + + It can be optionally configured to match the format used in + related systems such as AIX and Tru64. + + Alternatively, ncurses can be configured to use hashed + databases rather than the directory of files used by SVr4 + curses. + * The ncurses utilities have options to allow you to filter terminfo + entries for use with less capable curses/terminfo versions such as + the HP/UX and AIX ports. + The ncurses package also has many useful extensions over SVr4: - - * The API is 8-bit clean and base-level conformant with the X/OPEN - curses specification, XSI Curses (that is, it implements all BASE - level features, 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). - * Unlike SVr4 curses, ncurses can write to the rightmost-bottommost - corner of the screen if your terminal has an insert-character + * The API is 8-bit clean and base-level conformant with the X/OPEN + curses specification, XSI curses (that is, it implements all BASE + level features, and most EXTENDED features). It includes many + function calls not supported under SVr4 curses (but portability of + all calls is documented so you can use the SVr4 subset only). + * Unlike SVr3 curses, ncurses can write to the rightmost-bottommost + corner of the screen if your terminal has an insert-character capability. - * (PC-clone boxes only) Support for access to the IBM PC ROM - characters 0-32 through the highlight A_ALTCHARSET. - * Support for mouse event reporting under xterm. - * The function wresize() allows you to resize windows, preserving + * Ada95 and C++ bindings. + * Support for mouse event reporting with X Window xterm and FreeBSD + and OS/2 console windows. + * Extended mouse support via Alessandro Rubini's gpm package. + * The function wresize allows you to resize windows, preserving their data. - * Better cursor-movement optimization. The package now features a + * 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 256-color terminals, such as modern xterm. + * Support for 16-color terminals, such as aixterm and modern xterm. + * Better cursor-movement optimization. The package now features a cursor-local-movement computation more efficient than either BSD's or System V's. - * Super hardware scrolling support. The screen-update code - incorporates a novel, simple, and cheap algorithm that enables it - to make optimal use of hardware scrolling, line-insertion, and - line-deletion for screen-line movements. This algorithm is more - powerful than the 4.4BSD curses quickch() routine. - * Real support for terminals with the magic-cookie glitch. The - screen-update code will refrain from drawing a highlight if the - magic- cookie unattributed spaces required just before the - beginning and after the end would step on a non-space character. - It will automatically shift highlight boundaries when doing so - would make it possible to draw the highlight without changing the + * Super hardware scrolling support. The screen-update code + incorporates a novel, simple, and cheap algorithm that enables it + to make optimal use of hardware scrolling, line-insertion, and + line-deletion for screen-line movements. This algorithm is more + powerful than the 4.4BSD curses quickch routine. + * Real support for terminals with the magic-cookie glitch. The + screen-update code will refrain from drawing a highlight if the + magic- cookie unattributed spaces required just before the + beginning and after the end would step on a non-space character. + It will automatically shift highlight boundaries when doing so + would make it possible to draw the highlight without changing the visual appearance of the screen. - * It is possible to generate the library with a list of pre-loaded - fallback entries linked to it so that it can serve those terminal - types even when no terminfo tree or termcap file is accessible - (this may be useful for support of screen-oriented programs that + * It is possible to generate the library with a list of pre-loaded + fallback entries linked to it so that it can serve those terminal + types even when no terminfo tree or termcap file is accessible + (this may be useful for support of screen-oriented programs that must run in single-user mode). - * The tic(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 - system directory. This feature makes it easier for users to have - personal terminfo entries without giving up access to the system + entries from $HOME/.terminfo if it exists, and compile to that + directory if it exists and the user has no write access to the + system directory. This feature makes it easier for users to have + personal terminfo entries without giving up access to the system terminfo directory. - * You may specify a path of directories to search for compiled - descriptions with the environment variable TERMINFO_DIRS (this - generalizes the feature provided by TERMINFO under stock System + * You may specify a path of directories to search for compiled + descriptions with the environment variable TERMINFO_DIRS (this + generalizes the feature provided by TERMINFO under stock System V.) - * In terminfo source files, use capabilities may refer not just to + * In terminfo source files, use capabilities may refer not just to other entries in the same source file (as in System V) but also to - compiled entries in either the system terminfo directory or the + 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 + * 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 + 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. - - State of the Package - - 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. - - The ncurses code has been tested with a wide variety of applications - including: - + * Extensive documentation is provided (see the Additional Reading + section of the ncurses FAQ for online documentation). + +Applications using ncurses + + The ncurses distribution includes a selection of test programs + (including a few games). These are available separately as + ncurses-examples + + The ncurses library has been tested with a wide variety of + applications including: + + aptitude + FrontEnd to Apt, the debian package manager + + https://wiki.debian.org/Aptitude + + cdk + Curses Development Kit + + https://invisible-island.net/cdk/ + ded - directory-editor [4]ftp://ftp.clark.net/pub/dickey/ded. - + directory-editor + + https://invisible-island.net/ded/ + dialog - the underlying application used in Slackware's setup, and the - basis for similar applications on Linux. - - lynx-2.7 - the character-screen WWW browser - - ncftp 2.0 + the underlying application used in Slackware's setup, and the + basis for similar install/configure applications on many + systems. + + https://invisible-island.net/dialog/ + + lynx + the text WWW browser + + https://lynx.invisible-island.net/ + + mutt + mail utility + + http://www.mutt.org/ + + ncftp file-transfer utility - + + https://www.ncftp.com/ + nvi - New vi versions 1.50 are able to use ncurses versions 1.9.7 and - later. - - taper - tape archive utility - - vh-1.6 - Volks-Hypertext browser for the Jargon File - + New vi uses ncurses. + + https://sites.google.com/a/bostic.com/keithbostic/vi + + ranger + A console file manager with VI key bindings in Python. + + https://ranger.github.io/ + + tin + newsreader, supporting color, MIME + + http://www.tin.org/ + + vifm + File manager with vi like keybindings + + https://vifm.info/ + as well as some that use ncurses for the terminfo support alone: - - minicom-1.75 - terminal emulator - - tin-unoff - tin (unofficial) newsreader, supporting color, MIME - [5]ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff. - + + minicom + terminal emulator for serial modem connections + + https://alioth.debian.org/projects/minicom/ + + mosh + a replacement for ssh. + + https://mosh.mit.edu/ + + tack + terminfo action checker + + https://invisible-island.net/ncurses/tack.html + + tmux + terminal multiplexor + + https://github.com/tmux/tmux/wiki + vile - vi-like-emacs [6]ftp://ftp.clark.net/pub/dickey/vile. - - The ncurses distribution includes a selection of test programs - (including a few games). - -Who's Who and What's What - - The original maintainer of ncurses is [7]Zeyd Ben-Halim. - Unfortunately, he can only work on the package part time. As a result, - since 1.8.1, much of the enhancement work and documentation has been - done by [8]Eric S. Raymond. The current primary maintainers are - [9]Thomas Dickey and [10]Juergen Pfeifer. - - There is an ncurses mailing list. It is a majordomo list; to join, - write to ncurses-request@mailgate.bsdi.com with a message containing - the line: - - subscribe @ + vi-like-emacs may be built to use the terminfo, termcap or + curses interfaces. + + https://invisible-island.net/vile/ + + and finally, those which use only the termcap interface: + + emacs + text editor + + https://www.gnu.org/software/emacs/ + + less + The most commonly used pager (a program that displays text + files). + + http://www.greenwoodsoftware.com/less/ + + screen + terminal multiplexor + + https://www.gnu.org/software/screen/ + + vim + text editor + + https://www.vim.org/ + +Development activities + + Zeyd Ben-Halim started ncurses from a previous package pcurses, + written by Pavel Curtis. Eric S. Raymond continued development. + Juergen Pfeifer wrote most of the form and menu libraries. + + Ongoing development work is done by Thomas E. Dickey. Thomas E. Dickey + has acted as the maintainer for the Free Software Foundation, which + holds a copyright on ncurses for releases 4.2 through 6.1. Following + the release of ncurses 6.1, effective as of release 6.2, copyright for + ncurses reverted to Thomas E. Dickey (see the ncurses FAQ for + additional information). + + Contact the current maintainers at + + bug-ncurses@gnu.org + + To join the ncurses mailing list, please write email to + + bug-ncurses-request@gnu.org + + containing the line: + + subscribe @ 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 [11]ftp://ftp.clark.net/pub/dickey/ncurses. - -Future Plans - * Extended mouse support via Alessandro Rubini's gpm package. - * Extended-level XPG4 conformance, with internationalization - support. - * Ports to more systems, including DOS and Windows. - - We need people to help with these projects. If you are interested in - working on them, please join the ncurses list. - -The terminfo/termcap Database - - The distribution includes and uses a copy of the terminfo-format - terminal description file maintained by Eric Raymond. You can download - either the [12]termcap or [13]terminfo versions of the terminal-type - database from Eric's ncurses page, - [14]http://www.ccil.org/~esr/ncurses.html. - -Other Related Resources - - You can find lots of information on terminal-related topics not - covered in the terminfo file at [15]Richard Shuford's archive. - -References - - 1. ftp://ftp.clark.net/pub/dickey/ncurses - 2. ftp://ftp.netcom.com/pub/zm/zmbenhal/ncurses - 3. ftp://prep.ai.mit.edu/pub/gnu - 4. ftp://ftp.clark.net/pub/dickey/ded - 5. ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff - 6. ftp://ftp.clark.net/pub/dickey/vile - 7. mailto:zmbenhal@netcom.com - 8. http://www.ccil.org/~esr/home.html - 9. mailto:dickey@clark.net - 10. mailto:Juergen.Pfeifer@T-Online.de - 11. ftp://ftp.clark.net/pub/dickey/ncurses - 12. http://www.ccil.org/~esr/terminfo/termtypes.tc.gz - 13. http://www.ccil.org/~esr/terminfo/termtypes.ti.gz - 14. http://www.ccil.org/~esr/ncurses.html - 15. http://www.cs.utk.edu/~shuford/terminal_index.html + Beta versions of ncurses are made available at + + ftp://ftp.invisible-island.net/ncurses/current/ and + https://invisible-mirror.net/archives/ncurses/current/ . + + Patches to the current release are made available at + + ftp://ftp.invisible-island.net/ncurses/6.1/ and + https://invisible-mirror.net/archives/ncurses/6.1/ . + + There is an archive of the mailing list here: + + http://lists.gnu.org/archive/html/bug-ncurses (also https) + +Related resources + + The release notes make scattered references to these pages, which may + be interesting by themselves: + * 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 Eric Raymond . Unlike the + older version, the termcap and terminfo data are provided in the same + file, which also provides several user-definable extensions beyond the + X/Open specification. + + You can find lots of information on terminal-related topics not + covered in the terminfo file at Richard Shuford's archive . The + collection of computer manuals at bitsavers.org has also been useful. + + * Overview + * Release Notes + + Library improvements + o New features + o Other improvements + + Program improvements + o Utilities + o Examples + + Terminal database + + Documentation + + Interesting bug-fixes + + Configuration changes + o Major changes + o Configuration options + + Portability + * Features of ncurses + * Applications using ncurses + * Development activities + * Related resources + * Other resources