| 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. |
| |
| The distribution includes the library and support utilities, including |
| * captoinfo, a termcap conversion tool |
| * clear, utility for clearing the screen |
| * infocmp, the terminfo decompiler |
| * tabs, set tabs on a terminal |
| * tic, the terminfo compiler |
| * toe, list (table of) terminfo entries |
| * tput, utility for retrieving terminal capabilities in shell |
| scripts |
| * tset, to initialize the terminal |
| |
| Full manual pages are provided for the library and tools. |
| |
| The ncurses distribution is available at ncurses' homepage: |
| |
| 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, and most EXTENDED features). It includes many |
| function calls not supported under SVr4 curses (but portability of |
| all calls is documented so you can use the SVr4 subset only). |
| * Unlike SVr3 curses, ncurses can write to the rightmost-bottommost |
| corner of the screen if your terminal has an insert-character |
| capability. |
| * Ada95 and C++ bindings. |
| * Support for mouse event reporting with X Window xterm and FreeBSD |
| and OS/2 console windows. |
| * Extended mouse support via Alessandro Rubini's gpm package. |
| * The function wresize allows you to resize windows, preserving |
| their data. |
| * The function use_default_colors allows you to use the terminal's |
| default colors for the default color pair, achieving the effect of |
| transparent colors. |
| * The functions keyok and define_key allow you to better control the |
| use of function keys, e.g., disabling the ncurses KEY_MOUSE, or by |
| defining more than one control sequence to map to a given key |
| code. |
| * Support for 256-color terminals, such as modern xterm. |
| * Support for 16-color terminals, such as aixterm and modern xterm. |
| * Better cursor-movement optimization. The package now features a |
| cursor-local-movement computation more efficient than either BSD's |
| or System V's. |
| * Super hardware scrolling support. The screen-update code |
| incorporates a novel, simple, and cheap algorithm that enables it |
| to make optimal use of hardware scrolling, line-insertion, and |
| line-deletion for screen-line movements. This algorithm is more |
| powerful than the 4.4BSD curses quickch routine. |
| * Real support for terminals with the magic-cookie glitch. The |
| screen-update code will refrain from drawing a highlight if the |
| magic- cookie unattributed spaces required just before the |
| beginning and after the end would step on a non-space character. |
| It will automatically shift highlight boundaries when doing so |
| would make it possible to draw the highlight without changing the |
| visual appearance of the screen. |
| * It is possible to generate the library with a list of pre-loaded |
| fallback entries linked to it so that it can serve those terminal |
| types even when no terminfo tree or termcap file is accessible |
| (this may be useful for support of screen-oriented programs that |
| must run in single-user mode). |
| * The tic/captoinfo utility provided with ncurses has the ability to |
| translate many termcaps from the XENIX, IBM and AT&T extension |
| sets. |
| * A BSD-like tset utility is provided. |
| * The ncurses library and utilities will automatically read terminfo |
| entries from $HOME/.terminfo if it exists, and compile to that |
| directory if it exists and the user has no write access to the |
| system directory. This feature makes it easier for users to have |
| personal terminfo entries without giving up access to the system |
| terminfo directory. |
| * You may specify a path of directories to search for compiled |
| descriptions with the environment variable TERMINFO_DIRS (this |
| generalizes the feature provided by TERMINFO under stock System |
| V.) |
| * In terminfo source files, use capabilities may refer not just to |
| other entries in the same source file (as in System V) but also to |
| compiled entries in either the system terminfo directory or the |
| user's $HOME/.terminfo directory. |
| * The table-of-entries utility toe makes it easy for users to see |
| exactly what terminal types are available on the system. |
| * The library meets the XSI requirement that every macro entry point |
| 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 Additional Reading |
| section of the ncurses FAQ for online documentation). |
| |
| Applications using ncurses |
| |
| The ncurses distribution includes a selection of test programs |
| (including a few games). These are available separately as |
| ncurses-examples |
| |
| The ncurses library has been tested with a wide variety of |
| applications including: |
| |
| aptitude |
| FrontEnd to Apt, the debian package manager |
| |
| https://wiki.debian.org/Aptitude |
| |
| cdk |
| Curses Development Kit |
| |
| https://invisible-island.net/cdk/ |
| |
| ded |
| directory-editor |
| |
| https://invisible-island.net/ded/ |
| |
| dialog |
| the underlying application used in Slackware's setup, and the |
| basis for similar install/configure applications on many |
| systems. |
| |
| https://invisible-island.net/dialog/ |
| |
| lynx |
| the text WWW browser |
| |
| https://lynx.invisible-island.net/ |
| |
| mutt |
| mail utility |
| |
| http://www.mutt.org/ |
| |
| ncftp |
| file-transfer utility |
| |
| https://www.ncftp.com/ |
| |
| nvi |
| New vi uses ncurses. |
| |
| https://sites.google.com/a/bostic.com/keithbostic/vi |
| |
| ranger |
| A console file manager with VI key bindings in Python. |
| |
| https://ranger.github.io/ |
| |
| tin |
| newsreader, supporting color, MIME |
| |
| http://www.tin.org/ |
| |
| vifm |
| File manager with vi like keybindings |
| |
| https://vifm.info/ |
| |
| as well as some that use ncurses for the terminfo support alone: |
| |
| minicom |
| terminal emulator for serial modem connections |
| |
| https://alioth.debian.org/projects/minicom/ |
| |
| mosh |
| a replacement for ssh. |
| |
| https://mosh.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 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 <name>@<host.domain> |
| |
| This list is open to anyone interested in helping with the development |
| and testing of this package. |
| |
| Beta versions of ncurses are made available at |
| |
| 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 |