| '\" t |
| .\"*************************************************************************** |
| .\" Copyright 2018-2023,2024 Thomas E. Dickey * |
| .\" Copyright 1998-2015,2017 Free Software Foundation, Inc. * |
| .\" * |
| .\" Permission is hereby granted, free of charge, to any person obtaining a * |
| .\" copy of this software and associated documentation files (the * |
| .\" "Software"), to deal in the Software without restriction, including * |
| .\" without limitation the rights to use, copy, modify, merge, publish, * |
| .\" distribute, distribute with modifications, sublicense, and/or sell * |
| .\" copies of the Software, and to permit persons to whom the Software is * |
| .\" furnished to do so, subject to the following conditions: * |
| .\" * |
| .\" The above copyright notice and this permission notice shall be included * |
| .\" in all copies or substantial portions of the Software. * |
| .\" * |
| .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| .\" * |
| .\" Except as contained in this notice, the name(s) of the above copyright * |
| .\" holders shall not be used in advertising or otherwise to promote the * |
| .\" sale, use or other dealings in this Software without prior written * |
| .\" authorization. * |
| .\"*************************************************************************** |
| .\" |
| .\" $Id: ncurses.3x,v 1.214 2024/04/27 17:55:43 tom Exp $ |
| .TH ncurses 3X 2024-04-27 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls" |
| .ie \n(.g \{\ |
| .ds `` \(lq |
| .ds '' \(rq |
| .\} |
| .el \{\ |
| .ie t .ds `` `` |
| .el .ds `` "" |
| .ie t .ds '' '' |
| .el .ds '' "" |
| .\} |
| . |
| .de bP |
| .ie n .IP \(bu 4 |
| .el .IP \(bu 2 |
| .. |
| . |
| .\" Add supplementary paragraph tag on its own line after TP. |
| .\" Adapted from TQ (which would produce mandoc warnings). |
| .de tQ |
| . br |
| . ns |
| . TP |
| .. |
| . |
| .ds d @TERMINFO@ |
| .SH NAME |
| \fB\%ncurses\fP \- |
| character-cell terminal interface with optimized output |
| .SH SYNOPSIS |
| .nf |
| \fB#include <curses.h> |
| .fi |
| .SH DESCRIPTION |
| The \*(``new curses\*('' library offers the programmer a |
| terminal-independent means of reading keyboard and mouse input and |
| updating character-cell terminals with output optimized to minimize |
| screen updates. |
| .I \%ncurses |
| replaces the |
| .I curses |
| libraries from |
| System V Release 4 Unix (\*(``SVr4\*('') |
| and |
| 4.4BSD Unix, |
| the development of which ceased in the 1990s. |
| This document describes |
| .I \%ncurses |
| version @NCURSES_MAJOR@.@NCURSES_MINOR@ |
| (patch @NCURSES_PATCH@). |
| .PP |
| .I \%ncurses |
| permits control of the terminal screen's contents; |
| abstraction and subdivision thereof with |
| .I windows |
| and |
| .IR pads ; |
| the reading of terminal input; |
| control of terminal input and output options; |
| environment query routines; |
| color manipulation; |
| the definition and use of |
| .I "soft label" |
| keys; |
| .I \%term\%info |
| capability access; |
| a |
| .I termcap |
| compatibility interface; |
| and an abstraction of the system's API for manipulating the terminal |
| (such as \fI\%termios\fP(3)). |
| .PP |
| .I \%ncurses |
| implements the standard interface described by |
| X/Open Curses Issue\ 7. |
| In many behavioral details not standardized by X/Open, |
| .I \%ncurses |
| emulates the |
| .I curses |
| library of SVr4 and provides numerous useful extensions. |
| .PP |
| .I \%ncurses |
| man pages employ several sections to clarify matters of usage and |
| interoperability with other |
| .I curses |
| implementations. |
| .bP |
| \*(``NOTES\*('' describes issues and caveats of which any user of the |
| .I \%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. |
| .bP |
| \*(``EXTENSIONS\*('' presents |
| .I \%ncurses |
| innovations beyond the X/Open Curses standard and/or the SVr4 |
| .I curses |
| implementation. |
| They are termed |
| .I extensions |
| to indicate that they cannot be implemented solely by using the library |
| API, |
| but require access to the library's internal state. |
| .bP |
| \*(``PORTABILITY\*('' discusses matters |
| (beyond the exercise of extensions) |
| that should be considered when writing to a |
| .I curses |
| standard, |
| or for multiple implementations. |
| .bP |
| \*(``HISTORY\*('' examines points of detail in |
| .I \%ncurses |
| and other |
| .I 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). |
| .PP |
| A |
| .I curses |
| application must be linked with the library; |
| use the |
| .B \-lncurses |
| option to your compiler or linker. |
| A debugging version of the library may be available; |
| if so, |
| link with it using |
| .BR \-lncurses_g . |
| (Your system integrator may have installed these libraries such that you |
| can use the options |
| .B \-lcurses |
| and |
| .BR \-lcurses_g , |
| respectively.) |
| The |
| .I \%ncurses_g |
| library generates trace logs |
| (in a file called |
| .I \%trace |
| in the current directory) |
| that describe |
| .I \%ncurses |
| actions. |
| See section \*(``ALTERNATE CONFIGURATIONS\*('' below. |
| .SS "Application Structure" |
| A |
| .I curses |
| application uses information from the system locale; |
| \fI\%setlocale\fP(3) prepares it for |
| .I curses |
| library calls. |
| .PP |
| .RS 4 |
| .EX |
| setlocale(LC_ALL, ""); |
| .EE |
| .RE |
| .PP |
| 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. |
| .PP |
| \fB\%initscr\fP(3X) or \fB\%newterm\fP(3X) |
| must be called to initialize |
| .I curses |
| before use of any functions that deal with windows and screens. |
| .PP |
| To get character-at-a-time input without echoing\(emmost interactive, |
| screen-oriented programs want this\(emuse the following sequence. |
| .PP |
| .RS 4 |
| .EX |
| initscr(); cbreak(); noecho(); |
| .EE |
| .RE |
| .PP |
| Most applications perform further setup as follows. |
| .PP |
| .RS 4 |
| .EX |
| intrflush(stdscr, FALSE); |
| keypad(stdscr, TRUE); |
| .EE |
| .RE |
| .PP |
| A |
| .I curses |
| program then often enters an event loop of some sort. |
| Call \fB\%endwin\fP(3X) before exiting. |
| .SS Overview |
| A |
| .I curses |
| library abstracts the terminal screen by representing all or part of it |
| as a |
| .I \%WINDOW |
| data structure. |
| A |
| .I window |
| is a rectangular grid of character cells, |
| addressed by row and column coordinates |
| .RI ( y , |
| .IR x ), |
| with the upper left corner as (0, 0). |
| A window called |
| .BR \%stdscr , |
| the same size as the terminal screen, |
| is always available. |
| Create others with \fB\%newwin\fP(3X). |
| .PP |
| A |
| .I curses |
| library does not manage overlapping windows |
| (but see below). |
| You can either use |
| .B \%stdscr |
| to manage one screen-filling window, |
| or tile the screen into non-overlapping windows and not use |
| .B \%stdscr |
| at all. |
| Mixing the two approaches will result in unpredictable and undesired |
| effects. |
| .PP |
| Functions permit manipulation of a window and the |
| .I cursor |
| identifying the cell within it at which the next output operation will |
| occur. |
| Among those, |
| the most basic are \fB\%move\fP(3X) and \fB\%addch\fP(3X): |
| these place the cursor and write a character to |
| .BR \%stdscr , |
| respectively. |
| .PP |
| 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 |
| .I curses |
| functions to accumulate a set of desired updates that make sense to |
| present together, |
| call \fB\%refresh\fP(3X) to tell the library to make the user's screen |
| look like \fBstdscr\fP. |
| The library |
| .\" X/Open Curses Issue 7 assumes some optimization will be done, but |
| .\" does not mandate it in any way. |
| .I 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 |
| \fB\%terminfo\fP(3X) API, |
| a feature of every standard |
| .I curses |
| implementation. |
| .PP |
| Special windows called |
| .I pads |
| may also be manipulated. |
| These are windows that are not constrained to the size of the terminal |
| screen and whose contents need not be completely displayed. |
| See \fB\%curs_pad\fP(3X). |
| .PP |
| 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 \fB\%curs_attr\fP(3X). |
| .PP |
| .I 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 \fB\%waddch\fP(3X). |
| .PP |
| .I 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 |
| .I "escape sequence." |
| .I curses |
| translates these into unique |
| .I "key codes." |
| See \fB\%getch\fP(3X). |
| .PP |
| .I \%ncurses |
| provides reimplementations of the SVr4 \fBpanel\fP(3X), \fBform\fP(3X), |
| and \fBmenu\fP(3X) libraries to ease construction of user interfaces |
| with |
| .IR curses . |
| .SS "Initialization" |
| The selection of an appropriate value of |
| .I TERM |
| in the process environment is essential to correct |
| .I curses |
| and |
| .I \%term\%info |
| library operation. |
| A well-configured system selects a correct |
| .I TERM |
| value automatically; |
| \fB\%tset\fP(1) may assist with troubleshooting exotic situations. |
| .PP |
| If you change the terminal type, |
| export the |
| .I TERM |
| environment variable in the shell, |
| then run \fB\%tset\fP(1) or the |
| .RB \*(`` "@TPUT@ init" \*('' |
| command. |
| See subsection \*(``Tabs and Initialization\*('' of \fB\%terminfo\fP(5). |
| .PP |
| If the environment variables |
| .I \%LINES |
| and |
| .I \%COLUMNS |
| are set, |
| or if the |
| .I curses |
| program is executing in a graphical windowing environment, |
| the information obtained thence overrides that obtained by |
| .IR \%term\%info . |
| An |
| .I \%ncurses |
| extension supports resizable terminals; |
| see \fB\%wresize\fP(3X). |
| .PP |
| If the environment variable |
| .I \%TERMINFO |
| is defined, |
| a |
| .I curses |
| program checks first for a terminal type description in the location it |
| identifies. |
| .I \%TERMINFO |
| is useful for developing experimental type descriptions or when write |
| permission to |
| .I \%\*d |
| is not available. |
| .PP |
| See section \*(``ENVIRONMENT\*('' below. |
| .SS "Naming Conventions" |
| .I 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 |
| .I \%WINDOW |
| pointer argument; |
| those with a \*(``mv\*('' prefix first perform cursor movement using |
| \fB\%wmove\fP(3X); |
| a \*(``mvw\*('' prefix indicates both. |
| The \*(``w\*('' function is typically the elemental one; |
| the removal of this prefix usually indicates operation on |
| .BR \%stdscr . |
| .PP |
| Four functions prefixed with \*(``p\*('' require a pad argument. |
| .PP |
| In function synopses, |
| .I \%ncurses |
| man pages apply the following names to parameters. |
| .PP |
| .TS |
| center; |
| Li L. |
| bf \fIbool\fP (\fBTRUE\fP or \fBFALSE\fP) |
| c a \fIchar\fP or \fIint\fP |
| ch a \fIchtype\fP |
| wc a \fIwchar_t\fP or \fIwint_t\fP |
| wch a \fIcchar_t\fP |
| win pointer to a \fIWINDOW\fP |
| pad pointer to a \fIWINDOW\fP that is a pad |
| .TE |
| .SS "Wide and Non-wide Character Configurations" |
| This manual page describes functions that appear in any configuration |
| of the library. |
| There are two common configurations; |
| see section \*(``ALTERNATE CONFIGURATIONS\*('' below. |
| .TP 10 \" "ncursesw" + 2n |
| .I \%ncurses |
| is the library in its \*(``non-wide\*('' configuration, |
| handling only eight-bit characters. |
| It stores a character combined with attributes in a |
| .I \%chtype |
| datum, |
| which is often an alias of |
| .IR int . |
| .IP |
| Attributes alone |
| (with no corresponding character) |
| can be stored in variables of |
| .I \%chtype |
| or |
| .I \%attr_t |
| type. |
| In either case, |
| they are represented as an integral bit mask. |
| .IP |
| Each cell of a |
| .I \%WINDOW |
| is stored as a |
| .IR \%chtype . |
| .TP 10 |
| .I \%ncursesw |
| is the library in its \*(``wide\*('' configuration, |
| which handles character encodings requiring a larger data type than |
| .I \%char |
| (a byte-sized type) |
| can represent. |
| It adds about one third more calls using additional data types that |
| can store such |
| .I multibyte |
| characters. |
| .RS 10 \" same as foregoing tag width |
| .TP 9 \" "cchar_t" + 2n |
| .I \%cchar_t |
| corresponds to the non-wide configuration's |
| .IR \%chtype . |
| It always a structure type, |
| because it stores more data than fit into a standard scalar type. |
| A character code may not be representable as a |
| .IR \%char , |
| and moreover more than one character may occupy a cell |
| (as with accent marks and other diacritics). |
| Each character is of type |
| .IR \%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 |
| .IR \%chtype . |
| .PP |
| Each cell of a |
| .I \%WINDOW |
| is stored as a |
| .IR \%cchar_t . |
| .PP |
| \fB\%setcchar\fP(3X) and \fB\%getcchar\fP(3X) |
| store and retrieve |
| .I \%cchar_t |
| data. |
| The wide library API of |
| .I \%ncurses |
| depends on two data types standardized by ISO C95. |
| .TP 9 |
| .I \%wchar_t |
| stores a wide character. |
| Like |
| .IR \%chtype , |
| it may be an alias of |
| .IR int . |
| Depending on the character encoding, |
| a wide character may be |
| .IR spacing , |
| meaning that it occupies a character cell by itself and typically |
| accompanies cursor advancement, |
| or |
| .IR 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. |
| .TP 9 |
| .I \%wint_t |
| can store a |
| .I \%wchar_t |
| or the constant |
| .BR \%WEOF , |
| analogously to the |
| .IR int -sized |
| character manipulation functions of ISO C and its constant |
| .BR \%EOF . |
| .RE |
| .IP |
| 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, |
| \fB\%waddch\fP becomes \fB\%wadd_wch\fP. |
| (Exceptions that add only \*(``w\*('' comprise |
| .BR \%addwstr , |
| .BR \%inwstr , |
| and their variants.) |
| .IP |
| This convention is inapplicable to some non-wide function names, |
| so other transformations are used for the wide 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\*(''. |
| .\" |
| .SS "Function Name Index" |
| The following table lists the |
| .I curses |
| functions provided in the non-wide and wide APIs and the corresponding |
| man pages that describe them. |
| Those flagged with \*(``*\*('' |
| are |
| .IR \%ncurses "-specific," |
| neither described by X/Open Curses nor present in SVr4. |
| .PP |
| .TS |
| center tab(/); |
| l l . |
| \f(BIcurses\fP Function Name/Man Page |
| _ |
| COLOR_PAIR/\fBcurs_color\fP(3X) |
| PAIR_NUMBER/\fBcurs_color\fP(3X) |
| add_wch/\fBcurs_add_wch\fP(3X) |
| add_wchnstr/\fBcurs_add_wchstr\fP(3X) |
| add_wchstr/\fBcurs_add_wchstr\fP(3X) |
| addch/\fBcurs_addch\fP(3X) |
| addchnstr/\fBcurs_addchstr\fP(3X) |
| addchstr/\fBcurs_addchstr\fP(3X) |
| addnstr/\fBcurs_addstr\fP(3X) |
| addnwstr/\fBcurs_addwstr\fP(3X) |
| addstr/\fBcurs_addstr\fP(3X) |
| addwstr/\fBcurs_addwstr\fP(3X) |
| alloc_pair/\fBnew_pair\fP(3X)* |
| assume_default_colors/\fBdefault_colors\fP(3X)* |
| attr_get/\fBcurs_attr\fP(3X) |
| attr_off/\fBcurs_attr\fP(3X) |
| attr_on/\fBcurs_attr\fP(3X) |
| attr_set/\fBcurs_attr\fP(3X) |
| attroff/\fBcurs_attr\fP(3X) |
| attron/\fBcurs_attr\fP(3X) |
| attrset/\fBcurs_attr\fP(3X) |
| baudrate/\fBcurs_termattrs\fP(3X) |
| beep/\fBcurs_beep\fP(3X) |
| bkgd/\fBcurs_bkgd\fP(3X) |
| bkgdset/\fBcurs_bkgd\fP(3X) |
| bkgrnd/\fBcurs_bkgrnd\fP(3X) |
| bkgrndset/\fBcurs_bkgrnd\fP(3X) |
| border/\fBcurs_border\fP(3X) |
| border_set/\fBcurs_border_set\fP(3X) |
| box/\fBcurs_border\fP(3X) |
| box_set/\fBcurs_border_set\fP(3X) |
| can_change_color/\fBcurs_color\fP(3X) |
| cbreak/\fBcurs_inopts\fP(3X) |
| chgat/\fBcurs_attr\fP(3X) |
| clear/\fBcurs_clear\fP(3X) |
| clearok/\fBcurs_outopts\fP(3X) |
| clrtobot/\fBcurs_clear\fP(3X) |
| clrtoeol/\fBcurs_clear\fP(3X) |
| color_content/\fBcurs_color\fP(3X) |
| color_set/\fBcurs_attr\fP(3X) |
| copywin/\fBcurs_overlay\fP(3X) |
| curs_set/\fBcurs_kernel\fP(3X) |
| curses_trace/\fBcurs_trace\fP(3X)* |
| curses_version/\fBcurs_extend\fP(3X)* |
| def_prog_mode/\fBcurs_kernel\fP(3X) |
| def_shell_mode/\fBcurs_kernel\fP(3X) |
| define_key/\fBdefine_key\fP(3X)* |
| del_curterm/\fBcurs_terminfo\fP(3X) |
| delay_output/\fBcurs_util\fP(3X) |
| delch/\fBcurs_delch\fP(3X) |
| deleteln/\fBcurs_deleteln\fP(3X) |
| delscreen/\fBcurs_initscr\fP(3X) |
| delwin/\fBcurs_window\fP(3X) |
| derwin/\fBcurs_window\fP(3X) |
| doupdate/\fBcurs_refresh\fP(3X) |
| dupwin/\fBcurs_window\fP(3X) |
| echo/\fBcurs_inopts\fP(3X) |
| echo_wchar/\fBcurs_add_wch\fP(3X) |
| echochar/\fBcurs_addch\fP(3X) |
| endwin/\fBcurs_initscr\fP(3X) |
| erase/\fBcurs_clear\fP(3X) |
| erasechar/\fBcurs_termattrs\fP(3X) |
| erasewchar/\fBcurs_termattrs\fP(3X) |
| exit_curses/\fBcurs_memleaks\fP(3X)* |
| exit_terminfo/\fBcurs_memleaks\fP(3X)* |
| extended_color_content/\fBcurs_color\fP(3X)* |
| extended_pair_content/\fBcurs_color\fP(3X)* |
| extended_slk_color/\fBcurs_slk\fP(3X)* |
| filter/\fBcurs_util\fP(3X) |
| find_pair/\fBnew_pair\fP(3X)* |
| flash/\fBcurs_beep\fP(3X) |
| flushinp/\fBcurs_util\fP(3X) |
| free_pair/\fBnew_pair\fP(3X)* |
| get_escdelay/\fBcurs_threads\fP(3X)* |
| get_wch/\fBcurs_get_wch\fP(3X) |
| get_wstr/\fBcurs_get_wstr\fP(3X) |
| getattrs/\fBcurs_attr\fP(3X) |
| getbegx/\fBcurs_legacy\fP(3X)* |
| getbegy/\fBcurs_legacy\fP(3X)* |
| getbegyx/\fBcurs_getyx\fP(3X) |
| getbkgd/\fBcurs_bkgd\fP(3X) |
| getbkgrnd/\fBcurs_bkgrnd\fP(3X) |
| getcchar/\fBcurs_getcchar\fP(3X) |
| getch/\fBcurs_getch\fP(3X) |
| getcurx/\fBcurs_legacy\fP(3X)* |
| getcury/\fBcurs_legacy\fP(3X)* |
| getmaxx/\fBcurs_legacy\fP(3X)* |
| getmaxy/\fBcurs_legacy\fP(3X)* |
| getmaxyx/\fBcurs_getyx\fP(3X) |
| getmouse/\fBcurs_mouse\fP(3X)* |
| getn_wstr/\fBcurs_get_wstr\fP(3X) |
| getnstr/\fBcurs_getstr\fP(3X) |
| getparx/\fBcurs_legacy\fP(3X)* |
| getpary/\fBcurs_legacy\fP(3X)* |
| getparyx/\fBcurs_getyx\fP(3X) |
| getstr/\fBcurs_getstr\fP(3X) |
| getsyx/\fBcurs_kernel\fP(3X) |
| getwin/\fBcurs_util\fP(3X) |
| getyx/\fBcurs_getyx\fP(3X) |
| halfdelay/\fBcurs_inopts\fP(3X) |
| has_colors/\fBcurs_color\fP(3X) |
| has_ic/\fBcurs_termattrs\fP(3X) |
| has_il/\fBcurs_termattrs\fP(3X) |
| has_key/\fBcurs_getch\fP(3X)* |
| has_mouse/\fBcurs_mouse\fP(3X)* |
| hline/\fBcurs_border\fP(3X) |
| hline_set/\fBcurs_border_set\fP(3X) |
| idcok/\fBcurs_outopts\fP(3X) |
| idlok/\fBcurs_outopts\fP(3X) |
| immedok/\fBcurs_outopts\fP(3X) |
| in_wch/\fBcurs_in_wch\fP(3X) |
| in_wchnstr/\fBcurs_in_wchstr\fP(3X) |
| in_wchstr/\fBcurs_in_wchstr\fP(3X) |
| inch/\fBcurs_inch\fP(3X) |
| inchnstr/\fBcurs_inchstr\fP(3X) |
| inchstr/\fBcurs_inchstr\fP(3X) |
| init_color/\fBcurs_color\fP(3X) |
| init_extended_color/\fBcurs_color\fP(3X)* |
| init_extended_pair/\fBcurs_color\fP(3X)* |
| init_pair/\fBcurs_color\fP(3X) |
| initscr/\fBcurs_initscr\fP(3X) |
| innstr/\fBcurs_instr\fP(3X) |
| innwstr/\fBcurs_inwstr\fP(3X) |
| ins_nwstr/\fBcurs_ins_wstr\fP(3X) |
| ins_wch/\fBcurs_ins_wch\fP(3X) |
| ins_wstr/\fBcurs_ins_wstr\fP(3X) |
| insch/\fBcurs_insch\fP(3X) |
| insdelln/\fBcurs_deleteln\fP(3X) |
| insertln/\fBcurs_deleteln\fP(3X) |
| insnstr/\fBcurs_insstr\fP(3X) |
| insstr/\fBcurs_insstr\fP(3X) |
| instr/\fBcurs_instr\fP(3X) |
| intrflush/\fBcurs_inopts\fP(3X) |
| inwstr/\fBcurs_inwstr\fP(3X) |
| is_cbreak/\fBcurs_inopts\fP(3X)* |
| is_cleared/\fBcurs_opaque\fP(3X)* |
| is_echo/\fBcurs_inopts\fP(3X)* |
| is_idcok/\fBcurs_opaque\fP(3X)* |
| is_idlok/\fBcurs_opaque\fP(3X)* |
| is_immedok/\fBcurs_opaque\fP(3X)* |
| is_keypad/\fBcurs_opaque\fP(3X)* |
| is_leaveok/\fBcurs_opaque\fP(3X)* |
| is_linetouched/\fBcurs_touch\fP(3X) |
| is_nl/\fBcurs_inopts\fP(3X)* |
| is_nodelay/\fBcurs_opaque\fP(3X)* |
| is_notimeout/\fBcurs_opaque\fP(3X)* |
| is_pad/\fBcurs_opaque\fP(3X)* |
| is_raw/\fBcurs_inopts\fP(3X)* |
| is_scrollok/\fBcurs_opaque\fP(3X)* |
| is_subwin/\fBcurs_opaque\fP(3X)* |
| is_syncok/\fBcurs_opaque\fP(3X)* |
| is_term_resized/\fBresizeterm\fP(3X)* |
| is_wintouched/\fBcurs_touch\fP(3X) |
| isendwin/\fBcurs_initscr\fP(3X) |
| key_defined/\fBkey_defined\fP(3X)* |
| key_name/\fBcurs_util\fP(3X) |
| keybound/\fBkeybound\fP(3X)* |
| keyname/\fBcurs_util\fP(3X) |
| keyok/\fBkeyok\fP(3X)* |
| keypad/\fBcurs_inopts\fP(3X) |
| killchar/\fBcurs_termattrs\fP(3X) |
| killwchar/\fBcurs_termattrs\fP(3X) |
| leaveok/\fBcurs_outopts\fP(3X) |
| longname/\fBcurs_termattrs\fP(3X) |
| mcprint/\fBcurs_print\fP(3X)* |
| meta/\fBcurs_inopts\fP(3X) |
| mouse_trafo/\fBcurs_mouse\fP(3X)* |
| mouseinterval/\fBcurs_mouse\fP(3X)* |
| mousemask/\fBcurs_mouse\fP(3X)* |
| move/\fBcurs_move\fP(3X) |
| mvadd_wch/\fBcurs_add_wch\fP(3X) |
| mvadd_wchnstr/\fBcurs_add_wchstr\fP(3X) |
| mvadd_wchstr/\fBcurs_add_wchstr\fP(3X) |
| mvaddch/\fBcurs_addch\fP(3X) |
| mvaddchnstr/\fBcurs_addchstr\fP(3X) |
| mvaddchstr/\fBcurs_addchstr\fP(3X) |
| mvaddnstr/\fBcurs_addstr\fP(3X) |
| mvaddnwstr/\fBcurs_addwstr\fP(3X) |
| mvaddstr/\fBcurs_addstr\fP(3X) |
| mvaddwstr/\fBcurs_addwstr\fP(3X) |
| mvchgat/\fBcurs_attr\fP(3X) |
| mvcur/\fBcurs_terminfo\fP(3X) |
| mvdelch/\fBcurs_delch\fP(3X) |
| mvderwin/\fBcurs_window\fP(3X) |
| mvget_wch/\fBcurs_get_wch\fP(3X) |
| mvget_wstr/\fBcurs_get_wstr\fP(3X) |
| mvgetch/\fBcurs_getch\fP(3X) |
| mvgetn_wstr/\fBcurs_get_wstr\fP(3X) |
| mvgetnstr/\fBcurs_getstr\fP(3X) |
| mvgetstr/\fBcurs_getstr\fP(3X) |
| mvhline/\fBcurs_border\fP(3X) |
| mvhline_set/\fBcurs_border_set\fP(3X) |
| mvin_wch/\fBcurs_in_wch\fP(3X) |
| mvin_wchnstr/\fBcurs_in_wchstr\fP(3X) |
| mvin_wchstr/\fBcurs_in_wchstr\fP(3X) |
| mvinch/\fBcurs_inch\fP(3X) |
| mvinchnstr/\fBcurs_inchstr\fP(3X) |
| mvinchstr/\fBcurs_inchstr\fP(3X) |
| mvinnstr/\fBcurs_instr\fP(3X) |
| mvinnwstr/\fBcurs_inwstr\fP(3X) |
| mvins_nwstr/\fBcurs_ins_wstr\fP(3X) |
| mvins_wch/\fBcurs_ins_wch\fP(3X) |
| mvins_wstr/\fBcurs_ins_wstr\fP(3X) |
| mvinsch/\fBcurs_insch\fP(3X) |
| mvinsnstr/\fBcurs_insstr\fP(3X) |
| mvinsstr/\fBcurs_insstr\fP(3X) |
| mvinstr/\fBcurs_instr\fP(3X) |
| mvinwstr/\fBcurs_inwstr\fP(3X) |
| mvprintw/\fBcurs_printw\fP(3X) |
| mvscanw/\fBcurs_scanw\fP(3X) |
| mvvline/\fBcurs_border\fP(3X) |
| mvvline_set/\fBcurs_border_set\fP(3X) |
| mvwadd_wch/\fBcurs_add_wch\fP(3X) |
| mvwadd_wchnstr/\fBcurs_add_wchstr\fP(3X) |
| mvwadd_wchstr/\fBcurs_add_wchstr\fP(3X) |
| mvwaddch/\fBcurs_addch\fP(3X) |
| mvwaddchnstr/\fBcurs_addchstr\fP(3X) |
| mvwaddchstr/\fBcurs_addchstr\fP(3X) |
| mvwaddnstr/\fBcurs_addstr\fP(3X) |
| mvwaddnwstr/\fBcurs_addwstr\fP(3X) |
| mvwaddstr/\fBcurs_addstr\fP(3X) |
| mvwaddwstr/\fBcurs_addwstr\fP(3X) |
| mvwchgat/\fBcurs_attr\fP(3X) |
| mvwdelch/\fBcurs_delch\fP(3X) |
| mvwget_wch/\fBcurs_get_wch\fP(3X) |
| mvwget_wstr/\fBcurs_get_wstr\fP(3X) |
| mvwgetch/\fBcurs_getch\fP(3X) |
| mvwgetn_wstr/\fBcurs_get_wstr\fP(3X) |
| mvwgetnstr/\fBcurs_getstr\fP(3X) |
| mvwgetstr/\fBcurs_getstr\fP(3X) |
| mvwhline/\fBcurs_border\fP(3X) |
| mvwhline_set/\fBcurs_border_set\fP(3X) |
| mvwin/\fBcurs_window\fP(3X) |
| mvwin_wch/\fBcurs_in_wch\fP(3X) |
| mvwin_wchnstr/\fBcurs_in_wchstr\fP(3X) |
| mvwin_wchstr/\fBcurs_in_wchstr\fP(3X) |
| mvwinch/\fBcurs_inch\fP(3X) |
| mvwinchnstr/\fBcurs_inchstr\fP(3X) |
| mvwinchstr/\fBcurs_inchstr\fP(3X) |
| mvwinnstr/\fBcurs_instr\fP(3X) |
| mvwinnwstr/\fBcurs_inwstr\fP(3X) |
| mvwins_nwstr/\fBcurs_ins_wstr\fP(3X) |
| mvwins_wch/\fBcurs_ins_wch\fP(3X) |
| mvwins_wstr/\fBcurs_ins_wstr\fP(3X) |
| mvwinsch/\fBcurs_insch\fP(3X) |
| mvwinsnstr/\fBcurs_insstr\fP(3X) |
| mvwinsstr/\fBcurs_insstr\fP(3X) |
| mvwinstr/\fBcurs_instr\fP(3X) |
| mvwinwstr/\fBcurs_inwstr\fP(3X) |
| mvwprintw/\fBcurs_printw\fP(3X) |
| mvwscanw/\fBcurs_scanw\fP(3X) |
| mvwvline/\fBcurs_border\fP(3X) |
| mvwvline_set/\fBcurs_border_set\fP(3X) |
| napms/\fBcurs_kernel\fP(3X) |
| newpad/\fBcurs_pad\fP(3X) |
| newterm/\fBcurs_initscr\fP(3X) |
| newwin/\fBcurs_window\fP(3X) |
| nl/\fBcurs_inopts\fP(3X) |
| nocbreak/\fBcurs_inopts\fP(3X) |
| nodelay/\fBcurs_inopts\fP(3X) |
| noecho/\fBcurs_inopts\fP(3X) |
| nofilter/\fBcurs_util\fP(3X)* |
| nonl/\fBcurs_inopts\fP(3X) |
| noqiflush/\fBcurs_inopts\fP(3X) |
| noraw/\fBcurs_inopts\fP(3X) |
| notimeout/\fBcurs_inopts\fP(3X) |
| overlay/\fBcurs_overlay\fP(3X) |
| overwrite/\fBcurs_overlay\fP(3X) |
| pair_content/\fBcurs_color\fP(3X) |
| pecho_wchar/\fBcurs_pad\fP(3X) |
| pechochar/\fBcurs_pad\fP(3X) |
| pnoutrefresh/\fBcurs_pad\fP(3X) |
| prefresh/\fBcurs_pad\fP(3X) |
| printw/\fBcurs_printw\fP(3X) |
| putp/\fBcurs_terminfo\fP(3X) |
| putwin/\fBcurs_util\fP(3X) |
| qiflush/\fBcurs_inopts\fP(3X) |
| raw/\fBcurs_inopts\fP(3X) |
| redrawwin/\fBcurs_refresh\fP(3X) |
| refresh/\fBcurs_refresh\fP(3X) |
| reset_color_pairs/\fBcurs_color\fP(3X)* |
| reset_prog_mode/\fBcurs_kernel\fP(3X) |
| reset_shell_mode/\fBcurs_kernel\fP(3X) |
| resetty/\fBcurs_kernel\fP(3X) |
| resize_term/\fBresizeterm\fP(3X)* |
| resizeterm/\fBresizeterm\fP(3X)* |
| restartterm/\fBcurs_terminfo\fP(3X) |
| ripoffline/\fBcurs_kernel\fP(3X) |
| savetty/\fBcurs_kernel\fP(3X) |
| scanw/\fBcurs_scanw\fP(3X) |
| scr_dump/\fBcurs_scr_dump\fP(3X) |
| scr_init/\fBcurs_scr_dump\fP(3X) |
| scr_restore/\fBcurs_scr_dump\fP(3X) |
| scr_set/\fBcurs_scr_dump\fP(3X) |
| scrl/\fBcurs_scroll\fP(3X) |
| scroll/\fBcurs_scroll\fP(3X) |
| scrollok/\fBcurs_outopts\fP(3X) |
| set_curterm/\fBcurs_terminfo\fP(3X) |
| set_escdelay/\fBcurs_threads\fP(3X)* |
| set_tabsize/\fBcurs_threads\fP(3X)* |
| set_term/\fBcurs_initscr\fP(3X) |
| setcchar/\fBcurs_getcchar\fP(3X) |
| setscrreg/\fBcurs_outopts\fP(3X) |
| setsyx/\fBcurs_kernel\fP(3X) |
| setupterm/\fBcurs_terminfo\fP(3X) |
| slk_attr/\fBcurs_slk\fP(3X)* |
| slk_attr_off/\fBcurs_slk\fP(3X) |
| slk_attr_on/\fBcurs_slk\fP(3X) |
| slk_attr_set/\fBcurs_slk\fP(3X) |
| slk_attroff/\fBcurs_slk\fP(3X) |
| slk_attron/\fBcurs_slk\fP(3X) |
| slk_attrset/\fBcurs_slk\fP(3X) |
| slk_clear/\fBcurs_slk\fP(3X) |
| slk_color/\fBcurs_slk\fP(3X) |
| slk_init/\fBcurs_slk\fP(3X) |
| slk_label/\fBcurs_slk\fP(3X) |
| slk_noutrefresh/\fBcurs_slk\fP(3X) |
| slk_refresh/\fBcurs_slk\fP(3X) |
| slk_restore/\fBcurs_slk\fP(3X) |
| slk_set/\fBcurs_slk\fP(3X) |
| slk_touch/\fBcurs_slk\fP(3X) |
| slk_wset/\fBcurs_slk\fP(3X) |
| standend/\fBcurs_attr\fP(3X) |
| standout/\fBcurs_attr\fP(3X) |
| start_color/\fBcurs_color\fP(3X) |
| subpad/\fBcurs_pad\fP(3X) |
| subwin/\fBcurs_window\fP(3X) |
| syncok/\fBcurs_window\fP(3X) |
| term_attrs/\fBcurs_termattrs\fP(3X) |
| termattrs/\fBcurs_termattrs\fP(3X) |
| termname/\fBcurs_termattrs\fP(3X) |
| tgetent/\fBcurs_termcap\fP(3X) |
| tgetflag/\fBcurs_termcap\fP(3X) |
| tgetnum/\fBcurs_termcap\fP(3X) |
| tgetstr/\fBcurs_termcap\fP(3X) |
| tgoto/\fBcurs_termcap\fP(3X) |
| tigetflag/\fBcurs_terminfo\fP(3X) |
| tigetnum/\fBcurs_terminfo\fP(3X) |
| tigetstr/\fBcurs_terminfo\fP(3X) |
| timeout/\fBcurs_inopts\fP(3X) |
| tiparm/\fBcurs_terminfo\fP(3X) |
| tiparm_s/\fBcurs_terminfo\fP(3X)* |
| tiscan_s/\fBcurs_terminfo\fP(3X)* |
| touchline/\fBcurs_touch\fP(3X) |
| touchwin/\fBcurs_touch\fP(3X) |
| tparm/\fBcurs_terminfo\fP(3X) |
| tputs/\fBcurs_termcap\fP(3X) |
| tputs/\fBcurs_terminfo\fP(3X) |
| trace/\fBcurs_trace\fP(3X)* |
| typeahead/\fBcurs_inopts\fP(3X) |
| unctrl/\fBcurs_util\fP(3X) |
| unget_wch/\fBcurs_get_wch\fP(3X) |
| ungetch/\fBcurs_getch\fP(3X) |
| ungetmouse/\fBcurs_mouse\fP(3X)* |
| untouchwin/\fBcurs_touch\fP(3X) |
| use_default_colors/\fBdefault_colors\fP(3X)* |
| use_env/\fBcurs_util\fP(3X) |
| use_extended_names/\fBcurs_extend\fP(3X)* |
| use_legacy_coding/\fBlegacy_coding\fP(3X)* |
| use_screen/\fBcurs_threads\fP(3X)* |
| use_tioctl/\fBcurs_util\fP(3X)* |
| use_window/\fBcurs_threads\fP(3X)* |
| vid_attr/\fBcurs_terminfo\fP(3X) |
| vid_puts/\fBcurs_terminfo\fP(3X) |
| vidattr/\fBcurs_terminfo\fP(3X) |
| vidputs/\fBcurs_terminfo\fP(3X) |
| vline/\fBcurs_border\fP(3X) |
| vline_set/\fBcurs_border_set\fP(3X) |
| vw_printw/\fBcurs_printw\fP(3X) |
| vw_scanw/\fBcurs_scanw\fP(3X) |
| vwprintw/\fBcurs_printw\fP(3X) |
| vwscanw/\fBcurs_scanw\fP(3X) |
| wadd_wch/\fBcurs_add_wch\fP(3X) |
| wadd_wchnstr/\fBcurs_add_wchstr\fP(3X) |
| wadd_wchstr/\fBcurs_add_wchstr\fP(3X) |
| waddch/\fBcurs_addch\fP(3X) |
| waddchnstr/\fBcurs_addchstr\fP(3X) |
| waddchstr/\fBcurs_addchstr\fP(3X) |
| waddnstr/\fBcurs_addstr\fP(3X) |
| waddnwstr/\fBcurs_addwstr\fP(3X) |
| waddstr/\fBcurs_addstr\fP(3X) |
| waddwstr/\fBcurs_addwstr\fP(3X) |
| wattr_get/\fBcurs_attr\fP(3X) |
| wattr_off/\fBcurs_attr\fP(3X) |
| wattr_on/\fBcurs_attr\fP(3X) |
| wattr_set/\fBcurs_attr\fP(3X) |
| wattroff/\fBcurs_attr\fP(3X) |
| wattron/\fBcurs_attr\fP(3X) |
| wattrset/\fBcurs_attr\fP(3X) |
| wbkgd/\fBcurs_bkgd\fP(3X) |
| wbkgdset/\fBcurs_bkgd\fP(3X) |
| wbkgrnd/\fBcurs_bkgrnd\fP(3X) |
| wbkgrndset/\fBcurs_bkgrnd\fP(3X) |
| wborder/\fBcurs_border\fP(3X) |
| wborder_set/\fBcurs_border_set\fP(3X) |
| wchgat/\fBcurs_attr\fP(3X) |
| wclear/\fBcurs_clear\fP(3X) |
| wclrtobot/\fBcurs_clear\fP(3X) |
| wclrtoeol/\fBcurs_clear\fP(3X) |
| wcolor_set/\fBcurs_attr\fP(3X) |
| wcursyncup/\fBcurs_window\fP(3X) |
| wdelch/\fBcurs_delch\fP(3X) |
| wdeleteln/\fBcurs_deleteln\fP(3X) |
| wecho_wchar/\fBcurs_add_wch\fP(3X) |
| wechochar/\fBcurs_addch\fP(3X) |
| wenclose/\fBcurs_mouse\fP(3X)* |
| werase/\fBcurs_clear\fP(3X) |
| wget_wch/\fBcurs_get_wch\fP(3X) |
| wget_wstr/\fBcurs_get_wstr\fP(3X) |
| wgetbkgrnd/\fBcurs_bkgrnd\fP(3X) |
| wgetch/\fBcurs_getch\fP(3X) |
| wgetdelay/\fBcurs_opaque\fP(3X)* |
| wgetn_wstr/\fBcurs_get_wstr\fP(3X) |
| wgetnstr/\fBcurs_getstr\fP(3X) |
| wgetparent/\fBcurs_opaque\fP(3X)* |
| wgetscrreg/\fBcurs_opaque\fP(3X)* |
| wgetstr/\fBcurs_getstr\fP(3X) |
| whline/\fBcurs_border\fP(3X) |
| whline_set/\fBcurs_border_set\fP(3X) |
| win_wch/\fBcurs_in_wch\fP(3X) |
| win_wchnstr/\fBcurs_in_wchstr\fP(3X) |
| win_wchstr/\fBcurs_in_wchstr\fP(3X) |
| winch/\fBcurs_inch\fP(3X) |
| winchnstr/\fBcurs_inchstr\fP(3X) |
| winchstr/\fBcurs_inchstr\fP(3X) |
| winnstr/\fBcurs_instr\fP(3X) |
| winnwstr/\fBcurs_inwstr\fP(3X) |
| wins_nwstr/\fBcurs_ins_wstr\fP(3X) |
| wins_wch/\fBcurs_ins_wch\fP(3X) |
| wins_wstr/\fBcurs_ins_wstr\fP(3X) |
| winsch/\fBcurs_insch\fP(3X) |
| winsdelln/\fBcurs_deleteln\fP(3X) |
| winsertln/\fBcurs_deleteln\fP(3X) |
| winsnstr/\fBcurs_insstr\fP(3X) |
| winsstr/\fBcurs_insstr\fP(3X) |
| winstr/\fBcurs_instr\fP(3X) |
| winwstr/\fBcurs_inwstr\fP(3X) |
| wmouse_trafo/\fBcurs_mouse\fP(3X)* |
| wmove/\fBcurs_move\fP(3X) |
| wnoutrefresh/\fBcurs_refresh\fP(3X) |
| wprintw/\fBcurs_printw\fP(3X) |
| wredrawln/\fBcurs_refresh\fP(3X) |
| wrefresh/\fBcurs_refresh\fP(3X) |
| wresize/\fBwresize\fP(3X)* |
| wscanw/\fBcurs_scanw\fP(3X) |
| wscrl/\fBcurs_scroll\fP(3X) |
| wsetscrreg/\fBcurs_outopts\fP(3X) |
| wstandend/\fBcurs_attr\fP(3X) |
| wstandout/\fBcurs_attr\fP(3X) |
| wsyncdown/\fBcurs_window\fP(3X) |
| wsyncup/\fBcurs_window\fP(3X) |
| wtimeout/\fBcurs_inopts\fP(3X) |
| wtouchln/\fBcurs_touch\fP(3X) |
| wunctrl/\fBcurs_util\fP(3X) |
| wvline/\fBcurs_border\fP(3X) |
| wvline_set/\fBcurs_border_set\fP(3X) |
| .TE |
| .PP |
| .IR \%ncurses 's |
| .I "screen-pointer extension" |
| adds additional functions corresponding to many of the above, |
| each with an \*(``_sp\*('' suffix; |
| see \fBcurs_sp_funcs\fP(3X). |
| .PP |
| The availability of some extensions is configurable when |
| .I \%ncurses |
| is compiled; |
| see sections \*(``ALTERNATE CONFIGURATIONS\*('' and \*(``EXTENSIONS\*('' |
| below. |
| .SH RETURN VALUE |
| Unless otherwise noted, |
| functions that return an integer return |
| .B OK |
| on success and |
| .B ERR |
| on failure. |
| Functions that return pointers return |
| .B NULL |
| on failure. |
| Typically, |
| .I \%ncurses |
| treats a null pointer passed as a function parameter as a failure. |
| Functions prefixed with \*(``mv\*('' first perform cursor movement and |
| fail if the position |
| .RI ( y , |
| .IR x ) |
| is outside the window boundaries. |
| .SH ENVIRONMENT |
| The following symbols from the process environment customize the |
| runtime behavior of |
| .I \%ncurses |
| applications. |
| The library may be configured to disregard the variables |
| .IR \%TERMINFO , |
| .IR \%TERMINFO_DIRS , |
| .IR \%TERMPATH , |
| and |
| .IR HOME , |
| if the user is the superuser (root), |
| or the application uses \fI\%setuid\fP(2) or \fI\%setgid\fP(2). |
| .SS "\fIBAUDRATE\fP" |
| 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, |
| .I \%ncurses |
| uses 9600. |
| This feature allows testers to construct repeatable test cases |
| that take into account optimization decisions that depend on baud rate. |
| .SS "\fICC\fP (command character)" |
| When set, |
| the |
| .B \%command_character |
| .RB ( \%cmdch ) |
| capability value of loaded |
| .I \%term\%info |
| entries changes to the value of this variable. |
| Very few |
| .I \%term\%info |
| entries provide this feature. |
| .PP |
| Because this name is also used in development environments to represent |
| the C compiler's name, |
| .I \%ncurses |
| ignores its value if it is not one character in length. |
| .SS "\fICOLUMNS\fP" |
| 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 |
| .I \%COLUMNS |
| is not defined and the terminal's screen size is not available from the |
| terminal driver, |
| .I \%ncurses |
| uses the size specified by the |
| .B \%columns |
| .RB ( \%cols ) |
| capability of the terminal type's entry in the |
| .I \%term\%info |
| database, |
| if any. |
| .PP |
| 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 |
| .I \%COLUMNS |
| and/or |
| .I \%LINES |
| overrides the library's use of the screen size obtained from the |
| operating system. |
| .PP |
| The |
| .I \%COLUMNS |
| and |
| .I \%LINES |
| variables may be specified independently. |
| This property is useful to circumvent misfeatures of legacy terminal |
| type descriptions; |
| \fI\%xterm\fP(1) descriptions specifying 65 lines were once notorious. |
| For best results, |
| avoid specifying |
| .B cols |
| and |
| .B lines |
| capability codes in |
| .I \%term\%info |
| descriptions of terminal emulators. |
| .PP |
| \fBuse_env\fP(3X) can disable use of the process environment |
| in determining the screen size. |
| \fBuse_tioctl\fP(3X) can update |
| .I \%COLUMNS |
| and |
| .I \%LINES |
| to match the screen size obtained from system calls or the terminal |
| database. |
| .SS "\fIESCDELAY\fP" |
| For |
| .I curses |
| to distinguish the ESC character resulting from a user's press of the |
| \*(``Escape\*('' key on the input device from one beginning an |
| .I "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 |
| .B \%ESCDELAY |
| stores this interval in milliseconds. |
| The default value of 1000 |
| (one second) |
| is adequate for most uses. |
| This environment variable overrides it. |
| .PP |
| The most common instance where you may wish to change this value |
| is to work with a remote host over a slow communication channel. |
| If the host running a |
| .I 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. |
| .PP |
| \fI\%xterm\fP(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. |
| .PP |
| Portable applications should not rely upon the presence of |
| .B \%ESCDELAY |
| in either form, |
| but setting the environment variable rather than the global variable |
| does not create problems when compiling an application. |
| .PP |
| If \fB\%keypad\fP(3X) is disabled for the |
| .I curses |
| window receiving input, |
| a program must disambiguate escape sequences itself. |
| .SS "\fIHOME\fP" |
| .I \%ncurses |
| may read and write auxiliary terminal descriptions in |
| .I \%.termcap |
| and |
| .I \%.terminfo |
| files in the user's home directory. |
| .SS "\fILINES\fP" |
| This counterpart to |
| .I \%COLUMNS |
| specifies the height of the screen in characters. |
| The corresponding |
| .I \%term\%info |
| capability and code is |
| .BR \%lines . |
| See the description of the |
| .I \%COLUMNS |
| variable above. |
| .SS "\fIMOUSE_BUTTONS_123\fP" |
| (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, |
| .I \%ncurses |
| assumes a numbering of \*(``132\*(''. |
| .SS "\fINCURSES_ASSUMED_COLORS\fP" |
| If set, |
| this variable overrides the |
| .I \%ncurses |
| library's compiled-in assumption that the terminal's default colors are |
| white on black; |
| see \fB\%default_colors\fP(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. |
| .PP |
| For example, |
| to tell |
| .I \%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\*(''. |
| .I \%ncurses |
| accepts integral values from \-1 up to the value of the |
| .I \%term\%info |
| .B \%max_colors |
| .RB ( colors ) |
| capability. |
| .SS "\fINCURSES_CONSOLE2\fP" |
| (MinGW port only) |
| The |
| .I \%Console2 |
| .\" https://www.hanselman.com/blog/console2-a-better-windows-command-prompt |
| program defectively handles the Microsoft Console API call |
| .IR \%Create\%Console\%Screen\%Buffer . |
| 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 |
| .I \%NCGDB |
| has the same effect. |
| .SS "\fINCURSES_GPM_TERMS\fP" |
| (Linux only) |
| When |
| .I \%ncurses |
| is configured to use the GPM interface, |
| this variable may list one or more terminal names |
| against which the |
| .I TERM |
| variable |
| (see below) |
| is matched. |
| An empty value disables the GPM interface, |
| using |
| .IR \%ncurses 's |
| built-in support for \fIxterm\fP(1) mouse protocols instead. |
| If the variable is absent, |
| .I \%ncurses |
| attempts to open GPM if |
| .I TERM |
| contains \*(``linux\*(''. |
| .SS "\fINCURSES_NO_HARD_TABS\fP" |
| .I \%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 \fI\%stty\fP(1) settings to avoid the problem. |
| .SS "\fINCURSES_NO_MAGIC_COOKIE\fP" |
| Many terminals store video attributes as a property of a character cell, |
| as |
| .I curses |
| does. |
| Historically, |
| some recorded changes in video attributes as data that logically |
| .I 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 |
| .I \%term\%info |
| entry for your terminal type does not adequately describe its handling |
| of magic cookies, |
| set this variable to any value to instruct |
| .I \%ncurses |
| to disable attributes entirely. |
| .SS "\fINCURSES_NO_PADDING\fP" |
| Most terminal type descriptions in the |
| .I \%term\%info |
| database detail hardware devices. |
| Many people use |
| .IR 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), |
| an application must manage flow control itself to prevent overruns and |
| data loss. |
| .PP |
| 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 terminal descriptions without paying the |
| performance penalty. |
| Set |
| .I \%NCURSES_NO_PADDING |
| to any value to disable all but mandatory padding. |
| Mandatory padding is used by such terminal capabilities as |
| .B \%flash_screen |
| .RB ( flash ). |
| .SS "\fINCURSES_NO_SETBUF\fP" |
| (Obsolete) |
| Prior to internal changes developed in |
| .I \%ncurses |
| 5.9 |
| (patches 20120825 through 20130126), |
| the library used \fI\%setbuf\fP(3) to enable fully buffered output when |
| initializing the terminal. |
| This was done, |
| as in SVr4 |
| .IR curses , |
| to increase performance. |
| For testing purposes, |
| both of |
| .I \%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. |
| .PP |
| Nowadays, |
| .I \%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 |
| \fI\%stdio\fP(3) calls with |
| .I \%ncurses |
| calls and (usually) |
| got the behavior they expected. |
| This is no longer the case; |
| .I \%ncurses |
| does not write to the standard output file descriptor through a |
| .IR stdio -buffered |
| stream. |
| .PP |
| As a special case, |
| low-level API calls such as \fB\%putp\fP(3X) still use the |
| standard output stream. |
| High-level |
| .I curses |
| calls such as \fB\%printw\fP(3X) do not. |
| .SS "\fINCURSES_NO_UTF8_ACS\fP" |
| At initialization, |
| .I \%ncurses |
| inspects the |
| .I TERM |
| environment variable for special cases where VT100 forms-drawing |
| characters |
| (and the corresponding alternate character set |
| .I \%term\%info |
| 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 \fI\%screen\fP(1) |
| program ignore them. |
| Set this variable to a nonzero value to instruct |
| .I \%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 |
| .I \%ncurses |
| to assume that the ACS feature works if the terminal type description |
| advertises it. |
| .PP |
| As an alternative to use of this variable, |
| .I \%ncurses |
| checks for an extended |
| .I \%term\%info |
| numeric capability \fBU8\fP |
| that can be compiled using |
| .RB \*(`` "@TIC@ \-x" \*(''. |
| Examples follow. |
| .PP |
| .RS 3 |
| .EX |
| # linux console, if patched to provide working |
| # VT100 shift\-in/shift\-out, with corresponding font. |
| linux\-vt100|linux console with VT100 line\-graphics, |
| U8#0, use=linux, |
| \& |
| # uxterm with vt100Graphics resource set to false |
| xterm\-utf8|xterm relying on UTF\-8 line\-graphics, |
| U8#1, use=xterm, |
| .EE |
| .RE |
| .PP |
| The two-character name \*(``U8\*('' was chosen to permit its use via |
| .IR \%ncurses 's |
| .I termcap |
| interface. |
| .SS "\fINCURSES_TRACE\fP" |
| At initialization, |
| .I \%ncurses |
| (in its debugging configuration) |
| checks for this variable's presence. |
| If defined with an integral value, |
| the library calls \fB\%curses_trace\fP(3X) with that value as the |
| argument. |
| .SS "\fITERM\fP" |
| The |
| .I TERM |
| variable denotes the terminal type. |
| Each is distinct, |
| though many are similar. |
| It is commonly set by terminal emulators to help applications find a |
| workable terminal description. |
| Some choose a popular approximation such as \*(``ansi\*('', |
| \*(``vt100\*('', or \*(``xterm\*('' rather than an exact fit to their |
| capabilities. |
| Not infrequently, |
| an application will have problems with that approach; |
| for example, |
| a key stroke may not operate correctly, |
| or produce no effect but seeming garbage characters on the screen. |
| .PP |
| Setting |
| .I TERM |
| has no effect on hardware operation; |
| it affects the way applications communicate with the terminal. |
| Likewise, |
| as a general rule |
| (\fIxterm\fP(1) being a rare exception), |
| terminal emulators that allow you to specify |
| .I TERM |
| as a parameter or configuration value do not change their behavior to |
| match that setting. |
| .SS "\fITERMCAP\fP" |
| If |
| .I \%ncurses |
| is configured with |
| .I termcap |
| support, |
| it checks for a terminal type description in |
| .I termcap |
| format if one in |
| .I \%term\%info |
| format is not available. |
| Setting this variable directs |
| .I \%ncurses |
| to ignore the usual |
| .I termcap |
| database location, |
| .IR \%/etc/termcap ; |
| see |
| .I \%TERMPATH |
| below. |
| .I \%TERMCAP |
| should contain either a terminal description |
| (with newlines stripped out), |
| or a file name indicating where the information required by the |
| .I TERM |
| environment variable is stored. |
| .SS "\fITERMINFO\fP" |
| .I \%ncurses |
| can be configured to read terminal type description databases in various |
| locations using different formats. |
| This variable overrides the default location. |
| .bP |
| Descriptions in |
| .I \%term\%info |
| format are normally stored in a directory tree using subdirectories |
| named by the common first letters of the terminal types named therein. |
| This is the scheme used in System\ V. |
| .bP |
| If |
| .I \%ncurses |
| is configured to use hashed databases, |
| then |
| .I \%TERM\%INFO |
| may name its location, |
| such as |
| .IR \%/usr/share/terminfo.db , |
| rather than |
| .IR \%/usr/share/terminfo/ . |
| .PP |
| 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, |
| and read it directly |
| rather than using the |
| .I \%term\%info |
| API. |
| .bP |
| If |
| .I \%ncurses |
| is configured with |
| .I termcap |
| support, |
| this variable may contain the location of a |
| .I \%termcap |
| file. |
| .bP |
| If the value of |
| .I \%TERM\%INFO |
| begins with \*(``hex:\*('' or \*(``b64:\*('', |
| .I \%ncurses |
| uses the remainder of the value as a compiled |
| .I \%term\%info |
| description. |
| You might produce the base64 format using \fB\%infocmp\fP(1M). |
| .RS 4 |
| .IP |
| .EX |
| TERMINFO=$(infocmp \-0 \-Q2 \-q) |
| export TERMINFO |
| .EE |
| .RE |
| .IP |
| The compiled description is used only if it corresponds to the terminal |
| type identified by |
| .IR TERM . |
| .PP |
| Setting |
| .I \%TERM\%INFO |
| is the simplest, |
| but not the only, |
| way to direct |
| .I \%ncurses |
| to a terminal database. |
| The search path is as follows. |
| .bP |
| the last terminal database to which the running |
| .I \%ncurses |
| application wrote, |
| if any |
| .bP |
| the location specified by the |
| .I \%TERM\%INFO |
| environment variable |
| .bP |
| .I $HOME/.terminfo |
| .bP |
| locations listed in the |
| .I \%TERMINFO_DIRS |
| environment variable |
| .ds td \" empty |
| .if !'@TERMINFO_DIRS@'no default value' .as td @TERMINFO_DIRS@ |
| .if !'@TERMINFO@\*(td'' \{\ |
| .bP |
| location(s) configured and compiled into |
| .I \%ncurses |
| .RS 3 |
| .if !'\*(td'' \{\ |
| .bP |
| .I \%@TERMINFO_DIRS@ |
| .\} |
| .if !'@TERMINFO'' .if !'\*(td'@TERMINFO@' \{\ |
| .bP |
| .I \%@TERMINFO@ |
| .\} |
| .\} |
| .RE |
| .SS "\fITERMINFO_DIRS\fP" |
| This variable specifies a list of locations, |
| akin to |
| .IR PATH , |
| in which |
| .I \%ncurses |
| searches for the terminal type descriptions described by |
| .I \%TERMINFO |
| above. |
| The list items are separated by colons on Unix |
| and semicolons on OS/2 EMX. |
| System\ V |
| .I \%term\%info |
| lacks a corresponding feature; |
| .I \%TERMINFO_DIRS |
| is an |
| .I \%ncurses |
| extension. |
| .SS "\fITERMPATH\fP" |
| If |
| .I \%TERMCAP |
| does not hold a terminal type description or file name, |
| then |
| .I \%ncurses |
| checks the contents of |
| .IR \%TERMPATH , |
| a list of locations, |
| akin to |
| .IR PATH , |
| in which it searches for |
| .I termcap |
| terminal type descriptions. |
| The list items are separated by colons on Unix |
| and semicolons on OS/2 EMX. |
| .PP |
| If both |
| .I \%TERMCAP |
| and |
| .I \%TERMPATH |
| are unset or invalid, |
| .I \%ncurses |
| searches for the files |
| .IR \%/etc/termcap , |
| .IR \%/usr/share/misc/termcap , |
| and |
| .IR \%$HOME/.termcap , |
| in that order. |
| .SH "ALTERNATE CONFIGURATIONS" |
| Many different |
| .I \%ncurses |
| configurations are possible, |
| determined by the options given to the |
| .I \%configure |
| script when building the library. |
| Run the script with the |
| .B \-\-help |
| option to peruse them all. |
| A few are of particular significance to the application developer |
| employing |
| .IR \%ncurses . |
| .TP 5 |
| .B \-\-disable\-overwrite |
| The standard include for \fI\%ncurses\fP is as noted in \fBSYNOPSIS\fP: |
| .RS 5 |
| .PP |
| .RS 4 |
| .EX |
| \fB#include <curses.h>\fP |
| .EE |
| .RE |
| .PP |
| This option is used to avoid filename conflicts when \fI\%ncurses\fP |
| is not the main implementation of curses of the computer. |
| If \fI\%ncurses\fP is installed disabling overwrite, |
| it puts its headers in a subdirectory, |
| e.g., |
| .PP |
| .RS 4 |
| .EX |
| \fB#include <ncurses/curses.h>\fP |
| .EE |
| .RE |
| .PP |
| It also omits a symbolic link which would allow you to use \fB\-lcurses\fP |
| to build executables. |
| .RE |
| .TP 5 |
| .B \-\-enable\-widec |
| The configure script renames the library and |
| (if the \fB\-\-disable\-overwrite\fP 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 |
| .RS 5 |
| .PP |
| .RS 4 |
| .EX |
| \fB\-lncurses\fP |
| .EE |
| .RE |
| .PP |
| you link with |
| .PP |
| .RS 4 |
| .EX |
| \fB\-lncursesw\fP |
| .EE |
| .RE |
| .PP |
| 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 X/Open Curses, Issue 4: |
| .bP |
| Originally, the wide-character feature required the symbol |
| \fB_XOPEN_SOURCE_EXTENDED\fP |
| but that was only valid for XPG4 (1996). |
| .bP |
| Later, that was deemed conflicting with \fB_XOPEN_SOURCE\fP defined to 500. |
| .bP |
| As of mid-2018, |
| none of the features in this implementation require a \fB_XOPEN_SOURCE\fP |
| feature greater than 600. |
| However, X/Open Curses, Issue 7 (2009) recommends defining it to 700. |
| .bP |
| Alternatively, you can enable the feature by defining \fBNCURSES_WIDECHAR\fP |
| with the caveat that some other header file than \fBcurses.h\fP |
| may require a specific value for \fB_XOPEN_SOURCE\fP |
| (or a system-specific symbol). |
| .PP |
| The \fI\%curses.h\fP 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 \fI\%WINDOW\fP structure differs; |
| few applications require more than pointers to \fI\%WINDOW\fPs. |
| .PP |
| If the headers are installed allowing overwrite, |
| the wide-character library's headers should be installed last, |
| to allow applications to be built using either library |
| from the same set of headers. |
| .RE |
| .TP 5 |
| .B \-\-with\-pthread |
| The configure script renames the library. |
| All of the library names have a \*(``t\*('' appended to them |
| (before any \*(``w\*('' added by \fB\-\-enable\-widec\fP). |
| .IP |
| The global variables such as \fBLINES\fP 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 changes to work with this convention. |
| .TP 5 |
| .B \-\-with\-shared |
| .tQ |
| .B \-\-with\-normal |
| .tQ |
| .B \-\-with\-debug |
| .tQ |
| .B \-\-with\-profile |
| The shared and normal (static) library names differ by their suffixes, |
| e.g., \fBlibncurses.so\fP and \fBlibncurses.a\fP. |
| The debug and profiling libraries add a \*(``_g\*('' |
| and a \*(``_p\*('' to the root names respectively, |
| e.g., \fBlibncurses_g.a\fP and \fBlibncurses_p.a\fP. |
| .TP 5 |
| .B \-\-with\-termlib |
| Low-level functions which do not depend upon whether the library |
| supports wide-characters, are provided in the tinfo library. |
| .IP |
| 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. |
| .IP |
| Those functions are described in these pages: |
| .RS |
| .bP |
| \fB\%curs_extend\fP(3X) \- miscellaneous \fIcurses\fP extensions |
| .bP |
| \fB\%curs_inopts\fP(3X) \- \fIcurses\fP input options |
| .bP |
| \fB\%curs_kernel\fP(3X) \- low-level \fIcurses\fP routines |
| .bP |
| \fB\%curs_termattrs\fP(3X) \- \fIcurses\fP environment query routines |
| .bP |
| \fB\%curs_termcap\fP(3X) \- \fIcurses\fP emulation of \fItermcap\fP |
| .bP |
| \fB\%curs_terminfo\fP(3X) \- \fIcurses\fP interface to \fIterminfo\fP |
| database |
| .bP |
| \fB\%curs_util\fP(3X) \- miscellaneous \fIcurses\fP utility routines |
| .RE |
| .TP 5 |
| .B \-\-with\-trace |
| The \fBtrace\fP 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. |
| .SH FILES |
| .TP |
| .I @DATADIR@/tabset |
| tab stop initialization database |
| .TP |
| .I \*d |
| compiled terminal capability database |
| .SH NOTES |
| X/Open Curses permits most functions it specifies to be made available |
| as macros as well. |
| .\" See X/Open Curses Issue 4, Version 2, pp. 227-234. |
| .\" See X/Open Curses Issue 7, pp. 311-318. |
| \fI\%ncurses\fP does so |
| .bP |
| for functions that return values via their parameters, |
| .bP |
| to support obsolete features, |
| .bP |
| to reuse functions |
| (for example, |
| those that move the cursor before another operation), |
| and |
| .bP |
| a few special cases. |
| .PP |
| If the standard output file descriptor of an |
| .I \%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 |
| .IR curses . |
| .PP |
| See subsection \*(``Header Files\*('' below regarding symbols exposed by |
| inclusion of \fI\%curses.h\fP. |
| .SH EXTENSIONS |
| .I \%ncurses |
| enables an application to capture mouse events on certain terminals, |
| including \fI\%xterm\fP(1); |
| see \fB\%curs_mouse\fP(3X). |
| .PP |
| .I \%ncurses |
| provides a means of responding to window resizing events, |
| as when running in a GUI terminal emulator application such as |
| .IR \%xterm ; |
| see \fB\%resizeterm\fP(3X) and \fB\%wresize\fP(3X). |
| .PP |
| .I \%ncurses |
| allows an application to query the terminal for the presence of a wide |
| variety of special keys; |
| see \fB\%has_key\fP(3X). |
| .PP |
| .I \%ncurses |
| extends the fixed set of function key capabilities specified by X/Open |
| Curses by allowing the application programmer to define additional key |
| events at runtime; |
| see |
| \fB\%define_key\fP(3X), |
| \fB\%key_defined\fP(3X), |
| \fB\%keybound\fP(3X), |
| and |
| \fB\%keyok\fP(3X). |
| .PP |
| .I \%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 \fB\%default_colors\fP(3X). |
| .PP |
| An |
| .I \%ncurses |
| application can eschew knowledge of |
| .I \%WINDOW |
| structure internals, |
| instead using accessor functions such as |
| \fB\%is_scrollok\fP(3X). |
| .PP |
| .I \%ncurses |
| enables an application to direct application output to a printer |
| attached to the terminal device; |
| see \fB\%curs_print\fP(3X). |
| .PP |
| .I \%ncurses |
| offers \fB\%slk_attr\fP(3X) as a counterpart of \fB\%attr_get\fP(3X) for |
| soft-label key lines, |
| and \fB\%extended_slk_color\fP(3X) as a form of \fB\%slk_color\fP(3X) |
| that can gather color information from them when many colors are |
| supported. |
| .PP |
| Some extensions are available only if |
| .I \%ncurses |
| permits modification of \fB\%unctrl\fP(3X)'s behavior; |
| see \fB\%use_legacy_coding\fP(3X). |
| .I \%ncurses |
| is compiled to support them; |
| section \*(``ALTERNATE CONFIGURATIONS\*('' describes how. |
| .bP |
| Rudimentary support for multi-threaded applications may be available; |
| see \fBcurs_threads\fP(3X). |
| .bP |
| Functions that ease the management of multiple screens can be exposed; |
| see \fBcurs_sp_funcs\fP(3X). |
| .bP |
| To aid applications to debug their memory usage, |
| .I ncurses |
| optionally offers functions to more aggressively free memory it |
| dynamically allocates itself; |
| see \fBcurs_memleaks\fP(3X). |
| .bP |
| The library facilitates auditing and troubleshooting of its behavior; |
| see \fBcurs_trace\fP(3X). |
| .bP |
| The compiler option |
| .B \%\-DUSE_GETCAP |
| causes the library to fall back to reading |
| .I \%/etc/termcap |
| if the terminal setup code cannot find a |
| .I \%term\%info |
| entry corresponding to |
| .IR TERM . |
| Use of this feature is not recommended, |
| as it essentially includes an entire |
| .I termcap |
| compiler in the |
| .I \%ncurses |
| startup code, |
| at a cost in memory usage and application launch latency. |
| .PP |
| .I \%PDCurses |
| and NetBSD |
| .I curses |
| incorporate some |
| .I \%ncurses |
| extensions. |
| Individual man pages indicate where this is the case. |
| .SH PORTABILITY |
| X/Open Curses defines two levels of conformance, |
| \*(``base\*('' and \*(``enhanced\*(''. |
| The latter includes several additional features, |
| such as wide-character and color support. |
| .I \%ncurses |
| intends base-level conformance with X/Open Curses, |
| and supports all features of its enhanced level |
| except the \fB\%untic\fP utility. |
| .PP |
| Differences between X/Open Curses and |
| .I \%ncurses |
| are documented in the \*(``PORTABILITY\*('' sections of applicable man |
| pages. |
| .SS "Error Checking" |
| In many cases, X/Open Curses is vague about error conditions, |
| omitting some of the SVr4 documentation. |
| .PP |
| Unlike other implementations, |
| .I \%ncurses |
| checks pointer parameters, |
| such as those to |
| .I \%WINDOW |
| structures, |
| to ensure that they are not null. |
| This is done primarily to guard against programmer error. |
| The standard interface does not provide a way for the library |
| to tell an application which of several possible errors occurred. |
| Relying on this |
| (or some other) |
| extension adversely affects the portability of |
| .I curses |
| applications. |
| .SS "Padding Differences" |
| In historical |
| .I curses |
| implementations, |
| delays embedded in the |
| .I \%term\%info |
| capabilities |
| .B \%carriage_return |
| .RB ( cr ), |
| .B \%scroll_forward |
| .RB ( ind ), |
| .B \%cursor_left |
| .RB ( cub1 ), |
| .B \%form_feed |
| .RB ( ff ), |
| and |
| .B \%tab |
| .RB ( ht ) |
| activated corresponding delay bits in the Unix terminal driver. |
| .I \%ncurses |
| performs all padding by sending NUL bytes to the device. |
| This method is slightly more expensive, |
| but narrows the interface to the Unix kernel significantly and |
| correspondingly increases the package's portability. |
| .SS "Header Files" |
| The header file |
| .I \%curses.h |
| itself includes the header files |
| .I \%stdio.h |
| and |
| .IR \%unctrl.h . |
| .PP |
| X/Open Curses has more to say, |
| .RS 4 |
| .PP |
| The inclusion of |
| .I \%curses.h |
| may make visible all symbols from the headers |
| .IR \%stdio.h , |
| .IR \%term.h , |
| .IR \%termios.h , |
| and |
| .IR \%wchar.h . |
| .RE |
| .PP |
| but does not finish the story. |
| A more complete account follows. |
| .bP |
| Starting with 4BSD |
| .I curses |
| (1980) |
| all implementations have provided a |
| .I \%curses.h |
| file. |
| .IP |
| BSD |
| .I curses |
| code included |
| .I \%curses.h |
| and |
| .I \%unctrl.h |
| from an internal header file |
| .IR \%curses.ext , |
| where |
| \*(``ext\*('' abbreviated \*(``externs\*(''. |
| .IP |
| The implementations of |
| .I \%printw |
| and |
| .I \%scanw |
| used undocumented internal functions of the standard I/O library |
| .RI ( _doprnt |
| and |
| .IR _doscan ), |
| but nothing in |
| .I \%curses.h |
| itself relied upon |
| .IR \%stdio.h . |
| .bP |
| SVr2 |
| .I curses |
| added |
| .IR \%newterm , |
| which relies upon |
| .I \%stdio.h |
| because its function prototype employs the |
| .I FILE |
| type. |
| .IP |
| SVr4 |
| .I curses |
| added |
| .I \%putwin |
| and |
| .IR \%getwin , |
| which also use |
| .IR \%stdio.h . |
| .IP |
| X/Open Curses specifies all three of these functions. |
| .IP |
| SVr4 |
| .I curses |
| and X/Open Curses do not require the developer to include |
| .I \%stdio.h |
| before |
| .IR \%curses.h . |
| Both document use of |
| .I curses |
| as requiring only |
| .IR \%curses.h . |
| .IP |
| As a result, |
| standard |
| .I \%curses.h |
| always includes |
| .IR \%stdio.h . |
| .bP |
| X/Open Curses and SVr4 |
| .I curses |
| are inconsistent with respect to |
| .IR \%unctrl.h . |
| .IP |
| As noted in \fBcurs_util\fP(3X), |
| .I \%ncurses |
| includes |
| .I \%unctrl.h |
| from |
| .I \%curses.h |
| (as SVr4 does). |
| .bP |
| X/Open Curses's comments about |
| .I \%term.h |
| and |
| .I \%termios.h |
| may refer to HP-UX and AIX. |
| .IP |
| HP-UX |
| .I curses |
| includes |
| .I \%term.h |
| from |
| .I \%curses.h |
| to declare |
| .I \%setupterm |
| in |
| .IR \%curses.h , |
| but |
| .I \%ncurses |
| and Solaris |
| .I curses |
| do not. |
| .IP |
| AIX |
| .I curses |
| includes |
| .I \%term.h |
| and |
| .IR \% termios.h . |
| Again, |
| .I \%ncurses |
| and Solaris |
| .I curses |
| do not. |
| .bP |
| X/Open Curses says that |
| .I \%curses.h |
| .B may |
| include |
| .IR \%term.h , |
| but does not require it to do so. |
| .IP |
| Some programs use functions declared in both |
| .I \%curses.h |
| and |
| .IR \%term.h , |
| and must include both header files in the same module. |
| Very old versions of AIX |
| .I curses |
| required inclusion of |
| .I \%curses.h |
| before |
| .IR \%term.h . |
| .IP |
| The header files supplied by |
| .I \%ncurses |
| include the standard library headers required for its declarations, |
| so |
| .IR \%ncurses 's |
| own header files can be included in any order. |
| But for portability, |
| you should include |
| .I \%curses.h |
| before |
| .IR \%term.h . |
| .bP |
| X/Open Curses says \*(``may make visible\*('' because including a header |
| file does not necessarily make visible all of the symbols in it |
| (consider |
| .B \%#ifdef |
| and similar). |
| .IP |
| For instance, |
| .IR \%ncurses 's |
| .I \%curses.h |
| .B may \" bold to contrast with preceding italic |
| include |
| .I \%wchar.h |
| if the proper symbol is defined, |
| and if |
| .I \%ncurses |
| is configured for wide-character support. |
| If |
| .I \%wchar.h |
| is included, |
| its symbols |
| .B may \" bold for consistency in this paragraph |
| be made visible depending on the value of the |
| .B _XOPEN_SOURCE |
| feature test macro. |
| .bP |
| X/Open Curses mandates an application's inclusion of one standard C |
| library header in a special case: |
| .I \%stdarg.h |
| before |
| .I \%curses.h |
| to prototype the functions |
| .I \%vw_printw |
| and |
| .I \%vw_scanw |
| (as well as the obsolete |
| .I \%vwprintw |
| and |
| .IR \%vwscanw ). |
| Each of these takes a variadic argument list, |
| a |
| .I \%va_list |
| parameter, |
| like that of \fI\%printf\fP(3). |
| .IP |
| SVr3 |
| .I curses |
| introduced |
| the two obsolete functions, |
| and X/Open Curses the others. |
| In between, |
| SVr4 |
| .I curses |
| provided for the possibility that an application might include either |
| .I \%varargs.h |
| or |
| .IR \%stdarg.h . |
| These represented contrasting approaches to handling variadic |
| argument lists. |
| The older interface, |
| .IR \%varargs.h , |
| used a pointer to |
| .I char \" V7, 32V, System III, 3BSD |
| for variadic functions' |
| .I \%va_list |
| parameter. |
| Later, |
| the list acquired its own standard data type, |
| .IR \%va_list , |
| defined in |
| .IR \%stdarg.h , |
| empowering the compiler to check the types of a function call's actual |
| parameters against the formal ones declared in its prototype. |
| .IP |
| No conforming implementations of X/Open Curses require an application |
| to include |
| .I \%stdarg.h |
| before |
| .I \%curses.h |
| because they either have allowed for a special type, |
| or, |
| like |
| .IR \%ncurses , |
| they include |
| .I \%stdarg.h |
| themselves to provide a portable interface. |
| .SH AUTHORS |
| Zeyd M. Ben-Halim, |
| Eric S. Raymond, |
| Thomas E. Dickey. |
| Based on |
| .I \%pcurses |
| by Pavel Curtis. |
| .SH SEE ALSO |
| \fB\%curs_variables\fP(3X), |
| \fB\%terminfo\fP(5), |
| \fB\%user_caps\fP(5) |