mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-25 18:12:57 +01:00
e18651243e
While I didn't plan another upgrade, This version incorporate fixes from kevans@ so let's upgrade to it
983 lines
41 KiB
Plaintext
983 lines
41 KiB
Plaintext
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
|