| terminfo(3NCURSES) | Library calls | terminfo(3NCURSES) |
del_curterm, putp, restartterm, set_curterm, setupterm, tigetflag, tigetnum, tigetstr, tiparm, tiparm_s, tiscan_s, tparm, tputs, vid_attr, vid_puts, vidattr, vidputs - curses interfaces to terminfo database
#include <curses.h> #include <term.h>
TERMINAL * cur_term;
const char * const boolnames[]; const char * const boolcodes[]; const char * const boolfnames[]; const char * const numnames[]; const char * const numcodes[]; const char * const numfnames[]; const char * const strnames[]; const char * const strcodes[]; const char * const strfnames[];
int setupterm(const char * term, int filedes, int * errret); TERMINAL * set_curterm(TERMINAL * nterm); int del_curterm(TERMINAL * oterm); int restartterm(const char * term, int filedes,
int * errret);
char * tparm(const char * str, ...); /* or */ char * tparm(const char * str, long p1 ... long p9);
int tputs(const char * str, int affcnt, int (* putc)(int)); int putp(const char * str);
int vidputs(chtype attrs, int (* putc)(int)); int vidattr(chtype attrs); int vid_puts(attr_t attrs, short pair, void * opts,
int (* putc)(int)); int vid_attr(attr_t attrs, short pair, void * opts);
int tigetflag(const char * cap-code); int tigetnum(const char * cap-code); char * tigetstr(const char * cap-code);
char * tiparm(const char * str, ...);
/* extensions */ char * tiparm_s(int expected, int mask,
const char * str, ...); int tiscan_s(int * expected, int * mask, const char * str);
/* deprecated */ int setterm(const char * term);
These lower-level functions of the curses standard must be called by programs that deal directly with the terminfo database to handle certain terminal capabilities, such as programming function keys. For all other functionality, curses functions are more suitable and their use is recommended.
None of these functions use (or are aware of) multibyte character strings such as UTF-8.
Call setupterm from your application to have terminfo manage the terminal device; this action initializes the terminal-dependent variables listed in terminfo_variables(3NCURSES). (A curses application calling initscr(3NCURSES) or newterm(3NCURSES) achieves the same result.) Applications can use the terminal capabilities either directly, by object definitions corresponding to capability names and codes (see terminfo_variables(3NCURSES)) or by calling the functions documented here. setupterm initializes the terminfo variables lines and columns as described in use_env(3NCURSES).
Pass parameterized string capability values through tparm to instantiate them. All terminfo strings (including the output of tparm) should be sent to the terminal device with tputs or putp. Call reset_shell_mode(3NCURSES) to restore the terminal modes before exiting. (A curses application calling endwin(3NCURSES) achieves the same result.)
Programs that use cursor addressing should emit certain capabilities at specific times. Specifically, output
Programs that execute shell subprocesses should
setupterm reads in the terminfo database, initializing the terminfo structures, but does not set up the output virtualization structures used by curses. Its parameters follow.
setupterm((char *) NULL, 1, (int *) NULL);
setupterm stores its information about the terminal in a TERMINAL structure pointed to by the global variable cur_term. If it detects an error, or decides that the terminal is unsuitable (hardcopy or generic), it discards this information, making it unavailable to applications.
If setupterm is called repeatedly for the same terminal type, it reuses the information. It maintains only one copy of a given type's capabilities in memory. If called for different types, setupterm allocates new storage for each set of terminal capabilities.
set_curterm sets cur_term to nterm, making all of the terminfo Boolean, numeric, and string capabilities use the values from nterm. It returns the old value of cur_term.
del_curterm frees the memory pointed to by oterm, making it available for further use. If oterm is the same as cur_term, references to any of the terminfo Boolean, numeric, and string capabilities thereafter may refer to invalid memory locations until setupterm is called again.
restartterm is similar to setupterm, but is intended for use after restoring program memory to a previous state (for example, when reloading an application that has been suspended from one terminal session and restored in another). restartterm assumes that the display dimensions and the input and output options are the same as when memory was saved, but the terminal type and line speed may differ. Accordingly, restartterm saves relevant terminal state, calls setupterm, then restores that state.
tparm instantiates the string str with parameters pi. A pointer is returned to the result of str with the parameters applied. Application developers should keep in mind these quirks of the interface:
tiparm is a newer form of tparm which uses stdarg.h rather than a fixed-parameter list. Its numeric parameters are ints rather than longs.
Both tparm and tiparm assume that the application passes parameters consistent with the terminal description. Two extensions are provided as alternatives to deal with untrusted data.
String capabilities can contain padding, a time delay (accommodating performance limitations of hardware terminals) expressed as $<n>, where n is a nonnegative integral count of milliseconds. If n exceeds 30,000 (thirty seconds), it is capped at that value.
tputs interprets time-delay information in the string str and outputs it, executing the delays:
putp calls “tputs(str, 1, putchar)”. The output of putp always goes to stdout, rather than the filedes specified in setupterm.
vidputs displays the string on the terminal in the video attribute mode attrs, which is any combination of the attributes listed in ncurses(3NCURSES). The characters are passed to the putchar-like function putc.
vidattr is like vidputs, except that it outputs through putchar(3).
vid_attr and vid_puts correspond to vidattr and vidputs, respectively. They use multiple parameters to represent the character attributes and color; namely,
Use the attribute constants prefixed with “WA_” with vid_attr and vid_puts.
X/Open Curses reserves the opts argument for future use, saying that applications must provide a null pointer for that argument; but see section “EXTENSIONS” below.
While putp is a lower-level function that does not use higher-level curses state, ncurses declares it in curses.h because System V did so (see section “HISTORY” below).
tigetflag, tigetnum, and tigetstr return the value of the capability corresponding to the terminfo cap-code, such as xenl, passed to them. The cap-code for each capability is given in the table column of that name in the “Predefined Capabilities” section of terminfo(5).
These functions return special values to denote errors.
tigetflag returns
tigetnum returns
tigetstr returns
These null-terminated arrays contain
for each of the predefined terminfo variables:
const char *boolnames[], *boolcodes[], *boolfnames[] const char *numnames[], *numcodes[], *numfnames[] const char *strnames[], *strcodes[], *strfnames[]
Each successful call to setupterm allocates memory to hold the terminal description. As a side effect, it sets cur_term to point to this memory. If an application calls
del_curterm(cur_term);
The formatting functions tparm and tiparm extend the storage allocated by setupterm as follows.
The higher-level initscr and newterm functions use setupterm. Normally they do not free this memory, but it is possible to do that using the delscreen(3NCURSES) function.
Functions that return integers return ERR upon failure and OK upon success.
In ncurses,
The vid_attr function in ncurses is a special case. It was originally implemented based on a draft of X/Open Curses, as a macro, before other parts of the ncurses wide-character API were developed, and unlike the other wide-character functions, is also provided in the non-wide-character configuration.
The functions marked as extensions originated in ncurses, and are not found in SVr4 curses, 4.4BSD curses, or any other previous curses implementation.
ncurses allows opts to be a pointer to int, which overrides the pair (short) argument.
Except for setterm, X/Open Curses Issue 4 describes these functions. It specifies no error conditions for them.
SVr4 describes a successful return value except where “otherwise noted” as “an integer value other than ERR”.
On legacy curses systems, include curses.h and term.h in that order to make visible the definitions of the string arrays storing the capability names and codes.
ncurses implements a few macros for early System V curses compatibility (see section “HISTORY” below). They include crmode, fixterm, gettmode, nocrmode, resetterm, saveterm, and setterm.
In SVr4, these are found in curses.h, but except for setterm, are likewise macros. The one function, setterm, is mentioned in the manual page. It further notes that setterm was replaced by setupterm, stating that the call
setupterm(term, 1, (int *)0)
setterm(term)
setupterm copies the terminal name to the array ttytype. This behavior is not specified by X/Open Curses, but is assumed by some applications.
Other implementations may not declare the capability name arrays. Some provide them without declaring them. X/Open Curses does not specify them.
Extended terminal capability names, as defined by “tic -x”, are not stored in the arrays described here.
Older versions of ncurses assumed that the file descriptor passed to setupterm from initscr or newterm used buffered I/O, and wrote to the corresponding stdio stream. In addition to the limitation that the terminal was left in block-buffered mode on exit (like System V curses), it was problematic because ncurses did not allow a reliable way to clean up on receiving SIGTSTP.
ncurses 6.x uses output buffers managed directly by ncurses. The lower-level functions described here that write to the terminal device do so via the standard output stream; they thus are not signal-safe. The higher-level functions in ncurses employ alternate versions of these functions using a more reliable buffering scheme.
The X/Open Curses prototypes are based on the SVr4 curses header declarations, which were defined at the same time the C language was first standardized in the late 1980s.
Both forms of tparm have drawbacks.
If ncurses is configured to use the terminal driver, as with the MinGW port,
In SVr4, set_curterm returns an int, OK or ERR. We have chosen to implement the X/Open Curses semantics.
In SVr4, the third argument of tputs has the type “int (*)(char)”.
At least one implementation of X/Open Curses (Solaris xcurses) returns a value other than OK or ERR from tputs. It instead returns the length of the string, and does no error checking.
SVr2 (1984) introduced the terminfo feature. Its programming manual mentioned the following low-level functions.
| Function | Description |
| fixterm | restore terminal to “in curses” state |
| gettmode | establish current terminal modes |
| mvcur | low level cursor motion |
| putp | use tputs to send characters via putchar |
| resetterm | set terminal modes to “out of curses” state |
| resetty | reset terminal flags to stored value |
| saveterm | save current modes as “in curses” state |
| savetty | store current terminal flags |
| setterm | establish terminal with given type |
| setupterm | establish terminal with given type |
| tparm | interpolate parameters into string capability |
| tputs | apply padding information to a string |
| vidattr | like vidputs, but output through putchar |
| vidputs | write string to terminal, applying specified attributes |
The programming manual also mentioned functions provided for termcap compatibility (commenting that they “may go away at a later date”).
| Function | Description |
| tgetent | look up termcap entry for given name |
| tgetflag | get Boolean entry for given id |
| tgetnum | get numeric entry for given id |
| tgetstr | get string entry for given id |
| tgoto | apply parameters to given capability |
| tputs | write characters via a function parameter, applying padding |
Early terminfo programs obtained capability values from the TERMINAL structure initialized by setupterm.
SVr3 (1987) extended terminfo by adding functions to retrieve capability values (like the termcap interface), and reusing tgoto and tputs.
| Function | Description |
| tigetflag | get Boolean entry for given id |
| tigetnum | get numeric entry for given id |
| tigetstr | get string entry for given id |
SVr3 also replaced several of the SVr2 terminfo functions that had no counterpart in the termcap interface, documenting them as obsolete.
| Function | Replaced by |
| crmode | cbreak |
| fixterm | reset_prog_mode |
| gettmode | n/a |
| nocrmode | nocbreak |
| resetterm | reset_shell_mode |
| saveterm | def_prog_mode |
| setterm | setupterm |
SVr3 kept the mvcur, vidattr, and vidputs functions, along with putp, tparm, and tputs. The latter were needed to support padding, and to handle capabilities accessed by functions such as vidattr (which used more than the two parameters supported by tgoto).
SVr3 introduced the functions for switching between terminal descriptions; for example, set_curterm. Some changes reflected incremental improvements to the SVr2 library.
SVr4 (1989) added the vid_attr and vid_puts functions.
Other low-level functions are declared in the curses header files of Unix systems, but none are documented. Those noted as “obsolete” by SVr3 remained in use by System V's vi(1) editor.
ncurses(3NCURSES), initscr(3NCURSES), kernel(3NCURSES), memleaks(3NCURSES), termcap(3NCURSES), curses_variables(3NCURSES), putc(3), terminfo_variables(3NCURSES), terminfo(5)
| 2025-02-15 | ncurses 6.5 |