<div dir="auto"><div>New ncurses release. RSB should need updating</div><div dir="auto"><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">Thomas Dickey</strong> <span dir="auto"><<a href="mailto:dickey@his.com">dickey@his.com</a>></span><br>Date: Sun, Feb 16, 2020, 2:35 PM<br>Subject: [Hangout - NYLXS] ncurses 6.2<br>To: <<a href="mailto:info-gnu@gnu.org">info-gnu@gnu.org</a>><br></div><br><br> Announcing ncurses 6.2<br>
<br>
Overview<br>
<br>
The ncurses (new curses) library is a free software emulation of<br>
curses in System V Release 4.0 (SVr4), and more. It uses terminfo<br>
format, supports pads and color and multiple highlights and forms<br>
characters and function-key mapping, and has all the other SVr4-curses<br>
enhancements over BSD curses. SVr4 curses became the basis of X/Open<br>
Curses.<br>
<br>
In mid-June 1995, the maintainer of 4.4BSD curses declared that he<br>
considered 4.4BSD curses obsolete, and encouraged the keepers of unix<br>
releases such as BSD/OS, FreeBSD and NetBSD to switch over to ncurses.<br>
<br>
Since 1995, ncurses has been ported to many systems:<br>
* It is used in almost every system based on the Linux kernel (aside<br>
from some embedded applications).<br>
* It is used as the system curses library on OpenBSD, FreeBSD and<br>
MacOS.<br>
* It is used in environments such as Cygwin and MinGW. The first of<br>
these was EMX on OS/2 Warp.<br>
* It is used (though usually not as the system curses) on all of the<br>
vendor unix systems, e.g., AIX, HP-UX, IRIX64, SCO, Solaris,<br>
Tru64.<br>
* It should work readily on any ANSI/POSIX-conforming unix.<br>
<br>
The distribution includes the library and support utilities, including<br>
* captoinfo, a termcap conversion tool<br>
* clear, utility for clearing the screen<br>
* infocmp, the terminfo decompiler<br>
* tabs, set tabs on a terminal<br>
* tic, the terminfo compiler<br>
* toe, list (table of) terminfo entries<br>
* tput, utility for retrieving terminal capabilities in shell<br>
scripts<br>
* tset, to initialize the terminal<br>
<br>
Full manual pages are provided for the library and tools.<br>
<br>
The ncurses distribution is available at ncurses' homepage:<br>
<br>
<a href="ftp://ftp.invisible-island.net/ncurses/" rel="noreferrer noreferrer" target="_blank">ftp://ftp.invisible-island.net/ncurses/</a> or<br>
<a href="https://invisible-mirror.net/archives/ncurses/" rel="noreferrer noreferrer" target="_blank">https://invisible-mirror.net/archives/ncurses/</a> .<br>
<br>
It is also available via anonymous FTP at the GNU distribution site<br>
<br>
<a href="ftp://ftp.gnu.org/gnu/ncurses/" rel="noreferrer noreferrer" target="_blank">ftp://ftp.gnu.org/gnu/ncurses/</a> .<br>
<br>
Release Notes<br>
<br>
These notes are for ncurses 6.2, released February 12, 2020.<br>
<br>
This release is designed to be source-compatible with ncurses 5.0<br>
through 6.1; providing extensions to the application binary interface<br>
(ABI). Although the source can still be configured to support the<br>
ncurses 5 ABI, the reason for the release is to reflect improvements<br>
to the ncurses 6 ABI and the supporting utility programs.<br>
<br>
There are, of course, numerous other improvements, listed in this<br>
announcement.<br>
<br>
The most important bug-fixes/improvements dealt with user-defined<br>
capabilities in terminal descriptions. The release notes also mention<br>
some other bug-fixes, but are focused on new features and improvements<br>
to existing features since ncurses 6.1 release.<br>
<br>
Library improvements<br>
<br>
New features<br>
<br>
There are several new features:<br>
* O_EDGE_INSERT_STAY tells the form library to optionally delay<br>
cursor movement on a field edge/boundary<br>
* O_INPUT_FIELD extension to form library allows a dynamic field to<br>
shrink if the new limit is smaller than the current field size.<br>
* added exit_curses and exit_terminfo to replace internal symbols<br>
for leak-checking.<br>
* added curses_trace, to replace trace().<br>
<br>
Additionally, to improve performance other changes (and extensions)<br>
are provided in this release:<br>
* mouse decoding now handles shift/control/alt logic when decoding<br>
xterm's 1006 mode<br>
* ncurses now defines a limit for wgetnstr, wgetn_wstr when length<br>
is negative or "too large".<br>
* reordered loop-limit checks in winsnstr in case the string has no<br>
terminating null and only the number of characters is used.<br>
* there is now no buffer-size limit when reading the $TERMCAP<br>
variable.<br>
* the $TERMCAP variable may be interpreted as a fallback to a<br>
terminfo entry<br>
* mvcur now decides whether to use hard-tabs, using xt, tbc and hts<br>
as clues.<br>
* extended colors are improved by modifying an internal call to<br>
vid_puts to pass extended color pairs e.g., from tty_update.c and<br>
lib_mvcur.c<br>
* the initialization functions now avoid relying upon persistent<br>
data for the result from getenv<br>
* scrolling is improved:<br>
+ a limit check in newline_forces_scroll handles the case where<br>
the row is inside scroll-margins, but not at the end.<br>
+ improved loop limits in _nc_scroll_window handle a case where<br>
the scrolled data is a pad which is taller than the window.<br>
<br>
Other improvements<br>
<br>
These are revised features:<br>
* used "const" in some prototypes rather than NCURSES_CONST where<br>
X/Open Curses was updated to do this, e.g., wscanw, newterm, the<br>
terminfo interface. Also use "const" for consistency in the<br>
termcap interface, which was withdrawn by X/Open Curses in Issue 5<br>
(2007). As of Issue 7, X/Open Curses still lacks "const" for<br>
certain return values, e.g., keyname.<br>
* modified wbkgd and wbkgrnd to improve compatibility with SVr4<br>
curses, changing the way the window rendition is updated when the<br>
background character is modified<br>
* improved terminfo write/read by modifying the fourth item of the<br>
extended header to denote the number of valid strings in the<br>
extended string table (see term(5)).<br>
* modified the initialization checks for mouse so that the<br>
xterm+sm+1006 block will work with terminal descriptions not<br>
mentioning xterm.<br>
<br>
These were done to limit or ultimately deprecate features:<br>
* deprecated safe-sprintf, since the vsnprintf function, which does<br>
what was needed, was standardized long ago.<br>
* marked vwprintw and vwscanw as deprecated; recommend using<br>
vw_printw and vw_scanw, respectively.<br>
* added deprecation warnings for internal functions called by older<br>
versions of tack.<br>
* removed unused _nc_import_termtype2 function.<br>
<br>
These are improvements to existing features:<br>
* check parameter of set_escdelay, return ERR if negative.<br>
* check parameter of set_tabsize, return ERR if not greater than<br>
zero<br>
* correct a status-check in _nc_read_tic_entry() so that if reading<br>
a hex/b64 $TERMINFO, and the $TERM does not match, fall-through to<br>
the compiled-in search list.<br>
* amend check for repeat_char to handle a case where setlocale() was<br>
called after initscr<br>
* move macro for is_linetouched inside NCURSES_NOMACROS ifndef.<br>
* use _nc_copy_termtype2 rather than direct assignment in setupterm,<br>
in case it is called repeatedly using fallback terminfo<br>
descriptions<br>
* improve workaround for Solaris wcwidth versus line-drawing<br>
characters<br>
* add checks in repair_subwindows to keep the current position and<br>
scroll-margins inside the resized subwindow.<br>
* correct a buffer-limit in write_entry.c for systems that use<br>
caseless filenames.<br>
* improved build-time utility report_offsets:<br>
+ add categories, e.g., "w" for wide-character, "t" for threads<br>
to make the report more readable. Reorganized the structures<br>
reported to make the categories more apparent.<br>
+ add NCURSES_GLOBALS and NCURSES_PRESCREEN to report to show<br>
how similar the different libtinfo configurations are.<br>
* modified some header files to ensure that those include necessary<br>
files except for the previously-documented cases<br>
* added some traces in initialization to show whether a fallback<br>
entry is used.<br>
* made minor optimization to reduce calls to _nc_reserve_pairs<br>
<br>
These are corrections to existing features:<br>
* fix a special case in PutAttrChar where a cell is marked as<br>
alternate-character set, but the terminal does not actually<br>
support the given graphic character. This would happen in an older<br>
terminal such as vt52, which lacks most line-drawing capability.<br>
* corrected flag for "seq" method of db 1.8.5 interface, needed by<br>
toe on some of the BSDs.<br>
* modify comparison in make_hash.c to correct a special case in<br>
collision handling for Caps-hpux11<br>
* add extended_slk_color{,_sp} symbols to the appropriate<br>
package/*.{map,sym} files<br>
* modify lib_setup to avoid calling pthread_self() without first<br>
verifying that the address is valid, i.e., for weak symbols<br>
* add a couple of broken-linker symbols to the list of versioned<br>
symbols to help with link-time optimization versus weak symbols.<br>
<br>
Program improvements<br>
<br>
Several improvements were made to the utility programs:<br>
<br>
clear<br>
<br>
+ improved logic for clearing with the E3 extension, in case<br>
the terminal scrolls content onto its saved-lines before<br>
actually clearing the display, by clearing the saved-lines<br>
after clearing the display<br>
<br>
infocmp<br>
<br>
+ omit filtering of "OTxx" names which are used for obsolete<br>
capabilities, when the output is sorted by long-names. This<br>
change helps when making a table of the short/long capability<br>
names.<br>
<br>
tic<br>
<br>
+ added check for consistent alternate character set<br>
capabilities.<br>
+ added check for paired indn/rin.<br>
+ added check for terminals with parm_dch vs parm_ich.<br>
+ added check for the case where setf/setb are given using<br>
different strings, but provide identical results to<br>
setaf/setab.<br>
+ corrected check for ich1.<br>
+ changed a too-large terminal entry from a fatal error to a<br>
warning.<br>
<br>
toe<br>
<br>
+ ignores any hex/b64 $TERMINFO value in the list of terminfo<br>
databases.<br>
<br>
tset<br>
<br>
+ replace check in reset command for obsolete "pt" capability<br>
using tbc and hts capabilities as clues<br>
+ modify reset to allow for tabstops at intervals other than 8.<br>
+ change reset's behavior for margins to simply clear<br>
soft-margins if possible, rather than clearing and then<br>
setting them according to the terminal's width.<br>
<br>
tput<br>
<br>
+ add "x" to getopt string so that "tput -x clear" works.<br>
<br>
Several changes were made to the generated ncurses*config scripts and<br>
the analogous ".pc" files to reduce differences between the<br>
configurations they report:<br>
* modified the ncurse*-config and pc-files to more closely match for<br>
the -I and -l options.<br>
* filtered out linker-specs from the --libs report.<br>
* amended the ncurses*-config and pc-files to take into account the<br>
rpath hack which differed between those files.<br>
* modified generated ncurses*config and ncurses.pc, ncursesw.pc,<br>
etc., to list helper libraries such as gpm for static linking.<br>
<br>
Examples<br>
<br>
Along with the library and utilities, improvements were made to the<br>
ncurses-examples. Most of this activity aimed at improving the<br>
test-packages. A few changes are more generally useful, e.g., for the<br>
main ncurses test-program, and for analyzing traces using the<br>
tracemunch script:<br>
* improve recovery from error when reading command-character in<br>
test/ncurses.c, showing the relevant error message and not exiting<br>
on EINTR.<br>
* improve tracemunch, by keeping track of TERMINAL* values, and if<br>
tracing was first turned on after initialization, attempt to show<br>
distinct screen, window and terminal names anyway.<br>
* modify tracemunch to accept filename parameters in addition to use<br>
as a pipe/filter.<br>
* update tracemunch to work with perl 5.26.2, which changed the<br>
rules for escaping regular expressions.<br>
* add some checks in tracemunch for undefined variables.<br>
* modify TurnOn/TurnOff macros (in lib_vidattr.c and lib_vid_attr.c)<br>
to avoid expansion of "CUR" in trace.<br>
<br>
There are other new demo/test programs and reusable examples:<br>
<br>
color_content<br>
Demonstrate the color_content and extended_color_content<br>
functions.<br>
<br>
demo_tabs<br>
A simple demo of tabs in curses.<br>
<br>
dump_window<br>
A portable curses screen-dump, used to compare ncurses screen<br>
contents with Solaris.<br>
<br>
pair_content<br>
Demonstrate the pair_content and extended_pair_content<br>
functions.<br>
<br>
report_hashing<br>
Check hash-tables used for terminfo and termcap names.<br>
<br>
parse_rgb<br>
Sample implementation of the ncurses RGB extension from<br>
user_caps.5, used in picsmap and savescreen programs.<br>
<br>
A variety of improvements were made to existing programs, both new<br>
features as well as options added to make the set of programs more<br>
consistent.<br>
* add "-l" option to test/background, to dump screen contents in a<br>
form that lets different curses implementations be compared.<br>
* add "@" command to test/ncurses F-test, to allow rapid jump to<br>
different character pages.<br>
* added enum, regex examples to test/demo_forms<br>
* amend Scaled256() macro in test/picsmap.c to cover the full range<br>
0..1000<br>
* corrected pathname used in Ada95 sample programs for explain.txt,<br>
to work with test-packages, and used an awk script to split the<br>
resulting pathname when it would be too long for a single line.<br>
* ignore interrupted system-call in test/ncurses's command-line,<br>
e.g., if the terminal were resized.<br>
* improved ifdef's for TABSIZE variable, to help with AIX/HPUX<br>
ports.<br>
<br>
Terminal database<br>
<br>
There are several new terminal descriptions:<br>
<br>
alacritty, domterm, kitty, mintty, mintty-direct, ms-terminal,<br>
n7900, nsterm-build309, nsterm-direct, screen5, ti703, ti707,<br>
ti703-w, ti707-w vscode, vscode-direct, xterm-mono, xterm.js<br>
<br>
There are many changes to existing terminal descriptions. Some were<br>
updates to several descriptions:<br>
* use ansi+rep in a dozen places<br>
* add rs1 to konsole, mlterm<br>
* improve several flash capabilities with trailing mandatory delays<br>
* drop ich1 from rxvt-basic, Eterm and mlterm to improve<br>
compatibility with old non-curses programs<br>
* add/use xterm+keypad in xterm-new<br>
* use xterm+sl-twm for consistency, nine places<br>
* improve xm example in xterm+x11mouse and xterm+sm_1006.<br>
<br>
while others affected specific descriptions. These were retested, to<br>
take into account changes by their developers:<br>
<br>
terminator, st<br>
<br>
while these are specific fixes based on reviewing documentation, user<br>
reports, or warnings from tic:<br>
<br>
adds200:<br>
<br>
+ fix typo<br>
<br>
gnome-256color<br>
<br>
+ base entry on "gnome", not "vte", for consistency<br>
<br>
interix<br>
<br>
+ trim unnecessary setf/setb<br>
<br>
linux-16color<br>
<br>
+ accommodate Linux console driver incompatibility introduced<br>
in early 2018<br>
<br>
nsterm-256color:<br>
<br>
+ add nsterm-build309 to replace nsterm-256color, assigning the<br>
latter as an alias of nsterm, to make mouse work with<br>
nsterm-256color<br>
<br>
regent40:<br>
<br>
+ renumber function-keys to match manual<br>
<br>
regent60:<br>
<br>
+ add cd (clr_eos)<br>
+ corrected acsc<br>
+ add shifted function-keys<br>
<br>
tvi950:<br>
<br>
+ added function-key definitions to agree with Televideo 950<br>
manual<br>
+ corrected acsc<br>
+ remove bogus kf0<br>
+ add bel<br>
<br>
tvi955:<br>
<br>
+ fix typo<br>
<br>
vi200:<br>
<br>
+ add acsc string, including right/down-arrow<br>
<br>
wy50:<br>
<br>
+ corrected acsc<br>
<br>
wy50 and wy60:<br>
<br>
+ add shifted function-keys as kF1 to kF16<br>
<br>
xterm+x11hilite:<br>
<br>
+ eliminate unused p5 parameter.<br>
<br>
A few entries use extensions (user-defined terminal capabilities):<br>
* use xterm+sm+1006 (aka "SGR 1006 mouse") for konsole-base and<br>
putty<br>
* add Smol/Rmol user-defined capability to tmux and vte-2018<br>
* add Smulx user-defined capability to tmux, vte-2018<br>
<br>
Documentation<br>
<br>
As usual, this release<br>
* improves documentation by describing new features,<br>
* attempts to improve the description of features which users have<br>
found confusing<br>
* fills in overlooked descriptions of features which were described<br>
in the NEWS file but treated sketchily in manual pages.<br>
<br>
In addition to providing background information to explain these<br>
features and show how they evolved, there are corrections,<br>
clarifications, etc.:<br>
* Corrections:<br>
+ correct error-returns listed in manual pages for a few form<br>
functions<br>
+ corrected prototypes in several manpages using script to<br>
extract those in compilable form.<br>
+ fix typo in term.5, improve explanation of format<br>
* Clarify in manual pages that vwprintw and vwscanw are obsolete.<br>
They have not been part of X/Open Curses since 2007.<br>
* New/improved history and portability sections:<br>
+ curs_addch.3x gives some background for ACS symbols.<br>
+ curs_getcchar.3x explains a difference between ncurses and<br>
X/Open Curses.<br>
+ curs_getstr.3x gives historical/portability background for<br>
the length parameter of wgetnstr.<br>
+ curs_slk.3x lists a few differences between SVr4 curses and<br>
X/Open Curses for soft-keys.<br>
+ curs_terminfo.3x explains that the initial implementation of<br>
terminfo in SVr2 was mostly replaced by other developers in<br>
SVr3.<br>
+ infocmp.1 explains that the initial version of terminfo had<br>
no tool for decompiling descriptions. That came later, with<br>
SVr3, with a different developer.<br>
+ tabs.1 tells more than you wanted to know about the tool.<br>
+ tic.1 explains that the initial version of terminfo had a<br>
rudimentary tool (based on termcap) for compiling entries.<br>
The tool used with Unix was developed by others for SVr3.<br>
+ toe.1 explains the origin of this tool.<br>
* Improvements for user_caps.5:<br>
+ mention meml, memu and box1<br>
+ expanded description of XM<br>
+ add a clarification regarding the RGB capability.<br>
+ mention user_caps.5 in the tic and infocmp manual pages.<br>
* Other improvements:<br>
+ curs_add_wch.3x adds note about Unicode terminology for the<br>
line-drawing characters.<br>
+ curs_color.3x improves discussion of error returns and<br>
extensions.<br>
+ curs_mouse.3x explains how the kmous and XM capabilities are<br>
used for xterm-mouse input.<br>
+ curs_refresh.3x improves documentation regarding the virtual<br>
and physical screens.<br>
+ curs_util.3x mentions a difference between SVr4 and X/Open<br>
Curses for unctrl.h<br>
+ curs_variables.3x improves description of the init_tabs<br>
capability and TABSIZE variable.<br>
+ ncurses.3x improves documentation regarding feature-test<br>
macros in curses.h<br>
+ resizeterm.3x about top-level windows which touch the<br>
screen's borders.<br>
+ tput.1 clarifies how tput determines the terminal size.<br>
<br>
There are no new manual pages (all of the manual page updates are to<br>
existing pages).<br>
<br>
Some of the improvements are more subtle, relating to the way the<br>
information is presented. For instance, the generated terminfo.5 file<br>
uses a different table layout, allowing it to use space on wide<br>
terminals more effectively.<br>
<br>
Interesting bug-fixes<br>
<br>
While there were many bugs fixed during development of ncurses 6.2,<br>
only a few (the reason for this release) were both important and<br>
interesting. Most of the bug-fixes were for local issues which did not<br>
affect compatibility across releases. Since those are detailed in the<br>
NEWS file no elaboration is needed here.<br>
<br>
The interesting bugs were in tic/infocmp's handling of user-defined<br>
capabilities. These were not recent bugs. Initially it was a simple<br>
problem:<br>
* The user-defined capabilities can be any type (boolean, number or<br>
string), but once given a type all uses of the name must conform<br>
to that type--unless some special support for a particular<br>
multi-typed name is built into ncurses.<br>
* One of simpleterm's contributors copied some definitions for using<br>
tmux's user-defined capabilities in late in 2016.<br>
<br>
diff --git a/<a href="http://st.info" rel="noreferrer noreferrer" target="_blank">st.info</a> b/<a href="http://st.info" rel="noreferrer noreferrer" target="_blank">st.info</a><br>
@@ -185,7 +185,10 @@ st| simpleterm,<br>
tsl=\E]0;,<br>
xenl,<br>
vpa=\E[%i%p1%dd,<br>
-<br>
+# Tmux unofficial extensions, see TERMINFO EXTENSIONS in tmux(1)<br>
+ Se,<br>
+ Ss,<br>
+ Tc,<br>
<br>
st-256color| simpleterm with 256 colors,<br>
use=st,<br>
<br>
* Later, in (referring to a version from mid-2017), a user asked to<br>
have it updated in ncurses.<br>
* However, it had an error from the change in late 2016. The<br>
terminal description made what tmux expected to be string actually<br>
a boolean.<br>
Over the years, there were problems with each of simpleterm's<br>
terminal descriptions. I repaired those, and usually dealt with<br>
the problem.<br>
* The difference in this case was that when compiling the terminal<br>
database, tic may have in memory the definitions for more than one<br>
terminal description (so that it can resolve "use=" clauses).<br>
Seeing two different types for the same name, in certain<br>
situations it would incorrectly merge the symbol tables for the<br>
two terminal descriptions.<br>
* On simpleterm's side, their bug was finally fixed in late 2019,<br>
three years after the bug was created.<br>
<br>
For ncurses, the elapsed time to fix this bug was less than three<br>
years. Someone reported a problem with the terminal description a few<br>
weeks after releasing ncurses 6.1 (in tmux #1264), and the terminal<br>
description was updated that week (ncurses patch 20180224):<br>
<br>
20180224<br>
+ modify _nc_resolve_uses2() to detect incompatible types when merging<br>
a "use=" clause of extended capabilities. The problem was seen in a<br>
defective terminfo integrated from simpleterm sources in 20171111,<br>
compounded by repair in 20180121.<br>
+ correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD<br>
<br>
The larger part of that change added a check to prevent a simple merge<br>
of terminal descriptions where the same user-defined name was used<br>
with different types. But it raised some questions:<br>
* Was there a reliable way to manage terminal descriptions which<br>
used the same extended name in different ways?<br>
* Should ncurses provide a registry of well-known extended names,<br>
with their types?<br>
<br>
Since the correction to terminfo.src could have been readily adopted<br>
by packagers, there was nothing more to be done from ncurses'<br>
standpoint on that part. But improving ncurses to prevent issues like<br>
that is the reason for making a release.<br>
<br>
Nothing more (constructive) was mentioned with regard to simpleterm.<br>
But a few problems were found in the handling of user-defined<br>
capabilities:<br>
* Forward-references to user-defined capabilities in a "use=" clause<br>
did not allocate new data for each use. In tic, successive<br>
compilation of terminal entries could add user-defined<br>
capabilities to the wrong terminal entry.<br>
This was not noticed before, since xterm's terminal descriptions<br>
were the main users of the feature, and almost all of the uses of<br>
the building-blocks which contained user-defined capabilities were<br>
backward-references.<br>
* There is one (documented) case where ncurses 6.1 supports a<br>
user-defined capability that could be any type (i.e., "RGB"). The<br>
check added in February 2018 to guard against mismatches did not<br>
handle all of the combinations needed.<br>
<br>
Both of these issues dated from the original implementation of<br>
user-defined capabilities. Fixing them does not change the terminal<br>
database, but a older tic without the fixes will not be able to handle<br>
terminfo sources which rely upon those fixes. Starting in June 2019,<br>
the download link for the terminfo source file was capped at that<br>
date. The development sources have an up-to-date copy of the file, for<br>
people with a legitimate need for it.<br>
<br>
The "-c" (check) option of tic is not very useful if it cannot offer<br>
advice on parameters needed for user-defined capabilities. The various<br>
Caps files were reorganized to reduce redundancy, and in the common<br>
portion (Caps-ncurses), a registry of user-defined capabilities is<br>
provided for use by tic. While users can still define their own custom<br>
capabilities, tic will not offer any advice when their parameters do<br>
not match.<br>
<br>
In ncurses 6.2, tic makes a special check to allow any type for RGB,<br>
but its being able to do this relies upon fixes made in the ncurses<br>
library in mid-2019.<br>
<br>
Configuration changes<br>
<br>
Major changes<br>
<br>
There are no major changes. Several new options were added to ease<br>
integration of packages with systems using different versions of GNAT<br>
and ncurses. Also, improvements were made to configure checks.<br>
<br>
Configuration options<br>
<br>
There are a few new/modified configure options:<br>
<br>
--with-config-suffix<br>
helps work around a filename conflict with Debian packages<br>
versus test-packages.<br>
<br>
--with-ada-libname<br>
allows one to rename the "AdaCurses" library (at least one<br>
packager prefers a lowercase name).<br>
<br>
--with-fallbacks<br>
now ensures there is a value, and adds the fallback information<br>
to top-level Makefile summary.<br>
<br>
--with-pcre2<br>
check for pcre-posix library to help with MinGW port.<br>
<br>
--with-tic-path and<br>
<br>
--with-infocmp-path<br>
help work around problems building fallback source using<br>
pre-6.0 tic/infocmp.<br>
<br>
--with-versioned-syms<br>
option value can now be a relative pathname.<br>
<br>
Portability<br>
<br>
Many of the portability changes are implemented via the configure<br>
script:<br>
* ignore $TERMINFO as a default value in configure script if it came<br>
from the infocmp -Q option.<br>
* distinguish gcc from icc and clang when the --enable-warnings<br>
option is not used, to avoid unnecessary warnings about<br>
unrecognized inline options<br>
* consistently prepend new libraries as they are found during<br>
configuration, rather than relying upon the linker to resolve<br>
order dependencies of libraries.<br>
* modified configure scripts to reduce relinking/ranlib during<br>
library install :<br>
+ use "install -p" when available, to avoid need for ranlib of<br>
static libraries.<br>
+ scripts which use "--disable-relink;" add a 1-second sleep to<br>
work around tools which use whole-second timestamps, e.g., in<br>
utime rather than the actual file system resolution.<br>
* add configure check for getenv to work around implementation shown<br>
in Emscripten which overwrites the previous return value on each<br>
call.<br>
Use that to optionally suppress START_TRACE macro, whose call to<br>
getenv may not work properly<br>
* change target configure level for _XOPEN_SOURCE to 600 to address<br>
use of vsscanf and setenv.<br>
* reduce use of _GNU_SOURCE for current glibc where _DEFAULT_SOURCE<br>
combines with _XOPEN_SOURCE<br>
Allow for Cygwin's newlib when checking for the _DEFAULT_SOURCE<br>
symbol.<br>
MidnightBSD is now checked for the _XOPEN_SOURCE-related<br>
definitions.<br>
* If the check for va_copy or __va_copy fails,<br>
+ configure now tries copying the pointers for va_list, or as<br>
an array.<br>
+ alternatively, it checks for __builtin_va_copy(), which could<br>
be used with AIX xlc in c89 mode.<br>
* several changes to support a port to Ultrix 3.1:<br>
+ check if "b" binary feature of fopen works<br>
+ check for missing feature of locale.h<br>
+ add fallback for strstr() in test-programs<br>
+ add fallback for STDOUT_FILENO in test-programs<br>
* The test/configure script (used for ncurses-examples) is improved:<br>
+ work around non-ncurses termcap.h file, e.g., in Slackware.<br>
+ check for TABSIZE variable.<br>
+ checks for the X11/Intrinsic.h header, accommodate recent<br>
MacOS changes which largely emptied /usr/include.<br>
<br>
Here are some of the other portability fixes:<br>
* added dummy "check" rule in top-level and test-Makefile to<br>
simplify building test-packages for ArchLinux.<br>
* dropped library-dependency on psapi for MinGW port, since<br>
win_driver.c defines PSAPI_VERSION to 2, making it use<br>
GetProcessImageFileName from kernel32.dll<br>
* made build-fixes for configuration using --program-suffix with<br>
Ada95, noticed with MacOS but applicable to other platforms<br>
without libpanelw, etc.<br>
* modified ncurses/Makefile.in to fix a case where Debian/testing<br>
changes to the ld --as-needed configuration broke ncurses-examples<br>
test packages.<br>
* used _WIN32/_WIN64 in preference to __MINGW32__/__MINGW64__<br>
symbols to simplify building with Microsoft Visual C++, since the<br>
former are defined in both compiler configurations.<br>
_________________________________________________________________<br>
<br>
Features of ncurses<br>
<br>
The ncurses package is fully upward-compatible with SVr4 (System V<br>
Release 4) curses:<br>
* All of the SVr4 calls have been implemented (and are documented).<br>
* ncurses supports all of the for SVr4 curses features including<br>
keyboard mapping, color, forms-drawing with ACS characters, and<br>
automatic recognition of keypad and function keys.<br>
* ncurses provides these SVr4 add-on libraries (not part of X/Open<br>
Curses):<br>
+ the panels library, supporting a stack of windows with<br>
backing store.<br>
+ the menus library, supporting a uniform but flexible<br>
interface for menu programming.<br>
+ the form library, supporting data collection through<br>
on-screen forms.<br>
* ncurses's terminal database is fully compatible with that used by<br>
SVr4 curses.<br>
+ ncurses supports user-defined capabilities which it can see,<br>
but which are hidden from SVr4 curses applications using the<br>
same terminal database.<br>
+ It can be optionally configured to match the format used in<br>
related systems such as AIX and Tru64.<br>
+ Alternatively, ncurses can be configured to use hashed<br>
databases rather than the directory of files used by SVr4<br>
curses.<br>
* The ncurses utilities have options to allow you to filter terminfo<br>
entries for use with less capable curses/terminfo versions such as<br>
the HP/UX and AIX ports.<br>
<br>
The ncurses package also has many useful extensions over SVr4:<br>
* The API is 8-bit clean and base-level conformant with the X/OPEN<br>
curses specification, XSI curses (that is, it implements all BASE<br>
level features, and most EXTENDED features). It includes many<br>
function calls not supported under SVr4 curses (but portability of<br>
all calls is documented so you can use the SVr4 subset only).<br>
* Unlike SVr3 curses, ncurses can write to the rightmost-bottommost<br>
corner of the screen if your terminal has an insert-character<br>
capability.<br>
* Ada95 and C++ bindings.<br>
* Support for mouse event reporting with X Window xterm and FreeBSD<br>
and OS/2 console windows.<br>
* Extended mouse support via Alessandro Rubini's gpm package.<br>
* The function wresize allows you to resize windows, preserving<br>
their data.<br>
* The function use_default_colors allows you to use the terminal's<br>
default colors for the default color pair, achieving the effect of<br>
transparent colors.<br>
* The functions keyok and define_key allow you to better control the<br>
use of function keys, e.g., disabling the ncurses KEY_MOUSE, or by<br>
defining more than one control sequence to map to a given key<br>
code.<br>
* Support for 256-color terminals, such as modern xterm.<br>
* Support for 16-color terminals, such as aixterm and modern xterm.<br>
* Better cursor-movement optimization. The package now features a<br>
cursor-local-movement computation more efficient than either BSD's<br>
or System V's.<br>
* Super hardware scrolling support. The screen-update code<br>
incorporates a novel, simple, and cheap algorithm that enables it<br>
to make optimal use of hardware scrolling, line-insertion, and<br>
line-deletion for screen-line movements. This algorithm is more<br>
powerful than the 4.4BSD curses quickch routine.<br>
* Real support for terminals with the magic-cookie glitch. The<br>
screen-update code will refrain from drawing a highlight if the<br>
magic- cookie unattributed spaces required just before the<br>
beginning and after the end would step on a non-space character.<br>
It will automatically shift highlight boundaries when doing so<br>
would make it possible to draw the highlight without changing the<br>
visual appearance of the screen.<br>
* It is possible to generate the library with a list of pre-loaded<br>
fallback entries linked to it so that it can serve those terminal<br>
types even when no terminfo tree or termcap file is accessible<br>
(this may be useful for support of screen-oriented programs that<br>
must run in single-user mode).<br>
* The tic/captoinfo utility provided with ncurses has the ability to<br>
translate many termcaps from the XENIX, IBM and AT&T extension<br>
sets.<br>
* A BSD-like tset utility is provided.<br>
* The ncurses library and utilities will automatically read terminfo<br>
entries from $HOME/.terminfo if it exists, and compile to that<br>
directory if it exists and the user has no write access to the<br>
system directory. This feature makes it easier for users to have<br>
personal terminfo entries without giving up access to the system<br>
terminfo directory.<br>
* You may specify a path of directories to search for compiled<br>
descriptions with the environment variable TERMINFO_DIRS (this<br>
generalizes the feature provided by TERMINFO under stock System<br>
V.)<br>
* In terminfo source files, use capabilities may refer not just to<br>
other entries in the same source file (as in System V) but also to<br>
compiled entries in either the system terminfo directory or the<br>
user's $HOME/.terminfo directory.<br>
* The table-of-entries utility toe makes it easy for users to see<br>
exactly what terminal types are available on the system.<br>
* The library meets the XSI requirement that every macro entry point<br>
have a corresponding function which may be linked (and will be<br>
prototype-checked) if the macro definition is disabled with<br>
#undef.<br>
* Extensive documentation is provided (see the Additional Reading<br>
section of the ncurses FAQ for online documentation).<br>
<br>
Applications using ncurses<br>
<br>
The ncurses distribution includes a selection of test programs<br>
(including a few games). These are available separately as<br>
ncurses-examples<br>
<br>
The ncurses library has been tested with a wide variety of<br>
applications including:<br>
<br>
aptitude<br>
FrontEnd to Apt, the debian package manager<br>
<br>
<a href="https://wiki.debian.org/Aptitude" rel="noreferrer noreferrer" target="_blank">https://wiki.debian.org/Aptitude</a><br>
<br>
cdk<br>
Curses Development Kit<br>
<br>
<a href="https://invisible-island.net/cdk/" rel="noreferrer noreferrer" target="_blank">https://invisible-island.net/cdk/</a><br>
<br>
ded<br>
directory-editor<br>
<br>
<a href="https://invisible-island.net/ded/" rel="noreferrer noreferrer" target="_blank">https://invisible-island.net/ded/</a><br>
<br>
dialog<br>
the underlying application used in Slackware's setup, and the<br>
basis for similar install/configure applications on many<br>
systems.<br>
<br>
<a href="https://invisible-island.net/dialog/" rel="noreferrer noreferrer" target="_blank">https://invisible-island.net/dialog/</a><br>
<br>
lynx<br>
the text WWW browser<br>
<br>
<a href="https://lynx.invisible-island.net/" rel="noreferrer noreferrer" target="_blank">https://lynx.invisible-island.net/</a><br>
<br>
mutt<br>
mail utility<br>
<br>
<a href="http://www.mutt.org/" rel="noreferrer noreferrer" target="_blank">http://www.mutt.org/</a><br>
<br>
ncftp<br>
file-transfer utility<br>
<br>
<a href="https://www.ncftp.com/" rel="noreferrer noreferrer" target="_blank">https://www.ncftp.com/</a><br>
<br>
nvi<br>
New vi uses ncurses.<br>
<br>
<a href="https://sites.google.com/a/bostic.com/keithbostic/vi" rel="noreferrer noreferrer" target="_blank">https://sites.google.com/a/bostic.com/keithbostic/vi</a><br>
<br>
ranger<br>
A console file manager with VI key bindings in Python.<br>
<br>
<a href="https://ranger.github.io/" rel="noreferrer noreferrer" target="_blank">https://ranger.github.io/</a><br>
<br>
tin<br>
newsreader, supporting color, MIME<br>
<br>
<a href="http://www.tin.org/" rel="noreferrer noreferrer" target="_blank">http://www.tin.org/</a><br>
<br>
vifm<br>
File manager with vi like keybindings<br>
<br>
<a href="https://vifm.info/" rel="noreferrer noreferrer" target="_blank">https://vifm.info/</a><br>
<br>
as well as some that use ncurses for the terminfo support alone:<br>
<br>
minicom<br>
terminal emulator for serial modem connections<br>
<br>
<a href="https://alioth.debian.org/projects/minicom/" rel="noreferrer noreferrer" target="_blank">https://alioth.debian.org/projects/minicom/</a><br>
<br>
mosh<br>
a replacement for ssh.<br>
<br>
<a href="https://mosh.mit.edu/" rel="noreferrer noreferrer" target="_blank">https://mosh.mit.edu/</a><br>
<br>
tack<br>
terminfo action checker<br>
<br>
<a href="https://invisible-island.net/ncurses/tack.html" rel="noreferrer noreferrer" target="_blank">https://invisible-island.net/ncurses/tack.html</a><br>
<br>
tmux<br>
terminal multiplexor<br>
<br>
<a href="https://github.com/tmux/tmux/wiki" rel="noreferrer noreferrer" target="_blank">https://github.com/tmux/tmux/wiki</a><br>
<br>
vile<br>
vi-like-emacs may be built to use the terminfo, termcap or<br>
curses interfaces.<br>
<br>
<a href="https://invisible-island.net/vile/" rel="noreferrer noreferrer" target="_blank">https://invisible-island.net/vile/</a><br>
<br>
and finally, those which use only the termcap interface:<br>
<br>
emacs<br>
text editor<br>
<br>
<a href="https://www.gnu.org/software/emacs/" rel="noreferrer noreferrer" target="_blank">https://www.gnu.org/software/emacs/</a><br>
<br>
less<br>
The most commonly used pager (a program that displays text<br>
files).<br>
<br>
<a href="http://www.greenwoodsoftware.com/less/" rel="noreferrer noreferrer" target="_blank">http://www.greenwoodsoftware.com/less/</a><br>
<br>
screen<br>
terminal multiplexor<br>
<br>
<a href="https://www.gnu.org/software/screen/" rel="noreferrer noreferrer" target="_blank">https://www.gnu.org/software/screen/</a><br>
<br>
vim<br>
text editor<br>
<br>
<a href="https://www.vim.org/" rel="noreferrer noreferrer" target="_blank">https://www.vim.org/</a><br>
<br>
Development activities<br>
<br>
Zeyd Ben-Halim started ncurses from a previous package pcurses,<br>
written by Pavel Curtis. Eric S. Raymond continued development.<br>
Juergen Pfeifer wrote most of the form and menu libraries.<br>
<br>
Ongoing development work is done by Thomas E. Dickey. Thomas E. Dickey<br>
has acted as the maintainer for the Free Software Foundation, which<br>
holds a copyright on ncurses for releases 4.2 through 6.1. Following<br>
the release of ncurses 6.1, effective as of release 6.2, copyright for<br>
ncurses reverted to Thomas E. Dickey (see the ncurses FAQ for<br>
additional information).<br>
<br>
Contact the current maintainers at<br>
<br>
<a href="mailto:bug-ncurses@gnu.org" target="_blank" rel="noreferrer">bug-ncurses@gnu.org</a><br>
<br>
To join the ncurses mailing list, please write email to<br>
<br>
<a href="mailto:bug-ncurses-request@gnu.org" target="_blank" rel="noreferrer">bug-ncurses-request@gnu.org</a><br>
<br>
containing the line:<br>
<br>
subscribe <name>@<host.domain><br>
<br>
This list is open to anyone interested in helping with the development<br>
and testing of this package.<br>
<br>
Beta versions of ncurses are made available at<br>
<br>
<a href="ftp://ftp.invisible-island.net/ncurses/current/" rel="noreferrer noreferrer" target="_blank">ftp://ftp.invisible-island.net/ncurses/current/</a> and<br>
<a href="https://invisible-mirror.net/archives/ncurses/current/" rel="noreferrer noreferrer" target="_blank">https://invisible-mirror.net/archives/ncurses/current/</a> .<br>
<br>
Patches to the current release are made available at<br>
<br>
<a href="ftp://ftp.invisible-island.net/ncurses/6.1/" rel="noreferrer noreferrer" target="_blank">ftp://ftp.invisible-island.net/ncurses/6.1/</a> and<br>
<a href="https://invisible-mirror.net/archives/ncurses/6.1/" rel="noreferrer noreferrer" target="_blank">https://invisible-mirror.net/archives/ncurses/6.1/</a> .<br>
<br>
There is an archive of the mailing list here:<br>
<br>
<a href="http://lists.gnu.org/archive/html/bug-ncurses" rel="noreferrer noreferrer" target="_blank">http://lists.gnu.org/archive/html/bug-ncurses</a> (also https)<br>
<br>
Related resources<br>
<br>
The release notes make scattered references to these pages, which may<br>
be interesting by themselves:<br>
* ncurses licensing<br>
* Symbol versioning in ncurses<br>
* Comments on ncurses versus slang (S-Lang)<br>
* tack - terminfo action checker<br>
* tctest - termcap library checker<br>
* Terminal Database<br>
<br>
Other resources<br>
<br>
The distribution provides a newer version of the terminfo-format<br>
terminal description file once maintained by Eric Raymond . Unlike the<br>
older version, the termcap and terminfo data are provided in the same<br>
file, which also provides several user-definable extensions beyond the<br>
X/Open specification.<br>
<br>
You can find lots of information on terminal-related topics not<br>
covered in the terminfo file at Richard Shuford's archive . The<br>
collection of computer manuals at <a href="http://bitsavers.org" rel="noreferrer noreferrer" target="_blank">bitsavers.org</a> has also been useful.<br>
<br>
* Overview<br>
* Release Notes<br>
+ Library improvements<br>
o New features<br>
o Other improvements<br>
+ Program improvements<br>
o Utilities<br>
o Examples<br>
+ Terminal database<br>
+ Documentation<br>
+ Interesting bug-fixes<br>
+ Configuration changes<br>
o Major changes<br>
o Configuration options<br>
+ Portability<br>
* Features of ncurses<br>
* Applications using ncurses<br>
* Development activities<br>
* Related resources<br>
* Other resources<br>
<br>
-- <br>
Thomas E. Dickey <<a href="mailto:dickey@invisible-island.net" target="_blank" rel="noreferrer">dickey@invisible-island.net</a>><br>
<a href="https://invisible-island.net" rel="noreferrer noreferrer" target="_blank">https://invisible-island.net</a><br>
<a href="ftp://ftp.invisible-island.net" rel="noreferrer noreferrer" target="_blank">ftp://ftp.invisible-island.net</a><br>
-- <br>
If you have a working or partly working program that you'd like<br>
to offer to the GNU project as a GNU package,<br>
see <a href="https://www.gnu.org/help/evaluation.html" rel="noreferrer noreferrer" target="_blank">https://www.gnu.org/help/evaluation.html</a>._______________________________________________<br>
Hangout mailing list<br>
<a href="mailto:Hangout@nylxs.com" target="_blank" rel="noreferrer">Hangout@nylxs.com</a><br>
<a href="http://lists.mrbrklyn.com/mailman/listinfo/hangout" rel="noreferrer noreferrer" target="_blank">http://lists.mrbrklyn.com/mailman/listinfo/hangout</a><br>
</div></div></div>