X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=doc%2Fhtml%2Fman%2Fncurses.3x.html;fp=doc%2Fhtml%2Fman%2Fncurses.3x.html;h=fcd1725b9e99806de11296e630c91967bcc09ea6;hb=75a9c36c205ebefe07580acd0b1053a2abbd44b9;hp=330628ed92e770b9db38586389582d53aebea157;hpb=382c1d0c3c8959d2e5ffb69e86469d00937aa4ae;p=ncurses.git diff --git a/doc/html/man/ncurses.3x.html b/doc/html/man/ncurses.3x.html index 330628ed..fcd1725b 100644 --- a/doc/html/man/ncurses.3x.html +++ b/doc/html/man/ncurses.3x.html @@ -28,19 +28,19 @@ * sale, use or other dealings in this Software without prior written * * authorization. * **************************************************************************** - * @Id: ncurses.3x,v 1.204 2024/03/23 20:42:29 tom Exp @ + * @Id: ncurses.3x,v 1.207 2024/04/14 00:34:00 tom Exp @ -->
-ncurses(3x) Library calls ncurses(3x) @@ -61,158 +61,152 @@ terminals with output optimized to minimize screen updates. ncurses replaces the curses libraries from System V Release 4 Unix ("SVr4") and 4.4BSD Unix, the development of which ceased in the 1990s. This - describes ncurses version 6.4 (patch 20240323). + describes ncurses version 6.4 (patch 20240413). ncurses permits control of the terminal screen's contents; abstraction and subdivision thereof with windows and pads; the reading of terminal input; control of terminal input and output options; environment query routines; color manipulation; the definition and use of soft label - keys; terminfo capabilities; a termcap compatibility interface; and - access to low-level terminal-manipulation routines. + keys; terminfo capability access; a termcap compatibility interface; + and an abstraction of the system's API for manipulating the terminal + (such as termios(3)). - ncurses implements the standard interface described by X/Open Curses - Issue 7. In many behavioral details not standardized by X/Open, - ncurses emulates the curses library of SVr4 and provides numerous + ncurses implements the standard interface described by X/Open Curses + Issue 7. In many behavioral details not standardized by X/Open, + ncurses emulates the curses library of SVr4 and provides numerous useful extensions. - ncurses man pages employ several sections to clarify matters of usage + ncurses man pages employ several sections to clarify matters of usage and interoperability with other curses implementations. - o "NOTES" describes matters and caveats of which any user of the - ncurses API should be aware, such as limitations on the size of an - underlying integral type or the availability of a preprocessor - macro exclusive of a function definition (which prevents its - address from being taken). This section also describes - implementation details that will be significant to the programmer + o "NOTES" describes issues and caveats of which any user of the + ncurses API should be aware, such as limitations on the size of an + underlying integral type or the availability of a preprocessor + macro exclusive of a function definition (which prevents its + address from being taken). This section also describes + implementation details that will be significant to the programmer but which are not standardized. - o "EXTENSIONS" presents ncurses innovations beyond the X/Open Curses - standard and/or the SVr4 curses implementation. They are termed - extensions to indicate that they cannot be implemented solely by + o "EXTENSIONS" presents ncurses innovations beyond the X/Open Curses + standard and/or the SVr4 curses implementation. They are termed + extensions to indicate that they cannot be implemented solely by using the library API, but require access to the library's internal state. o "PORTABILITY" discusses matters (beyond the exercise of extensions) - that should be considered when writing to a curses standard, or to + that should be considered when writing to a curses standard, or for multiple implementations. - o "HISTORY" examines points of detail in ncurses and other curses + o "HISTORY" examines points of detail in ncurses and other curses implementations over the decades of their development, particularly where precedent or inertia have frustrated better design (and, in a few cases, where such inertia has been overcome). - A program using these routines must be linked with the -lncurses - option, or (if it has been generated) with the debugging library - -lncurses_g. (Your system integrator may also have installed these - libraries under the names -lcurses and -lcurses_g.) The ncurses_g - library generates trace logs (in a file called "trace" in the current - directory) that describe curses actions. See section "ALTERNATE - CONFIGURATIONS" below. + A curses application must be linked with the library; use the -lncurses + option to your compiler or linker. A debugging version of the library + may be available; if so, link with it using -lncurses_g. (Your system + integrator may have installed these libraries such that you can use the + options -lcurses and -lcurses_g, respectively.) The ncurses_g library + generates trace logs (in a file called trace in the current directory) + that describe ncurses actions. See section "ALTERNATE CONFIGURATIONS" + below. -
- The library uses the locale which the calling program has initialized. - That is normally done with setlocale(3): +
+ A curses application uses information from the system locale; + setlocale(3) prepares it for curses library calls. - setlocale(LC_ALL, ""); + setlocale(LC_ALL, ""); - If the locale is not initialized, the library assumes that characters - are printable as in ISO-8859-1, to work with certain legacy programs. - You should initialize the locale and not rely on specific details of - the library when the locale has not been set up. + If the locale is not thus initialized, the library assumes that + characters are printable as in ISO 8859-1, to work with certain legacy + programs. You should initialize the locale; do not expect consistent + behavior from the library when the locale has not been set up. - The function initscr or newterm must be called to initialize the - library before any of the other routines that deal with windows and - screens are used. The routine endwin(3x) must be called before - exiting. + initscr(3x) or newterm(3x) must be called to initialize curses before + use of any functions that deal with windows and screens. - To get character-at-a-time input without echoing (most interactive, - screen oriented programs want this), the following sequence should be - used: + To get character-at-a-time input without echoing--most interactive, + screen-oriented programs want this--use the following sequence. - initscr(); cbreak(); noecho(); + initscr(); cbreak(); noecho(); - Most programs would additionally use the sequence: + Most applications perform further setup as follows. - intrflush(stdscr, FALSE); - keypad(stdscr, TRUE); + intrflush(stdscr, FALSE); + keypad(stdscr, TRUE); - Before a curses program is run, the tab stops of the terminal should be - set and its initialization strings, if defined, must be output. This - can be done by executing the tput init command after the shell - environment variable TERM has been exported. (The BSD-style tset(1) - utility also performs this function.) See subsection "Tabs and - Initialization" of terminfo(5). + A curses program then often enters an event loop of some sort. Call + endwin(3x) before exiting.
- A curses library abstracts the terminal screen by representing all or - part of it as a WINDOW data structure. A window is a rectangular grid - of character cells, addressed by row and column coordinates (y, x), + A curses library abstracts the terminal screen by representing all or + part of it as a WINDOW data structure. A window is a rectangular grid + of character cells, addressed by row and column coordinates (y, x), with the upper left corner as (0, 0). A window called stdscr, the same - size as the terminal screen, is always available. Create others with + size as the terminal screen, is always available. Create others with newwin(3x). - A curses library does not manage overlapping windows. (See panel(3x) - if you desire this.) You can either use stdscr to manage one screen- - filling window, or tile the screen into non-overlapping windows and not - use stdscr at all. Mixing the two approaches will result in - unpredictable, and undesired, effects. + A curses library does not manage overlapping windows (but see below). + You can either use stdscr to manage one screen-filling window, or tile + the screen into non-overlapping windows and not use stdscr at all. + Mixing the two approaches will result in unpredictable and undesired + effects. - Functions permit manipulation of a window and the cursor identifying - the cell within it at which the next output operation will occur. + Functions permit manipulation of a window and the cursor identifying + the cell within it at which the next output operation will occur. Among those, the most basic are move(3x) and addch(3x): these place the - cursor and write a character to stdscr, respectively. As a rule, - window-addressing functions feature names prefixed (or infixed, see - below) with "w"; these allow the user to specify a pointer to a WINDOW. - Counterparts not thus prefixed (or infixed) affect stdscr. Because - moving the cursor prior to another operation is so common, curses - generally also provides functions with a "mv" prefix as a convenience. - Thus, the library defines all of addch, waddch, mvaddch, and mvwaddch. - When both prefixes are present, the order of arguments is a WINDOW - pointer first, then a y and x coordinate pair. - - Updating the terminal screen with every curses call can cause - unpleasant flicker or inefficient use of the communications channel to - the device. Therefore, after using curses functions to accumulate a - set of desired updates that make sense to present together, call - refresh(3x) to tell the library to make the user's screen look like - stdscr. ncurses optimizes its output by computing a minimal number of - operations to mutate the screen from its state at the previous refresh - to the new one. Effective optimization demands accurate information - about the terminal device: the management of such information is the - province of the terminfo(3x) API, a feature of every standard curses - implementation. + cursor and write a character to stdscr, respectively. + + Frequent changes to the terminal screen can cause unpleasant flicker or + inefficient use of the communication channel to the device, so the + library does not generally update it automatically. Therefore, after + using curses functions to accumulate a set of desired updates that make + sense to present together, call refresh(3x) to tell the library to make + the user's screen look like stdscr. The library optimizes its output + by computing a minimal number of operations to mutate the screen from + its state at the previous refresh to the new one. Effective + optimization demands accurate information about the terminal device: + the management of such information is the province of the terminfo(3x) + API, a feature of every standard curses implementation. Special windows called pads may also be manipulated. These are windows - that are not constrained to the size of the terminal screen and whose + that are not constrained to the size of the terminal screen and whose contents need not be completely displayed. See curs_pad(3x). - In addition to drawing characters on the screen, rendering attributes - and colors may be supported, causing the characters to show up in such - modes as underlined, in reverse video, or in color on terminals that + In addition to drawing characters on the screen, rendering attributes + and colors may be supported, causing the characters to show up in such + modes as underlined, in reverse video, or in color on terminals that support such display enhancements. See curs_attr(3x). - curses predefines constants for a small set of line-drawing and other - graphics corresponding to the DEC Alternate Character Set (ACS), a - feature of VT100 and other terminals. See waddch(3x) and wadd_wch(3x). + curses predefines constants for a small set of forms-drawing graphics + corresponding to the DEC Alternate Character Set (ACS), a feature of + VT100 and other terminals. See waddch(3x). - curses is implemented using the operating system's terminal driver; - keystroke events are received not as scan codes but as byte sequences. - Graphical keycaps (alphanumeric and punctuation keys, and the space) + curses is implemented using the operating system's terminal driver; + keystroke events are received not as scan codes but as byte sequences. + Graphical keycaps (alphanumeric and punctuation keys, and the space) appear as-is. Everything else, including the tab, enter/return, - keypad, arrow, and function keys, appears as a control character or a - multibyte escape sequence. curses translates these into unique key + keypad, arrow, and function keys, appears as a control character or a + multibyte escape sequence. curses translates these into unique key codes. See getch(3x). + ncurses provides reimplementations of the SVr4 panel(3x), form(3x), and + menu(3x) libraries to ease construction of user interfaces with curses. + -
+
The selection of an appropriate value of TERM in the process environment is essential to correct curses and terminfo library operation. A well-configured system selects a correct TERM value automatically; tset(1) may assist with troubleshooting exotic situations. + If you change the terminal type, export the TERM environment variable + in the shell, then run tset(1) or the "tput init" command. See + subsection "Tabs and Initialization" of terminfo(5). + If the environment variables LINES and COLUMNS are set, or if the curses program is executing in a graphical windowing environment, the information obtained thence overrides that obtained by terminfo. An @@ -228,17 +222,21 @@
- Many curses functions have two or more versions. Those prefixed with - "w" require a window argument. Four functions prefixed with "p" - require a pad argument. Those without a prefix generally operate on - stdscr. + curses offers many functions in variant forms using a regular set of + alternatives to the name of an elemental one. Those prefixed with "w" + require a WINDOW pointer argument; those with a "mv" prefix first + perform cursor movement using wmove(3x); a "mvw" prefix indicates both. + The "w" function is typically the elemental one; the removal of this + prefix usually indicates operation on stdscr. + + Four functions prefixed with "p" require a pad argument. In function synopses, ncurses man pages apply the following names to parameters. - bf bool (TRUE or FALSE) - win pointer to WINDOW - pad pointer to WINDOW that is a pad + bf bool (TRUE or FALSE) + win pointer to a WINDOW + pad pointer to a WINDOW that is a pad
@@ -264,63 +262,65 @@ cchar_t corresponds to the non-wide configuration's chtype. It always a structure type, because it stores more - data than fits into an integral type. A character - code may not be representable as a char, and - moreover more than one character may occupy a cell - (as with accent marks and other diacritics). Each - character is of type wchar_t; a complex character - contains one spacing character and zero or more non- - spacing characters (see below). Attributes and - color data are stored in separate fields of the + data than fit into a standard scalar type. A + character code may not be representable as a char, + and moreover more than one character may occupy a + cell (as with accent marks and other diacritics). + Each character is of type wchar_t; a complex + character contains one spacing character and zero or + more non-spacing characters (see below). Attributes + and color data are stored in separate fields of the structure, not combined as in chtype. Each cell of a WINDOW is stored as a cchar_t. - The setcchar(3x) and getcchar(3x) functions store and - retrieve the data from a cchar_t structure. The wide library - API of ncurses depends on two data types standardized by ISO - C95. - - wchar_t stores a wide character. Like chtype, it may be an - alias of int. Depending on the character encoding, - a wide character may be spacing, meaning that it - occupies a character cell by itself and typically - accompanies cursor advancement, or non-spacing, - meaning that it occupies the same cell as a spacing - character, is often regarded as a "modifier" of the - base glyph with which it combines, and typically + setcchar(3x) and getcchar(3x) store and retrieve cchar_t + data. The wide library API of ncurses depends on two data + types standardized by ISO C95. + + wchar_t stores a wide character. Like chtype, it may be an + alias of int. Depending on the character encoding, + a wide character may be spacing, meaning that it + occupies a character cell by itself and typically + accompanies cursor advancement, or non-spacing, + meaning that it occupies the same cell as a spacing + character, is often regarded as a "modifier" of the + base glyph with which it combines, and typically does not advance the cursor. - wint_t can store a wchar_t or the constant WEOF, - analogously to the int-sized character manipulation + wint_t can store a wchar_t or the constant WEOF, + analogously to the int-sized character manipulation functions of ISO C and its constant EOF. - The wide library provides additional functions that - complement those in the non-wide library where the size of - the underlying character type is significant. A somewhat - regular naming convention relates many of the wide variants - to their non-wide counterparts; where a non-wide function - name contains "ch" or "str", prefix it with "_w" to obtain - the wide counterpart. For example, waddch becomes wadd_wch. - - This convention is inapplicable to some non-wide function + The wide library provides additional functions that + complement those in the non-wide library where the size of + the underlying character type is significant. A somewhat + regular naming convention relates many of the wide variants + to their non-wide counterparts; where a non-wide function + name contains "ch" or "str", prefix it with "_w" to obtain + the wide counterpart. For example, waddch becomes wadd_wch. + (Exceptions that add only "w" comprise addwstr, inwstr, and + their variants.) + + This convention is inapplicable to some non-wide function names, so other transformations are used for the wide - configuration: in the window background management functions, - "bkgd" becomes "bkgrnd"; the window border-drawing and - -clearing functions are suffixed with "_set". + configuration: the window background management function + "bkgd" becomes "bkgrnd"; the window border-drawing and + -clearing functions are suffixed with "_set"; and character + attribute manipulation functions like "attron" become + "attr_on".
The following table lists the curses functions provided in the non-wide - and wide APIs and the corresponding man pages that describe them. - Those flagged with "*" are ncurses-specific, neither described by + and wide APIs and the corresponding man pages that describe them. + Those flagged with "*" are ncurses-specific, neither described by X/Open Curses nor present in SVr4. curses Function Name Man Page --------------------------------------------- COLOR_PAIR curs_color(3x) PAIR_NUMBER curs_color(3x) - add_wch curs_add_wch(3x) add_wchnstr curs_add_wchstr(3x) add_wchstr curs_add_wchstr(3x) @@ -380,6 +380,7 @@ echochar curs_addch(3x) endwin curs_initscr(3x) erase curs_clear(3x) + erasechar curs_termattrs(3x) erasewchar curs_termattrs(3x) exit_curses curs_memleaks(3x)* @@ -388,11 +389,11 @@ extended_pair_content curs_color(3x)* extended_slk_color curs_slk(3x)* filter curs_util(3x) - find_pair new_pair(3x)* flash curs_beep(3x) flushinp curs_util(3x) free_pair new_pair(3x)* + get_escdelay curs_threads(3x)* get_wch curs_get_wch(3x) get_wstr curs_get_wstr(3x) getattrs curs_attr(3x) @@ -445,6 +446,7 @@ ins_nwstr curs_ins_wstr(3x) ins_wch curs_ins_wch(3x) ins_wstr curs_ins_wstr(3x) + insch curs_insch(3x) insdelln curs_deleteln(3x) insertln curs_deleteln(3x) @@ -456,7 +458,6 @@ is_cbreak curs_inopts(3x)* is_cleared curs_opaque(3x)* is_echo curs_inopts(3x)* - is_idcok curs_opaque(3x)* is_idlok curs_opaque(3x)* is_immedok curs_opaque(3x)* @@ -511,6 +512,7 @@ mvgetnstr curs_getstr(3x) mvgetstr curs_getstr(3x) mvhline curs_border(3x) + mvhline_set curs_border_set(3x) mvin_wch curs_in_wch(3x) mvin_wchnstr curs_in_wchstr(3x) @@ -524,7 +526,6 @@ mvins_wch curs_ins_wch(3x) mvins_wstr curs_ins_wstr(3x) mvinsch curs_insch(3x) - mvinsnstr curs_insstr(3x) mvinsstr curs_insstr(3x) mvinstr curs_instr(3x) @@ -577,6 +578,7 @@ napms curs_kernel(3x) newpad curs_pad(3x) newterm curs_initscr(3x) + newwin curs_window(3x) nl curs_inopts(3x) nocbreak curs_inopts(3x) @@ -592,7 +594,6 @@ pair_content curs_color(3x) pecho_wchar curs_pad(3x) pechochar curs_pad(3x) - pnoutrefresh curs_pad(3x) prefresh curs_pad(3x) printw curs_printw(3x) @@ -620,6 +621,8 @@ scroll curs_scroll(3x) scrollok curs_outopts(3x) set_curterm curs_terminfo(3x) + set_escdelay curs_threads(3x)* + set_tabsize curs_threads(3x)* set_term curs_initscr(3x) setcchar curs_getcchar(3x) setscrreg curs_outopts(3x) @@ -641,6 +644,7 @@ slk_restore curs_slk(3x) slk_set curs_slk(3x) slk_touch curs_slk(3x) + slk_wset curs_slk(3x) standend curs_attr(3x) standout curs_attr(3x) @@ -660,7 +664,6 @@ tigetnum curs_terminfo(3x) tigetstr curs_terminfo(3x) timeout curs_inopts(3x) - tiparm curs_terminfo(3x) tiparm_s curs_terminfo(3x)* tiscan_s curs_terminfo(3x)* @@ -680,7 +683,9 @@ use_env curs_util(3x) use_extended_names curs_extend(3x)* use_legacy_coding legacy_coding(3x)* + use_screen curs_threads(3x)* use_tioctl curs_util(3x)* + use_window curs_threads(3x)* vid_attr curs_terminfo(3x) vid_puts curs_terminfo(3x) vidattr curs_terminfo(3x) @@ -705,6 +710,7 @@ wattr_off curs_attr(3x) wattr_on curs_attr(3x) wattr_set curs_attr(3x) + wattroff curs_attr(3x) wattron curs_attr(3x) wattrset curs_attr(3x) @@ -728,7 +734,6 @@ werase curs_clear(3x) wget_wch curs_get_wch(3x) wget_wstr curs_get_wstr(3x) - wgetbkgrnd curs_bkgrnd(3x) wgetch curs_getch(3x) wgetdelay curs_opaque(3x)* @@ -771,253 +776,244 @@ wstandout curs_attr(3x) wsyncdown curs_window(3x) wsyncup curs_window(3x) + wtimeout curs_inopts(3x) wtouchln curs_touch(3x) wunctrl curs_util(3x) wvline curs_border(3x) wvline_set curs_border_set(3x) - Depending on the configuration, additional sets of functions may be - available: - - curs_memleaks(3x) - curses memory-leak checking + ncurses's screen-pointer extension adds additional functions + corresponding to many of the above, each with an "_sp" suffix; see + curs_sp_funcs(3x). - curs_sp_funcs(3x) - curses screen-pointer extension - - curs_threads(3x) - curses thread support - - curs_trace(3x) - curses debugging routines + The availability of some extensions is configurable when ncurses is + compiled; see sections "ALTERNATE CONFIGURATIONS" and "EXTENSIONS" + below.
Unless otherwise noted, functions that return an integer return OK on success and ERR on failure. Functions that return pointers return NULL on failure. Typically, ncurses treats a null pointer passed as a - function parameter as a failure. - - Functions with a "mv" prefix first perform cursor movement using wmove - and fail if the position is outside the window, or (for "mvw" - functions) if the WINDOW pointer is null. + function parameter as a failure. Functions with a "mv" prefix first + perform cursor movement using wmove(3x) and fail if the position is + outside the window.
- The following environment symbols are useful for customizing the - runtime behavior of the ncurses library. The most important ones have - been already discussed in detail. + The following symbols from the process environment customize the + runtime behavior of ncurses applications. The library may be + configured to disregard the variables TERMINFO, TERMINFO_DIRS, + TERMPATH, and HOME, if the user is the superuser (root), or the + application uses setuid(2) or setgid(2). + + +
+ The debugging library checks this variable when the application has + redirected output to a file. Its integral value is used for the baud + rate. If that value is absent or invalid, ncurses uses 9600. This + feature allows testers to construct repeatable test cases that take + into account optimization decisions that depend on baud rate.
- When set, change the command_character (cmdch) capability value of - loaded terminfo entries to the value of this variable. Very few term- + When set, the command_character (cmdch) capability value of loaded + terminfo entries changes to the value of this variable. Very few term- info entries provide this feature. Because this name is also used in development environments to represent - the C compiler's name, ncurses ignores it if it does not happen to be a - single character. - - -
- The debugging library checks this environment variable when the - application has redirected output to a file. The variable's numeric - value is used for the baud rate. If no value is found, ncurses uses - 9600. This allows testers to construct repeatable test-cases that take - into account costs that depend on baud rate. + the C compiler's name, ncurses ignores its value if it is not one + character in length.
- Specify the width of the screen in characters. Applications running in - a windowing environment usually are able to obtain the width of the - window in which they are executing. If neither the COLUMNS value nor - the terminal's screen size is available, ncurses uses the size which - may be specified in the terminfo database (i.e., the cols capability). - - It is important that your application use a correct size for the - screen. This is not always possible because your application may be - running on a host which does not honor NAWS (Negotiations About Window - Size), or because you are temporarily running as another user. - However, setting COLUMNS and/or LINES overrides the library's use of - the screen size obtained from the operating system. - - Either COLUMNS or LINES symbols may be specified independently. This - is mainly useful to circumvent legacy misfeatures of terminal - descriptions, e.g., xterm which commonly specifies a 65 line screen. - For best results, lines and cols should not be specified in a terminal - description for terminals which are run as emulations. - - Use the use_env function to disable all use of external environment - (but not including system calls) to determine the screen size. Use the - use_tioctl function to update COLUMNS or LINES to match the screen size - obtained from system calls or the terminal database. + This variable specifies the width of the screen in characters. + Applications running in a windowing environment usually are able to + obtain the width of the window in which they are executing. If COLUMNS + is not defined and the terminal's screen size is not available from the + terminal driver, ncurses uses the size specified by the columns (cols) + capability of the terminal type's entry in the terminfo database, if + any. + + It is important that your application use the correct screen size. + Automatic detection thereof is not always possible because an + application may be running on a host that does not honor NAWS + (Negotiations About Window Size) or as a different user ID than the + owner of the terminal device file. Setting COLUMNS and/or LINES + overrides the library's use of the screen size obtained from the + operating system. + + The COLUMNS and LINES variables may be specified independently. This + property is useful to circumvent misfeatures of legacy terminal type + descriptions; xterm(1) descriptions specifying 65 lines were once + notorious. For best results, avoid specifying cols and lines + capability codes in terminfo descriptions of terminal emulators. + + use_env(3x) can disable use of the process environment in determining + the screen size. use_tioctl(3x) can update COLUMNS and LINES to match + the screen size obtained from system calls or the terminal database.
- Specifies the total time, in milliseconds, for which ncurses will await - a character sequence, e.g., a function key. The default value, 1000 - milliseconds, is enough for most uses. However, it is made a variable - to accommodate unusual applications. + For curses to distinguish the ESC character resulting from a user's + press of the "Escape" key on the input device from one beginning an + escape sequence (as commonly produced by function keys), it waits after + receiving the escape character to see if further characters are + available on the input stream within a short interval. A global + variable ESCDELAY stores this interval in milliseconds. The default + value of 1000 (one second) is adequate for most uses. This environment + variable overrides it. The most common instance where you may wish to change this value is to - work with slow hosts, e.g., running on a network. If the host cannot - read characters rapidly enough, it will have the same effect as if the - terminal did not send characters rapidly enough. The library will - still see a timeout. + work with a remote host over a slow communication channel. If the host + running a curses application does not receive the characters of an + escape sequence in a timely manner, the library can interpret them as + multiple key stroke events. - Note that xterm mouse events are built up from character sequences - received from the xterm. If your application makes heavy use of - multiple-clicking, you may wish to lengthen this default value because - the timeout applies to the composed multi-click event as well as the - individual clicks. + xterm(1) mouse events are a form of escape sequence; therefore, if your + application makes heavy use of multiple-clicking, you may wish to + lengthen the default value because the delay applies to the composite + multi-click event as well as the individual clicks. - In addition to the environment variable, this implementation provides a - global variable with the same name. Portable applications should not - rely upon the presence of ESCDELAY in either form, but setting the - environment variable rather than the global variable does not create - problems when compiling an application. + Portable applications should not rely upon the presence of ESCDELAY in + either form, but setting the environment variable rather than the + global variable does not create problems when compiling an application. + If keypad(3x) is disabled for the curses window receiving input, a + program must disambiguate escape sequences itself. -
- Tells ncurses where your home directory is. That is where it may read - and write auxiliary terminal descriptions: - $HOME/.termcap - $HOME/.terminfo +
+ ncurses may read and write auxiliary terminal descriptions in .termcap + and .terminfo files in the user's home directory.
- Like COLUMNS, specify the height of the screen in characters. See - COLUMNS for a detailed description. + This counterpart to COLUMNS specifies the height of the screen in + characters. The corresponding terminfo capability and code is lines. + See the description of the COLUMNS variable above.
- This applies only to the OS/2 EMX port. It specifies the order of - buttons on the mouse. OS/2 numbers a 3-button mouse inconsistently - from other platforms: - - 1 = left - 2 = right - 3 = middle. - - This variable lets you customize the mouse. The variable must be three - numeric digits 1-3 in any order, e.g., 123 or 321. If it is not - specified, ncurses uses 132. + (OS/2 EMX port only) OS/2 numbers a three-button mouse inconsistently + with other platforms, such that 1 is the left button, 2 the right, and + 3 the middle. This variable customizes the mouse button numbering. + Its value must be three digits 1-3 in any order. By default, ncurses + assumes a numbering of "132".
- Override the compiled-in assumption that the terminal's default colors - are white-on-black (see default_colors(3x)). You may set the - foreground and background color values with this environment variable - by proving a 2-element list: foreground,background. For example, to - tell ncurses to not assume anything about the colors, set this to - "-1,-1". To make it green-on-black, set it to "2,0". Any positive - value from zero to the terminfo max_colors value is allowed. + If set, this variable overrides the ncurses library's compiled-in + assumption that the terminal's default colors are white on black; see + default_colors(3x). Set the foreground and background color values + with this environment variable by assigning it two integer values + separated by a comma, indicating foregound and background color + numbers, respectively. + For example, to tell ncurses not to assume anything about the colors, + use a value of "-1,-1". To make the default color scheme green on + black, use "2,0". ncurses accepts integral values from -1 up to the + value of the terminfo max_colors (colors) capability. -
- This applies only to the MinGW port of ncurses. - The Console2 program's handling of the Microsoft Console API call - CreateConsoleScreenBuffer is defective. Applications which use this - will hang. However, it is possible to simulate the action of this call - by mapping coordinates, explicitly saving and restoring the original - screen contents. Setting the environment variable NCGDB has the same - effect. +
+ (MinGW port only) The Console2 program defectively handles the + Microsoft Console API call CreateConsoleScreenBuffer. Applications + that use it will hang. However, it is possible to simulate the action + of this call by mapping coordinates, explicitly saving and restoring + the original screen contents. Setting the environment variable NCGDB + has the same effect.
- This applies only to ncurses configured to use the GPM interface. - - If present, the environment variable is a list of one or more terminal - names against which the TERM environment variable is matched. Setting - it to an empty value disables the GPM interface; using the built-in - support for xterm, etc. - - If the environment variable is absent, ncurses will attempt to open GPM - if TERM contains "linux". + (Linux only) When ncurses is configured to use the GPM interface, this + variable may list one or more terminal names against which the TERM + variable (see below) is matched. An empty value disables the GPM + interface, using ncurses's built-in support for xterm(1) mouse + protocols instead. If the variable is absent, ncurses attempts to open + GPM if TERM contains "linux".
- ncurses may use tabs as part of cursor movement optimization. In some - cases, your terminal driver may not handle these properly. Set this - environment variable to any value to disable the feature. You can also - adjust your stty(1) settings to avoid the problem. + ncurses may use tab characters in cursor movement optimization. In + some cases, your terminal driver may not handle them properly. Set + this environment variable to any value to disable the feature. You can + also adjust your stty(1) settings to avoid the problem.
- Some terminals use a magic-cookie feature which requires special - handling to make highlighting and other video attributes display - properly. You can suppress the highlighting entirely for these - terminals by setting this environment variable to any value. + Many terminals store video attributes as a property of a character + cell, as curses does. Historically, some recorded changes in video + attributes as data that logically occupies character cells on the + display, switching attributes on or off, similarly to tags in a markup + language; these are termed "magic cookies", and must be subsequently + overprinted. If the terminfo entry for your terminal type does not + adequately describe its handling of magic cookies, set this variable to + any value to instruct ncurses to disable attributes entirely.
- Most of the terminal descriptions in the terminfo database are written - for real "hardware" terminals. Many people use terminal emulators - which run in a windowing environment and use curses-based applications. - Terminal emulators can duplicate all of the important aspects of a - hardware terminal, but they do not have the same limitations. The - chief limitation of a hardware terminal from the standpoint of your - application is the management of dataflow, i.e., timing. Unless a + Most terminal type descriptions in the terminfo database detail + hardware devices. Many people use curses-based applications in + terminal emulator programs that run in a windowing environment. These + programs can duplicate all of the important features of a hardware + terminal, but often lack their limitations. Chief among these absent + drawbacks is the problem of data flow management; that is, limiting the + speed of communication to what the hardware could handle. Unless a hardware terminal is interfaced into a terminal concentrator (which - does flow control), it (or your application) must manage dataflow, - preventing overruns. The cheapest solution (no hardware cost) is for - your program to do this by pausing after operations that the terminal - does slowly, such as clearing the display. + does flow control), an application must manage flow control itself to + prevent overruns and data loss. - As a result, many terminal descriptions (including the vt100) have - delay times embedded. You may wish to use these descriptions, but not - want to pay the performance penalty. - - Set the NCURSES_NO_PADDING environment variable to disable all but - mandatory padding. Mandatory padding is used as a part of special - control sequences such as flash. + A solution that comes at no hardware cost is for an application to + pause after directing a terminal to execute an operation that it + performs slowly, such as clearing the display. Many terminal type + descriptions, including that for the VT100, embed delay specifications + in capabilities. You may wish to use these temrinal descriptions + without paying the performance penalty. Set NCURSES_NO_PADDING to any + value to disable all but mandatory padding. Mandatory padding is used + by such terminal capabilities as flash_screen (flash).
- This setting is obsolete. Before changes - - o started with 5.9 patch 20120825 and - - o continued though 5.9 patch 20130126 - - ncurses enabled buffered output during terminal initialization. This - was done (as in SVr4 curses) for performance reasons. For testing - purposes, both of ncurses and certain applications, this feature was - made optional. Setting the NCURSES_NO_SETBUF variable disabled output - buffering, leaving the output in the original (usually line buffered) - mode. - - In the current implementation, ncurses performs its own buffering and - does not require this workaround. It does not modify the buffering of - the standard output. - - The reason for the change was to make the behavior for interrupts and - other signals more robust. One drawback is that certain - nonconventional programs would mix ordinary stdio(3) calls with ncurses - calls and (usually) work. This is no longer possible since ncurses is - not using the buffered standard output but its own output (to the same - file descriptor). As a special case, the low-level calls such as putp - still use the standard output. But high-level curses calls do not. + (Obsolete) Prior to internal changes developed in ncurses 5.9 (patches + 20120825 through 20130126), the library used setbuf(3) to enable fully + buffered output when initializing the terminal. This was done, as in + SVr4 curses, to increase performance. For testing purposes, both of + ncurses and of certain applications, this feature was made optional. + Setting this variable disabled output buffering, leaving the output + stream in the original (usually line-buffered) mode. + + Nowadays, ncurses performs its own buffering and does not require this + workaround; it does not modify the buffering of the standard output + stream. This approach makes signal handling, as for interrupts, more + robust. A drawback is that certain unconventional programs mixed + stdio(3) calls with ncurses calls and (usually) got the behavior they + expected. This is no longer the case; ncurses does not write to the + standard output file descriptor through a stdio-buffered stream. + + As a special case, low-level API calls such as putp(3x) still use the + standard output stream. High-level curses calls such as printw(3x) do + not.
- During initialization, the ncurses library checks for special cases - where VT100 line-drawing (and the corresponding alternate character set - capabilities) described in the terminfo are known to be missing. - Specifically, when running in a UTF-8 locale, the Linux console - emulator and the GNU screen program ignore these. ncurses checks the - TERM environment variable for these. For other special cases, you - should set this environment variable. Doing this tells ncurses to use - Unicode values which correspond to the VT100 line-drawing glyphs. That - works for the special cases cited, and is likely to work for terminal - emulators. - - When setting this variable, you should set it to a nonzero value. - Setting it to zero (or to a nonnumber) disables the special check for - "linux" and "screen". - - As an alternative to the environment variable, ncurses checks for an - extended terminfo capability U8. This is a numeric capability which - can be compiled using tic -x. For example + At initialization, ncurses inspects the TERM environment variable for + special cases where VT100 forms-drawing characters (and the + corresponding alternate character set terminfo capabilities) are known + to be unsupported by terminal types that otherwise claim VT100 + compatibility. Specifically, when running in a UTF-8 locale, the Linux + virtual console device and the GNU screen(1) program ignore them. Set + this variable to a nonzero value to instruct ncurses that the + terminal's ACS support is broken; the library then outputs Unicode code + points that correspond to the forms-drawing characters. Set it to zero + (or a non-integer) to disable the special check for terminal type names + matching "linux" or "screen", directing ncurses to assume that the ACS + feature works if the terminal type description advertises it. + + As an alternative to use of this variable, ncurses checks for an + extended terminfo numeric capability U8 that can be compiled using "tic + -x". Examples follow. # linux console, if patched to provide working # VT100 shift-in/shift-out, with corresponding font. @@ -1028,67 +1024,60 @@ xterm-utf8|xterm relying on UTF-8 line-graphics, U8#1, use=xterm, - The name "U8" is chosen to be two characters, to permit it to be used - by applications that use ncurses' termcap interface. + The two-character name "U8" was chosen to permit its use via ncurses's + termcap interface.
- During initialization, the ncurses debugging library checks the - NCURSES_TRACE environment variable. If it is defined, to a numeric - value, ncurses calls the trace function, using that value as the - argument. - - The argument values, which are defined in curses.h, provide several - types of information. When running with traces enabled, your - application will write the file trace to the current directory. - - See curs_trace(3x) for more information. + At initialization, ncurses (in its debugging configuration) checks for + this variable's presence. If defined with an integral value, the + library calls curses_trace(3x) with that value as the argument.
- Denotes your terminal type. Each terminal type is distinct, though + Denotes your terminal type. Each terminal type is distinct, though many are similar. - TERM is commonly set by terminal emulators to help applications find a - workable terminal description. Some of those choose a popular + TERM is commonly set by terminal emulators to help applications find a + workable terminal description. Some of those choose a popular approximation, e.g., "ansi", "vt100", "xterm" rather than an exact fit. Not infrequently, your application will have problems with that approach, e.g., incorrect function-key definitions. - If you set TERM in your environment, it has no effect on the operation - of the terminal emulator. It only affects the way applications work - within the terminal. Likewise, as a general rule (xterm(1) being a - rare exception), terminal emulators which allow you to specify TERM as - a parameter or configuration value do not change their behavior to + If you set TERM in your environment, it has no effect on the operation + of the terminal emulator. It only affects the way applications work + within the terminal. Likewise, as a general rule (xterm(1) being a + rare exception), terminal emulators which allow you to specify TERM as + a parameter or configuration value do not change their behavior to match that setting.
- If the ncurses library has been configured with termcap support, - ncurses will check for a terminal's description in termcap form if it + If the ncurses library has been configured with termcap support, + ncurses will check for a terminal's description in termcap form if it is not available in the terminfo database. The TERMCAP environment variable contains either a terminal description - (with newlines stripped out), or a file name telling where the + (with newlines stripped out), or a file name telling where the information denoted by the TERM environment variable exists. In either - case, setting it directs ncurses to ignore the usual place for this + case, setting it directs ncurses to ignore the usual place for this information, e.g., /etc/termcap.
- ncurses can be configured to read from multiple terminal databases. - The TERMINFO variable overrides the location for the default terminal - database. Terminal descriptions (in terminal format) are stored in + ncurses can be configured to read from multiple terminal databases. + The TERMINFO variable overrides the location for the default terminal + database. Terminal descriptions (in terminal format) are stored in terminal databases: o Normally these are stored in a directory tree, using subdirectories named by the first letter of the terminal names therein. This is the scheme used in System V, which legacy Unix systems use, - and the TERMINFO variable is used by curses applications on those + and the TERMINFO variable is used by curses applications on those systems to override the default location of the terminal database. - o If ncurses is built to use hashed databases, then each entry in + o If ncurses is built to use hashed databases, then each entry in this list may be the path of a hashed database file, e.g., /usr/share/terminfo.db @@ -1097,30 +1086,30 @@ /usr/share/terminfo/ - The hashed database uses less disk-space and is a little faster - than the directory tree. However, some applications assume the - existence of the directory tree, reading it directly rather than + The hashed database uses less disk-space and is a little faster + than the directory tree. However, some applications assume the + existence of the directory tree, reading it directly rather than using the terminfo library calls. - o If ncurses is built with a support for reading termcap files - directly, then an entry in this list may be the path of a termcap + o If ncurses is built with a support for reading termcap files + directly, then an entry in this list may be the path of a termcap file. o If the TERMINFO variable begins with "hex:" or "b64:", ncurses uses - the remainder of that variable as a compiled terminal description. + the remainder of that variable as a compiled terminal description. You might produce the base64 format using infocmp(1m): TERMINFO="$(infocmp -0 -Q2 -q)" export TERMINFO - The compiled description is used if it corresponds to the terminal + The compiled description is used if it corresponds to the terminal identified by the TERM variable. - Setting TERMINFO is the simplest, but not the only way to set location - of the default terminal database. The complete list of database + Setting TERMINFO is the simplest, but not the only way to set location + of the default terminal database. The complete list of database locations in order follows: - o the last terminal database to which ncurses wrote, if any, is + o the last terminal database to which ncurses wrote, if any, is searched first o the location specified by the TERMINFO environment variable @@ -1129,48 +1118,42 @@ o locations listed in the TERMINFO_DIRS environment variable - o one or more locations whose names are configured and compiled + o one or more locations whose names are configured and compiled into the ncurses library, i.e., - o /usr/share/terminfo (corresponding to the TERMINFO_DIRS + o /usr/share/terminfo (corresponding to the TERMINFO_DIRS variable) o /usr/share/terminfo (corresponding to the TERMINFO variable)
- Specifies a list of locations to search for terminal descriptions. - Each location in the list is a terminal database as described in the - section on the TERMINFO variable. The list is separated by colons + Specifies a list of locations to search for terminal descriptions. + Each location in the list is a terminal database as described in the + section on the TERMINFO variable. The list is separated by colons (i.e., ":") on Unix, semicolons on OS/2 EMX. - There is no corresponding feature in System V terminfo; it is an + There is no corresponding feature in System V terminfo; it is an extension developed for ncurses.
- If TERMCAP does not hold a file name then ncurses checks the TERMPATH - environment variable. This is a list of filenames separated by spaces + If TERMCAP does not hold a file name then ncurses checks the TERMPATH + environment variable. This is a list of filenames separated by spaces or colons (i.e., ":") on Unix, semicolons on OS/2 EMX. - If the TERMPATH environment variable is not set, ncurses looks in the + If the TERMPATH environment variable is not set, ncurses looks in the files /etc/termcap, /usr/share/misc/termcap and $HOME/.termcap, in that order. - The library may be configured to disregard the following variables when - the current user is the superuser (root), or if the application uses - setuid or setgid permissions: - - $TERMINFO, $TERMINFO_DIRS, $TERMPATH, as well as $HOME. -
- Many different ncurses configurations are possible, determined by the - options given to the configure script when building the library. Run - the script with the --help option to peruse them all. A few are of + Many different ncurses configurations are possible, determined by the + options given to the configure script when building the library. Run + the script with the --help option to peruse them all. A few are of particular significance to the application developer employing ncurses. --disable-overwrite @@ -1178,20 +1161,20 @@ #include <curses.h> - This option is used to avoid filename conflicts when ncurses is + This option is used to avoid filename conflicts when ncurses is not the main implementation of curses of the computer. If ncurses - is installed disabling overwrite, it puts its headers in a + is installed disabling overwrite, it puts its headers in a subdirectory, e.g., #include <ncurses/curses.h> - It also omits a symbolic link which would allow you to use + It also omits a symbolic link which would allow you to use -lcurses to build executables. --enable-widec - The configure script renames the library and (if the - --disable-overwrite option is used) puts the header files in a - different subdirectory. All of the library names have a "w" + The configure script renames the library and (if the + --disable-overwrite option is used) puts the header files in a + different subdirectory. All of the library names have a "w" appended to them, i.e., instead of -lncurses @@ -1200,45 +1183,45 @@ -lncursesw - You must also enable the wide-character features in the header - file when compiling for the wide-character library to use the - extended (wide-character) functions. The symbol which enables + You must also enable the wide-character features in the header + file when compiling for the wide-character library to use the + extended (wide-character) functions. The symbol which enables these features has changed since XSI Curses, Issue 4: - o Originally, the wide-character feature required the symbol + o Originally, the wide-character feature required the symbol _XOPEN_SOURCE_EXTENDED but that was only valid for XPG4 (1996). - o Later, that was deemed conflicting with _XOPEN_SOURCE defined + o Later, that was deemed conflicting with _XOPEN_SOURCE defined to 500. - o As of mid-2018, none of the features in this implementation - require a _XOPEN_SOURCE feature greater than 600. However, + o As of mid-2018, none of the features in this implementation + require a _XOPEN_SOURCE feature greater than 600. However, X/Open Curses, Issue 7 (2009) recommends defining it to 700. - o Alternatively, you can enable the feature by defining - NCURSES_WIDECHAR with the caveat that some other header file - than curses.h may require a specific value for _XOPEN_SOURCE + o Alternatively, you can enable the feature by defining + NCURSES_WIDECHAR with the caveat that some other header file + than curses.h may require a specific value for _XOPEN_SOURCE (or a system-specific symbol). - The curses.h header file installed for the wide-character library - is designed to be compatible with the non-wide library's header. - Only the size of the WINDOW structure differs; few applications + The curses.h header file installed for the wide-character library + is designed to be compatible with the non-wide library's header. + Only the size of the WINDOW structure differs; few applications require more than pointers to WINDOWs. If the headers are installed allowing overwrite, the wide- - character library's headers should be installed last, to allow + character library's headers should be installed last, to allow applications to be built using either library from the same set of headers. --with-pthread - The configure script renames the library. All of the library - names have a "t" appended to them (before any "w" added by + The configure script renames the library. All of the library + names have a "t" appended to them (before any "w" added by --enable-widec). The global variables such as LINES are replaced by macros to allow read-only access. At the same time, setter-functions are provided - to set these values. Some applications (very few) may require + to set these values. Some applications (very few) may require changes to work with this convention. --with-shared @@ -1248,17 +1231,17 @@ --with-debug --with-profile - The shared and normal (static) library names differ by their - suffixes, e.g., libncurses.so and libncurses.a. The debug and - profiling libraries add a "_g" and a "_p" to the root names + The shared and normal (static) library names differ by their + suffixes, e.g., libncurses.so and libncurses.a. The debug and + profiling libraries add a "_g" and a "_p" to the root names respectively, e.g., libncurses_g.a and libncurses_p.a. --with-termlib - Low-level functions which do not depend upon whether the library + Low-level functions which do not depend upon whether the library supports wide-characters, are provided in the tinfo library. - By doing this, it is possible to share the tinfo library between - wide/normal configurations as well as reduce the size of the + By doing this, it is possible to share the tinfo library between + wide/normal configurations as well as reduce the size of the library when only low-level functions are needed. Those functions are described in these pages: @@ -1278,8 +1261,8 @@ o curs_util(3x) - miscellaneous curses utility routines --with-trace - The trace function normally resides in the debug library, but it - is sometimes useful to configure this in the shared library. + The trace function normally resides in the debug library, but it + is sometimes useful to configure this in the shared library. Configure scripts should check for the function's existence rather than assuming it is always in the debug library. @@ -1293,71 +1276,78 @@
- X/Open Curses permits most functions it specifies to be made available + X/Open Curses permits most functions it specifies to be made available as macros as well. ncurses does so o for functions that return values via their parameters, o to support obsolete features, - o to reuse functions (for example, those that move the cursor before + o to reuse functions (for example, those that move the cursor before another operation), and o a few special cases. - If the standard output file descriptor of an ncurses program is - redirected to something that is not a terminal device, the library - writes screen updates to the standard error file descriptor. This was + If the standard output file descriptor of an ncurses program is + redirected to something that is not a terminal device, the library + writes screen updates to the standard error file descriptor. This was an undocumented feature of SVr3. - See subsection "Header files" below regarding symbols exposed by + See subsection "Header files" below regarding symbols exposed by inclusion of curses.h.
- ncurses enables an application to capture mouse events on certain + ncurses enables an application to capture mouse events on certain terminals, including xterm; see curs_mouse(3x). - ncurses provides a means of responding to window resizing events, as - when running in a GUI terminal emulator application such as xterm; see + ncurses provides a means of responding to window resizing events, as + when running in a GUI terminal emulator application such as xterm; see resizeterm(3x) and wresize(3x). ncurses allows an application to query the terminal for the presence of a wide variety of special keys; see has_key(3x). ncurses extends the fixed set of function key capabilities specified by - X/Open Curses by allowing the application programmer to define - additional key sequences at runtime; see define_key(3x), + X/Open Curses by allowing the application programmer to define + additional key sequences at runtime; see define_key(3x), key_defined(3x), and keyok(3x). - ncurses can exploit the capabilities of terminals implementing - ISO 6429/ECMA-48 SGR 39 and SGR 49 sequences, which allow an - application to reset the terminal to its original foreground and - background colors. From a user's perspective, the application is able - to draw colored text on a background whose color is set independently, + ncurses can exploit the capabilities of terminals implementing + ISO 6429/ECMA-48 SGR 39 and SGR 49 sequences, which allow an + application to reset the terminal to its original foreground and + background colors. From a user's perspective, the application is able + to draw colored text on a background whose color is set independently, providing better control over color contrasts. See default_colors(3x). - An ncurses application can choose to hide the internal details of - WINDOW structures, instead using accessor functions such as + An ncurses application can choose to hide the internal details of + WINDOW structures, instead using accessor functions such as is_scrollok(3x). - ncurses enables an application to direct application output to a + ncurses enables an application to direct application output to a printer attached to the terminal device; see curs_print(3x). - ncurses offers slk_attr(3x) as a counterpart of attr_get(3x) for soft- - label key lines, and extended_slk_color(3x) as a form of slk_color(3x) - that can gather color information from them when many colors are + ncurses offers slk_attr(3x) as a counterpart of attr_get(3x) for soft- + label key lines, and extended_slk_color(3x) as a form of slk_color(3x) + that can gather color information from them when many colors are supported. - Some extensions are only available if ncurses is compiled to support - them; see section "ALTERNATE CONFIGURATIONS" above. + Some extensions are only available if ncurses is compiled to support + them; section "ALTERNATE CONFIGURATIONS" describes how. - o Rudimentary support for multi-threaded applications may be + o Rudimentary support for multi-threaded applications may be available; see curs_threads(3x). - o Functions that ease the management of multiple screens can be + o Functions that ease the management of multiple screens can be exposed; see curs_sp_funcs(3x). + o To aid applications to debug their memory usage, ncurses optionally + offers functions to more aggressively free memory it dynamically + allocates itself; see curs_memleaks(3x). + + o The library facilitates auditing and troubleshooting of its + behavior; see curs_trace(3x). + o The compiler option -DUSE_GETCAP causes the library to fall back to reading /etc/termcap if the terminal setup code cannot find a term- info entry corresponding to TERM. Use of this feature is not @@ -1502,7 +1492,7 @@ -ncurses 6.4 2024-03-23 ncurses(3x) +ncurses 6.4 2024-04-13 ncurses(3x)