]> ncurses.scripts.mit.edu Git - ncurses.git/blob - doc/html/announce.html
ncurses 6.3 - patch 20221126
[ncurses.git] / doc / html / announce.html
1 <!--
2   $Id: announce.html,v 1.67 2022/11/26 17:41:51 tom Exp $
3   ****************************************************************************
4   * Copyright 2018-2021,2022 Thomas E. Dickey                                *
5   *                                                                          *
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:                 *
13   *                                                                          *
14   * The above copyright notice and this permission notice shall be included  *
15   * in all copies or substantial portions of the Software.                   *
16   *                                                                          *
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.                               *
24   *                                                                          *
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       *
28   * authorization.                                                           *
29   ****************************************************************************
30 -->
31 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
32 <html>
33 <head>
34   <meta name="generator" content=
35   "HTML Tidy for HTML5 for Linux version 5.6.0">
36   <title>Announcing ncurses 6.3</title>
37   <link rel="author" href="mailto:bug-ncurses@gnu.org">
38   <meta http-equiv="Content-Type" content=
39   "text/html; charset=us-ascii">
40   <style type="text/css">
41   p,li { max-width:700px; }
42   dd { max-width:630px; }
43   *.main-name {
44         font-style: italic;
45         font-variant: small-caps;
46   }
47   *.part-name {
48         font-family: "Andale Mono", "Monotype.com", monospace;
49         font-size: 12pt;
50         font-weight: bold;
51   }
52   *.demo-name {
53         font-family: "Andale Mono", "Monotype.com", monospace;
54         font-size: 10pt;
55   }
56   </style>
57 </head>
58 <body>
59   <h1 class="no-header">Announcing ncurses 6.3</h1>
60
61   <h2><a name="h2-overview" id="h2-overview">Overview</a></h2>
62
63   <p>The <span class="main-name">ncurses</span> (new curses)
64   library is a free software emulation of curses in System V
65   Release 4.0 (SVr4), and more. It uses terminfo format, supports
66   pads and color and multiple highlights and forms characters and
67   function-key mapping, and has all the other SVr4-curses
68   enhancements over BSD curses. SVr4 curses became the basis of
69   X/Open Curses.</p>
70
71   <p>In mid-June 1995, the maintainer of 4.4BSD curses declared
72   that he considered 4.4BSD curses obsolete, and encouraged the
73   keepers of <span class="main-name">unix</span> releases such as
74   BSD/OS, FreeBSD and NetBSD to switch over to <span class=
75   "main-name">ncurses</span>.</p>
76
77   <p>Since 1995, <span class="main-name">ncurses</span> has been
78   ported to many systems:</p>
79
80   <ul>
81     <li>It is used in almost every system based on the Linux kernel
82     (aside from some embedded applications).</li>
83
84     <li>It is used as the system curses library on OpenBSD, FreeBSD
85     and MacOS.</li>
86
87     <li>It is used in environments such as Cygwin and MinGW. The
88     first of these was EMX on OS/2 Warp.</li>
89
90     <li>It is used (though usually not as the <em>system</em>
91     curses) on all of the vendor <span class=
92     "main-name">unix</span> systems, e.g., AIX, HP-UX, IRIX64, SCO,
93     Solaris, Tru64.</li>
94
95     <li>It should work readily on any ANSI/POSIX-conforming
96     <span class="main-name">unix</span>.</li>
97   </ul>
98
99   <p>The distribution includes the library and support utilities,
100   including</p>
101
102   <ul>
103     <li><a href=
104     "https://invisible-island.net/ncurses/man/captoinfo.1m.html"><span class="part-name">
105     captoinfo</span></a>, a termcap conversion tool</li>
106
107     <li><a href=
108     "https://invisible-island.net/ncurses/man/clear.1.html"><span class="part-name">
109     clear</span></a>, utility for clearing the screen</li>
110
111     <li><a href=
112     "https://invisible-island.net/ncurses/man/infocmp.1m.html"><span class="part-name">
113     infocmp</span></a>, the terminfo decompiler</li>
114
115     <li><a href=
116     "https://invisible-island.net/ncurses/man/tabs.1.html"><span class="part-name">
117     tabs</span></a>, set tabs on a terminal</li>
118
119     <li><a href=
120     "https://invisible-island.net/ncurses/man/tic.1m.html"><span class="part-name">
121     tic</span></a>, the terminfo compiler</li>
122
123     <li><a href=
124     "https://invisible-island.net/ncurses/man/toe.1m.html"><span class="part-name">
125     toe</span></a>, list (table of) terminfo entries</li>
126
127     <li><a href=
128     "https://invisible-island.net/ncurses/man/tput.1.html"><span class="part-name">
129     tput</span></a>, utility for retrieving terminal capabilities
130     in shell scripts</li>
131
132     <li><a href=
133     "https://invisible-island.net/ncurses/man/tset.1.html"><span class="part-name">
134     tset</span></a>, to initialize the terminal</li>
135   </ul>
136
137   <p>Full manual pages are provided for the library and tools.</p>
138
139   <p>The <span class="main-name">ncurses</span> distribution is
140   available at <span class="main-name">ncurses</span>' <a href=
141   "https://invisible-island.net/ncurses/">homepage</a>:</p>
142
143   <blockquote>
144     <p><a href=
145     "ftp://ftp.invisible-island.net/ncurses/">ftp://ftp.invisible-island.net/ncurses/</a>
146     or<br>
147     <a href=
148     "https://invisible-mirror.net/archives/ncurses/">https://invisible-mirror.net/archives/ncurses/</a>&nbsp;.</p>
149   </blockquote>
150
151   <p>It is also available via anonymous FTP at the GNU distribution
152   site</p>
153
154   <blockquote>
155     <p><a href=
156     "ftp://ftp.gnu.org/gnu/ncurses/">ftp://ftp.gnu.org/gnu/ncurses/</a>&nbsp;.</p>
157   </blockquote>
158
159   <h2><a name="h2-release-notes" id="h2-release-notes">Release
160   Notes</a></h2>
161
162   <p>These notes are for <span class="main-name">ncurses</span>
163   6.3, released <strong>October 21, 2021</strong>.</p>
164
165   <p>This release is designed to be source-compatible with
166   <span class="main-name">ncurses</span> 5.0 through 6.2; providing
167   extensions to the application binary interface (ABI). Although
168   the source can still be configured to support the <span class=
169   "main-name">ncurses</span> 5 ABI, the reason for the release is
170   to reflect improvements to the <span class=
171   "main-name">ncurses</span> 6 ABI and the supporting utility
172   programs.</p>
173
174   <p>There are, of course, numerous other improvements, listed in
175   this announcement.</p>
176
177   <p>The most <a href="#h3-bug-fixes">important
178   bug-fixes/improvements</a> dealt with portability issues. The
179   release notes also mention some other bug-fixes, but are focused
180   on new features and improvements to existing features since
181   <span class="main-name">ncurses</span> 6.2 release.</p>
182
183   <h3><a name="h3-library" id="h3-library">Library improvements</a></h3>
184
185   <h4><a name="h4-new-library" id="h4-new-library">New features</a></h4>
186
187   <p>There are a few new features:</p>
188
189   <ul>
190     <li>
191       <p>A new (experimental) driver, for the Windows Terminal
192       configuration is provided.</p>
193     </li>
194
195     <li>
196       <p>A script is provided which enables <a href=
197       "https://invisible-island.net/ncurses/ncurses-openbsd.html">OpenBSD</a>
198       users to upgrade their system to use ncurses 6.3 (OpenBSD
199       developers are also invited to do this).</p>
200     </li>
201   </ul>
202
203   <p>Additionally, to improve performance other changes (and
204   extensions) are provided in this release:</p>
205
206   <ul>
207     <li>
208       <p>modify lib_mouse.c to check for out-of-range button
209       numbers, convert those to position reports.</p>
210     </li>
211
212     <li>
213       <p>add sp-funcs for <a href=
214       "https://invisible-island.net/ncurses/man/curs_termattrs.3x.html#h3-erasechar_-erasewchar">
215       erasewchar</a>, <a href=
216       "https://invisible-island.net/ncurses/man/curs_termattrs.3x.html#h3-killchar_-killwchar">
217       killwchar</a>.</p>
218     </li>
219   </ul>
220
221   <h4><a name="h4-fixes-library" id="h4-fixes-library">Other
222   improvements</a></h4>
223
224   <p>These are revised features:</p>
225
226   <ul>
227     <li>modify wgetnstr, wgetn_wstr to improve compatibility with
228     SVr4 curses in its treatment of interrupt and quit
229     characters</li>
230   </ul>
231
232   <p>These were done to limit or ultimately deprecate features:</p>
233
234   <ul>
235     <li>
236       <p>mark wgetch-events feature as deprecated.</p>
237
238       <ul>
239         <li>
240           <p>prevent <tt>KEY_EVENT</tt> from appearing in
241           <tt>curses.h</tt> unless the configure option
242           <code>--enable-wgetch-events</code> is used.</p>
243         </li>
244
245         <li>
246           <p>modify <tt>MKkey_defs.sh</tt> to hide ncurses'
247           definition of <tt>KEY_EVENTS</tt> to reduce <em>Visual
248           Studio C++</em> redefinition warnings.</p>
249         </li>
250       </ul>
251     </li>
252
253     <li>
254       <p>reduce build-warnings by excluding ncurses-internals from
255       deprecation warnings.</p>
256     </li>
257   </ul>
258
259   <p>These are improvements to existing features:</p>
260
261   <ul>
262     <li>
263       <p>drop symbols <em>GCC_PRINTF</em> and <em>GCC_SCANF</em>
264       from &lt;curses.h&gt;, to simplify use.</p>
265     </li>
266
267     <li>
268       <p>apply gcc format attribute to prototypes which use a
269       va_list parameter rather than a &ldquo;<tt>...</tt>&rdquo;
270       variable-length parameter list.</p>
271     </li>
272
273     <li>
274       <p>modify &lt;term.h&gt; so that it is not necessary to
275       include &lt;curses.h&gt; before &lt;term.h&gt;.</p>
276     </li>
277
278     <li>
279       <p>provide for wide-characters as background character in
280       wbkgrnd</p>
281     </li>
282
283     <li>
284       <p>improve parameter-checking for tparm, adding function
285       _nc_tiparm() to handle the most-used case, which accepts only
286       numeric parameters.</p>
287     </li>
288
289     <li>
290       <p>use return-value from <em>vsnprintf</em> to reallocate as
291       needed to allow for buffers larger than the screen size.</p>
292     </li>
293
294     <li>
295       <p>add another <em>fflush(stdout)</em> in <em>_nc_flush</em>
296       to handle time-delays in the middle of strings such as flash
297       when the application uses low-level calls rather than
298       curses.</p>
299     </li>
300   </ul>
301
302   <p>These are corrections to existing features:</p>
303
304   <ul>
305     <li>
306       <p>add a check to guard against <em>repeat_char</em> emitting
307       digits which could be interpreted as BSD-style padding when
308       <tt>--enable-bsdpad</tt> is configured.</p>
309     </li>
310
311     <li>
312       <p>check for screen size-change in <a href=
313       "https://invisible-island.net/ncurses/man/curs_scr_dump.3x.html">
314       scr_init</a> and <a href=
315       "https://invisible-island.net/ncurses/man/curs_scr_dump.3x.html">
316       scr_restore</a>, in case a screen dump does not match the
317       current screen dimensions</p>
318     </li>
319   </ul>
320
321   <h3><a name="h3-programs" id="h3-programs">Program
322   improvements</a></h3>
323
324   <p id="h4-utilities">Several improvements were made to the
325   utility programs:</p>
326
327   <dl>
328     <dt><span class="part-name"><a href=
329     "https://invisible-island.net/ncurses/man/tabs.1.html">tabs</a></span>
330     </dt>
331
332     <dd>
333       <ul>
334         <li>
335           <p>implement &ldquo;<tt>+m</tt>&rdquo; option</p>
336         </li>
337       </ul>
338     </dd>
339
340     <dt><span class="part-name"><a href=
341     "https://invisible-island.net/ncurses/man/tic.1m.html">tic</a></span>
342     </dt>
343
344     <dd>
345       <ul>
346         <li>
347           <p>add check for duplicate &ldquo;<tt>use=</tt>&rdquo;
348           clauses.</p>
349         </li>
350
351         <li>
352           <p>add check to report instances where <tt>tparm</tt>
353           would detect an error in an expression.</p>
354         </li>
355
356         <li>
357           <p>add user-defined capabilities from <em>mintty</em> to
358           <tt>Caps-ncurses</tt>, for checking consistency.</p>
359         </li>
360
361         <li>
362           <p>improve warning when oc/op do not mention SGR 39/49
363           for <em>xterm</em> compatible <code>XT</code> flag.</p>
364         </li>
365
366         <li>
367           <p>improve checks for number of parameters of
368           <code>smglp</code>, <code>smgrp</code>,
369           <code>smgtp</code>, and <code>smgbp</code>.</p>
370         </li>
371
372         <li>
373           <p>improve &ldquo;<tt>-c</tt>&rdquo; option to validate
374           the number and type of parameters and compare against
375           expected number/type before deciding which set of
376           parameter-lists to use in tparm calls.</p>
377         </li>
378
379         <li>
380           <p>improve check for errors detected in
381           <code>tparm</code>.</p>
382         </li>
383
384         <li>
385           <p>improve format of output, to ensure that the messages
386           contain only printable text.</p>
387         </li>
388
389         <li>
390           <p>modify to eliminate unnecessary
391           &ldquo;<code>\</code>&rdquo; to escape
392           &ldquo;<code>:</code>&rdquo; in terminfo format.</p>
393         </li>
394
395         <li>
396           <p>remove check that assumes that none or both
397           parameterized and non-parameterized margin-setting
398           capabilities are present.</p>
399         </li>
400       </ul>
401     </dd>
402
403     <dt><span class="part-name"><a href=
404     "https://invisible-island.net/ncurses/man/toe.1m.html">toe</a></span>
405     </dt>
406
407     <dd>
408       <ul>
409         <li>
410           <p>modify output of &ldquo;<tt>toe -as</tt>&rdquo; to
411           show first description found rather than the last.</p>
412         </li>
413
414         <li>
415           <p>add a check to ensure that a &ldquo;termcap
416           file&rdquo; is text rather than binary.</p>
417         </li>
418       </ul>
419     </dd>
420
421     <dt><span class="part-name"><a href=
422     "https://invisible-island.net/ncurses/man/tput.1.html">tput</a></span>
423     </dt>
424
425     <dd>
426       <ul>
427         <li>
428           <p>modify to allow multiple commands per line.</p>
429         </li>
430
431         <li>
432           <p>improve parameter-checking by analyzing all extended
433           string capabilities, e.g., as used in the <code>Cs</code>
434           and <code>Ms</code> capabilities of the <em>tmux</em>
435           description.</p>
436         </li>
437
438         <li>
439           <p>make warning messages consistently using alias names
440           when those are used, rather than the underlying program's
441           name.</p>
442         </li>
443
444         <li>
445           <p>improve usage message for aliases such as
446           <em>clear</em>, by eliminating <em>tput</em>-specific
447           portions.</p>
448         </li>
449
450         <li>
451           <p>modify initialization to avoid opening
452           <tt>/dev/tty</tt> for cases other than
453           <em>reset/init</em>, e.g., for <em>clear</em>.</p>
454         </li>
455       </ul>
456     </dd>
457   </dl>
458
459   <h4><a name="h4-examples" id="h4-examples">Examples</a></h4>
460
461   <p>Along with the library and utilities, improvements were made
462   to the <a href=
463   "https://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>.
464   Most of this activity aimed at improving the test-packages. A few
465   changes are more generally useful, e.g., for the main ncurses
466   test-program, and for analyzing traces using the
467   <em>tracemunch</em> script:</p>
468
469   <ul>
470     <li>
471       <p>add &ldquo;<tt>-r</tt>&rdquo; option to the <em>dots</em>
472       test-programs, to help with scripting a performance
473       comparison.</p>
474     </li>
475
476     <li>
477       <p>build-fix for <em>test_opaque</em>, for configurations
478       without opaque curses structs, e.g., ncurses 5.7.</p>
479     </li>
480
481     <li>
482       <p>improve <em>tracemunch</em> logic for "RUN"
483       compaction.</p>
484     </li>
485
486     <li>
487       <p>improve <em>tracemunch</em>'s coverage of form/menu/panel
488       libraries.</p>
489     </li>
490
491     <li>
492       <p>improve <em>tracemunch</em>'s checking/reporting the type
493       for the first parameter, e.g., "WINDOW*" rather than
494       "#1".</p>
495     </li>
496
497     <li>
498       <p>modify <em>tracemunch</em> and the panel library to show
499       readable traces for panel- and user-pointers.</p>
500     </li>
501   </ul>
502
503   <p>There are other new demo/test programs and reusable
504   examples:</p>
505
506   <dl>
507     <dt><span class="part-name"><em>back_ground</em></span>
508     </dt>
509
510     <dd>to exercise the wide-character background functions.</dd>
511
512     <dt><span class="part-name"><em>move_field</em></span>
513     </dt>
514
515     <dd>to demonstrate <a href=
516     "https://invisible-island.net/ncurses/man/form_field.3x.html">move_field</a>,
517     and a stub for a corresponding demo of <a href=
518     "https://invisible-island.net/ncurses/man/form_field_new.3x.html">
519     dup_field</a>.</dd>
520
521     <dt><span class="part-name"><em>test_tparm</em></span>
522     </dt>
523
524     <dd>for checking <em>tparm</em> changes.</dd>
525   </dl>
526
527   <h3><a name="h3-database" id="h3-database">Terminal database</a></h3>
528
529   <p>There are several new terminal descriptions:</p>
530
531   <blockquote style="word-break:keep-all">
532     <p><tt><a href=
533     "https://invisible-island.net/ncurses/terminfo.src.html#tic-absolute">
534     absolute</a></tt>, <tt><a href=
535     "https://invisible-island.net/ncurses/terminfo.src.html#tic-att610_cvis">
536     att610+cvis</a></tt>, <tt><a href=
537     "https://invisible-island.net/ncurses/terminfo.src.html#tic-foot">
538     foot</a></tt>, <tt><a href=
539     "https://invisible-island.net/ncurses/terminfo.src.html#tic-foot-direct">
540     foot-direct</a></tt>, <tt><a href=
541     "https://invisible-island.net/ncurses/terminfo.src.html#tic-hp98550-color">
542     hp98550-color</a></tt>, <tt><a href=
543     "https://invisible-island.net/ncurses/terminfo.src.html#tic-hpterm-color2">
544     hpterm-color2</a></tt>, <tt><a href=
545     "https://invisible-island.net/ncurses/terminfo.src.html#tic-hterm">
546     hterm</a></tt>, <tt><a href=
547     "https://invisible-island.net/ncurses/terminfo.src.html#tic-hterm-256color">
548     hterm-256color</a></tt>, <tt><a href=
549     "https://invisible-island.net/ncurses/terminfo.src.html#tic-linux-s">
550     linux-s</a></tt>, <tt><a href=
551     "https://invisible-island.net/ncurses/terminfo.src.html#tic-putty_keypad">
552     putty+keypad</a></tt>, <tt><a href=
553     "https://invisible-island.net/ncurses/terminfo.src.html#tic-putty_screen">
554     putty+screen</a></tt>, <tt><a href=
555     "https://invisible-island.net/ncurses/terminfo.src.html#tic-putty-screen">
556     putty-screen</a></tt>, <tt><a href=
557     "https://invisible-island.net/ncurses/terminfo.src.html#tic-screen.linux-s">
558     screen.linux-s</a></tt>, <tt><a href=
559     "https://invisible-island.net/ncurses/terminfo.src.html#tic-scrt/securecrt">
560     scrt/securecrt</a></tt>, <tt><a href=
561     "https://invisible-island.net/ncurses/terminfo.src.html#tic-tmux-direct">
562     tmux-direct</a></tt>, <tt><a href=
563     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt220_cvis">
564     vt220+cvis</a></tt>, <tt><a href=
565     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt220_cvis8">
566     vt220+cvis8</a></tt>, <tt><a href=
567     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt220_pcedit">
568     vt220+pcedit</a></tt>, <tt><a href=
569     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt220_vtedit">
570     vt220+vtedit</a></tt>, <tt><a href=
571     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt220-base">
572     vt220-base</a></tt>, <tt><a href=
573     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt52_keypad">
574     vt52+keypad</a></tt>, <tt><a href=
575     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_256color2">
576     xterm+256color2</a></tt>, <tt><a href=
577     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_88color2">
578     xterm+88color2</a></tt>, <tt><a href=
579     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-direct16">
580     xterm-direct16</a></tt>, <tt><a href=
581     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-direct256">
582     xterm-direct256</a></tt>, <tt><a href=
583     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_nofkeys">
584     xterm+nofkeys</a></tt>, and <tt><a href=
585     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_nopcfkeys">
586     xterm+nopcfkeys</a></tt>.</p>
587   </blockquote>
588
589   <p>There are many changes to existing terminal descriptions. Some
590   were updates to several descriptions:</p>
591
592   <ul>
593     <li>correct use-ordering in some <a href=
594     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-direct">
595     xterm-direct</a> flavors</li>
596
597     <li>fix some sgr inconsistencies in <a href=
598     "https://invisible-island.net/ncurses/terminfo.src.html#tic-d230c">
599     d230c</a>, <a href=
600     "https://invisible-island.net/ncurses/terminfo.src.html#tic-ibm6153">
601     ibm6153</a>, <a href=
602     "https://invisible-island.net/ncurses/terminfo.src.html#tic-ibm6154">
603     ibm6154</a>, <a href=
604     "https://invisible-island.net/ncurses/terminfo.src.html#tic-ncrvt100an">
605     ncrvt100an</a></li>
606
607     <li>improve <a href=
608     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt50h">
609     vt50h</a> and <a href=
610     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt52">
611     vt52</a> based on DECScope manual</li>
612
613     <li>use <a href=
614     "https://invisible-island.net/ncurses/terminfo.src.html#tic-hp_arrows">
615     hp+arrows</a> in a few places</li>
616
617     <li>use <a href=
618     "https://invisible-island.net/ncurses/terminfo.src.html#tic-hp_pfk-cr">
619     hp+pfk-cr</a> in a few places</li>
620
621     <li>use <a href=
622     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt220_cvis">
623     vt220+cvis</a> in <tt>st</tt>, <tt>terminology</tt>,
624     <tt>termite</tt> since they ignore blinking-cursor detail in
625     <a href=
626     "https://invisible-island.net/ncurses/terminfo.src.html#tic-att610_cvis">
627     att610+cvis</a></li>
628   </ul>
629
630   <p>while others affected specific descriptions. These were
631   retested, to take into account changes by their developers:</p>
632
633   <blockquote>
634     <p><tt><a href=
635     "https://invisible-island.net/ncurses/terminfo.src.html#tic-kitty_common">
636     kitty+common</a></tt>, <tt><a href=
637     "https://invisible-island.net/ncurses/terminfo.src.html#tic-mlterm3">
638     mlterm3</a></tt>, <tt><a href=
639     "https://invisible-island.net/ncurses/terminfo.src.html#tic-ms-terminal">
640     ms-terminal</a></tt></p>
641   </blockquote>
642
643   <p>while these are specific fixes based on reviewing
644   documentation, user reports, or warnings from <span class=
645   "part-name">tic</span>:</p>
646
647   <dl>
648     <dt><a href=
649     "https://invisible-island.net/ncurses/terminfo.src.html#tic-aaa_dec">
650     aaa+dec</a>, aaa+rv</dt>
651
652     <dd>correct rmacs/smacs</dd>
653
654     <dt><a href=
655     "https://invisible-island.net/ncurses/terminfo.src.html#tic-aaa_rv">
656     aaa+rv</a>
657     </dt>
658
659     <dd>correct sgr</dd>
660
661     <dt><a href=
662     "https://invisible-island.net/ncurses/terminfo.src.html#tic-icl6404">
663     icl6404</a>
664     </dt>
665
666     <dd>correct csr</dd>
667
668     <dt><a href=
669     "https://invisible-island.net/ncurses/terminfo.src.html#tic-kitty">
670     kitty</a>
671     </dt>
672
673     <dd>use att610+cvis, xterm+tmux and ansi+enq</dd>
674
675     <dt><a href=
676     "https://invisible-island.net/ncurses/terminfo.src.html#tic-konsole-base">
677     konsole-base</a>
678     </dt>
679
680     <dd>re-enable "bel"</dd>
681
682     <dt><a href=
683     "https://invisible-island.net/ncurses/terminfo.src.html#tic-linux2.6">
684     linux2.6</a>
685     </dt>
686
687     <dd>fix pound-sign mapping in acsc</dd>
688
689     <dt><a href=
690     "https://invisible-island.net/ncurses/terminfo.src.html#tic-linux3.0">
691     linux3.0</a>
692     </dt>
693
694     <dd>modify to reflect default mapping of shift-tab by kbd
695     1.14</dd>
696
697     <dt><a href=
698     "https://invisible-island.net/ncurses/terminfo.src.html#tic-pccons">
699     pccons</a>
700     </dt>
701
702     <dd>fill in some missing pieces, to make it comparable to the
703     vt220 entry</dd>
704
705     <dt><a href=
706     "https://invisible-island.net/ncurses/terminfo.src.html#tic-putty">
707     putty</a>
708     </dt>
709
710     <dd>use vt100+fnkeys, add rep</dd>
711
712     <dt><a href=
713     "https://invisible-island.net/ncurses/terminfo.src.html#tic-screen">
714     screen</a>
715     </dt>
716
717     <dd>use vt100+enq</dd>
718
719     <dt><a href=
720     "https://invisible-island.net/ncurses/terminfo.src.html#tic-terminator">
721     terminator</a>
722     </dt>
723
724     <dd>corrected tsl capability</dd>
725
726     <dt><a href=
727     "https://invisible-island.net/ncurses/terminfo.src.html#tic-ti916">
728     ti916</a>
729     </dt>
730
731     <dd>correct cup</dd>
732
733     <dt><a href=
734     "https://invisible-island.net/ncurses/terminfo.src.html#tic-tmux">
735     tmux</a>
736     </dt>
737
738     <dd>change kbs to ^?</dd>
739
740     <dt><a href=
741     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt220">
742     vt220</a>
743     </dt>
744
745     <dd>use vt220+cvis</dd>
746
747     <dt><a href=
748     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt420_lrmm">
749     vt420+lrmm</a>
750     </dt>
751
752     <dd>add smglp and smgrp</dd>
753
754     <dt><a href=
755     "https://invisible-island.net/ncurses/terminfo.src.html#tic-vt420">
756     vt420</a>
757     </dt>
758
759     <dd>use vt420+lrmm</dd>
760
761     <dt><a href=
762     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-new">
763     xterm-new</a>
764     </dt>
765
766     <dd>add nel</dd>
767
768     <dt><a href=
769     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-vt52">
770     xterm-vt52</a>
771     </dt>
772
773     <dd>use vt52+keypad</dd>
774   </dl>
775
776   <p>A few entries use extensions (user-defined terminal
777   capabilities):</p>
778
779   <ul>
780     <li>add shifted Linux console keys in <a href=
781     "https://invisible-island.net/ncurses/terminfo.src.html#tic-linux_sfkeys">
782     linux+sfkeys</a> entry for <a href=
783     "https://invisible-island.net/ncurses/terminfo.src.html#tic-screen.linux">
784     screen.linux</a></li>
785
786     <li>add Smulx to <a href=
787     "https://invisible-island.net/ncurses/terminfo.src.html#tic-alacritty">
788     alacritty</a></li>
789
790     <li>add kbeg to <a href=
791     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_keypad">
792     xterm+keypad</a> to accommodate termcap applications</li>
793
794     <li>add extensions in <a href=
795     "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_tmux">
796     xterm+tmux</a> and <a href=
797     "https://invisible-island.net/ncurses/terminfo.src.html#tic-ecma_strikeout">
798     ecma+strikeout</a> to <a href=
799     "https://invisible-island.net/ncurses/terminfo.src.html#tic-ms-terminal">
800     ms-terminal</a>, but cancel the non-working Cr and Ms
801     capabilities</li>
802   </ul>
803
804   <h3><a name="h3-documentation" id=
805   "h3-documentation">Documentation</a></h3>
806
807   <p>As usual, this release</p>
808
809   <ul>
810     <li>
811       <p>improves documentation by describing new features,</p>
812     </li>
813
814     <li>
815       <p>attempts to improve the description of features which
816       users have found confusing</p>
817     </li>
818
819     <li>
820       <p>fills in overlooked descriptions of features which were
821       described in the <a href=
822       "https://invisible-island.net/ncurses/NEWS.html">NEWS</a>
823       file but treated sketchily in manual pages.</p>
824     </li>
825   </ul>
826
827   <p>In addition to providing background information to explain
828   these features and show how they evolved, there are corrections,
829   clarifications, etc.:</p>
830
831   <ul>
832     <li>
833       <p>Corrections:</p>
834
835       <ul>
836         <li>
837           <p>make <em>opts</em> extension for <a href=
838           "https://invisible-island.net/ncurses/man/curs_getcchar.3x.html#h3-getcchar">
839           <tt>getcchar</tt></a> work as documented for <a href=
840           "https://invisible-island.net/ncurses/announce-6.1.html#h4-new-library">
841           ncurses 6.1</a>, adding &ldquo;<tt>-g</tt>&rdquo; flag to
842           <em>demo_new_pair</em> to illustrate.</p>
843         </li>
844
845         <li>
846           <p>modify <a href=
847           "https://invisible-island.net/ncurses/man/tset.1.html">tset</a>
848           &ldquo;-q&rdquo; option to refrain from modifying
849           terminal modes, to match the documentation.</p>
850         </li>
851       </ul>
852     </li>
853
854     <li>
855       <p>New/improved history and portability sections:</p>
856
857       <ul>
858         <li>
859           <p>improve documentation for <a href=
860           "https://invisible-island.net/ncurses/man/terminfo.5.html#h3-Parameterized-Strings">
861           tparm</a> and static/dynamic variables.</p>
862         </li>
863
864         <li>
865           <p>add history note to <a href=
866           "https://invisible-island.net/ncurses/man/curs_scanw.3x.html#h2-HISTORY">
867           curs_scanw.3x</a> for &lt;stdarg.h&gt; and
868           &lt;varargs.h&gt;</p>
869         </li>
870
871         <li>
872           <p>add history note to <a href=
873           "https://invisible-island.net/ncurses/man/curs_printw.3x.html#h2-HISTORY">
874           curs_printw.3x</a> for &lt;stdarg.h&gt; and
875           &lt;varargs.h&gt;</p>
876         </li>
877
878         <li>
879           <p>add portability note to <a href=
880           "https://invisible-island.net/ncurses/man/ncurses.3x.html#h3-Header-files">
881           ncurses.3x</a> regarding &lt;stdarg.h&gt;</p>
882         </li>
883
884         <li>
885           <p>add historical notes to <a href=
886           "https://invisible-island.net/ncurses/man/tput.1.html#h2-HISTORY">
887           tput</a>, <a href=
888           "https://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h2-HISTORY">
889           curses-terminfo</a> and <a href=
890           "https://invisible-island.net/ncurses/man/curs_color.3x.html#h2-HISTORY">
891           curses-color</a> manpages based on source-code for SVr2,
892           SVr3 and SVr4.</p>
893         </li>
894
895         <li>
896           <p>improve history section for <a href=
897           "https://invisible-island.net/ncurses/man/tset.1.html#h2-HISTORY">
898           tset</a> manpage based on the 1BSD tarball, which
899           preceded BSD's SCCS checkins by more than three
900           years.</p>
901         </li>
902       </ul>
903     </li>
904
905     <li>
906       <p>Other improvements:</p>
907
908       <ul>
909         <li>
910           <p>explain in <a href=
911           "https://invisible-island.net/ncurses/man/ncurses.3x.html#h2-ALTERNATE-CONFIGURATIONS">
912           ncurses.3x</a> that functions in the tinfo library do not
913           rely upon wide-characters.</p>
914         </li>
915
916         <li>
917           <p>improve manual page for <a href=
918           "https://invisible-island.net/ncurses/man/panel.3x.html#h2-PORTABILITY">
919           panel</a> library, extending the portability section as
920           well as documenting error-returns.</p>
921         </li>
922
923         <li>
924           <p>add section on margins to <a href=
925           "https://invisible-island.net/ncurses/man/terminfo.5.html#h3-Margins">
926           terminfo.5</a>, adapted from X/Open Curses.</p>
927         </li>
928
929         <li>
930           <p>improve <a href=
931           "https://invisible-island.net/ncurses/man/term.5.html#h3-LEGACY-STORAGE-FORMAT">
932           man/term.5</a> section on legacy storage format.</p>
933         </li>
934
935         <li>
936           <p>add a note in <a href=
937           "https://invisible-island.net/ncurses/man/terminfo.5.html#h3-Predefined-Capabilities">
938           terminfo.5</a> explaining that no-parameter strings such
939           as <em><tt>sgr0</tt></em> or <em><tt>cnorm</tt></em>
940           should not be used with tparm.</p>
941         </li>
942
943         <li>
944           <p>improve description of BSD-style padding in <a href=
945           "https://invisible-island.net/ncurses/man/curs_termcap.3x.html#h2-BUGS">
946           curs_termcap.3x</a></p>
947         </li>
948
949         <li>
950           <p>improve discussion of padding versus <tt>tparm</tt>
951           and <tt>tputs</tt> in <a href=
952           "https://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Formatting-Output">
953           man/curs_terminfo.3x</a></p>
954         </li>
955
956         <li>
957           <p>add a note in manual page to explain <a href=
958           "https://invisible-island.net/ncurses/man/curs_getch.3x.html#h3-Ungetting-characters">
959           ungetch</a> vs <a href=
960           "https://invisible-island.net/ncurses/man/curs_get_wch.3x.html#h3-unget_wch">
961           unget_wch</a>.</p>
962         </li>
963
964         <li>
965           <p>improve description of error-returns in <a href=
966           "https://invisible-island.net/ncurses/man/curs_addch.3x.html#h2-RETURN-VALUE">
967           waddch</a> and <a href=
968           "https://invisible-island.net/ncurses/man/curs_addstr.3x.html#h2-RETURN-VALUE">
969           waddnstr</a> manual pages.</p>
970         </li>
971       </ul>
972     </li>
973   </ul>
974
975   <p>There are no new manual pages (all of the manual page updates
976   are to existing pages).</p>
977
978   <p>Some of the improvements are more subtle, relating to the way
979   the information is presented. For instance, hyphenation is
980   suppressed in the HTML files generated from manual pages because
981   an upgrade to <em>groff</em> gave noticeably poorer results,
982   interfering with the process of creating links between the
983   resulting webpages.</p>
984
985   <h3><a name="h3-bug-fixes" id="h3-bug-fixes">Interesting
986   bug-fixes</a></h3>
987
988   <p>While there were many bugs fixed during development of ncurses
989   6.3, only a few (the reason for this release) were both important
990   and interesting. Most of the bug-fixes were for local issues
991   which did not affect compatibility across releases. Since those
992   are detailed in the <a href=
993   "https://invisible-island.net/ncurses/NEWS.html#t20211018">NEWS</a>
994   file no elaboration is needed here.</p>
995
996   <p>The interesting bugs were:</p>
997
998   <ul>
999     <li>
1000       <p>modify <a href=
1001       "https://invisible-island.net/ncurses/man/curs_bkgd.3x.html#h3-bkgd">
1002       wbkgd</a> and <a href=
1003       "https://invisible-island.net/ncurses/man/curs_bkgrnd.3x.html#h3-bkgrnd">
1004       wbkgrnd</a> to avoid storing a null in the background
1005       character, because it may be used in cases where the
1006       corresponding 0x80 is not treated as a null.</p>
1007
1008       <p>This was a regression introduced in ncurses 6.2 (<a href=
1009       "https://lists.gnu.org/archive/html/bug-ncurses/2020-03/msg00000.html">reported</a>
1010       on the mailing list), for which the workaround was to specify
1011       a blank for the background character.</p>
1012     </li>
1013
1014     <li>
1015       <p>remove output-related checks for <a href=
1016       "https://invisible-island.net/ncurses/man/curs_outopts.3x.html">
1017       nl/nonl</a> (also <a href=
1018       "https://lists.gnu.org/archive/html/bug-ncurses/2020-09/msg00018.html">
1019       reported</a> on the mailing list).</p>
1020     </li>
1021
1022     <li>
1023       <p>improve tparm implementation of <tt>%P</tt> and
1024       <tt>%g</tt>, more closely matching SVr4 terminfo. Those
1025       denote <em>static</em> and <em>dynamic</em> variables in
1026       terminfo expressions.</p>
1027
1028       <p>Exactly what those terms meant was never documented before
1029       in any implementation of curses, aside from source code.
1030       Unlike the other two fixes, the problem was discovered while
1031       studying OpenBSD's version of <a href=
1032       "https://invisible-island.net/ncurses/ncurses-openbsd.html#issue_tput">
1033       tset</a>.</p>
1034     </li>
1035   </ul>
1036
1037   <h3><a name="h3-config-config" id=
1038   "h3-config-config">Configuration changes</a></h3>
1039
1040   <h4><a name="h4-config-major" id="h4-config-major">Major
1041   changes</a></h4>
1042
1043   <p>There are no major changes. Several new options were added to
1044   ease integration of packages with systems using different
1045   versions of <em>GNAT</em> and <em>ncurses</em>. Also,
1046   improvements were made to configure checks.</p>
1047
1048   <h4><a name="h4-config-options" id=
1049   "h4-config-options">Configuration options</a></h4>
1050
1051   <p>There are a few new/modified configure options:</p>
1052
1053   <dl>
1054     <dt><tt>--enable-fvisibility</tt>
1055     </dt>
1056
1057     <dd>
1058       <p>new configure option and check for <em>gcc</em>
1059       <tt>-fvisibility=hidden</tt> feature</p>
1060     </dd>
1061
1062     <dt><tt>--enable-leaks</tt>
1063     </dt>
1064
1065     <dd>
1066       <p>corrected to allow turning leak-checking off later in a
1067       set of options.</p>
1068     </dd>
1069
1070     <dt><tt>--enable-stdnoreturn</tt>
1071     </dt>
1072
1073     <dd>
1074       <p>new configure option makes the <code>_Noreturn</code>
1075       keyword optional to ease transition.</p>
1076     </dd>
1077
1078     <dt><tt>--disable-pkg-ldflags</tt>
1079     </dt>
1080
1081     <dd>
1082       <p>revised option also controls whether <code>$LDFLAGS</code>
1083       from the build is provided in &ldquo;<tt>-config</tt>&rdquo;
1084       and &ldquo;<tt>.pc</tt>&rdquo; files.</p>
1085     </dd>
1086
1087     <dt><tt>--disable-root-access</tt>
1088     </dt>
1089
1090     <dd>
1091       <p>add configure option which tells ncurses to disallow most
1092       file-opens by setuid processes.</p>
1093     </dd>
1094
1095     <dt><tt>--disable-wattr-macros</tt>
1096     </dt>
1097
1098     <dd>
1099       <p>changed default to help packagers who reuse wide ncursesw
1100       header file with non-wide ncurses library.</p>
1101     </dd>
1102
1103     <dt><tt>--with-pkg-config-libdir</tt>
1104     </dt>
1105
1106     <dd>
1107       <p>revised option uses the actual search path from
1108       <em>pkg-config</em> or <em>pkgconf</em> using the output from
1109       <tt>--debug</tt>.</p>
1110     </dd>
1111
1112     <dt><tt>--with-ada-libname</tt><br>
1113     <tt>--with-form-libname</tt><br>
1114     <tt>--with-menu-libname</tt><br>
1115     <tt>--with-panel-libname</tt>
1116     </dt>
1117
1118     <dd>
1119       <p>new several <tt>--with-<em>xxx</em>-libname</tt> options,
1120       to help with pkgsrc</p>
1121     </dd>
1122   </dl>
1123
1124   <h3><a name="h3-portability" id="h3-portability">Portability</a></h3>
1125
1126   <p>Many of the portability changes are implemented via the
1127   configure script:</p>
1128
1129   <ul>
1130     <li>
1131       <p>add a special case in the configure script to work around
1132       one of the build-time breakages reported for <a href=
1133       "https://invisible-island.net/ncurses/ncurses-openbsd.html">OpenBSD
1134       6</a> here:</p>
1135
1136       <blockquote>
1137         <p><a href=
1138         "https://www.mail-archive.com/bugs@openbsd.org/msg13200.html">
1139         https://www.mail-archive.com/bugs@openbsd.org/msg13200.html</a></p>
1140       </blockquote>
1141     </li>
1142
1143     <li>
1144       <p>modify configure check for <em>libtool</em> to prevent
1145       accidental use of an OpenBSD program which uses the same
1146       name.</p>
1147     </li>
1148
1149     <li>
1150       <p>modify configuration checks for build-time tic/infocmp to
1151       use <em>AC_CHECK_TOOL</em>. That can still be overridden by
1152       <tt>--with-tic-path</tt> and <tt>--with-infocmp-path</tt>
1153       when fallbacks are used, but even if not using fallbacks, the
1154       improved check may help with cross-compiling.</p>
1155     </li>
1156
1157     <li>
1158       <p>relax modification-time comparison in
1159       <em>CF_LINK_FUNCS</em> to allow it to accept link() function
1160       with NFS filesystems which change the mtime on the link
1161       target, e.g., several BSD systems.</p>
1162     </li>
1163
1164     <li>
1165       <p>modify configure check for c89/c99 aliases of
1166       <em>clang</em> to use its <tt>-std</tt> option instead,
1167       because some platforms, in particular macOS, do not provide
1168       workable c89/c99 aliases.</p>
1169     </li>
1170
1171     <li>
1172       <p>modify <em>CF_NCURSES_CONFIG</em> to work around
1173       <em>Xcode</em>'s c99 "-W" option, which conflicts with
1174       conventional use for passing linker options.</p>
1175     </li>
1176
1177     <li>
1178       <p>modify configure scripts to filter out redefinitions of
1179       _XOPEN_SOURCE, e.g., for NetBSD which generally supports 500,
1180       but 600 is needed for ncursesw.</p>
1181     </li>
1182   </ul>
1183
1184   <p>Here are some of the other portability fixes:</p>
1185
1186   <ul>
1187     <li>
1188       <p>change configure-check and source-code for gcc's noreturn
1189       attribute to assume it is a prefix rather than suffix,
1190       matching c11's _Noreturn convention.</p>
1191     </li>
1192
1193     <li>
1194       <p>modify mk-1st.awk to account for extra-suffix configure
1195       option.</p>
1196     </li>
1197
1198     <li>
1199       <p>build-fix for termsort module when configured with
1200       termcap.</p>
1201     </li>
1202
1203     <li>
1204       <p>modify configure script and makefiles to support ".PHONY"
1205       make program feature.</p>
1206     </li>
1207
1208     <li>
1209       <p>amend <em>libtool</em> configuration to add dependency for
1210       install.tic, etc., in ncurses/Makefile on the lower-level
1211       libraries.</p>
1212     </li>
1213
1214     <li>
1215       <p>modify Ada95 source-generation utility to write to a file
1216       given as parameter rather than to the standard output,
1217       allowing builds with MinGW.</p>
1218     </li>
1219
1220     <li>
1221       <p>amend tic/infocmp check to allow for the respective tool's
1222       absence.</p>
1223     </li>
1224
1225     <li>
1226       <p>build-fixes for gnat 10.1.1, whose gnatmake drops
1227       integration with gprbuild.</p>
1228     </li>
1229
1230     <li>
1231       <p>correct configure version-check/warning for g++ to allow
1232       for 10.x</p>
1233     </li>
1234   </ul>
1235
1236   <hr>
1237
1238   <h2><a name="h2-features" id="h2-features">Features of
1239   <span class="main-name">ncurses</span></a></h2>
1240
1241   <p>The <span class="main-name">ncurses</span> package is fully
1242   upward-compatible with SVr4 (System V Release 4) curses:</p>
1243
1244   <ul>
1245     <li>
1246       <p>All of the SVr4 calls have been implemented (and are
1247       documented).</p>
1248     </li>
1249
1250     <li>
1251       <p><span class="main-name">ncurses</span> supports all of the
1252       for SVr4 curses features including keyboard mapping, color,
1253       forms-drawing with ACS characters, and automatic recognition
1254       of keypad and function keys.</p>
1255     </li>
1256
1257     <li>
1258       <p><span class="main-name">ncurses</span> provides these SVr4
1259       add-on libraries (not part of X/Open Curses):</p>
1260
1261       <ul>
1262         <li>
1263           <p>the panels library, supporting a stack of windows with
1264           backing store.</p>
1265         </li>
1266
1267         <li>
1268           <p>the menus library, supporting a uniform but flexible
1269           interface for menu programming.</p>
1270         </li>
1271
1272         <li>
1273           <p>the form library, supporting data collection through
1274           on-screen forms.</p>
1275         </li>
1276       </ul>
1277     </li>
1278
1279     <li>
1280       <p><span class="main-name">ncurses</span>'s terminal database
1281       is fully compatible with that used by SVr4 curses.</p>
1282
1283       <ul>
1284         <li>
1285           <p><span class="main-name">ncurses</span> supports
1286           user-defined capabilities which it can see, but which are
1287           hidden from SVr4 curses applications using the
1288           <em>same</em> terminal database.</p>
1289         </li>
1290
1291         <li>
1292           <p>It can be optionally configured to match the format
1293           used in related systems such as AIX and Tru64.</p>
1294         </li>
1295
1296         <li>
1297           <p>Alternatively, <span class="main-name">ncurses</span>
1298           can be configured to use hashed databases rather than the
1299           directory of files used by SVr4 curses.</p>
1300         </li>
1301       </ul>
1302     </li>
1303
1304     <li>
1305       <p>The <span class="main-name">ncurses</span> utilities have
1306       options to allow you to filter terminfo entries for use with
1307       less capable <em>curses</em>/<em>terminfo</em> versions such
1308       as the HP-UX and AIX ports.</p>
1309     </li>
1310   </ul>
1311
1312   <p>The <span class="main-name">ncurses</span> package also has
1313   many useful extensions over SVr4:</p>
1314
1315   <ul>
1316     <li>
1317       <p>The API is 8-bit clean and base-level conformant with the
1318       X/OPEN curses specification, XSI curses (that is, it
1319       implements all <em>BASE</em> level features, and most
1320       <em>EXTENDED</em> features). It includes many function calls
1321       not supported under SVr4 curses (but portability of all calls
1322       is documented so you can use the SVr4 subset only).</p>
1323     </li>
1324
1325     <li>
1326       <p>Unlike SVr3 curses, <span class="main-name">ncurses</span>
1327       can write to the rightmost-bottommost corner of the screen if
1328       your terminal has an insert-character capability.</p>
1329     </li>
1330
1331     <li>
1332       <p>Ada95 and C++ bindings.</p>
1333     </li>
1334
1335     <li>
1336       <p>Support for mouse event reporting with X Window xterm and
1337       FreeBSD and OS/2 console windows.</p>
1338     </li>
1339
1340     <li>
1341       <p>Extended mouse support via Alessandro Rubini's gpm
1342       package.</p>
1343     </li>
1344
1345     <li>
1346       <p>The function <code>wresize</code> allows you to resize
1347       windows, preserving their data.</p>
1348     </li>
1349
1350     <li>
1351       <p>The function <code>use_default_colors</code> allows you to
1352       use the terminal's default colors for the default color pair,
1353       achieving the effect of transparent colors.</p>
1354     </li>
1355
1356     <li>
1357       <p>The functions <code>keyok</code> and
1358       <code>define_key</code> allow you to better control the use
1359       of function keys, e.g., disabling the <span class=
1360       "main-name">ncurses</span> KEY_MOUSE, or by defining more
1361       than one control sequence to map to a given key code.</p>
1362     </li>
1363
1364     <li>
1365       <p>Support for direct-color terminals, such as modern
1366       xterm.</p>
1367     </li>
1368
1369     <li>
1370       <p>Support for 256-color terminals, such as modern xterm.</p>
1371     </li>
1372
1373     <li>
1374       <p>Support for 16-color terminals, such as <em>aixterm</em>
1375       and <em>modern xterm</em>.</p>
1376     </li>
1377
1378     <li>
1379       <p>Better cursor-movement optimization. The package now
1380       features a cursor-local-movement computation more efficient
1381       than either BSD's or System V's.</p>
1382     </li>
1383
1384     <li>
1385       <p>Super hardware scrolling support. The screen-update code
1386       incorporates a novel, simple, and cheap algorithm that
1387       enables it to make optimal use of hardware scrolling,
1388       line-insertion, and line-deletion for screen-line movements.
1389       This algorithm is more powerful than the 4.4BSD curses
1390       <code>quickch</code> routine.</p>
1391     </li>
1392
1393     <li>
1394       <p>Real support for terminals with the magic-cookie glitch.
1395       The screen-update code will refrain from drawing a highlight
1396       if the magic- cookie unattributed spaces required just before
1397       the beginning and after the end would step on a non-space
1398       character. It will automatically shift highlight boundaries
1399       when doing so would make it possible to draw the highlight
1400       without changing the visual appearance of the screen.</p>
1401     </li>
1402
1403     <li>
1404       <p>It is possible to generate the library with a list of
1405       pre-loaded fallback entries linked to it so that it can serve
1406       those terminal types even when no terminfo tree or termcap
1407       file is accessible (this may be useful for support of
1408       screen-oriented programs that must run in single-user
1409       mode).</p>
1410     </li>
1411
1412     <li>
1413       <p>The <a href=
1414       "https://invisible-island.net/ncurses/man/tic.1m.html"><span class="part-name">
1415       tic</span></a>/<a href=
1416       "https://invisible-island.net/ncurses/man/captoinfo.1m.html">captoinfo</a>
1417       utility provided with <span class="main-name">ncurses</span>
1418       has the ability to translate many termcaps from the XENIX,
1419       IBM and AT&amp;T extension sets.</p>
1420     </li>
1421
1422     <li>
1423       <p>A BSD-like <a href=
1424       "https://invisible-island.net/ncurses/man/tset.1.html"><span class="part-name">
1425       tset</span></a> utility is provided.</p>
1426     </li>
1427
1428     <li>
1429       <p>The <span class="main-name">ncurses</span> library and
1430       utilities will automatically read terminfo entries from
1431       $HOME/.terminfo if it exists, and compile to that directory
1432       if it exists and the user has no write access to the system
1433       directory. This feature makes it easier for users to have
1434       personal terminfo entries without giving up access to the
1435       system terminfo directory.</p>
1436     </li>
1437
1438     <li>
1439       <p>You may specify a path of directories to search for
1440       compiled descriptions with the environment variable
1441       TERMINFO_DIRS (this generalizes the feature provided by
1442       TERMINFO under stock System V.)</p>
1443     </li>
1444
1445     <li>
1446       <p>In terminfo source files, use capabilities may refer not
1447       just to other entries in the same source file (as in System
1448       V) but also to compiled entries in either the system terminfo
1449       directory or the user's $HOME/.terminfo directory.</p>
1450     </li>
1451
1452     <li>
1453       <p>The table-of-entries utility <a href=
1454       "https://invisible-island.net/ncurses/man/toe.1m.html"><span class="part-name">
1455       toe</span></a> makes it easy for users to see exactly what
1456       terminal types are available on the system.</p>
1457     </li>
1458
1459     <li>
1460       <p>The library meets the XSI requirement that every macro
1461       entry point has a corresponding function which may be linked
1462       (and will be prototype-checked) if the macro definition is
1463       disabled with <code>#undef</code>.</p>
1464     </li>
1465
1466     <li>
1467       <p>Extensive documentation is provided (see the <em><a href=
1468       "https://invisible-island.net/ncurses/ncurses.faq.html#additional_reading">
1469       Additional Reading</a></em> section of the <em><a href=
1470       "https://invisible-island.net/ncurses/ncurses.faq.html"><span class="main-name">
1471       ncurses</span> FAQ</a></em> for online documentation).</p>
1472     </li>
1473   </ul>
1474
1475   <h2><a name="h2-who-uses" id="h2-who-uses">Applications using
1476   <span class="main-name">ncurses</span></a></h2>
1477
1478   <p>The <span class="main-name">ncurses</span> distribution
1479   includes a selection of test programs (including a few games).
1480   These are available separately as <a href=
1481   "https://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a></p>
1482
1483   <p>The ncurses library has been tested with a wide variety of
1484   applications including:</p>
1485
1486   <blockquote>
1487     <dl>
1488       <dt><span class="part-name">aptitude</span>
1489       </dt>
1490
1491       <dd>
1492         <p>FrontEnd to Apt, the debian package manager</p>
1493
1494         <p><a href=
1495         "https://wiki.debian.org/Aptitude">https://wiki.debian.org/Aptitude</a></p>
1496       </dd>
1497
1498       <dt><span class="part-name">cdk</span>
1499       </dt>
1500
1501       <dd>
1502         <p>Curses Development Kit</p>
1503
1504         <p><a href=
1505         "https://invisible-island.net/cdk/">https://invisible-island.net/cdk/</a><br>
1506
1507         </p>
1508       </dd>
1509
1510       <dt><span class="part-name">ded</span>
1511       </dt>
1512
1513       <dd>
1514         <p>directory-editor</p>
1515
1516         <p><a href=
1517         "https://invisible-island.net/ded/">https://invisible-island.net/ded/</a></p>
1518       </dd>
1519
1520       <dt><span class="part-name">dialog</span>
1521       </dt>
1522
1523       <dd>
1524         <p>the underlying application used in Slackware's setup,
1525         and the basis for similar install/configure applications on
1526         many systems.</p>
1527
1528         <p><a href=
1529         "https://invisible-island.net/dialog/">https://invisible-island.net/dialog/</a></p>
1530       </dd>
1531
1532       <dt><span class="part-name">lynx</span>
1533       </dt>
1534
1535       <dd>
1536         <p>the text WWW browser</p>
1537
1538         <p><a href=
1539         "https://lynx.invisible-island.net/">https://lynx.invisible-island.net/</a></p>
1540       </dd>
1541
1542       <dt><span class="part-name">mutt</span>
1543       </dt>
1544
1545       <dd>
1546         <p>mail utility</p>
1547
1548         <p><a href="http://www.mutt.org/">http://www.mutt.org/</a></p>
1549       </dd>
1550
1551       <dt><span class="part-name">ncftp</span>
1552       </dt>
1553
1554       <dd>
1555         <p>file-transfer utility</p>
1556
1557         <p><a href=
1558         "https://www.ncftp.com/">https://www.ncftp.com/</a></p>
1559       </dd>
1560
1561       <dt><span class="part-name">nvi</span>
1562       </dt>
1563
1564       <dd>
1565         <p>New vi uses ncurses.</p>
1566
1567         <p><a href=
1568         "https://sites.google.com/a/bostic.com/keithbostic/vi">https://sites.google.com/a/bostic.com/keithbostic/vi</a><br>
1569
1570         </p>
1571       </dd>
1572
1573       <dt><span class="part-name">ranger</span>
1574       </dt>
1575
1576       <dd>
1577         <p>A console file manager with VI key bindings in
1578         <em>Python</em>.</p>
1579
1580         <p><a href=
1581         "https://ranger.github.io/">https://ranger.github.io/</a></p>
1582       </dd>
1583
1584       <dt><span class="part-name">tin</span>
1585       </dt>
1586
1587       <dd>
1588         <p>newsreader, supporting color, MIME</p>
1589
1590         <p><a href="http://www.tin.org/">http://www.tin.org/</a></p>
1591       </dd>
1592
1593       <dt><span class="part-name">vifm</span>
1594       </dt>
1595
1596       <dd>
1597         <p>File manager with vi like keybindings</p>
1598
1599         <p><a href="https://vifm.info/">https://vifm.info/</a></p>
1600       </dd>
1601     </dl>
1602   </blockquote>
1603
1604   <p>as well as some that use <span class=
1605   "main-name">ncurses</span> for the terminfo support alone:</p>
1606
1607   <blockquote>
1608     <dl>
1609       <dt><span class="part-name">minicom</span>
1610       </dt>
1611
1612       <dd>
1613         <p>terminal emulator for serial modem connections</p>
1614
1615         <p><a href=
1616         "https://alioth.debian.org/projects/minicom/">https://alioth.debian.org/projects/minicom/</a></p>
1617       </dd>
1618
1619       <dt><span class="part-name">mosh</span>
1620       </dt>
1621
1622       <dd>
1623         <p>a replacement for <code>ssh</code>.</p>
1624
1625         <p><a href="https://mosh.org/">https://mosh.org/</a></p>
1626       </dd>
1627
1628       <dt><span class="part-name">tack</span>
1629       </dt>
1630
1631       <dd>
1632         <p>terminfo action checker</p>
1633
1634         <p><a href=
1635         "https://invisible-island.net/ncurses/tack.html">https://invisible-island.net/ncurses/tack.html</a></p>
1636       </dd>
1637
1638       <dt><span class="part-name">tmux</span>
1639       </dt>
1640
1641       <dd>
1642         <p>terminal multiplexor</p>
1643
1644         <p><a href=
1645         "https://github.com/tmux/tmux/wiki">https://github.com/tmux/tmux/wiki</a></p>
1646       </dd>
1647
1648       <dt><span class="part-name">vile</span>
1649       </dt>
1650
1651       <dd>
1652         <p><em>vi-like-emacs</em> may be built to use the terminfo,
1653         termcap or curses interfaces.</p>
1654
1655         <p><a href=
1656         "https://invisible-island.net/vile/">https://invisible-island.net/vile/</a></p>
1657       </dd>
1658     </dl>
1659   </blockquote>
1660
1661   <p>and finally, those which use only the termcap interface:</p>
1662
1663   <blockquote>
1664     <dl>
1665       <dt><span class="part-name">emacs</span>
1666       </dt>
1667
1668       <dd>
1669         <p>text editor</p>
1670
1671         <p><a href=
1672         "https://www.gnu.org/software/emacs/">https://www.gnu.org/software/emacs/</a></p>
1673       </dd>
1674
1675       <dt><span class="part-name">less</span>
1676       </dt>
1677
1678       <dd>
1679         <p>The most commonly used <em>pager</em> (a program that
1680         displays text files).</p>
1681
1682         <p><a href=
1683         "http://www.greenwoodsoftware.com/less/">http://www.greenwoodsoftware.com/less/</a></p>
1684       </dd>
1685
1686       <dt><span class="part-name">screen</span>
1687       </dt>
1688
1689       <dd>
1690         <p>terminal multiplexor</p>
1691
1692         <p><a href=
1693         "https://www.gnu.org/software/screen/">https://www.gnu.org/software/screen/</a></p>
1694       </dd>
1695
1696       <dt><span class="part-name">vim</span>
1697       </dt>
1698
1699       <dd>
1700         <p>text editor</p>
1701
1702         <p><a href="https://www.vim.org/">https://www.vim.org/</a></p>
1703       </dd>
1704     </dl>
1705   </blockquote>
1706
1707   <h2><a name="h2-development" id="h2-development">Development
1708   activities</a></h2>
1709
1710   <p>Zeyd Ben-Halim started <span class="main-name">ncurses</span>
1711   from a previous package pcurses, written by Pavel Curtis. Eric S.
1712   Raymond continued development. J&uuml;rgen Pfeifer wrote most of
1713   the form and menu libraries.</p>
1714
1715   <p>Ongoing development work is done by <a href=
1716   "mailto:dickey@invisible-island.net">Thomas E. Dickey</a>. Thomas
1717   E. Dickey has acted as the maintainer for the Free Software
1718   Foundation, which held a <a href=
1719   "https://invisible-island.net/ncurses/ncurses-license.html">copyright
1720   on ncurses</a> for releases 4.2 through 6.1. Following the
1721   release of ncurses 6.1, effective as of release 6.2, copyright
1722   for ncurses reverted to Thomas E. Dickey (see the <a href=
1723   "https://invisible-island.net/ncurses/ncurses.faq.html#relicensed">
1724   ncurses FAQ</a> for additional information).</p>
1725
1726   <p>Contact the current maintainers at</p>
1727
1728   <blockquote>
1729     <a href="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</a>
1730   </blockquote>
1731
1732   <p>To join the ncurses mailing list, please write email to</p>
1733
1734   <blockquote>
1735     <a href=
1736     "mailto:bug-ncurses-request@gnu.org">bug-ncurses-request@gnu.org</a>
1737   </blockquote>
1738   containing the line:
1739   <blockquote>
1740     <p><code>subscribe</code>
1741     <em>&lt;name&gt;@&lt;host.domain&gt;</em></p>
1742   </blockquote>
1743
1744   <p>This list is open to anyone interested in helping with the
1745   development and testing of this package.</p>
1746
1747   <p>Beta versions of <span class="main-name">ncurses</span> are
1748   made available at</p>
1749
1750   <blockquote>
1751     <p><a href=
1752     "ftp://ftp.invisible-island.net/ncurses/current/">ftp://ftp.invisible-island.net/ncurses/current/</a>
1753     and<br>
1754     <a href=
1755     "https://invisible-mirror.net/archives/ncurses/current/">https://invisible-mirror.net/archives/ncurses/current/</a>&nbsp;.</p>
1756   </blockquote>
1757
1758   <p>Patches to the current release are made available at</p>
1759
1760   <blockquote>
1761     <p><a href=
1762     "ftp://ftp.invisible-island.net/ncurses/6.2/">ftp://ftp.invisible-island.net/ncurses/6.2/</a>
1763     and<br>
1764     <a href=
1765     "https://invisible-mirror.net/archives/ncurses/6.2/">https://invisible-mirror.net/archives/ncurses/6.2/</a>&nbsp;.</p>
1766   </blockquote>
1767
1768   <p>There is an archive of the mailing list here:</p>
1769
1770   <blockquote>
1771     <p><a href=
1772     "http://lists.gnu.org/archive/html/bug-ncurses">http://lists.gnu.org/archive/html/bug-ncurses</a>
1773     (also <a href=
1774     "https://lists.gnu.org/archive/html/bug-ncurses">https</a>)</p>
1775   </blockquote>
1776
1777   <h2><a name="h2-this-stuff" id="h2-this-stuff">Related
1778   resources</a></h2>
1779
1780   <p>The release notes make scattered references to these pages,
1781   which may be interesting by themselves:</p>
1782
1783   <ul>
1784     <li><a href=
1785     "https://invisible-island.net/ncurses/ncurses-license.html"><span class="main-name">
1786     ncurses</span> licensing</a></li>
1787
1788     <li><a href=
1789     "https://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol
1790     versioning in <span class="main-name">ncurses</span></a></li>
1791
1792     <li><a href=
1793     "https://invisible-island.net/ncurses/ncurses-slang.html">Comments
1794     on <span class="main-name">ncurses</span> versus <span class=
1795     "main-name">slang</span> (S-Lang)</a></li>
1796
1797     <li><a href=
1798     "https://invisible-island.net/ncurses/ncurses-openbsd.html">Comments
1799     on <span class="main-name">OpenBSD</span></a></li>
1800
1801     <li><a href=
1802     "https://invisible-island.net/ncurses/tack.html">tack &ndash;
1803     terminfo action checker</a></li>
1804
1805     <li><a href=
1806     "https://invisible-island.net/ncurses/tctest.html">tctest
1807     &ndash; termcap library checker</a></li>
1808
1809     <li><a href=
1810     "https://invisible-island.net/ncurses/ncurses.html#download_database">
1811     Terminal Database</a></li>
1812   </ul>
1813
1814   <h2><a name="h2-other-stuff" id="h2-other-stuff">Other
1815   resources</a></h2>
1816
1817   <p>The distribution provides a newer version of the
1818   terminfo-format terminal description file once maintained by
1819   <a href="http://www.catb.org/~esr/terminfo/">Eric
1820   Raymond</a>&nbsp;. Unlike the older version, the termcap and
1821   terminfo data are provided in the same file, which also provides
1822   several user-definable extensions beyond the X/Open
1823   specification.</p>
1824
1825   <p>You can find lots of information on terminal-related topics
1826   not covered in the terminfo file at <a href=
1827   "http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal">
1828   Richard Shuford's archive</a>&nbsp;. The collection of computer
1829   manuals at <a href=
1830   "http://www.bitsavers.org/pdf/">bitsavers.org</a> has also been
1831   useful.</p>
1832
1833   <div class="nav">
1834     <ul>
1835       <li><a href="#h2-overview">Overview</a></li>
1836
1837       <li>
1838         <a href="#h2-release-notes">Release Notes</a>
1839         <ul>
1840           <li>
1841             <a href="#h3-library">Library improvements</a>
1842             <ul>
1843               <li><a href="#h4-new-library">New features</a></li>
1844
1845               <li><a href="#h4-fixes-library">Other
1846               improvements</a></li>
1847             </ul>
1848           </li>
1849
1850           <li>
1851             <a href="#h3-programs">Program improvements</a>
1852             <ul>
1853               <li><a href="#h4-utilities">Utilities</a></li>
1854
1855               <li><a href="#h4-examples">Examples</a></li>
1856             </ul>
1857           </li>
1858
1859           <li><a href="#h3-database">Terminal database</a></li>
1860
1861           <li><a href="#h3-documentation">Documentation</a></li>
1862
1863           <li><a href="#h3-bug-fixes">Interesting bug-fixes</a></li>
1864
1865           <li>
1866             <a href="#h3-config-config">Configuration changes</a>
1867             <ul>
1868               <li><a href="#h4-config-major">Major changes</a></li>
1869
1870               <li><a href="#h4-config-options">Configuration
1871               options</a></li>
1872             </ul>
1873           </li>
1874
1875           <li><a href="#h3-portability">Portability</a></li>
1876         </ul>
1877       </li>
1878
1879       <li><a href="#h2-features">Features of <span class=
1880       "main-name">ncurses</span></a></li>
1881
1882       <li><a href="#h2-who-uses">Applications using <span class=
1883       "main-name">ncurses</span></a></li>
1884
1885       <li><a href="#h2-development">Development activities</a></li>
1886
1887       <li><a href="#h2-this-stuff">Related resources</a></li>
1888
1889       <li><a href="#h2-other-stuff">Other resources</a></li>
1890     </ul>
1891   </div>
1892 </body>
1893 </html>