1 Announcing ncurses 6.2 2 3Overview 4 5 The ncurses (new curses) library is a free software emulation of 6 curses in System V Release 4.0 (SVr4), and more. It uses terminfo 7 format, supports pads and color and multiple highlights and forms 8 characters and function-key mapping, and has all the other SVr4-curses 9 enhancements over BSD curses. SVr4 curses became the basis of X/Open 10 Curses. 11 12 In mid-June 1995, the maintainer of 4.4BSD curses declared that he 13 considered 4.4BSD curses obsolete, and encouraged the keepers of unix 14 releases such as BSD/OS, FreeBSD and NetBSD to switch over to ncurses. 15 16 Since 1995, ncurses has been ported to many systems: 17 * It is used in almost every system based on the Linux kernel (aside 18 from some embedded applications). 19 * It is used as the system curses library on OpenBSD, FreeBSD and 20 MacOS. 21 * It is used in environments such as Cygwin and MinGW. The first of 22 these was EMX on OS/2 Warp. 23 * It is used (though usually not as the system curses) on all of the 24 vendor unix systems, e.g., AIX, HP-UX, IRIX64, SCO, Solaris, 25 Tru64. 26 * It should work readily on any ANSI/POSIX-conforming unix. 27 28 The distribution includes the library and support utilities, including 29 * captoinfo, a termcap conversion tool 30 * clear, utility for clearing the screen 31 * infocmp, the terminfo decompiler 32 * tabs, set tabs on a terminal 33 * tic, the terminfo compiler 34 * toe, list (table of) terminfo entries 35 * tput, utility for retrieving terminal capabilities in shell 36 scripts 37 * tset, to initialize the terminal 38 39 Full manual pages are provided for the library and tools. 40 41 The ncurses distribution is available at ncurses' homepage: 42 43 ftp://ftp.invisible-island.net/ncurses/ or 44 https://invisible-mirror.net/archives/ncurses/ . 45 46 It is also available via anonymous FTP at the GNU distribution site 47 48 ftp://ftp.gnu.org/gnu/ncurses/ . 49 50Release Notes 51 52 These notes are for ncurses 6.2, released February 12, 2020. 53 54 This release is designed to be source-compatible with ncurses 5.0 55 through 6.1; providing extensions to the application binary interface 56 (ABI). Although the source can still be configured to support the 57 ncurses 5 ABI, the reason for the release is to reflect improvements 58 to the ncurses 6 ABI and the supporting utility programs. 59 60 There are, of course, numerous other improvements, listed in this 61 announcement. 62 63 The most important bug-fixes/improvements dealt with user-defined 64 capabilities in terminal descriptions. The release notes also mention 65 some other bug-fixes, but are focused on new features and improvements 66 to existing features since ncurses 6.1 release. 67 68 Library improvements 69 70 New features 71 72 There are several new features: 73 * O_EDGE_INSERT_STAY tells the form library to optionally delay 74 cursor movement on a field edge/boundary 75 * O_INPUT_FIELD extension to form library allows a dynamic field to 76 shrink if the new limit is smaller than the current field size. 77 * added exit_curses and exit_terminfo to replace internal symbols 78 for leak-checking. 79 * added curses_trace, to replace trace(). 80 81 Additionally, to improve performance other changes (and extensions) 82 are provided in this release: 83 * mouse decoding now handles shift/control/alt logic when decoding 84 xterm's 1006 mode 85 * ncurses now defines a limit for wgetnstr, wgetn_wstr when length 86 is negative or "too large". 87 * reordered loop-limit checks in winsnstr in case the string has no 88 terminating null and only the number of characters is used. 89 * there is now no buffer-size limit when reading the $TERMCAP 90 variable. 91 * the $TERMCAP variable may be interpreted as a fallback to a 92 terminfo entry 93 * mvcur now decides whether to use hard-tabs, using xt, tbc and hts 94 as clues. 95 * extended colors are improved by modifying an internal call to 96 vid_puts to pass extended color pairs e.g., from tty_update.c and 97 lib_mvcur.c 98 * the initialization functions now avoid relying upon persistent 99 data for the result from getenv 100 * scrolling is improved: 101 + a limit check in newline_forces_scroll handles the case where 102 the row is inside scroll-margins, but not at the end. 103 + improved loop limits in _nc_scroll_window handle a case where 104 the scrolled data is a pad which is taller than the window. 105 106 Other improvements 107 108 These are revised features: 109 * used "const" in some prototypes rather than NCURSES_CONST where 110 X/Open Curses was updated to do this, e.g., wscanw, newterm, the 111 terminfo interface. Also use "const" for consistency in the 112 termcap interface, which was withdrawn by X/Open Curses in Issue 5 113 (2007). As of Issue 7, X/Open Curses still lacks "const" for 114 certain return values, e.g., keyname. 115 * modified wbkgd and wbkgrnd to improve compatibility with SVr4 116 curses, changing the way the window rendition is updated when the 117 background character is modified 118 * improved terminfo write/read by modifying the fourth item of the 119 extended header to denote the number of valid strings in the 120 extended string table (see term(5)). 121 * modified the initialization checks for mouse so that the 122 xterm+sm+1006 block will work with terminal descriptions not 123 mentioning xterm. 124 125 These were done to limit or ultimately deprecate features: 126 * deprecated safe-sprintf, since the vsnprintf function, which does 127 what was needed, was standardized long ago. 128 * marked vwprintw and vwscanw as deprecated; recommend using 129 vw_printw and vw_scanw, respectively. 130 * added deprecation warnings for internal functions called by older 131 versions of tack. 132 * removed unused _nc_import_termtype2 function. 133 134 These are improvements to existing features: 135 * check parameter of set_escdelay, return ERR if negative. 136 * check parameter of set_tabsize, return ERR if not greater than 137 zero 138 * correct a status-check in _nc_read_tic_entry() so that if reading 139 a hex/b64 $TERMINFO, and the $TERM does not match, fall-through to 140 the compiled-in search list. 141 * amend check for repeat_char to handle a case where setlocale() was 142 called after initscr 143 * move macro for is_linetouched inside NCURSES_NOMACROS ifndef. 144 * use _nc_copy_termtype2 rather than direct assignment in setupterm, 145 in case it is called repeatedly using fallback terminfo 146 descriptions 147 * improve workaround for Solaris wcwidth versus line-drawing 148 characters 149 * add checks in repair_subwindows to keep the current position and 150 scroll-margins inside the resized subwindow. 151 * correct a buffer-limit in write_entry.c for systems that use 152 caseless filenames. 153 * improved build-time utility report_offsets: 154 + add categories, e.g., "w" for wide-character, "t" for threads 155 to make the report more readable. Reorganized the structures 156 reported to make the categories more apparent. 157 + add NCURSES_GLOBALS and NCURSES_PRESCREEN to report to show 158 how similar the different libtinfo configurations are. 159 * modified some header files to ensure that those include necessary 160 files except for the previously-documented cases 161 * added some traces in initialization to show whether a fallback 162 entry is used. 163 * made minor optimization to reduce calls to _nc_reserve_pairs 164 165 These are corrections to existing features: 166 * fix a special case in PutAttrChar where a cell is marked as 167 alternate-character set, but the terminal does not actually 168 support the given graphic character. This would happen in an older 169 terminal such as vt52, which lacks most line-drawing capability. 170 * corrected flag for "seq" method of db 1.8.5 interface, needed by 171 toe on some of the BSDs. 172 * modify comparison in make_hash.c to correct a special case in 173 collision handling for Caps-hpux11 174 * add extended_slk_color{,_sp} symbols to the appropriate 175 package/*.{map,sym} files 176 * modify lib_setup to avoid calling pthread_self() without first 177 verifying that the address is valid, i.e., for weak symbols 178 * add a couple of broken-linker symbols to the list of versioned 179 symbols to help with link-time optimization versus weak symbols. 180 181 Program improvements 182 183 Several improvements were made to the utility programs: 184 185 clear 186 187 + improved logic for clearing with the E3 extension, in case 188 the terminal scrolls content onto its saved-lines before 189 actually clearing the display, by clearing the saved-lines 190 after clearing the display 191 192 infocmp 193 194 + omit filtering of "OTxx" names which are used for obsolete 195 capabilities, when the output is sorted by long-names. This 196 change helps when making a table of the short/long capability 197 names. 198 199 tic 200 201 + added check for consistent alternate character set 202 capabilities. 203 + added check for paired indn/rin. 204 + added check for terminals with parm_dch vs parm_ich. 205 + added check for the case where setf/setb are given using 206 different strings, but provide identical results to 207 setaf/setab. 208 + corrected check for ich1. 209 + changed a too-large terminal entry from a fatal error to a 210 warning. 211 212 toe 213 214 + ignores any hex/b64 $TERMINFO value in the list of terminfo 215 databases. 216 217 tset 218 219 + replace check in reset command for obsolete "pt" capability 220 using tbc and hts capabilities as clues 221 + modify reset to allow for tabstops at intervals other than 8. 222 + change reset's behavior for margins to simply clear 223 soft-margins if possible, rather than clearing and then 224 setting them according to the terminal's width. 225 226 tput 227 228 + add "x" to getopt string so that "tput -x clear" works. 229 230 Several changes were made to the generated ncurses*config scripts and 231 the analogous ".pc" files to reduce differences between the 232 configurations they report: 233 * modified the ncurse*-config and pc-files to more closely match for 234 the -I and -l options. 235 * filtered out linker-specs from the --libs report. 236 * amended the ncurses*-config and pc-files to take into account the 237 rpath hack which differed between those files. 238 * modified generated ncurses*config and ncurses.pc, ncursesw.pc, 239 etc., to list helper libraries such as gpm for static linking. 240 241 Examples 242 243 Along with the library and utilities, improvements were made to the 244 ncurses-examples. Most of this activity aimed at improving the 245 test-packages. A few changes are more generally useful, e.g., for the 246 main ncurses test-program, and for analyzing traces using the 247 tracemunch script: 248 * improve recovery from error when reading command-character in 249 test/ncurses.c, showing the relevant error message and not exiting 250 on EINTR. 251 * improve tracemunch, by keeping track of TERMINAL* values, and if 252 tracing was first turned on after initialization, attempt to show 253 distinct screen, window and terminal names anyway. 254 * modify tracemunch to accept filename parameters in addition to use 255 as a pipe/filter. 256 * update tracemunch to work with perl 5.26.2, which changed the 257 rules for escaping regular expressions. 258 * add some checks in tracemunch for undefined variables. 259 * modify TurnOn/TurnOff macros (in lib_vidattr.c and lib_vid_attr.c) 260 to avoid expansion of "CUR" in trace. 261 262 There are other new demo/test programs and reusable examples: 263 264 color_content 265 Demonstrate the color_content and extended_color_content 266 functions. 267 268 demo_tabs 269 A simple demo of tabs in curses. 270 271 dump_window 272 A portable curses screen-dump, used to compare ncurses screen 273 contents with Solaris. 274 275 pair_content 276 Demonstrate the pair_content and extended_pair_content 277 functions. 278 279 report_hashing 280 Check hash-tables used for terminfo and termcap names. 281 282 parse_rgb 283 Sample implementation of the ncurses RGB extension from 284 user_caps.5, used in picsmap and savescreen programs. 285 286 A variety of improvements were made to existing programs, both new 287 features as well as options added to make the set of programs more 288 consistent. 289 * add "-l" option to test/background, to dump screen contents in a 290 form that lets different curses implementations be compared. 291 * add "@" command to test/ncurses F-test, to allow rapid jump to 292 different character pages. 293 * added enum, regex examples to test/demo_forms 294 * amend Scaled256() macro in test/picsmap.c to cover the full range 295 0..1000 296 * corrected pathname used in Ada95 sample programs for explain.txt, 297 to work with test-packages, and used an awk script to split the 298 resulting pathname when it would be too long for a single line. 299 * ignore interrupted system-call in test/ncurses's command-line, 300 e.g., if the terminal were resized. 301 * improved ifdef's for TABSIZE variable, to help with AIX/HPUX 302 ports. 303 304 Terminal database 305 306 There are several new terminal descriptions: 307 308 alacritty, domterm, kitty, mintty, mintty-direct, ms-terminal, 309 n7900, nsterm-build309, nsterm-direct, screen5, ti703, ti707, 310 ti703-w, ti707-w vscode, vscode-direct, xterm-mono, xterm.js 311 312 There are many changes to existing terminal descriptions. Some were 313 updates to several descriptions: 314 * use ansi+rep in a dozen places 315 * add rs1 to konsole, mlterm 316 * improve several flash capabilities with trailing mandatory delays 317 * drop ich1 from rxvt-basic, Eterm and mlterm to improve 318 compatibility with old non-curses programs 319 * add/use xterm+keypad in xterm-new 320 * use xterm+sl-twm for consistency, nine places 321 * improve xm example in xterm+x11mouse and xterm+sm_1006. 322 323 while others affected specific descriptions. These were retested, to 324 take into account changes by their developers: 325 326 terminator, st 327 328 while these are specific fixes based on reviewing documentation, user 329 reports, or warnings from tic: 330 331 adds200: 332 333 + fix typo 334 335 gnome-256color 336 337 + base entry on "gnome", not "vte", for consistency 338 339 interix 340 341 + trim unnecessary setf/setb 342 343 linux-16color 344 345 + accommodate Linux console driver incompatibility introduced 346 in early 2018 347 348 nsterm-256color: 349 350 + add nsterm-build309 to replace nsterm-256color, assigning the 351 latter as an alias of nsterm, to make mouse work with 352 nsterm-256color 353 354 regent40: 355 356 + renumber function-keys to match manual 357 358 regent60: 359 360 + add cd (clr_eos) 361 + corrected acsc 362 + add shifted function-keys 363 364 tvi950: 365 366 + added function-key definitions to agree with Televideo 950 367 manual 368 + corrected acsc 369 + remove bogus kf0 370 + add bel 371 372 tvi955: 373 374 + fix typo 375 376 vi200: 377 378 + add acsc string, including right/down-arrow 379 380 wy50: 381 382 + corrected acsc 383 384 wy50 and wy60: 385 386 + add shifted function-keys as kF1 to kF16 387 388 xterm+x11hilite: 389 390 + eliminate unused p5 parameter. 391 392 A few entries use extensions (user-defined terminal capabilities): 393 * use xterm+sm+1006 (aka "SGR 1006 mouse") for konsole-base and 394 putty 395 * add Smol/Rmol user-defined capability to tmux and vte-2018 396 * add Smulx user-defined capability to tmux, vte-2018 397 398 Documentation 399 400 As usual, this release 401 * improves documentation by describing new features, 402 * attempts to improve the description of features which users have 403 found confusing 404 * fills in overlooked descriptions of features which were described 405 in the NEWS file but treated sketchily in manual pages. 406 407 In addition to providing background information to explain these 408 features and show how they evolved, there are corrections, 409 clarifications, etc.: 410 * Corrections: 411 + correct error-returns listed in manual pages for a few form 412 functions 413 + corrected prototypes in several manpages using script to 414 extract those in compilable form. 415 + fix typo in term.5, improve explanation of format 416 * Clarify in manual pages that vwprintw and vwscanw are obsolete. 417 They have not been part of X/Open Curses since 2007. 418 * New/improved history and portability sections: 419 + curs_addch.3x gives some background for ACS symbols. 420 + curs_getcchar.3x explains a difference between ncurses and 421 X/Open Curses. 422 + curs_getstr.3x gives historical/portability background for 423 the length parameter of wgetnstr. 424 + curs_slk.3x lists a few differences between SVr4 curses and 425 X/Open Curses for soft-keys. 426 + curs_terminfo.3x explains that the initial implementation of 427 terminfo in SVr2 was mostly replaced by other developers in 428 SVr3. 429 + infocmp.1 explains that the initial version of terminfo had 430 no tool for decompiling descriptions. That came later, with 431 SVr3, with a different developer. 432 + tabs.1 tells more than you wanted to know about the tool. 433 + tic.1 explains that the initial version of terminfo had a 434 rudimentary tool (based on termcap) for compiling entries. 435 The tool used with Unix was developed by others for SVr3. 436 + toe.1 explains the origin of this tool. 437 * Improvements for user_caps.5: 438 + mention meml, memu and box1 439 + expanded description of XM 440 + add a clarification regarding the RGB capability. 441 + mention user_caps.5 in the tic and infocmp manual pages. 442 * Other improvements: 443 + curs_add_wch.3x adds note about Unicode terminology for the 444 line-drawing characters. 445 + curs_color.3x improves discussion of error returns and 446 extensions. 447 + curs_mouse.3x explains how the kmous and XM capabilities are 448 used for xterm-mouse input. 449 + curs_refresh.3x improves documentation regarding the virtual 450 and physical screens. 451 + curs_util.3x mentions a difference between SVr4 and X/Open 452 Curses for unctrl.h 453 + curs_variables.3x improves description of the init_tabs 454 capability and TABSIZE variable. 455 + ncurses.3x improves documentation regarding feature-test 456 macros in curses.h 457 + resizeterm.3x about top-level windows which touch the 458 screen's borders. 459 + tput.1 clarifies how tput determines the terminal size. 460 461 There are no new manual pages (all of the manual page updates are to 462 existing pages). 463 464 Some of the improvements are more subtle, relating to the way the 465 information is presented. For instance, the generated terminfo.5 file 466 uses a different table layout, allowing it to use space on wide 467 terminals more effectively. 468 469 Interesting bug-fixes 470 471 While there were many bugs fixed during development of ncurses 6.2, 472 only a few (the reason for this release) were both important and 473 interesting. Most of the bug-fixes were for local issues which did not 474 affect compatibility across releases. Since those are detailed in the 475 NEWS file no elaboration is needed here. 476 477 The interesting bugs were in tic/infocmp's handling of user-defined 478 capabilities. These were not recent bugs. Initially it was a simple 479 problem: 480 * The user-defined capabilities can be any type (boolean, number or 481 string), but once given a type all uses of the name must conform 482 to that type--unless some special support for a particular 483 multi-typed name is built into ncurses. 484 * One of simpleterm's contributors copied some definitions for using 485 tmux's user-defined capabilities in late in 2016. 486 487diff --git a/st.info b/st.info 488@@ -185,7 +185,10 @@ st| simpleterm, 489 tsl=\E]0;, 490 xenl, 491 vpa=\E[%i%p1%dd, 492- 493+# Tmux unofficial extensions, see TERMINFO EXTENSIONS in tmux(1) 494+ Se, 495+ Ss, 496+ Tc, 497 498 st-256color| simpleterm with 256 colors, 499 use=st, 500 501 * Later, in (referring to a version from mid-2017), a user asked to 502 have it updated in ncurses. 503 * However, it had an error from the change in late 2016. The 504 terminal description made what tmux expected to be string actually 505 a boolean. 506 Over the years, there were problems with each of simpleterm's 507 terminal descriptions. I repaired those, and usually dealt with 508 the problem. 509 * The difference in this case was that when compiling the terminal 510 database, tic may have in memory the definitions for more than one 511 terminal description (so that it can resolve "use=" clauses). 512 Seeing two different types for the same name, in certain 513 situations it would incorrectly merge the symbol tables for the 514 two terminal descriptions. 515 * On simpleterm's side, their bug was finally fixed in late 2019, 516 three years after the bug was created. 517 518 For ncurses, the elapsed time to fix this bug was less than three 519 years. Someone reported a problem with the terminal description a few 520 weeks after releasing ncurses 6.1 (in tmux #1264), and the terminal 521 description was updated that week (ncurses patch 20180224): 522 52320180224 524 + modify _nc_resolve_uses2() to detect incompatible types when merging 525 a "use=" clause of extended capabilities. The problem was seen in a 526 defective terminfo integrated from simpleterm sources in 20171111, 527 compounded by repair in 20180121. 528 + correct Ss/Ms interchange in st-0.7 entry (tmux #1264) -TD 529 530 The larger part of that change added a check to prevent a simple merge 531 of terminal descriptions where the same user-defined name was used 532 with different types. But it raised some questions: 533 * Was there a reliable way to manage terminal descriptions which 534 used the same extended name in different ways? 535 * Should ncurses provide a registry of well-known extended names, 536 with their types? 537 538 Since the correction to terminfo.src could have been readily adopted 539 by packagers, there was nothing more to be done from ncurses' 540 standpoint on that part. But improving ncurses to prevent issues like 541 that is the reason for making a release. 542 543 Nothing more (constructive) was mentioned with regard to simpleterm. 544 But a few problems were found in the handling of user-defined 545 capabilities: 546 * Forward-references to user-defined capabilities in a "use=" clause 547 did not allocate new data for each use. In tic, successive 548 compilation of terminal entries could add user-defined 549 capabilities to the wrong terminal entry. 550 This was not noticed before, since xterm's terminal descriptions 551 were the main users of the feature, and almost all of the uses of 552 the building-blocks which contained user-defined capabilities were 553 backward-references. 554 * There is one (documented) case where ncurses 6.1 supports a 555 user-defined capability that could be any type (i.e., "RGB"). The 556 check added in February 2018 to guard against mismatches did not 557 handle all of the combinations needed. 558 559 Both of these issues dated from the original implementation of 560 user-defined capabilities. Fixing them does not change the terminal 561 database, but a older tic without the fixes will not be able to handle 562 terminfo sources which rely upon those fixes. Starting in June 2019, 563 the download link for the terminfo source file was capped at that 564 date. The development sources have an up-to-date copy of the file, for 565 people with a legitimate need for it. 566 567 The "-c" (check) option of tic is not very useful if it cannot offer 568 advice on parameters needed for user-defined capabilities. The various 569 Caps files were reorganized to reduce redundancy, and in the common 570 portion (Caps-ncurses), a registry of user-defined capabilities is 571 provided for use by tic. While users can still define their own custom 572 capabilities, tic will not offer any advice when their parameters do 573 not match. 574 575 In ncurses 6.2, tic makes a special check to allow any type for RGB, 576 but its being able to do this relies upon fixes made in the ncurses 577 library in mid-2019. 578 579 Configuration changes 580 581 Major changes 582 583 There are no major changes. Several new options were added to ease 584 integration of packages with systems using different versions of GNAT 585 and ncurses. Also, improvements were made to configure checks. 586 587 Configuration options 588 589 There are a few new/modified configure options: 590 591 --with-config-suffix 592 helps work around a filename conflict with Debian packages 593 versus test-packages. 594 595 --with-ada-libname 596 allows one to rename the "AdaCurses" library (at least one 597 packager prefers a lowercase name). 598 599 --with-fallbacks 600 now ensures there is a value, and adds the fallback information 601 to top-level Makefile summary. 602 603 --with-pcre2 604 check for pcre-posix library to help with MinGW port. 605 606 --with-tic-path and 607 608 --with-infocmp-path 609 help work around problems building fallback source using 610 pre-6.0 tic/infocmp. 611 612 --with-versioned-syms 613 option value can now be a relative pathname. 614 615 Portability 616 617 Many of the portability changes are implemented via the configure 618 script: 619 * ignore $TERMINFO as a default value in configure script if it came 620 from the infocmp -Q option. 621 * distinguish gcc from icc and clang when the --enable-warnings 622 option is not used, to avoid unnecessary warnings about 623 unrecognized inline options 624 * consistently prepend new libraries as they are found during 625 configuration, rather than relying upon the linker to resolve 626 order dependencies of libraries. 627 * modified configure scripts to reduce relinking/ranlib during 628 library install : 629 + use "install -p" when available, to avoid need for ranlib of 630 static libraries. 631 + scripts which use "--disable-relink;" add a 1-second sleep to 632 work around tools which use whole-second timestamps, e.g., in 633 utime rather than the actual file system resolution. 634 * add configure check for getenv to work around implementation shown 635 in Emscripten which overwrites the previous return value on each 636 call. 637 Use that to optionally suppress START_TRACE macro, whose call to 638 getenv may not work properly 639 * change target configure level for _XOPEN_SOURCE to 600 to address 640 use of vsscanf and setenv. 641 * reduce use of _GNU_SOURCE for current glibc where _DEFAULT_SOURCE 642 combines with _XOPEN_SOURCE 643 Allow for Cygwin's newlib when checking for the _DEFAULT_SOURCE 644 symbol. 645 MidnightBSD is now checked for the _XOPEN_SOURCE-related 646 definitions. 647 * If the check for va_copy or __va_copy fails, 648 + configure now tries copying the pointers for va_list, or as 649 an array. 650 + alternatively, it checks for __builtin_va_copy(), which could 651 be used with AIX xlc in c89 mode. 652 * several changes to support a port to Ultrix 3.1: 653 + check if "b" binary feature of fopen works 654 + check for missing feature of locale.h 655 + add fallback for strstr() in test-programs 656 + add fallback for STDOUT_FILENO in test-programs 657 * The test/configure script (used for ncurses-examples) is improved: 658 + work around non-ncurses termcap.h file, e.g., in Slackware. 659 + check for TABSIZE variable. 660 + checks for the X11/Intrinsic.h header, accommodate recent 661 MacOS changes which largely emptied /usr/include. 662 663 Here are some of the other portability fixes: 664 * added dummy "check" rule in top-level and test-Makefile to 665 simplify building test-packages for ArchLinux. 666 * dropped library-dependency on psapi for MinGW port, since 667 win_driver.c defines PSAPI_VERSION to 2, making it use 668 GetProcessImageFileName from kernel32.dll 669 * made build-fixes for configuration using --program-suffix with 670 Ada95, noticed with MacOS but applicable to other platforms 671 without libpanelw, etc. 672 * modified ncurses/Makefile.in to fix a case where Debian/testing 673 changes to the ld --as-needed configuration broke ncurses-examples 674 test packages. 675 * used _WIN32/_WIN64 in preference to __MINGW32__/__MINGW64__ 676 symbols to simplify building with Microsoft Visual C++, since the 677 former are defined in both compiler configurations. 678 _________________________________________________________________ 679 680Features of ncurses 681 682 The ncurses package is fully upward-compatible with SVr4 (System V 683 Release 4) curses: 684 * All of the SVr4 calls have been implemented (and are documented). 685 * ncurses supports all of the for SVr4 curses features including 686 keyboard mapping, color, forms-drawing with ACS characters, and 687 automatic recognition of keypad and function keys. 688 * ncurses provides these SVr4 add-on libraries (not part of X/Open 689 Curses): 690 + the panels library, supporting a stack of windows with 691 backing store. 692 + the menus library, supporting a uniform but flexible 693 interface for menu programming. 694 + the form library, supporting data collection through 695 on-screen forms. 696 * ncurses's terminal database is fully compatible with that used by 697 SVr4 curses. 698 + ncurses supports user-defined capabilities which it can see, 699 but which are hidden from SVr4 curses applications using the 700 same terminal database. 701 + It can be optionally configured to match the format used in 702 related systems such as AIX and Tru64. 703 + Alternatively, ncurses can be configured to use hashed 704 databases rather than the directory of files used by SVr4 705 curses. 706 * The ncurses utilities have options to allow you to filter terminfo 707 entries for use with less capable curses/terminfo versions such as 708 the HP/UX and AIX ports. 709 710 The ncurses package also has many useful extensions over SVr4: 711 * The API is 8-bit clean and base-level conformant with the X/OPEN 712 curses specification, XSI curses (that is, it implements all BASE 713 level features, and most EXTENDED features). It includes many 714 function calls not supported under SVr4 curses (but portability of 715 all calls is documented so you can use the SVr4 subset only). 716 * Unlike SVr3 curses, ncurses can write to the rightmost-bottommost 717 corner of the screen if your terminal has an insert-character 718 capability. 719 * Ada95 and C++ bindings. 720 * Support for mouse event reporting with X Window xterm and FreeBSD 721 and OS/2 console windows. 722 * Extended mouse support via Alessandro Rubini's gpm package. 723 * The function wresize allows you to resize windows, preserving 724 their data. 725 * The function use_default_colors allows you to use the terminal's 726 default colors for the default color pair, achieving the effect of 727 transparent colors. 728 * The functions keyok and define_key allow you to better control the 729 use of function keys, e.g., disabling the ncurses KEY_MOUSE, or by 730 defining more than one control sequence to map to a given key 731 code. 732 * Support for 256-color terminals, such as modern xterm. 733 * Support for 16-color terminals, such as aixterm and modern xterm. 734 * Better cursor-movement optimization. The package now features a 735 cursor-local-movement computation more efficient than either BSD's 736 or System V's. 737 * Super hardware scrolling support. The screen-update code 738 incorporates a novel, simple, and cheap algorithm that enables it 739 to make optimal use of hardware scrolling, line-insertion, and 740 line-deletion for screen-line movements. This algorithm is more 741 powerful than the 4.4BSD curses quickch routine. 742 * Real support for terminals with the magic-cookie glitch. The 743 screen-update code will refrain from drawing a highlight if the 744 magic- cookie unattributed spaces required just before the 745 beginning and after the end would step on a non-space character. 746 It will automatically shift highlight boundaries when doing so 747 would make it possible to draw the highlight without changing the 748 visual appearance of the screen. 749 * It is possible to generate the library with a list of pre-loaded 750 fallback entries linked to it so that it can serve those terminal 751 types even when no terminfo tree or termcap file is accessible 752 (this may be useful for support of screen-oriented programs that 753 must run in single-user mode). 754 * The tic/captoinfo utility provided with ncurses has the ability to 755 translate many termcaps from the XENIX, IBM and AT&T extension 756 sets. 757 * A BSD-like tset utility is provided. 758 * The ncurses library and utilities will automatically read terminfo 759 entries from $HOME/.terminfo if it exists, and compile to that 760 directory if it exists and the user has no write access to the 761 system directory. This feature makes it easier for users to have 762 personal terminfo entries without giving up access to the system 763 terminfo directory. 764 * You may specify a path of directories to search for compiled 765 descriptions with the environment variable TERMINFO_DIRS (this 766 generalizes the feature provided by TERMINFO under stock System 767 V.) 768 * In terminfo source files, use capabilities may refer not just to 769 other entries in the same source file (as in System V) but also to 770 compiled entries in either the system terminfo directory or the 771 user's $HOME/.terminfo directory. 772 * The table-of-entries utility toe makes it easy for users to see 773 exactly what terminal types are available on the system. 774 * The library meets the XSI requirement that every macro entry point 775 have a corresponding function which may be linked (and will be 776 prototype-checked) if the macro definition is disabled with 777 #undef. 778 * Extensive documentation is provided (see the Additional Reading 779 section of the ncurses FAQ for online documentation). 780 781Applications using ncurses 782 783 The ncurses distribution includes a selection of test programs 784 (including a few games). These are available separately as 785 ncurses-examples 786 787 The ncurses library has been tested with a wide variety of 788 applications including: 789 790 aptitude 791 FrontEnd to Apt, the debian package manager 792 793 https://wiki.debian.org/Aptitude 794 795 cdk 796 Curses Development Kit 797 798 https://invisible-island.net/cdk/ 799 800 ded 801 directory-editor 802 803 https://invisible-island.net/ded/ 804 805 dialog 806 the underlying application used in Slackware's setup, and the 807 basis for similar install/configure applications on many 808 systems. 809 810 https://invisible-island.net/dialog/ 811 812 lynx 813 the text WWW browser 814 815 https://lynx.invisible-island.net/ 816 817 mutt 818 mail utility 819 820 http://www.mutt.org/ 821 822 ncftp 823 file-transfer utility 824 825 https://www.ncftp.com/ 826 827 nvi 828 New vi uses ncurses. 829 830 https://sites.google.com/a/bostic.com/keithbostic/vi 831 832 ranger 833 A console file manager with VI key bindings in Python. 834 835 https://ranger.github.io/ 836 837 tin 838 newsreader, supporting color, MIME 839 840 http://www.tin.org/ 841 842 vifm 843 File manager with vi like keybindings 844 845 https://vifm.info/ 846 847 as well as some that use ncurses for the terminfo support alone: 848 849 minicom 850 terminal emulator for serial modem connections 851 852 https://alioth.debian.org/projects/minicom/ 853 854 mosh 855 a replacement for ssh. 856 857 https://mosh.mit.edu/ 858 859 tack 860 terminfo action checker 861 862 https://invisible-island.net/ncurses/tack.html 863 864 tmux 865 terminal multiplexor 866 867 https://github.com/tmux/tmux/wiki 868 869 vile 870 vi-like-emacs may be built to use the terminfo, termcap or 871 curses interfaces. 872 873 https://invisible-island.net/vile/ 874 875 and finally, those which use only the termcap interface: 876 877 emacs 878 text editor 879 880 https://www.gnu.org/software/emacs/ 881 882 less 883 The most commonly used pager (a program that displays text 884 files). 885 886 http://www.greenwoodsoftware.com/less/ 887 888 screen 889 terminal multiplexor 890 891 https://www.gnu.org/software/screen/ 892 893 vim 894 text editor 895 896 https://www.vim.org/ 897 898Development activities 899 900 Zeyd Ben-Halim started ncurses from a previous package pcurses, 901 written by Pavel Curtis. Eric S. Raymond continued development. 902 Juergen Pfeifer wrote most of the form and menu libraries. 903 904 Ongoing development work is done by Thomas E. Dickey. Thomas E. Dickey 905 has acted as the maintainer for the Free Software Foundation, which 906 holds a copyright on ncurses for releases 4.2 through 6.1. Following 907 the release of ncurses 6.1, effective as of release 6.2, copyright for 908 ncurses reverted to Thomas E. Dickey (see the ncurses FAQ for 909 additional information). 910 911 Contact the current maintainers at 912 913 bug-ncurses@gnu.org 914 915 To join the ncurses mailing list, please write email to 916 917 bug-ncurses-request@gnu.org 918 919 containing the line: 920 921 subscribe <name>@<host.domain> 922 923 This list is open to anyone interested in helping with the development 924 and testing of this package. 925 926 Beta versions of ncurses are made available at 927 928 ftp://ftp.invisible-island.net/ncurses/current/ and 929 https://invisible-mirror.net/archives/ncurses/current/ . 930 931 Patches to the current release are made available at 932 933 ftp://ftp.invisible-island.net/ncurses/6.1/ and 934 https://invisible-mirror.net/archives/ncurses/6.1/ . 935 936 There is an archive of the mailing list here: 937 938 http://lists.gnu.org/archive/html/bug-ncurses (also https) 939 940Related resources 941 942 The release notes make scattered references to these pages, which may 943 be interesting by themselves: 944 * ncurses licensing 945 * Symbol versioning in ncurses 946 * Comments on ncurses versus slang (S-Lang) 947 * tack - terminfo action checker 948 * tctest - termcap library checker 949 * Terminal Database 950 951Other resources 952 953 The distribution provides a newer version of the terminfo-format 954 terminal description file once maintained by Eric Raymond . Unlike the 955 older version, the termcap and terminfo data are provided in the same 956 file, which also provides several user-definable extensions beyond the 957 X/Open specification. 958 959 You can find lots of information on terminal-related topics not 960 covered in the terminfo file at Richard Shuford's archive . The 961 collection of computer manuals at bitsavers.org has also been useful. 962 963 * Overview 964 * Release Notes 965 + Library improvements 966 o New features 967 o Other improvements 968 + Program improvements 969 o Utilities 970 o Examples 971 + Terminal database 972 + Documentation 973 + Interesting bug-fixes 974 + Configuration changes 975 o Major changes 976 o Configuration options 977 + Portability 978 * Features of ncurses 979 * Applications using ncurses 980 * Development activities 981 * Related resources 982 * Other resources 983