2 $Id: announce.html.in,v 1.92 2018/01/27 02:09:18 tom Exp $
3 ****************************************************************************
4 * Copyright (c) 1998-2015,2018 Free Software Foundation, Inc. *
6 * Permission is hereby granted, free of charge, to any person obtaining a *
7 * copy of this software and associated documentation files (the *
8 * "Software"), to deal in the Software without restriction, including *
9 * without limitation the rights to use, copy, modify, merge, publish, *
10 * distribute, distribute with modifications, sublicense, and/or sell *
11 * copies of the Software, and to permit persons to whom the Software is *
12 * furnished to do so, subject to the following conditions: *
14 * The above copyright notice and this permission notice shall be included *
15 * in all copies or substantial portions of the Software. *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
20 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
21 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
22 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
23 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
25 * Except as contained in this notice, the name(s) of the above copyright *
26 * holders shall not be used in advertising or otherwise to promote the *
27 * sale, use or other dealings in this Software without prior written *
29 ****************************************************************************
31 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
35 <meta name="generator" content=
36 "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
38 <title>Announcing ncurses @VERSION@</title>
39 <link rev="made" href="mailto:bug-ncurses@gnu.org">
40 <meta http-equiv="Content-Type" content=
41 "text/html; charset=us-ascii">
42 <style type="text/css">
43 p,li { max-width:700px; }
44 dd { max-width:630px; }
47 font-variant: small-caps;
50 font-family: "Andale Mono", "Monotype.com", monospace;
58 <h1 class="no-header">Announcing ncurses @VERSION@</h1>
60 <h2><a name="h2-overview" id="h2-overview">Overview</a></h2>
62 <p>The <span class="main-name">ncurses</span> (new curses)
63 library is a free software emulation of curses in System V
64 Release 4.0 (SVr4), and more. It uses terminfo format, supports
65 pads and color and multiple highlights and forms characters and
66 function-key mapping, and has all the other SVr4-curses
67 enhancements over BSD curses. SVr4 curses became the basis of
70 <p>In mid-June 1995, the maintainer of 4.4BSD curses declared
71 that he considered 4.4BSD curses obsolete, and encouraged the
72 keepers of <span class="main-name">unix</span> releases such as
73 BSD/OS, FreeBSD and NetBSD to switch over to <span class=
74 "main-name">ncurses</span>.</p>
76 <p>Since 1995, <span class="main-name">ncurses</span> has been
77 ported to many systems:</p>
80 <li>It is used in almost every system based on the Linux kernel
81 (aside from some embedded applications).</li>
83 <li>It is used as the system curses library on OpenBSD, FreeBSD
86 <li>It is used in environments such as Cygwin and MinGW. The
87 first of these was EMX on OS/2 Warp.</li>
89 <li>It is used (though usually not as the <em>system</em>
90 curses) on all of the vendor <span class=
91 "main-name">unix</span> systems, e.g., AIX, HP-UX, IRIX64, SCO,
94 <li>It should work readily on any ANSI/POSIX-conforming
95 <span class="main-name">unix</span>.</li>
98 <p>The distribution includes the library and support utilities,
103 "https://invisible-island.net/ncurses/man/captoinfo.1m.html"><span class="part-name">
104 captoinfo</span></a>, a termcap conversion tool</li>
107 "https://invisible-island.net/ncurses/man/clear.1.html"><span class="part-name">
108 clear</span></a>, utility for clearing the screen</li>
111 "https://invisible-island.net/ncurses/man/infocmp.1m.html"><span class="part-name">
112 infocmp</span></a>, the terminfo decompiler</li>
115 "https://invisible-island.net/ncurses/man/tabs.1.html"><span class="part-name">
116 tabs</span></a>, set tabs on a terminal</li>
119 "https://invisible-island.net/ncurses/man/tic.1m.html"><span class="part-name">
120 tic</span></a>, the terminfo compiler</li>
123 "https://invisible-island.net/ncurses/man/toe.1m.html"><span class="part-name">
124 toe</span></a>, list (table of) terminfo entries</li>
127 "https://invisible-island.net/ncurses/man/tput.1.html"><span class="part-name">
128 tput</span></a>, utility for retrieving terminal capabilities
129 in shell scripts</li>
132 "https://invisible-island.net/ncurses/man/tset.1.html"><span class="part-name">
133 tset</span></a>, to initialize the terminal</li>
136 <p>Full manual pages are provided for the library and tools.</p>
138 <p>The <span class="main-name">ncurses</span> distribution is
139 available at <span class="main-name">ncurses</span>' <a href=
140 "https://invisible-island.net/ncurses/">homepage</a>:</p>
144 "ftp://ftp.invisible-island.net/ncurses/">ftp://ftp.invisible-island.net/ncurses/</a>
147 "https://invisible-mirror.net/archives/ncurses/">https://invisible-mirror.net/archives/ncurses/</a> .</p>
150 <p>It is also available via anonymous FTP at the GNU distribution
155 "ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/</a> .</p>
158 <h2><a name="h2-release-notes" id="h2-release-notes">Release
161 <p>These notes are for <span class="main-name">ncurses</span>
162 @VERSION@, released <strong>January 27, 2018</strong>.</p>
164 <p>This release is designed to be source-compatible with
165 <span class="main-name">ncurses</span> 5.0 through 6.0; providing
166 extensions to the application binary interface (ABI). Although
167 the source can still be configured to support the <span class=
168 "main-name">ncurses</span> 5 ABI, the intent of the release is to
169 provide extensions to the <span class="main-name">ncurses</span>
170 <strong>6</strong> ABI:</p>
174 <p>improve integration of <span class="part-name">tput</span>
175 and <span class="part-name">tset</span></p>
179 <p>provide support for extended numeric capabilities.</p>
183 <p>There are, of course, numerous other improvements, listed in
184 this announcement.</p>
186 <p>The release notes also mention some bug-fixes, but are focused
187 on new features and improvements to existing features since
188 <span class="main-name">ncurses</span> 6.0 release.</p>
190 <h3><a name="h3-library" id="h3-library">Library
191 improvements</a></h3>
193 <h4><a name="h4-new-library" id="h4-new-library">New
196 <p>The improved integration of <span class=
197 "part-name">tput</span> and <span class="part-name">tset</span>
198 made only small changes to the libraries. However, supporting
199 extended numeric capabilities required a few changes:</p>
203 <p>The <code>TERMINAL</code> structure in
204 <code><term.h></code> is now opaque. Doing that allowed
205 making the structure larger, to hold the extended numeric
208 <p>A few applications required changes during development of
209 <span class="main-name">ncurses 6.1</span> because those
210 applications misused the members of that structure, e.g.,
211 directly modifying it rather than using <a href=
212 "https://invisible-island.net/ncurses/man/curs_kernel.3x.html#h3-def_prog_mode_-def_shell_mode">
213 def_prog_mode</a>.</p>
217 <p>Having made <code>TERMINAL</code> opaque (and because none
218 of the library functions use anything except a pointer to
219 <code>TERMINAL</code>), it was possible to increase the size
220 of the structure, adding to the end.</p>
222 <p>Existing applications which were linked to the
223 <span class="part-name">ncurses 6.0</span> high-level
224 (<em>ncurses</em>, <em>ncursesw</em>) and low-level
225 (<em>tinfo</em>, <em>tinfo</em>) libraries should not require
226 re-linking since the binary interface did not change, nor did
227 the structure offsets with <code>TERMINAL</code> change.</p>
229 <p>A few applications use the inner <code>TERMTYPE</code>
230 structure's offsets to refer to terminfo capabilities within
231 that structure. Again, those do not require modification
232 because their offsets within <code>TERMINAL</code> did not
237 <p>When configured for wide-characters, i.e.,
238 “ncursesw” the <code>TERMINAL</code> structure is
241 <p>The new data in <code>TERMINAL</code> holds the same
242 information as <code>TERMTYPE</code>, but with larger numbers
243 (“int” versus “short”). It is named
244 <code>TERMTYPE2</code>.</p>
246 <p>The library uses this structure internally in preference
247 to <code>TERMTYPE</code>, referring to <code>TERMTYPE</code>
248 only to initialize it for applications that use the
249 capabilities defined in <code><term.h></code></p>
253 <p>When configured for 8-bit (narrow) characters, the
254 <code>TERMTYPE2</code> structure is not used.</p>
257 <li>The updated application binary interface is 6.1.20171230
258 (used for new <a href=
259 "https://invisible-island.net/ncurses/ncurses-mapsyms.html">versioned
260 symbols</a>), although the interface changes were developed
261 several months previously.</li>
264 <p>The motivation for making this extension came from noticing
266 "https://invisible-island.net/ncurses/tctest.html#bsd42-numeric-caps">
267 termcap applications</a> could (though not <a href=
268 "https://invisible-island.net/ncurses/ncurses-slang.html#cause_numbers">
269 realistically</a>) use larger numbers than would fit in 16-bits,
270 and the fact that the number of color pairs for a 256-color xterm
271 could not be expressed in terminfo (i.e., 32767 versus 65536).
272 Also, a few terminals support direct-colors, which could use the
275 <p>Generally speaking, applications that use internal details of
276 a library are unsupported. There was exactly one exception for
277 <span class="main-name">ncurses</span>: the <span class=
278 "main-name">tack</span> program <em>used</em> the internal
279 details of <code>TERMINAL</code>, because it provides an
280 ncurses-specific feature for interactively modifying a terminfo
281 description and writing the updated description to a text-file.
282 It was possible to not only separate <span class=
283 "main-name">tack</span> from these <a href=
284 "https://invisible-island.net/ncurses/tack.html#portable">internal
285 details of <span class="main-name">ncurses</span></a>, but to
286 generalize it so that the program works with Unix curses
287 (omitting the ncurses-specific feature). That was released as
289 "https://invisible-island.net/ncurses/tack/CHANGES.html#index-t20170726">
290 <span class="main-name">tack</span> 1.08</a> in July
293 <p>While making changes to <span class="main-name">tack</span> to
294 eliminate its dependency upon <span class=
295 "main-name">ncurses</span> internals, the publicly-visible
296 details of those internals were reviewed, and some symbols were
297 moved to private header files, while others were marked
298 explicitly as <span class="main-name">ncurses</span> internals.
299 Future releases of <span class="main-name">ncurses</span> may
300 eliminate some of those symbols (such as those used by
301 <span class="main-name">tack</span> 1.07) because they are
302 neither part of the API or the ABI.</p>
304 <p>Using the <code>TERMTYPE2</code> extended numeric
305 capabilities, it is possible to support both color pair values
306 and color values past 32767. Taking compatibility into account,
307 developers readily understand that neither function signatures
308 nor structure offsets change. Also, existing functions have to
309 operate with the extended numbers. Most of that work is internal
310 to the library. For the external interfaces, a hybrid approach
315 <p>X/Open Curses defined function prototypes such as
316 <code>wattr_set</code> with an unused parameter, for
317 “future” use. After 25 years, the future is here:
318 <span class="main-name">ncurses</span> uses the parameter to
319 augment color pair values as described in the <a href=
320 "https://invisible-island.net/ncurses/man/curs_attr.3x.html#h2-EXTENSIONS">
325 <p>Other functions such as those defining color pairs did not
326 have a corresponding <em>reserved</em> parameter. For those,
327 <span class="main-name">ncurses</span> defines extended
328 versions such as <code>init_extended_pair</code> (versus
329 <code>init_pair</code>), <code>init_extended_color</code>
330 (versus <code>init_color</code>).</p>
334 <p>Additionally, to improve performance other changes (and
335 extensions) are provided in this release:</p>
339 <p>Several new functions simplify management of large sets of
340 color pairs: <code>reset_color_pairs</code>,
341 <code>alloc_pair</code>, <code>find_pair</code> and
342 <code>free_pair</code>.</p>
346 <p>New "RGB" extension capability for direct-color support is
347 used to improve performance of
348 <code>color_content</code>.</p>
352 <p>The internal <code>colorpair_t</code> is now a struct,
353 eliminating an internal 8-bit limit on colors</p>
357 <p>Allocation for <code>SCREEN</code>'s color-pair table
358 starts small, grows on demand up to the limit given in the
359 terminal description.</p>
363 <p><code>setcchar</code> and <code>getcchar</code> now treat
364 a negative color-pair as an error.</p>
368 <h4><a name="h4-fixes-library" id="h4-fixes-library">Other
369 improvements</a></h4>
371 <p>These are new or revised features:</p>
375 <p>modify <code>c++/etip.h.in</code> to accommodate
376 deprecation of throw and throws in c++17</p>
380 <p>add new function <code>unfocus_current_field</code></p>
384 <p>add option to preserve leading whitespace in form
389 <p>add a macro for <code>is_linetouched</code> and adjust the
390 function's return value to make it possible for most
391 applications to check for an error-return.</p>
395 <p>add build-time utility <code>report_offsets</code> to help
396 show when the various configurations of tinfo library are
397 compatible or not.</p>
401 <p>These were done to limit or ultimately deprecate features:</p>
405 <p>drop two symbols obsoleted in 2004:
406 <code>_nc_check_termtype</code>, and
407 <code>_nc_resolve_uses</code></p>
411 <p>move <code>_nc_tracebits</code>, <code>_tracedump</code>
412 and <code>_tracemouse</code> to <code>curses.priv.h</code>,
413 since they are not part of the suggested ABI6.</p>
417 <p>mark some structs in form/menu/panel libraries as
418 potentially opaque without modifying API/ABI.</p>
422 <p>ifdef'd header-file definition of <code>mouse_trafo</code>
423 with <code>NCURSES_NOMACROS</code></p>
427 <p>remove initialization-check for calling <code>napms</code>
428 in the term-driver configuration; none is needed.</p>
432 <p>modify <code>trace</code> to avoid overwriting existing
437 <p>These are improvements to existing features:</p>
441 <p>modify <code>make_hash</code> to allow building with
442 address-sanitizer, assuming that <code>--disable-leaks</code>
447 <p>move <code>SCREEN</code> field for <code>use_tioctl</code>
448 data before the ncursesw fields, and limit that to the
449 sp-funcs configuration to improve termlib compatibility</p>
453 <p>modify db-iterator:</p>
457 <p>ignore zero-length files in db-iterator; these are
458 useful for instance to suppress
459 <code>$HOME/.terminfo</code> when not wanted.</p>
463 <p>modify <code>update_getenv</code> to ensure that
464 environment variables which are not initially set will be
465 checked later if an application happens to set them</p>
471 <p>modify <code>_nc_outc_wrapper</code> to use the standard
472 output if the screen was not initialized, rather than
473 returning an error.</p>
477 <p>improve checks for low-level terminfo functions when the
478 terminal has not been initialized.</p>
482 <p>modify <code>set_curterm</code> to update
483 <code>ttytype[]</code> data used by longname/p></p>
487 <p>modify <code>_nc_get_screensize</code> to allow for
488 <code>use_env</code> and <code>use_tioctl</code> state to be
489 per-screen when sp-funcs are configured, better matching the
490 behavior when using the term-driver configuration.</p>
494 <p>remove an early-return from <code>_nc_do_color,</code>
495 which can interfere with data needed by <code>bkgd</code>
496 when <span class="main-name">ncurses</span> is configured
497 with extended colors</p>
501 <p>incorporate <code>A_COLOR</code> mask into
502 <code>COLOR_PAIR</code>, in case user application provides an
503 out-of-range pair number</p>
507 <p>modify logic for <code>endwin</code>-state to be able to
508 detect the case where the screen was never initialized, using
509 that to trigger a flush of <span class=
510 "main-name">ncurses'</span> buffer for <code>mvcur</code>,
511 e.g., in the sample program <span class=
512 "part-name">dots_mvcur</span> for the term-driver
517 <p>These are corrections to existing features:</p>
521 <p>fixes for writing extended color pairs in
522 <code>putwin</code>.</p>
526 <p>modify no-leaks code for <code>lib_cur_term.c</code> to
527 account for the <code>tgetent</code> cache.</p>
531 <p>amend handling of the <code>repeat_char</code> capability
532 in <code>EmitRange</code> to avoid scope creep: translate the
533 character to the alternate character set when the alternate
534 character set is enabled, and do not use
535 <code>repeat_char</code> for characters past 255.</p>
539 <p>improve wide-character implementation of
540 <code>myADDNSTR</code> in <code>frm_driver.c</code>, which
541 was inconsistent with the normal implementation.</p>
545 <p>modify <code>winnstr</code> and <code>winchnstr</code> to
546 return error if the output pointer is null, as well as adding
547 a null pointer check of the window pointer for better
548 compatibility with other implementations.</p>
552 <p>modify <code>setupterm</code> to save original tty-modes
553 so that <code>erasechar</code> works as expected. Also modify
554 <code>_nc_setupscreen</code> to avoid redundant calls to get
555 original tty-modes.</p>
559 <p>modify <code>wattr_set</code> and <code>wattr_get</code>
560 to return <code>ERR</code> if <em>win</em>-parameter is null,
565 <p>correct order of initialization for traces in
566 <code>use_env</code> and <code>use_tioctl</code> versus first
567 <code>_tracef</code> calls.</p>
571 <p>correct parameters for <code>copywin</code> call in
572 <code>_nc_Synchronize_Attributes</code></p>
576 <p>flush the standard output in <code>_nc_flush</code> for
577 the case where <code>SP</code> is zero, e.g., when called via
578 <code>putp</code>. This fixes a scenario where
579 “tput flash” did not work after changes in
584 <p>amend internal use of <code>tputs</code> to consistently
585 use the number of lines affected, e.g., for insert/delete
586 character operations. While merging terminfo source early in
587 1995, several descriptions used the
588 “<code>*</code>” proportional delay for these
589 operations, prompting a change in <code>doupdate</code>.</p>
593 <p>correct return-value of extended <code>putwin</code>.</p>
597 <p>double-width multibyte characters were not counted
598 properly in <code>winsnstr</code> and
599 <code>wins_nwstr</code>.</p>
603 <p>amend fix for <code>_nc_ripoffline</code> from 20091031 to
604 make <code>test/ditto.c</code> work in threaded
609 <p>modify <code>_nc_viscbuf2</code> and
610 <code>_tracecchar_t2</code> to trace wide-characters as a
611 whole rather than their multibyte equivalents.</p>
615 <p>minor fix in <code>wadd_wchnstr</code> to ensure that each
616 cell has nonzero width.</p>
620 <p>move <code>PUTC_INIT</code> calls next to
621 <code>wcrtomb</code> calls, to avoid carry-over of error
622 status when processing Unicode values which are not
627 <p>add missing assignment in <code>lib_getch.c</code> to make
628 <code>notimeout</code> work</p>
632 <h3><a name="h3-programs" id="h3-programs">Program
633 improvements</a></h3>
635 <p>While reviewing user feedback, it became apparent that the
636 differences between <a href=
637 "https://invisible-island.net/ncurses/man/tset.1.html#h3-reset---reinitialization">
638 <span class="part-name">reset</span></a> (an alias for
639 <span class="part-name">tset</span>) and “<span class=
640 "part-name">tput reset</span>” were confusing:</p>
644 "https://invisible-island.net/ncurses/man/tset.1.html">tset</a>)
645 updated the terminal modes, but used only part of the terminfo
646 capabilities for initialization, while</li>
648 <li>the other (<a href=
649 "https://invisible-island.net/ncurses/man/tput.1.html"><span class="part-name">tput</span></a>)
650 used all of the terminal capabilities while neglecting the
654 <p>On further investigation, it turned out that the differences
655 were largely an accident due to the way those programs had
658 <p>This release eliminates the unnecessary differences, using the
659 same approach for <span class="part-name">tput</span>'s
660 <em>init</em> (initialization), <em>reset</em> and <em>clear</em>
661 operations as the separate <a href=
662 "https://invisible-island.net/ncurses/man/tset.1.html#h3-reset---reinitialization">
663 reset</a> and <a href=
664 "https://invisible-island.net/ncurses/man/clear.1.html"><span class="part-name">
665 clear</span></a> programs. Doing this does not change the
666 command-line options; existing scripts are unaffected.</p>
668 <p>These are the user-visible changes for the three programs
669 (<span class="part-name">tput</span>, <span class=
670 "part-name">tset</span> and <span class=
671 "part-name">clear</span>):</p>
675 <p>add the terminal-mode parts of “<span class=
676 "part-name">reset</span>” (aka <span class=
677 "part-name">tset</span>) to the “<code>tput
678 reset</code>” command, making the two almost the same
679 except for window-size.</p>
683 <p>improve <span class="part-name">tput</span>'s check for
684 being called as “init” or “reset” to
685 allow for transformed names.</p>
689 <p>add “clear” as a possible link/alias to
690 <span class="part-name">tput</span>.</p>
694 <p>amend changes for <span class="part-name">tput</span> to
695 reset tty modes to “sane” if the program is run
696 as “reset”, like <span class=
697 "part-name">tset</span>. Likewise, ensure that <span class=
698 "part-name">tset</span> sends either reset- or
703 <p>add <code>-x</code> option to <span class=
704 "part-name">clear</span>/<span class="part-name">tput</span>
705 to make the <code>E3</code> extension optional</p>
709 <p>add functionality of
710 “<code>tset -w</code>” to <span class=
711 "part-name">tput</span>, like the
712 “<code>-c</code>” feature this is not optional in
713 <span class="part-name">tput</span>.</p>
717 <p>add options <code>-T</code> and <code>-V</code> to
718 <span class="part-name">clear</span> command for
719 compatibility with <span class="part-name">tput</span>.</p>
723 <p>drop long-obsolete “<code>-n</code>” option
724 from <span class="part-name">tset</span>.</p>
728 <p>modify <span class="part-name">tset</span>'s assignment to
729 <code>TERM</code> in its output to reflect the name by which
730 the terminal description is found, rather than the primary
731 name. That was an unnecessary part from the initial
732 conversion of <span class="part-name">tset</span> from
733 termcap to terminfo. The termcap library in 4.3BSD did this
734 to avoid using the short 2-character name</p>
738 <p>remove a restriction in <span class=
739 "part-name">tput</span>'s support for termcap names which
740 omitted capabilities normally not shown in termcap
745 <p>add usage message to <span class="part-name">clear</span>
750 <p>improve usage messages for <span class=
751 "part-name">tset</span> and <span class=
752 "part-name">tput</span>.</p>
756 <p>Other user-visible improvements and new features include:</p>
760 <p>modify <span class="part-name">tic</span>/<span class=
761 "part-name">infocmp</span> display of numeric values to use
762 hexadecimal when they are "close" to a power of two, making
763 the result more readable.</p>
767 <p>add “<code>-W</code>” option to <span class=
768 "part-name">tic</span>/<span class="part-name">infocmp</span>
769 to force long strings to wrap.</p>
773 <p>This is in addition to the
774 “<code>-w</code>” option which attempts to
775 fit capabilities into a given line-length.</p>
779 <p>If “<code>-f</code>” option splits line,
780 do not further split it with
781 “<code>-W</code>”.</p>
785 <p>Begin a new line when adding
786 “<code>use=</code>” after a wrapped line.</p>
792 <p>add “<code>-q</code>” option to <span class=
793 "part-name">infocmp</span> to suppress the
794 “<code>Reconstructed from</code>” comment from
795 the header, and a corresponding option to <span class=
796 "part-name">tic</span> to suppress all comments from the
797 “<code>tic -I</code>” output.</p>
801 <p>Sorted options in usage message for <span class=
802 "part-name">infocmp</span>, to make it simpler to see unused
807 <p>Updated usage message for <span class=
808 "part-name">tic</span>, adding “<code>-0</code>”
813 <p>add <span class="part-name">infocmp</span>/<span class=
814 "part-name">tic</span> “<code>-Q</code>” option,
815 which allows one to dump the compiled form of the terminal
816 entry, in hexadecimal or base64:</p>
819 <li>A “<code>b64:</code>” prefix in the
820 <code>TERMINFO</code> variable tells the terminfo reader to
821 use base64 according to RFC-3548 as well as RFC-4648
822 url/filename-safe format.</li>
824 <li>A “<code>hex:</code>” prefix tells the
825 terminfo reader to accept hexadecimal data as generated by
826 “<code>infocmp -0qQ1</code>”.</li>
831 <p>Other less-visible improvements and new features include:</p>
835 <p>modify utility headers such as <code>tic.h</code> to make
836 it clearer which are externals that are used by <span class=
837 "main-name">tack</span>.</p>
841 <p>add “<code>reset</code>” to list of programs
842 whose names might change in manpages due to
843 program-transformation configure options.</p>
847 <p>modify “<code>-T</code>” option of
848 <span class="part-name">clear</span> and <span class=
849 "part-name">tput</span> to call <code>use_tioctl</code> to
850 obtain the operating system's notion of the screensize if
855 <p>add check in <span class="part-name">tput</span> for
856 init/reset operands to ensure those use a terminal.</p>
860 <p>modify programs <span class="part-name">clear</span>,
861 <span class="part-name">tabs</span>, <span class=
862 "part-name">tput</span> and <span class=
863 "part-name">tset</span> to pass the actual tty file
864 descriptor to setupterm rather than the standard output or
865 error, making padding work.</p>
869 <p>change <span class="part-name">tset</span>'s
870 initialization to allow it to get settings from the standard
871 input as well as <code>/dev/tty</code>, to be more effective
872 when output or error are redirected.</p>
876 <p>amend check in <span class="part-name">tput</span>,
877 <span class="part-name">tabs</span> and <span class=
878 "part-name">clear</span> to allow those to use the
879 database-only features in <span class="part-name">cron</span>
880 if a “<code>-T</code>” option gives a suitable
885 <p>improve error message from <span class=
886 "part-name">tset</span>/<span class="part-name">reset</span>
887 when both stderr/stdout are redirected to a file or pipe.</p>
891 <p>Several of the less apparent features deal with translation of
892 terminfo to termcap (and the reverse), with corresponding checks
893 by <span class="part-name">tic</span>:</p>
897 <p>modify check in <code>fmt_entry</code> to handle a
898 cancelled reset string. Make similar fixes in other parts of
899 <code>dump_entry.c</code> and <code>tput.c</code></p>
903 <p>correct read of terminfo entry in which all strings are
904 absent or explicitly cancelled. Before this fix, the result
905 was that all were treated as only absent.</p>
909 <p>modify <span class="part-name">infocmp</span> to suppress
910 mixture of absent/cancelled capabilities that would only show
911 as “<code>NULL, NULL</code>”, unless the
912 “<code>-q</code>” option is used, e.g., to show
913 “<code>-, @</code>” or “<code>@,
918 <p>correct a warning from <span class="part-name">tic</span>
919 about keys which are the same, to skip over missing/cancelled
924 <p>add check in <span class="part-name">tic</span> for use of
925 bold, etc., video attributes in the color capabilities,
926 accounting whether the feature is listed in
927 <code>ncv</code>.</p>
931 <p>add check in <span class="part-name">tic</span> for
932 unnecessary use of “<code>2</code>” to denote a
933 shifted special key.</p>
937 <p>improve check in <span class="part-name">tic</span> for
938 delays by also warning about beep/flash when a delay is not
939 embedded, or if those use the VT100 reverse video escape
940 without using a delay.</p>
944 <p>improve checks in <code>trim_sgr0</code>, comp_parse.c and
945 parse_entry.c, for cancelled string capabilities.</p>
949 <p>add check in <span class="part-name">tic</span> for some
950 syntax errors of delays, as well as use of proportional
951 delays for non-line capabilities.</p>
955 <p>add check in <span class="part-name">tic</span> for
956 conflict between <code>ritm</code>, <code>rmso</code>,
957 <code>rmul</code> versus <code>sgr0</code>.</p>
961 <p>add check in <code>_nc_parse_entry</code> for invalid
962 entry name, setting the name to
963 “<code>invalid</code>” to avoid problems storing
968 <p>improve <code>_nc_tparm_analyze</code>, using that to
969 extend the checks made by <span class="part-name">tic</span>
970 for reporting inconsistencies between the expected number of
971 parameters for a capability and the actual.</p>
975 <p>remove <span class="part-name">tic</span> warning about
976 “<code>^?</code>” in string capabilities, which
977 was marked as an extension; however all Unix implementations
978 support this and X/Open Curses does not address it. On the
980 "https://invisible-island.net/ncurses/tctest.html#bsd42-ctl-question">
981 BSD termcap</a> did not support this feature (until the
983 "https://invisible-island.net/ncurses/tctest.html#freebsd-ctl-question">
986 <p>in <code>_nc_infotocap</code>, added a check to ensure
987 that terminfo “<code>^?</code>” is not written to
992 <p>modify <code>sscanf</code> calls in
993 <code>_nc_infotocap</code> for patterns
994 “<code>%{number}%+%c</code>” and
995 “<code>%'char'%+%c</code>” to check that the
996 final character is really “<code>c</code>”,
997 avoiding a case in icl6404 which cannot be converted to
1002 <p>in <code>_nc_tic_expand</code> and
1003 <code>_nc_infotocap</code>, improved string-length check when
1004 deciding whether to use “<code>^X</code>” or
1005 “<code>\xxx</code>” format for control
1006 characters, to make the output of <span class=
1007 "part-name">tic</span>/<span class="part-name">infocmp</span>
1008 more predictable.</p>
1012 <p>limited termcap “<code>%d</code>” width to 2
1013 digits on input, and use “<code>%2</code>” in
1014 preference to “<code>%02</code>” on output.</p>
1018 <p>correct terminfo/termcap conversion of
1019 “<code>%02</code>” and
1020 “<code>%03</code>” into
1021 “<code>%2</code>” and
1022 “<code>%3</code>”; the result repeated the last
1027 <h4><a name="h4-examples" id="h4-examples">Examples</a></h4>
1029 <p>Along with the library and utilities, many improvements were
1030 made to the <a href=
1031 "https://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>.</p>
1033 <p>These changes were made to demonstrate new extensions in
1034 <span class="main-name">ncurses</span>:</p>
1038 <p>add <span class="part-name">demo_new_pair</span> program,
1039 to demonstrate <a href=
1040 "https://invisible-island.net/ncurses/man/new_pair.3x.html#h3-alloc_pair">
1041 <code>alloc_pair</code></a>, <a href=
1042 "https://invisible-island.net/ncurses/man/new_pair.3x.html#h3-find_pair">
1043 <code>find_pair</code></a> and <a href=
1044 "https://invisible-island.net/ncurses/man/new_pair.3x.html#h3-free_pair">
1045 <code>free_pair</code></a> functions.</p>
1047 <p>This program iterates over the possible color
1048 combinations, allocating or initializing color pairs. For
1049 best results, choose screen-width dividing evenly into the
1050 number of colors. e.g.,</p>
1053 <table summary="sample layouts for demo_new_pair">
1055 <td><code>32x64,32x128</code> </td>
1061 <td><code>24x44,24x88</code></td>
1067 <td><code>32x64,24x128</code></td>
1076 <p>add <span class="part-name">extended_color</span> program,
1077 like the older <span class="part-name">color_set</span>
1078 program, but using the extended color functions, with and
1079 without the SP-functions interface.</p>
1083 <p>add <span class="part-name">picsmap</span> program to fill
1084 in some testing issues not met by <span class=
1085 "part-name">dots</span>, using this as the third example in a
1086 comparison of the <a href=
1087 "https://invisible-island.net/ncurses/ncurses-slang.html#compare_picsmap">
1088 ncurses versus slang</a> libraries.</p>
1090 <p>The program can directly read X bitmap and pixmap files,
1091 displaying a picture. It can read other image files using
1092 <span class="part-name">ImageMagick</span>'s <span class=
1093 "part-name">convert</span> program to translate the image
1096 <p>For 16-, 88- and 256-color terminal descriptions,
1097 <span class="part-name">picsmap</span> can load a palette
1098 file which tells it which color palette entries to use. For
1099 direct-colors, the terminal descriptions use the
1100 <code>RGB</code> extension capability.</p>
1104 <p>There are other new example programs and a few scripts:</p>
1108 <p>add <span class="part-name">dots_xcurses</span> program to
1109 illustrate a different approach used for extended colors
1110 which can be contrasted with <span class=
1111 "part-name">dots_curses</span>.</p>
1115 <p>add <span class="part-name">list_keys</span> program show
1116 function keys for one or more terminal descriptions. It uses
1117 <span class="main-name">ncurses'</span>s convention of
1118 modifiers for special keys, based on xterm.</p>
1122 <p>add <span class="part-name">padview</span> program, to
1123 compare pads with direct updates in the <span class=
1124 "part-name">view</span> program.</p>
1128 <p>add <span class="part-name">sp_tinfo</span> program to
1129 exercise the SP-functions extension of the low-level terminfo
1134 <p>add test-programs for <code>termattrs</code> and
1135 <code>term_attrs</code> functions.</p>
1139 <p>add <span class="part-name">test_sgr</span> program to
1140 exercise all combinations of the sgr capability.</p>
1144 <p>add <span class="part-name">tput-colorcube</span> demo
1145 script, imitating xterm's 88- and 256-color scripts using
1146 <span class="part-name">tput</span>.</p>
1150 <p>add <span class="part-name">tput-initc</span> script to
1151 demonstrate how <span class="part-name">tput</span> may be
1152 used to initialize a color palette from a data file.</p>
1156 <p>A variety of improvements were made to existing programs, both
1157 new features as well as options added to make the set of programs
1158 more consistent.</p>
1160 <p>The <span class="part-name">ncurses</span> program is the
1161 largest; a proportionately large number of changes were made to
1166 <p>modify a/A screens to make exiting on an escape character
1167 depend on the start of keypad and timeout modes, to allow
1168 better testing of function-keys.</p>
1170 <p>add “<code>t</code>” toggle for
1171 <code>notimeout</code> function.</p>
1175 <p>modify layout of b/B screens to allow for additional
1176 annotation on the right margin; some terminals with partial
1177 support did not display well.</p>
1181 <p>modify c/C screens to allow for extended color pairs.</p>
1183 <p>add z/Z <em>zoom</em> feature to make extended color pairs
1186 <p>modify test-screens to take advantage of wide screens,
1187 reducing the number of lines used for 88- and 256-colors.</p>
1191 <p>modify “<code>d</code>” edit-color screen to
1192 optionally read xterm color palette directly from terminal,
1193 as well as handling <code>KEY_RESIZE</code> and
1194 screen-repainting with control/L and control/R.</p>
1198 <p>add examples to “<code>F</code>” screen for
1199 <code>WACS_D_PLUS</code> and <code>WACS_T_PLUS</code>.</p>
1203 <p>improve “<code>g</code>” screen, correcting
1204 ifdef which made the legend not reflect changes to keypad-
1205 and scroll-modes. Added check for return-value of
1206 <code>putwin</code>.</p>
1210 <p>make “<code>s</code>” test easier to
1211 understand which subtests are available</p>
1213 <p>add a corresponding “<code>S</code>”
1214 wide-character overlap test-screen.</p>
1218 <p>add “<code>v</code>” screen to show
1219 <code>baudrate</code> and other values.</p>
1223 <p>These changes were made to the other examples:</p>
1227 <p>modify <span class="part-name">blue</span> program to use
1228 Unicode values for card-glyphs when available, as well as
1229 improving the check for CP437 and CP850.</p>
1233 <p>improve <span class="part-name">demo_menus</span> program,
1234 allowing mouse-click on the menu-headers to switch the active
1235 menu. This requires a new extension option
1236 <code>O_MOUSE_MENU</code> to tell the menu driver to put
1237 mouse events which do not apply to the active menu back into
1238 the queue so that the application can handle the event.</p>
1242 <p>correct logic in <span class=
1243 "part-name">demo_terminfo</span> program for
1244 “<code>-f</code>” option</p>
1248 <p>modify <span class="part-name">ditto</span> program to
1249 allow <code>$XTERM_PROG</code> environment variable to
1250 override "xterm" as the name of the program to run in the
1251 threaded configuration.</p>
1255 <p>add several options to the “<em>dots</em>”
1260 <p>modify <span class="part-name">filter</span> program:</p>
1263 <li>illustrate an alternative to <code>getnstr</code>, that
1264 polls for input while updating a clock on the right margin
1265 as well as responding to window size-changes.</li>
1267 <li>adapt logic used in <a href=
1268 "https://invisible-island.net/dialog/"><span class=
1269 "main-name">dialog</span></a> <a href=
1270 "https://invisible-island.net/dialog/manpage/dialog.html#h3-Common-Options">
1271 “<code>--keep-tite</code>” option</a> for
1272 <span class="part-name">filter</span> program as the "-a"
1273 option. When set, <span class="part-name">filter</span>
1274 attempts to suppress the alternate screen.</li>
1279 <p>modify <span class="part-name">knight</span> program to
1280 provide the "slow" solution for small screens using
1281 “<code>R</code>”, noting that Warnsdorf's method
1282 is easily done with “<code>a</code>”.</p>
1286 <p>modify the <span class="part-name">savescreen</span>
1287 program to add test patterns that exercise 88-, 256-, etc.,
1292 <p>add options to <span class="part-name">test_arrays</span>,
1293 for selecting termcap vs terminfo, etc.</p>
1297 <p>modify the <span class="part-name">view</span>
1301 <li>expand tabs using the ncurses library rather than in
1302 the test-program.</li>
1304 <li>eliminate the “<code>-n</code>” option by
1305 simply reading the whole file.</li>
1307 <li>implement page up/down commands.</li>
1309 <li>remove the very old <code>SIGWINCH</code> example; just
1310 use <code>KEY_RESIZE</code>.</li>
1315 <p>improve animation in <span class="part-name">xmas</span>
1316 program by adding a time-delay in <code>blinkit</code>.</p>
1320 <p>modify several test-programs which call
1321 <code>use_default_colors</code> to consistently do this only
1322 if the “<code>-d</code>” option is given.</p>
1326 <p>modify the install-rule for ncurses-examples to put the
1327 data files in the data directory, e.g.,
1328 <code>/usr/share/ncurses-examples</code>.</p>
1332 <p>modify several test programs to use new
1333 <code>popup_msgs</code> function, adapted from the
1334 help-screen used in the <code>edit_field</code> program.</p>
1338 <p>modify test data for xterm palettes to use the newer
1339 color4/color12 values.</p>
1343 <p>improve the <span class="part-name">tracemunch</span>
1347 <li>show screenXX pointers and thread identifiers as
1350 <li>chang address-parameters of <code>add_wch</code>,
1351 <code>color_content</code> and <code>pair_content</code> to
1352 dummy parameters.</li>
1357 <h3><a name="h3-database" id="h3-database">Terminal
1360 <p>There are several new terminal descriptions:</p>
1363 <p><code>dumb-emacs-ansi</code>, <code>dvtm</code>,
1364 <code>dvtm-256color</code>, <code>fbterm</code>,
1365 <code>iterm2</code>, <code>linux-m1</code> <em>minitel
1366 entries</em>, <code>putty-noapp</code>, <code>viewdata</code>,
1367 and <code>vt100+4bsd</code> <em>building-block</em>.</p>
1369 <p><code>xterm+noalt</code>, <code>xterm+titlestack</code>,
1370 <code>xterm+alt1049</code>, <code>xterm+alt+title</code>
1371 <em>building blocks</em> and <code>xterm+direct</code>,
1372 <code>xterm+indirect</code>, <code>xterm-direct</code>. from
1374 "https://invisible-island.net/xterm/xterm.log.html#xterm_331">xterm
1377 <p>several other “<code>-direct</code>”
1378 descriptions to address the differences of other terminal
1379 emulators versus <code>xterm-direct</code>.</p>
1382 <p>There are many changes to existing terminal descriptions. Some
1383 were updates to several descriptions:</p>
1386 <li>use <code>xterm+sm+1006</code> in several terminal
1387 descriptions which were validated as supporting the extended
1388 mouse feature for their respective terminal emulators.</li>
1390 <li>corrected <em>sgr</em>/<em>sgr0</em> strings in a few cases
1391 reported by <span class="part-name">tic</span>, making those
1392 correspond to the non-<em>sgr</em> settings where they differ,
1393 but otherwise use ECMA-48 consistently.</li>
1395 <li>add 0.1sec mandatory delay to <em>flash</em> capabilities
1396 using the VT100 reverse-video control</li>
1399 <p>while others affected specific descriptions. These were
1400 retested, to take into account new/undocumented changes by their
1404 <p><code>iterm</code>, <code>minitel</code>, <code>st</code>,
1405 <code>viewdata</code>, <code>nsterm</code></p>
1408 <p>while these are specific fixes based on user reports, or
1409 warnings from <span class="part-name">tic</span>:</p>
1413 "https://invisible-island.net/ncurses/terminfo.src.html#toc-_A_N_S_I__S_Y_S__I_S_O_6429__E_C_M_A-48__Capabilities">
1414 <code>ansi</code> <em>building blocks</em></a></dt>
1418 <li>restored <em>rmir</em>/<em>smir</em> in
1419 <code>ansi+idc</code> to better match original
1420 <code>ansiterm+idc</code>, add alias
1421 <code>ansiterm</code></li>
1426 "https://invisible-island.net/ncurses/terminfo.src.html#tic-icl6404">
1427 <code>icl6402</code></a></dt>
1431 <li>corrected missing comma-separator between string
1432 capabilities in <code>icl6402</code> and
1433 <code>m2-nam</code></li>
1438 "https://invisible-island.net/ncurses/terminfo.src.html#tic-interix">
1439 <code>interix</code></a></dt>
1443 <li>updated using <span class="main-name">tack</span> and
1444 SFU with Windows 7 Ultimate.</li>
1446 <li>used <code>^?</code> for <em>kdch1</em></li>
1451 "https://invisible-island.net/ncurses/terminfo.src.html#toc-_Linux_consoles">
1452 <code>linux</code></a></dt>
1456 <li>made <code>linux3.0</code> entry the default
1457 <strong><code>linux</code></strong> entry</li>
1459 <li>modify <code>linux2.6</code> entry to improve
1460 line-drawing so that the <code>linux3.0</code> entry can be
1461 used in non-UTF-8 mode</li>
1463 <li>omitted selection of ISO-8859-1 for G0 in enacs
1464 capability from linux2.6 entry, to avoid conflict with the
1465 user-defined mapping. The reset feature uses ISO-8859-1 in
1468 <li>modify <em>flash</em> capability for <code>linux</code>
1469 and <code>wyse</code> entries to put the delay between the
1470 reverse/normal escapes rather than after</li>
1472 <li>modify <code>linux-16color</code> to not mask dim,
1473 standout or reverse with the <em>ncv</em> capability</li>
1478 "https://invisible-island.net/ncurses/terminfo.src.html#toc-_Open_B_S_D_consoles">
1479 <code>pccon</code> <em>entries</em></a></dt>
1483 <li>fixed some inconsistencies in the
1484 <code><em>pccon*</em></code> entries</li>
1486 <li>add bold to <code>pccon+sgr+acs</code> and
1487 <code>pccon-base</code></li>
1489 <li>add keys f12-f124 to <code>pccon+keys</code></li>
1494 "https://invisible-island.net/ncurses/terminfo.src.html#toc-_Tmux">
1495 <code>tmux</code></a></dt>
1499 <li>corrected <em>sgr</em> string, which used
1500 <code>screen</code>'s "standout" code rather than the
1503 <li>add settings corresponding to <code>xterm-keys</code>
1504 option to reflect upcoming change to make that option
1505 <em>"on"</em> by default</li>
1507 <li>uncanceled <em>Ms</em></li>
1512 "https://invisible-island.net/ncurses/terminfo.src.html#toc-_D_E_C__V_T100_and_compatibles">
1513 <code>vt100</code></a></dt>
1517 <li>modify <code>vt100</code> <em>rs2</em> string to reset
1518 vt52 mode and scrolling regions</li>
1520 <li>corrected <em>rs2</em> string for
1521 <code>vt100-nam</code></li>
1523 <li>made minor fixes for <code>vt100+4bsd</code>, e.g.,
1524 delay in <em>sgr</em> for consistency</li>
1529 "https://invisible-island.net/ncurses/terminfo.src.html#toc-_G_N_O_M_E__V_T_E_">
1530 <code>vte</code></a></dt>
1534 <li>moved SGR 24 and 27 from <code>vte-2014</code> to
1535 <code>vte-2012</code></li>
1537 <li>add a few capabilities fixed in recent <em>VTE</em>
1543 "https://invisible-island.net/ncurses/terminfo.src.html#toc-_X_T_E_R_M">
1544 <code>xterm</code></a></dt>
1548 <li>add <em>rep</em> to <code>xterm-new</code>, available
1550 "https://invisible-island.net/xterm/xterm.log.html#xterm_32">
1553 <li>modify <code>xterm+256color</code> and
1554 <code>xterm+256setaf</code> to use correct number of color
1557 <li>modify <em>rs1</em> for <code>xterm-16color</code>,
1558 <code>xterm-88color</code> and <code>xterm-256color</code>
1559 to reset palette using <em>oc</em> string as in
1560 <code>linux</code> entry.</li>
1562 <li>add <em>rs1</em> capability to
1563 <code>xterm-256color</code></li>
1565 <li>add <em>oc</em> capability to
1566 <code>xterm+256color</code>, allowing palette reset for
1567 <span class="main-name">xterm</span></li>
1569 <li>add <em>op</em> to <code>xterm+256setaf</code></li>
1571 <li>modify <code>xterm-r5</code>, <code>xterm-r6</code> and
1572 <code>xterm-xf86-v32</code> to use <code>xterm+kbs</code>
1574 "https://invisible-island.net/xterm/xterm.log.html#xterm_272">
1575 xterm #272</a>, reflecting packager's changes</li>
1577 <li>used ANSI reply for <em>u8</em> in
1578 <code>xterm-new</code>, to reflect vt220-style responses
1579 that could be returned.</li>
1581 <li>made <code>xterm-pcolor</code> <em>sgr</em> consistent
1582 with other capabilities</li>
1587 <p>A few entries use extensions (user-defined terminal
1591 <li>add <em>rmxx</em>/<em>smxx</em> ECMA-48 strikeout extension
1592 to <code>tmux</code> and <code>xterm-basic</code></li>
1594 <li>used <em>RGB</em> capability in new <em>*-direct</em>
1595 entries to denote direct-color feature.</li>
1598 <h3><a name="h3-documentation" id=
1599 "h3-documentation">Documentation</a></h3>
1601 <p>As usual, this release</p>
1605 <p>improves documentation by describing new features,</p>
1609 <p>attempts to improve the description of features which
1610 users have found confusing</p>
1614 <p>fills in overlooked descriptions of features which were
1615 described in the <a href=
1616 "https://invisible-island.net/ncurses/NEWS.html">NEWS</a>
1617 file but treated sketchily in manual pages.</p>
1621 <p>In particular,</p>
1625 <p>Since the underlying features for <a href=
1626 "https://invisible-island.net/ncurses/man/clear.1.html#h2-HISTORY">
1627 <span class="part-name">tset</span></a>, <a href=
1628 "https://invisible-island.net/ncurses/man/clear.1.html#h2-HISTORY">
1629 <span class="part-name">tput</span></a>, and <a href=
1630 "https://invisible-island.net/ncurses/man/clear.1.html#h2-HISTORY">
1631 <span class="part-name">clear</span></a> have been better
1632 integrated, the documentation now includes information on how
1633 those tools evolved.</p>
1635 <p>In addition to explaining the improved integration of the
1636 tools, the manual pages made it easier to see how the tools
1637 are similar and how they are different.</p>
1641 <p>The <code>addch</code> manual page has additional
1642 information on <a href=
1643 "https://invisible-island.net/ncurses/man/curs_addch.3x.html#h2-PORTABILITY">
1644 portability</a> and differences from other
1645 implementations.</p>
1649 <p>The discussion of color-pairs in the <em>attributes</em>
1650 manual page is improved in its <a href=
1651 "https://invisible-island.net/ncurses/man/curs_attr.3x.html#h2-HISTORY">
1652 history section</a>.</p>
1656 <p>The documentation of the <code>chtype</code>,
1657 <code>cchar_t</code> types and the attribute values which can
1658 be stored in those types, in particular the <a href=
1659 "https://invisible-island.net/ncurses/man/curs_attr.3x.html#h2-HISTORY">
1660 history</a> and <a href=
1661 "https://invisible-island.net/ncurses/man/curs_attr.3x.html#h2-PORTABILITY">
1662 portability</a> sections of the <em>attributes</em> manual
1663 page, has been improved.</p>
1667 <p>improve discussion of <a href=
1668 "https://invisible-island.net/ncurses/man/curs_mouse.3x.html#h2-PORTABILITY">
1669 portability</a> in the <em>mouse</em> manual.</p>
1673 <p>The <em>pad</em> manual page has a section on the <a href=
1674 "https://invisible-island.net/ncurses/man/curs_pad.3x.html#h2-PORTABILITY">
1675 origin and portability</a> of pads.</p>
1679 <p>Differences between SVr4 and X/Open Curses soft-keys are
1680 discussed in a new section on <a href=
1681 "https://invisible-island.net/ncurses/man/curs_slk.3x.html#h2-PORTABILITY">
1682 portability</a>.</p>
1686 <p>There are updated/improved notes on portability in the
1688 "https://invisible-island.net/ncurses/man/resizeterm.3x.html#h2-PORTABILITY">
1689 resizeterm</a> and <a href=
1690 "https://invisible-island.net/ncurses/man/wresize.3x.html#h2-PORTABILITY">
1691 wresize</a> manual pages.</p>
1695 <p>In addition to providing background information to explain
1696 these features and show how they evolved, there are corrections,
1697 clarifications, etc.:</p>
1701 <p>add note in the <a href=
1702 "https://invisible-island.net/ncurses/man/curs_addch.3x.html#h3-ACS-Symbols">
1703 <em>addch</em></a> manual about line-drawing when it depends
1708 <p>improve discussion of line-drawing characters in the
1710 "https://invisible-island.net/ncurses/man/curs_add_wch.3x.html">
1711 <em>add_wch</em></a> manual.</p>
1715 <p>explain in <a href=
1716 "https://invisible-island.net/ncurses/man/clear.1.html#h2-DESCRIPTION">
1717 <span class="part-name">clear</span></a>'s manual page that
1718 it writes to the standard output.</p>
1722 <p>improve description of <a href=
1723 "https://invisible-island.net/ncurses/man/curs_initscr.3x.html#h3-endwin">
1724 <em>endwin</em></a>.</p>
1728 <p>improve discussion of field validation in the <a href=
1729 "https://invisible-island.net/ncurses/man/form_driver.3x.html">
1730 <em>form driver</em></a> manual page.</p>
1734 <p>clarify the use of <code>wint_t</code> vs
1735 <code>wchar_t</code> in <a href=
1736 "https://invisible-island.net/ncurses/man/curs_get_wstr.3x.html#h2-RETURN-VALUE">
1737 <em>get_wstr</em></a> manual page.</p>
1741 <p>clarify in the <a href=
1742 "https://invisible-island.net/ncurses/man/curs_getch.3x.html#h3-Predefined-key-codes">
1743 <em>getch</em></a> manual that the keypad mode affects an
1744 application's ability to read <code>KEY_MOUSE</code> codes,
1745 but does not affect <code>KEY_RESIZE</code>.</p>
1747 <p>trim some obsolete/incorrect wording about
1748 <code>EINTR</code> from the <em>getch</em> manual page</p>
1750 <p>improve manual pages for <a href=
1751 "https://invisible-island.net/ncurses/man/curs_getch.3x.html#h3-Keypad-Mode">
1752 <em>getch</em></a> and <a href=
1753 "https://invisible-island.net/ncurses/man/curs_get_wch.3x.html#h2-DESCRIPTION">
1754 <em>get_wch</em></a> to point out that they might return
1755 user-defined values which have no predefined names in
1756 <code><curses.h></code></p>
1760 <p>improve description of the <code>-R</code> option in the
1762 "https://invisible-island.net/ncurses/man/infocmp.1m.html"><span class="part-name">
1763 infocmp</span></a> manual page</p>
1767 <p>clarify in the <a href=
1768 "https://invisible-island.net/ncurses/man/resizeterm.3x.html#h2-NOTES">
1769 <em>resizeterm</em></a> manual page how
1770 <code>KEY_RESIZE</code> is pushed onto the input stream.</p>
1774 <p>document return value of <a href=
1775 "https://invisible-island.net/ncurses/man/curs_extend.3x#h2-RETURN-VALUE">
1776 <code>use_extended_names</code></a></p>
1780 <p>document differences in <a href=
1781 "https://invisible-island.net/ncurses/man/curs_variables.3x.html#h2-PORTABILITY">
1782 <code>ESCDELAY</code></a> versus AIX's implementation in the
1783 <em>variables</em> manual page.</p>
1787 <p>The <code>_nc_free_tinfo</code> function is now documented
1789 "https://invisible-island.net/ncurses/man/curs_memleaks.3x.html">
1790 <em>memory-leaks</em></a> manual page, because it could be
1791 used in <span class="main-name">tack</span> for memory-leak
1796 <p>add a note to the <a href=
1797 "https://invisible-island.net/ncurses/man/tic.1m.html"><span class="part-name">
1798 tic</span></a> manual page about -W versus -f options.</p>
1802 <p>improve <em>terminfo manual</em> description of <a href=
1803 "https://invisible-island.net/ncurses/man/terminfo.5.html#h3-Terminfo-Capabilities-Syntax">
1804 terminfo syntax</a>.</p>
1806 <p>improve terminfo manual page discussion of <a href=
1807 "https://invisible-island.net/ncurses/man/terminfo.5.html#h3-Line-Graphics">
1808 control- and graphics- characters</a>.</p>
1811 "https://invisible-island.net/ncurses/man/terminfo.5.html#h3-Color-Handling">
1812 color-handling</a> section in terminfo manual page</p>
1816 <p>clarify description in <a href=
1817 "https://invisible-island.net/ncurses/man/tput.1.html#h2-PORTABILITY">
1818 <span class="part-name">tput</span></a> manual page regarding
1819 support for termcap names</p>
1822 "https://invisible-island.net/ncurses/man/tput.1.html#h3-Aliases">
1823 <span class="part-name">tput</span></a> manual page to
1824 reflect changes to manipulate terminal modes by sharing
1825 functions with <span class="part-name">tset</span>.</p>
1829 <p>clarify in manual pages that the optional verbose option
1831 "https://invisible-island.net/ncurses/man/tic.1m.html#h2-OPTIONS">
1832 <span class="part-name">tic</span></a> and <a href=
1833 "https://invisible-island.net/ncurses/man/infocmp.1m.html#h3-Other-Options">
1834 <span class="part-name">infocmp</span></a> is available only
1835 when <span class="main-name">ncurses</span> is configured for
1840 <p>improve manual page description of <a href=
1841 "https://invisible-island.net/ncurses/man/tset.1.html"><em>tset/reset</em></a>
1842 versus window-size.</p>
1846 <p>improve description of <a href=
1847 "https://invisible-island.net/ncurses/man/curs_termcap.3x.html#h3-FORMATTING-CAPABILITIES">
1848 <em>tgoto</em></a> parameters</p>
1852 <p>There are new manual pages:</p>
1856 "https://invisible-island.net/ncurses/man/user_caps.5.html"><em>
1857 user_caps</em></a> documents the terminfo extensions used by
1858 <span class="main-name">ncurses</span>.</li>
1862 "https://invisible-island.net/ncurses/man/scr_dump.5.html"><em>
1863 scr_dump</em></a> documents the screen-dump format.</p>
1867 <p>Some of the improvements are more subtle, relating to the way
1868 the information is presented:</p>
1872 <p>Made minor fixes to manpage <em>NAME/SYNOPSIS</em>
1873 sections to consistently use rule that either all functions
1874 which are prototyped in <em>SYNOPSIS</em> are listed in the
1875 <em>NAME</em> section, or the manual-page name is the sole
1876 item listed in the <em>NAME</em> section. The latter is used
1877 to reduce clutter, e.g., for the top-level library manual
1878 pages as well as for certain feature-pages such as <a href=
1879 "https://invisible-island.net/ncurses/man/curs_sp_funcs.3x.html">
1880 <em>SP-funcs</em></a> and <a href=
1881 "https://invisible-island.net/ncurses/man/curs_threads.3x.html">
1882 <em>threading</em></a>.</p>
1886 <p>improve manual pages for utilities with respect to POSIX
1887 versus X/Open Curses.</p>
1891 <p>improve organization of the <a href=
1892 "https://invisible-island.net/ncurses/man/curs_attr.3x.html"><em>
1893 attributes</em></a> and <a href=
1894 "/ncurses/man/curs_color.3x.html"><em>color</em></a> manual
1899 <h3><a name="h3-bug-fixes" id="h3-bug-fixes">Interesting
1904 <p>modify <span class="part-name">toe</span> to not exit if
1905 unable to read a terminal description, e.g., if there is a
1906 permission problem.</p>
1910 <p>correct 20100515 change for weak signals versus
1914 <li>work around Ada tool-breakage in Debian 9 and later by
1915 invoking <code>gprconfig</code> to specify the C compiler to be
1916 used by <code>gnatmake</code>, and conditionally suppressing
1917 <code>Library_Options</code> line for static libraries.</li>
1920 <p>There were, as well, several bug-fixes to handle illegal
1921 input for <span class="part-name">tic</span>. Because those
1922 did not correspond to useful terminal descriptions, most
1923 users are unaffected.</p>
1927 <h3><a name="h3-config-config" id=
1928 "h3-config-config">Configuration changes</a></h3>
1930 <h4><a name="h4-config-major" id="h4-config-major">Major
1933 <p>This release provides a new binary format for terminal
1934 descriptions that use extended numeric capabilities. Applications
1935 built with the wide-character <em>ncursesw</em> library can use
1936 these extended numbers.</p>
1940 <p>This includes utilities such as <span class=
1941 "part-name">tic</span> and <span class=
1942 "part-name">infocmp</span>, because (as noted in <a href=
1943 "#h4-new-library"><em>New features</em></a>), the feature
1944 relies upon an extension to the low-level <em>tinfo</em>
1949 <p>A few software packagers use a configuration option of
1950 <span class="main-name">ncurses</span> which allows the
1951 low-level <em>tinfo</em> library to be shared between the
1952 high-level <em>ncurses</em> and <em>ncursesw</em> libraries.
1953 This new feature was designed to work in that configuration
1958 <p>Other applications (i.e., using the 8-bit <em>ncurses</em>
1959 library) which read the extended terminal descriptions see those
1960 numeric capabilities set to the maximum value for a signed 16-bit
1963 <p>Older versions of <span class="main-name">ncurses</span>'
1964 <span class="part-name">tic</span> accept out-of-range numeric
1965 capabilities, storing those as the maximum value for a signed
1966 16-bit number. Other implementations of curses (mentioned in the
1967 discussion of <a href=
1968 "https://invisible-island.net/ncurses/ncurses-slang.html#compare_picsmap">
1969 <span class="part-name">picsmap</span></a>) give zero for these
1970 out-of-range capabilities.</p>
1972 <h4><a name="h4-config-options" id=
1973 "h4-config-options">Configuration options</a></h4>
1975 <p>These changes provide support for <span class=
1976 "main-name">tack</span> 1.08, released in <a href=
1977 "https://invisible-island.net/ncurses/tack/CHANGES.html#index-t20170726">
1982 <p>add <code>--without-tack</code> configure option to refine
1983 <code>--with-progs</code> configure option. Normally
1984 <span class="main-name">tack</span> is built outside the
1985 <span class="main-name">ncurses</span> tree, but a few
1986 packagers combine it during the build. If
1987 <code>term_entry.h</code> is installed, there is no advantage
1988 to in-tree builds.</p>
1992 <p>adjust configure-script to define
1993 <code>HAVE_CURSES_DATA_BOOLNAMES</code> symbol needed for
1994 <span class="main-name">tack</span> 1.08 when built in-tree.
1995 Rather than relying upon internal "_nc_" functions,
1996 <span class="main-name">tack</span> now uses the boolean,
1997 number and string capability name-arrays provided by
1998 <span class="main-name">ncurses</span> and SVr4 Unix curses.
1999 It still uses <code>term_entry.h</code> for the definitions
2000 of the extended capability arrays.</p>
2004 <p>add dependency upon ncurses_cfg.h to <span class=
2005 "part-name">tic</span>'s header-files; any program using
2006 <span class="part-name">tic</span>-library will have to
2007 supply this file. Legacy <span class="main-name">tack</span>
2008 versions supply this file; ongoing <span class=
2009 "main-name">tack</span> development has dropped the
2010 dependency upon <span class="part-name">tic</span>-library
2011 and new releases will not be affected.</p>
2015 <p>Other changes to the configure-script and generated files
2020 <p>add configure options to disable checks for form, menu and
2021 panel libraries so that ncurses-examples can be built with
2022 non-SVr4 curses implementations.</p>
2026 <p>add configure option <code>--enable-opaque-curses</code>
2027 for <em>ncurses</em> library and similar options for the
2028 other libraries.</p>
2032 <p>add configure option <code>--disable-wattr-macros</code>
2033 for use in cases where one wants to use the same headers for
2034 ncurses5/ncurses6 development, by suppressing the
2035 <em>wattr*</em> macros which differ due to the introduction
2036 of extended colors</p>
2040 <p>modify configure macro for shared-library rules to use
2041 <code>-Wl,-rpath</code> rather than <code>-rpath</code> to
2042 work around a bug in <span class="part-name">scons</span></p>
2046 <p>improve ncurses-examples' configure script to define as
2047 needed <code>NCURSES_WIDECHAR</code> for platforms where
2048 <code>_XOPEN_SOURCE_EXTENDED</code> does not work. Also
2049 modified the test program to ensure that if building with
2050 <span class="main-name">ncurses</span>, that the
2051 <code>cchar_t</code> type is checked, since that is normally
2053 "https://invisible-island.net/ncurses/NEWS.html#t20111030">20111030</a>)
2054 ifdef'd depending on this test.</p>
2058 <p>modify configure script to handle the case where
2059 <span class="part-name">tic</span>-library is renamed, but
2060 the <code>--with-debug</code> option is used by itself
2061 without normal or shared libraries</p>
2065 <p>modify editing script which generates resulting.map to
2066 work with the clang configuration on recent FreeBSD, which
2067 gives an error on an empty "local" section.</p>
2071 <p>improve configure check for setting the
2072 <code>WILDCARD_SYMS</code> variable; on ppc64 the variable is
2073 in the <strong><em>Data</em></strong> section rather than
2074 <strong><em>Text</em></strong>.</p>
2078 <p>correct result of configure option
2079 <code>--without-fallbacks</code>, which caused FALLBACK_LIST
2080 to be set to "no"</p>
2084 <p>modify <code>--with-pkg-config-libdir</code> option to
2085 make it possible to install “.pc” files even if
2086 <span class="part-name">pkg-config</span> is not found. Limit
2087 this change, to suppress the actual install if it is not
2088 overridden to a valid directory at install time.</p>
2092 <p>disallow “no” as a possible value for
2093 <code>--with-shlib-version</code> option, overlooked in
2094 cleanup-changes for <a href=
2095 "https://invisible-island.net/ncurses/NEWS.html#t20000708">20000708</a>.</p>
2099 <h3><a name="h3-portability" id=
2100 "h3-portability">Portability</a></h3>
2102 <p>Many of the portability changes are implemented via the
2103 configure script:</p>
2107 <p>improve configure script's <code>CF_CC_ENV_FLAGS</code>
2108 macro to allow for compiler wrappers such as <span class=
2109 "part-name">ccache</span>. This change moves only the
2110 preprocessor, optimization and warning flags to
2111 <code>CPPFLAGS</code> and <code>CFLAGS</code>, leaving the
2112 residue in <code>CC</code>. That happens to work for
2113 <span class="part-name">gcc</span>'s various
2114 “model” options, but may require tuning for other
2119 <p>modify ncurses-examples' configure script to use
2120 <span class="part-name">pkg-config</span> for the extra
2121 form/menu/panel libraries, to be more consistent with the
2122 handling of the curses/ncurses library.</p>
2126 <p>add configuration checks to build with <a href=
2127 "https://invisible-island.net/ncurses/ncurses-netbsd.html">NetBSD
2128 curses</a>, which for example lacks <a href=
2129 "https://invisible-island.net/ncurses/man/curs_util.3x.html#h3-use_env">
2130 <code>use_env</code></a>.</p>
2134 <p>change ncurses-examples to use <code>attr_t</code> vs
2135 <code>chtype</code> to follow X/Open documentation more
2136 closely since Solaris xpg4-curses uses different values for
2137 <code>WA_<em>xxx</em></code> vs <code>A_<em>xxx</em></code>
2138 that rely on attr_t being an unsigned short. Tru64 aka OSF1,
2139 HPUX, AIX did as <span class="main-name">ncurses</span> does,
2140 equating the two sets.</p>
2144 <p>modify several test programs to reflect that <span class=
2145 "main-name">ncurses</span> honors existing signal handlers in
2146 initscr, while other implementations do not.</p>
2150 <p>add configure check for <code>openpty</code> to
2151 ncurses-examples' configure script, for <span class=
2152 "part-name">ditto</span>.</p>
2156 <p>improve check for working <code>poll</code> function by
2157 using <code>posix_openpt</code> as a fallback in case there
2158 is no valid terminal on the standard input</p>
2162 <p>modify ncurses-examples' configure script to check for
2163 <span class="part-name">pthread</span> dependency of
2164 <em>ncursest</em> or <em>ncursestw</em> library when building
2165 the <span class="main-name">ncurses</span> examples, e.g., in
2166 case weak symbols are used.</p>
2170 <p>add checks in ncurses-examples' configure script for some
2171 functions neither in 4.3BSD curses, nor based on X/Open
2176 <p>modify a loop limit in firework.c to work around
2177 absense of limit checks in some libraries.</p>
2181 <p>fill the last row of a window with
2182 “<code>?</code>” in firstlast if waddch does
2183 not return <code>ERR</code> on the lower-right
2190 <p>build-fixes for the Portland Group (PGI) compilers</p>
2194 <p>accept whitespace in <span class=
2195 "part-name">sed</span> expression for generating
2200 <p>modify configure check that g++ compiler warnings are
2205 <p>add configure check for -fPIC option needed for shared
2212 <p>modify configure script for clang as used on FreeBSD, to
2213 work around clang's differences in exit codes vs gcc.</p>
2217 <p>fixes for configure/build using clang on OSX</p>
2221 <p>do not redefine “inline” in
2222 <code>ncurses_cfg.h</code>; this was originally to solve
2223 a problem with gcc/g++, but is aggravated by clang's
2224 misuse of symbols to pretend it is gcc.</p>
2228 <p>add braces to configure script to prevent unwanted
2229 addition of “<code>-lstdc++</code>” option to
2230 the <code>CXXLIBS</code> symbol.</p>
2234 <p>improve/update test-program used for checking
2235 existence of stdc++ library.</p>
2239 <p>if <code>$CXXLIBS</code> is set, the linkage test uses
2240 that in addition to <code>$LIBS</code>.</p>
2246 <p>fixes for OS/2:</p>
2250 <p>use button instead of <code>kbuf[0]</code> in
2251 EMX-specific part of <code>lib_mouse.c</code></p>
2255 <p>support building with <span class=
2256 "part-name">libtool</span> on OS/2</p>
2260 <p>use stdc++ library with OS/2 kLIBC</p>
2264 <p>clear configure script's <code>cf_XOPEN_SOURCE</code>
2265 for OS/2, to work with its header files</p>
2271 <p>add “newer” baudrate symbols to the <a href=
2272 "https://invisible-island.net/ncurses/man/curs_termattrs.3x.html#h3-baudrate">
2273 <code>baudrate</code></a> function in the ncurses library as
2274 well as to a corresponding table in <span class=
2275 "part-name">tset</span>.</p>
2279 <p>modify ncurses-examples <span class=
2280 "part-name">savescreen</span> to work with AIX and HPUX.</p>
2284 <p>define <code>WIN32_LEAN_AND_MEAN</code> for MinGW port,
2285 making builds faster.</p>
2289 <p>add a configure check for <em>wcwidth</em> versus the
2290 <span class="main-name">ncurses</span> line-drawing
2291 characters, to use in special-casing systems such as Solaris.
2292 Solaris, however, requires a special case that maps Unicode
2293 line-drawing characters into the acsc string for non-Unicode
2294 locales. Solaris also has a misconfigured wcwidth which marks
2295 all of the line drawing characters as double-width.</p>
2299 <p>string-hacks (non-standard):</p>
2303 <p>fix configure script to record when
2304 <code>strlcat</code> is found on OpenBSD.</p>
2308 <p>add <code>--enable-string-hacks</code> option to
2309 ncurses-examples' configure script.</p>
2313 <p>completed string-hacks for <em>sprintf</em>, etc.,
2314 including the ncurses-examples programs.</p>
2318 <p>make <code>--enable-string-hacks</code> option work
2319 with Debian by checking for the "bsd" library and its
2320 associated "<bsd/string.h>" header.</p>
2326 <p>workaround for Debian's antique/unmaintained version of
2331 <p>see Debian #65617, which was fixed in <span class=
2332 "main-name">mawk</span>'s upstream releases in <a href=
2333 "https://invisible-island.net/mawk/CHANGES.html#t20090727">
2338 <p>related fixes when building link_test.</p>
2345 <h2><a name="h2-features" id="h2-features">Features of
2346 <span class="main-name">ncurses</span></a></h2>
2348 <p>The <span class="main-name">ncurses</span> package is fully
2349 upward-compatible with SVr4 (System V Release 4) curses:</p>
2353 <p>All of the SVr4 calls have been implemented (and are
2358 <p><span class="main-name">ncurses</span> supports all of the
2359 for SVr4 curses features including keyboard mapping, color,
2360 forms-drawing with ACS characters, and automatic recognition
2361 of keypad and function keys.</p>
2365 <p><span class="main-name">ncurses</span> provides these SVr4
2366 add-on libraries (not part of X/Open Curses):</p>
2370 <p>the panels library, supporting a stack of windows with
2375 <p>the menus library, supporting a uniform but flexible
2376 interface for menu programming.</p>
2380 <p>the form library, supporting data collection through
2381 on-screen forms.</p>
2387 <p><span class="main-name">ncurses</span>'s terminal database
2388 is fully compatible with that used by SVr4 curses.</p>
2392 <p><span class="main-name">ncurses</span> supports
2393 user-defined capabilities which it can see, but which are
2394 hidden from SVr4 curses applications using the
2395 <em>same</em> terminal database.</p>
2399 <p>It can be optionally configured to match the format
2400 used in related systems such as AIX and Tru64.</p>
2404 <p>Alternatively, <span class="main-name">ncurses</span>
2405 can be configured to use hashed databases rather than the
2406 directory of files used by SVr4 curses.</p>
2412 <p>The <span class="main-name">ncurses</span> utilities have
2413 options to allow you to filter terminfo entries for use with
2414 less capable <em>curses</em>/<em>terminfo</em> versions such
2415 as the HP/UX and AIX ports.</p>
2419 <p>The <span class="main-name">ncurses</span> package also has
2420 many useful extensions over SVr4:</p>
2424 <p>The API is 8-bit clean and base-level conformant with the
2425 X/OPEN curses specification, XSI curses (that is, it
2426 implements all BASE level features, and most EXTENDED
2427 features). It includes many function calls not supported
2428 under SVr4 curses (but portability of all calls is documented
2429 so you can use the SVr4 subset only).</p>
2433 <p>Unlike SVr3 curses, <span class="main-name">ncurses</span>
2434 can write to the rightmost-bottommost corner of the screen if
2435 your terminal has an insert-character capability.</p>
2439 <p>Ada95 and C++ bindings.</p>
2443 <p>Support for mouse event reporting with X Window xterm and
2444 FreeBSD and OS/2 console windows.</p>
2448 <p>Extended mouse support via Alessandro Rubini's gpm
2453 <p>The function <code>wresize</code> allows you to resize
2454 windows, preserving their data.</p>
2458 <p>The function <code>use_default_colors</code> allows you to
2459 use the terminal's default colors for the default color pair,
2460 achieving the effect of transparent colors.</p>
2464 <p>The functions <code>keyok</code> and
2465 <code>define_key</code> allow you to better control the use
2466 of function keys, e.g., disabling the <span class=
2467 "main-name">ncurses</span> KEY_MOUSE, or by defining more
2468 than one control sequence to map to a given key code.</p>
2472 <p>Support for 256-color terminals, such as modern xterm.</p>
2476 <p>Support for 16-color terminals, such as <em>aixterm</em>
2477 and <em>modern xterm</em>.</p>
2481 <p>Better cursor-movement optimization. The package now
2482 features a cursor-local-movement computation more efficient
2483 than either BSD's or System V's.</p>
2487 <p>Super hardware scrolling support. The screen-update code
2488 incorporates a novel, simple, and cheap algorithm that
2489 enables it to make optimal use of hardware scrolling,
2490 line-insertion, and line-deletion for screen-line movements.
2491 This algorithm is more powerful than the 4.4BSD curses
2492 <code>quickch</code> routine.</p>
2496 <p>Real support for terminals with the magic-cookie glitch.
2497 The screen-update code will refrain from drawing a highlight
2498 if the magic- cookie unattributed spaces required just before
2499 the beginning and after the end would step on a non-space
2500 character. It will automatically shift highlight boundaries
2501 when doing so would make it possible to draw the highlight
2502 without changing the visual appearance of the screen.</p>
2506 <p>It is possible to generate the library with a list of
2507 pre-loaded fallback entries linked to it so that it can serve
2508 those terminal types even when no terminfo tree or termcap
2509 file is accessible (this may be useful for support of
2510 screen-oriented programs that must run in single-user
2516 "https://invisible-island.net/ncurses/man/tic.1m.html"><span class="part-name">
2517 tic</span></a>/<a href=
2518 "https://invisible-island.net/ncurses/man/captoinfo.1m.html">captoinfo</a>
2519 utility provided with <span class="main-name">ncurses</span>
2520 has the ability to translate many termcaps from the XENIX,
2521 IBM and AT&T extension sets.</p>
2525 <p>A BSD-like <a href=
2526 "https://invisible-island.net/ncurses/man/tset.1.html"><span class="part-name">
2527 tset</span></a> utility is provided.</p>
2531 <p>The <span class="main-name">ncurses</span> library and
2532 utilities will automatically read terminfo entries from
2533 $HOME/.terminfo if it exists, and compile to that directory
2534 if it exists and the user has no write access to the system
2535 directory. This feature makes it easier for users to have
2536 personal terminfo entries without giving up access to the
2537 system terminfo directory.</p>
2541 <p>You may specify a path of directories to search for
2542 compiled descriptions with the environment variable
2543 TERMINFO_DIRS (this generalizes the feature provided by
2544 TERMINFO under stock System V.)</p>
2548 <p>In terminfo source files, use capabilities may refer not
2549 just to other entries in the same source file (as in System
2550 V) but also to compiled entries in either the system terminfo
2551 directory or the user's $HOME/.terminfo directory.</p>
2555 <p>The table-of-entries utility <a href=
2556 "https://invisible-island.net/ncurses/man/toe.1m.html"><span class="part-name">
2557 toe</span></a> makes it easy for users to see exactly what
2558 terminal types are available on the system.</p>
2562 <p>The library meets the XSI requirement that every macro
2563 entry point have a corresponding function which may be linked
2564 (and will be prototype-checked) if the macro definition is
2565 disabled with <code>#undef</code>.</p>
2569 <p>Extensive documentation is provided (see the <em><a href=
2570 "https://invisible-island.net/ncurses/ncurses.faq.html#additional_reading">
2571 Additional Reading</a></em> section of the <em><a href=
2572 "https://invisible-island.net/ncurses/ncurses.faq.html"><span class="main-name">
2573 ncurses</span> FAQ</a></em> for online documentation).</p>
2577 <h2><a name="h2-who-uses" id="h2-who-uses">Applications using
2578 <span class="main-name">ncurses</span></a></h2>
2580 <p>The <span class="main-name">ncurses</span> distribution
2581 includes a selection of test programs (including a few games).
2582 These are available separately as <a href=
2583 "https://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a></p>
2585 <p>The ncurses library has been tested with a wide variety of
2586 applications including:</p>
2590 <dt><span class="part-name">aptitude</span></dt>
2593 <p>FrontEnd to Apt, the debian package manager</p>
2596 "https://wiki.debian.org/Aptitude">https://wiki.debian.org/Aptitude</a></p>
2599 <dt><span class="part-name">cdk</span></dt>
2602 <p>Curses Development Kit</p>
2605 "https://invisible-island.net/cdk/">https://invisible-island.net/cdk/</a><br>
2609 <dt><span class="part-name">ded</span></dt>
2612 <p>directory-editor</p>
2615 "https://invisible-island.net/ded/">https://invisible-island.net/ded/</a></p>
2618 <dt><span class="part-name">dialog</span></dt>
2621 <p>the underlying application used in Slackware's setup,
2622 and the basis for similar install/configure applications on
2626 "https://invisible-island.net/dialog/">https://invisible-island.net/dialog/</a></p>
2629 <dt><span class="part-name">lynx</span></dt>
2632 <p>the text WWW browser</p>
2635 "https://lynx.invisible-island.net/">https://lynx.invisible-island.net/</a></p>
2638 <dt><span class="part-name">mutt</span></dt>
2644 "http://www.mutt.org/">http://www.mutt.org/</a></p>
2647 <dt><span class="part-name">ncftp</span></dt>
2650 <p>file-transfer utility</p>
2653 "https://www.ncftp.com/">https://www.ncftp.com/</a></p>
2656 <dt><span class="part-name">nvi</span></dt>
2659 <p>New vi uses ncurses.</p>
2662 "https://sites.google.com/a/bostic.com/keithbostic/vi">https://sites.google.com/a/bostic.com/keithbostic/vi</a><br>
2666 <dt><span class="part-name">ranger</span></dt>
2669 <p>A console file manager with VI key bindings in
2670 <em>Python</em>.</p>
2673 "https://ranger.github.io/">https://ranger.github.io/</a></p>
2676 <dt><span class="part-name">tin</span></dt>
2679 <p>newsreader, supporting color, MIME</p>
2682 "http://www.tin.org/">http://www.tin.org/</a></p>
2685 <dt><span class="part-name">vifm</span></dt>
2688 <p>File manager with vi like keybindings</p>
2690 <p><a href="https://vifm.info/">https://vifm.info/</a></p>
2695 <p>as well as some that use <span class=
2696 "main-name">ncurses</span> for the terminfo support alone:</p>
2700 <dt><span class="part-name">minicom</span></dt>
2703 <p>terminal emulator for serial modem connections</p>
2706 "https://alioth.debian.org/projects/minicom/">https://alioth.debian.org/projects/minicom/</a></p>
2709 <dt><span class="part-name">mosh</span></dt>
2712 <p>a replacement for <code>ssh</code>.</p>
2715 "https://mosh.mit.edu/">https://mosh.mit.edu/</a></p>
2718 <dt><span class="part-name">tack</span></dt>
2721 <p>terminfo action checker</p>
2724 "https://invisible-island.net/ncurses/tack.html">https://invisible-island.net/ncurses/tack.html</a></p>
2727 <dt><span class="part-name">tmux</span></dt>
2730 <p>terminal multiplexor</p>
2733 "https://github.com/tmux/tmux/wiki">https://github.com/tmux/tmux/wiki</a></p>
2736 <dt><span class="part-name">vile</span></dt>
2739 <p>vi-like-emacs may be built to use the terminfo, termcap
2740 or curses interfaces.</p>
2743 "https://invisible-island.net/vile/">https://invisible-island.net/vile/</a></p>
2748 <p>and finally, those which use only the termcap interface:</p>
2752 <dt><span class="part-name">emacs</span></dt>
2758 "https://www.gnu.org/software/emacs/">https://www.gnu.org/software/emacs/</a></p>
2761 <dt><span class="part-name">less</span></dt>
2764 <p>The most commonly used <em>pager</em> (a program that
2765 displays text files).</p>
2768 "http://www.greenwoodsoftware.com/less/">http://www.greenwoodsoftware.com/less/</a></p>
2771 <dt><span class="part-name">screen</span></dt>
2774 <p>terminal multiplexor</p>
2777 "https://www.gnu.org/software/screen/">https://www.gnu.org/software/screen/</a></p>
2780 <dt><span class="part-name">vim</span></dt>
2786 "https://www.vim.org/">https://www.vim.org/</a></p>
2791 <h2><a name="h2-development" id="h2-development">Development
2794 <p>Zeyd Ben-Halim started <span class="main-name">ncurses</span>
2795 from a previous package pcurses, written by Pavel Curtis. Eric S.
2796 Raymond continued development. Jürgen Pfeifer wrote most of
2797 the form and menu libraries. Ongoing development work is done by
2798 <a href="mailto:dickey@invisible-island.net">Thomas Dickey</a>.
2799 Thomas Dickey also acts as the maintainer for the Free Software
2800 Foundation, which holds the <a href=
2801 "https://invisible-island.net/ncurses/ncurses-license.html">copyright
2804 <p>Contact the current maintainers at</p>
2807 <a href="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</a>
2810 <p>To join the ncurses mailing list, please write email to</p>
2814 "mailto:bug-ncurses-request@gnu.org">bug-ncurses-request@gnu.org</a>
2815 </blockquote>containing the line:
2818 <p><code>subscribe</code>
2819 <em><name>@<host.domain></em></p>
2822 <p>This list is open to anyone interested in helping with the
2823 development and testing of this package.</p>
2825 <p>Beta versions of <span class="main-name">ncurses</span> and
2826 patches to the current release are made available at</p>
2830 "ftp://ftp.invisible-island.net/ncurses/">ftp://ftp.invisible-island.net/ncurses/</a>
2833 "https://invisible-mirror.net/archives/ncurses/">https://invisible-mirror.net/archives/ncurses/</a> .</p>
2836 <p>There is an archive of the mailing list here:</p>
2840 "http://lists.gnu.org/archive/html/bug-ncurses">http://lists.gnu.org/archive/html/bug-ncurses</a>
2842 "https://lists.gnu.org/archive/html/bug-ncurses">https</a>)</p>
2845 <h2><a name="h2-this-stuff" id="h2-this-stuff">Related
2848 <p>The release notes make scattered references to these pages,
2849 which may be interesting by themselves:</p>
2853 "https://invisible-island.net/ncurses/ncurses-license.html"><span class="main-name">
2854 ncurses</span> licensing</a></li>
2857 "https://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol
2858 versioning in <span class="main-name">ncurses</span></a></li>
2861 "https://invisible-island.net/ncurses/ncurses-slang.html">Comments
2862 on <span class="main-name">ncurses</span> versus <span class=
2863 "main-name">slang</span> (S-Lang)</a></li>
2866 "https://invisible-island.net/ncurses/tack.html">tack –
2867 terminfo action checker</a></li>
2870 "https://invisible-island.net/ncurses/tctest.html">tctest
2871 – termcap library checker</a></li>
2874 "https://invisible-island.net/ncurses/ncurses.html#download_database">
2875 Terminal Database</a></li>
2878 <h2><a name="h2-other-stuff" id="h2-other-stuff">Other
2881 <p>The distribution provides a newer version of the
2882 terminfo-format terminal description file once maintained by
2883 <a href="http://www.catb.org/~esr/terminfo/">Eric
2884 Raymond</a> . Unlike the older version, the termcap and
2885 terminfo data are provided in the same file, which also provides
2886 several user-definable extensions beyond the X/Open
2889 <p>You can find lots of information on terminal-related topics
2890 not covered in the terminfo file at <a href=
2891 "http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal">
2892 Richard Shuford's archive</a> .</p>
2896 <li><a href="#h2-overview">Overview</a></li>
2899 <a href="#h2-release-notes">Release Notes</a>
2903 <a href="#h3-library">Library improvements</a>
2906 <li><a href="#h4-new-library">New features</a></li>
2908 <li><a href="#h4-fixes-library">Other
2909 improvements</a></li>
2914 <a href="#h3-programs">Program improvements</a>
2917 <li><a href="#h4-utilities">Utilities</a></li>
2919 <li><a href="#h4-examples">Examples</a></li>
2923 <li><a href="#h3-database">Terminal database</a></li>
2925 <li><a href="#h3-documentation">Documentation</a></li>
2927 <li><a href="#h3-bug-fixes">Interesting
2931 <a href="#h3-config-config">Configuration changes</a>
2934 <li><a href="#h4-config-major">Major changes</a></li>
2936 <li><a href="#h4-config-options">Configuration
2941 <li><a href="#h3-portability">Portability</a></li>
2945 <li><a href="#h2-features">Features of <span class=
2946 "main-name">ncurses</span></a></li>
2948 <li><a href="#h2-who-uses">Applications using <span class=
2949 "main-name">ncurses</span></a></li>
2951 <li><a href="#h2-development">Development activities</a></li>
2953 <li><a href="#h2-this-stuff">Related resources</a></li>
2955 <li><a href="#h2-other-stuff">Other resources</a></li>