2 .\"***************************************************************************
3 .\" Copyright 2018-2023,2024 Thomas E. Dickey *
4 .\" Copyright 1998-2015,2017 Free Software Foundation, Inc. *
6 .\" Permission is hereby granted, free of charge, to any person obtaining a *
7 .\" copy of this software and associated documentation files (the *
8 .\" "Software"), to deal in the Software without restriction, including *
9 .\" without limitation the rights to use, copy, modify, merge, publish, *
10 .\" distribute, distribute with modifications, sublicense, and/or sell *
11 .\" copies of the Software, and to permit persons to whom the Software is *
12 .\" furnished to do so, subject to the following conditions: *
14 .\" The above copyright notice and this permission notice shall be included *
15 .\" in all copies or substantial portions of the Software. *
17 .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
18 .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
19 .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
20 .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
21 .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
22 .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
23 .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
25 .\" Except as contained in this notice, the name(s) of the above copyright *
26 .\" holders shall not be used in advertising or otherwise to promote the *
27 .\" sale, use or other dealings in this Software without prior written *
29 .\"***************************************************************************
31 .\" $Id: ncurses.3x,v 1.225 2024/06/22 22:14:58 tom Exp $
32 .TH ncurses 3X 2024-06-22 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls"
49 .\" Add supplementary paragraph tag on its own line after TP.
50 .\" Adapted from TQ (which would produce mandoc warnings).
59 character-cell terminal interface with optimized output
62 \fB#include <curses.h>
65 The \*(``new curses\*('' library offers the programmer a
66 terminal-independent means of reading keyboard and mouse input and
67 updating character-cell terminals with output optimized to minimize
73 System V Release 4 Unix (\*(``SVr4\*('')
76 the development of which ceased in the 1990s.
77 This document describes
79 version @NCURSES_MAJOR@.@NCURSES_MINOR@
80 (patch @NCURSES_PATCH@).
83 permits control of the terminal screen's contents;
84 abstraction and subdivision thereof with
88 acquisition of keyboard and mouse events;
89 control of terminal input and output options;
90 selection of color and rendering attributes
91 (such as bold or underline);
92 the definition and use of
97 terminal capability database;
100 compatibility interface;
101 and an abstraction of the system's API for manipulating the terminal
102 (such as \fI\%termios\fP(3)).
105 implements the interface described by X/Open Curses Issue\ 7.
106 In many behavioral details not standardized by X/Open,
110 library of SVr4 and provides numerous useful extensions.
113 man pages employ several sections to clarify matters of usage and
114 interoperability with other
118 \*(``NOTES\*('' describes issues and caveats of which any user of the
121 such as limitations on the size of an underlying integral type or the
122 availability of a preprocessor macro exclusive of a function definition
123 (which prevents its address from being taken).
124 This section also describes implementation details
125 of significance to the programmer but which are not standardized.
127 \*(``EXTENSIONS\*('' presents
129 innovations beyond the X/Open Curses standard and/or the SVr4
134 to indicate that they cannot be implemented solely by using the library
136 but require access to the library's internal state.
138 \*(``PORTABILITY\*('' discusses matters
139 (beyond the exercise of extensions)
140 that should be considered when writing to a
143 or for multiple implementations.
145 \*(``HISTORY\*('' examines points of detail in
149 implementations over the decades of their development,
150 particularly where precedent or inertia have frustrated better design
153 where such inertia has been overcome).
157 application must be linked with the library;
160 option to your compiler or linker.
161 A debugging version of the library may be available;
165 (Your system integrator may have installed these libraries such that you
173 library logs events describing
178 in the current directory.
179 See section \*(``ALTERNATE CONFIGURATIONS\*('' below.
180 .SS "Application Structure"
183 application uses information from the system locale;
184 \fI\%setlocale\fP(3) prepares it for
190 setlocale(LC_ALL, "");
194 If the locale is not thus initialized,
195 the library assumes that characters are printable as in ISO\ 8859-1,
196 to work with certain legacy programs.
197 You should initialize the locale;
198 do not expect consistent behavior from the library when the locale has
201 \fB\%initscr\fP(3X) or \fB\%newterm\fP(3X)
202 must be called to initialize
204 before use of any functions that deal with windows and screens.
206 To get character-at-a-time input without echoing\(emmost interactive,
207 screen-oriented programs want this\(emuse the following sequence.
211 initscr(); cbreak(); noecho();
215 Most applications would perform further setup as follows.
220 keypad(stdscr, TRUE);
226 program then often enters an event loop of some sort.
227 Call \fB\%endwin\fP(3X) before exiting.
231 library abstracts the terminal with a
234 and represents all or part of its display
238 Distinct properties apply to each;
242 of a typical Unix terminal driver
243 is in one of three modes:
246 or normal (\*(``cooked\*('').
249 the line discipline is a property of the screen,
250 applying identically to all windows associated with it.
254 is a rectangular grid of character cells,
255 addressed by line and column coordinates
258 with the upper left corner as (0, 0).
261 the same size as the terminal screen,
263 Create others with \fB\%newwin\fP(3X).
267 library does not manage overlapping windows
271 to manage one screen-filling window,
272 or tile the screen into non-overlapping windows and not use
275 Mixing the two approaches will result in unpredictable and undesired
278 Functions permit manipulation of a window and the
280 identifying the cell within it at which the next operation will occur.
282 the most basic are \fB\%move\fP(3X) and \fB\%addch\fP(3X):
283 these place the cursor within and write a character to
287 Frequent changes to the terminal screen can cause unpleasant flicker or
288 inefficient use of the communication channel to the device,
289 so as a rule the library does not update it automatically.
293 functions to accumulate a set of desired updates that make sense to
295 call \fB\%refresh\fP(3X) to tell the library to make the user's screen
296 look like \fBstdscr\fP.
298 .\" X/Open Curses Issue 7 assumes some optimization will be done, but
299 .\" does not mandate it in any way.
301 its output by computing a minimal volume of operations to mutate the
302 screen from its state at the previous refresh to the new one.
303 Effective optimization demands accurate information about the terminal
305 the management of such information is the province of the
306 \fB\%terminfo\fP(3X) API,
307 a feature of every standard
311 Special windows called
313 may also be manipulated.
314 These are not constrained to the size of the terminal screen and their
315 contents need not be completely displayed.
316 See \fB\%curs_pad\fP(3X).
318 Many terminals support configuration of character cell foreground and
319 background colors as well as
321 which cause characters to render in such modes as
325 See \fB\%curs_attr\fP(3X).
328 predefines constants for a small set of forms-drawing graphics
329 corresponding to the DEC Alternate Character Set (ACS),
330 a feature of VT100 and other terminals.
331 See \fB\%addch\fP(3X).
334 is implemented using the operating system's terminal driver;
335 key events are received not as scan codes but as byte sequences.
337 (alphanumeric and punctuation keys,
346 appears as a control character or a multibyte
347 .I "escape sequence."
349 can translate the latter into unique
351 See \fB\%keypad\fP(3X) and \fB\%getch\fP(3X).
354 provides reimplementations of the SVr4 \fBpanel\fP(3X), \fBform\fP(3X),
355 and \fBmenu\fP(3X) libraries;
356 they permit overlapping windows and ease construction of user interfaces
360 The selection of an appropriate value of
362 in the process environment is essential to correct
367 A well-configured system selects a correct
370 \fB\%tset\fP(1) may assist with troubleshooting exotic situations.
372 If you change the terminal type,
376 then run \fB\%tset\fP(1) or the
377 .RB \*(`` "@TPUT@ init" \*(''
379 See subsection \*(``Tabs and Initialization\*('' of \fB\%terminfo\fP(5).
381 If the environment variables
388 program is executing in a graphical windowing environment,
389 the information obtained thence overrides that obtained by
393 extension supports resizable terminals;
394 see \fB\%wresize\fP(3X).
396 If the environment variable
401 program checks first for a terminal type description in the location it
404 is useful for developing type descriptions or when write permission to
408 See section \*(``ENVIRONMENT\*('' below.
409 .SS "Naming Conventions"
411 offers many functions in variant forms using a regular set of
412 alternatives to the name of an elemental one.
413 Those prefixed with \*(``w\*('' require a
416 those with a \*(``mv\*('' prefix first perform cursor movement using
418 a \*(``mvw\*('' prefix indicates both.
419 The \*(``w\*('' function is typically the elemental one;
420 the removal of this prefix usually indicates operation on
423 Four functions prefixed with \*(``p\*('' require a pad argument.
425 In function synopses,
427 man pages apply the following names to parameters.
428 We introduce the character types in the next subsection.
433 bf a \fIbool\fP (\fBTRUE\fP or \fBFALSE\fP)
434 c a \fIchar\fP or \fIint\fP
436 wc a \fIwchar_t\fP or \fIwint_t\fP
438 win pointer to a \fIWINDOW\fP
439 pad pointer to a \fIWINDOW\fP that is a pad
441 .SS "Wide and Non-wide Character Configurations"
442 This man page primarily surveys functions that appear in any
443 configuration of the library.
444 There are two common configurations;
445 see section \*(``ALTERNATE CONFIGURATIONS\*('' below.
446 .TP 10 \" "ncursesw" + 2n
448 is the library in its \*(``non-wide\*('' configuration,
449 handling only eight-bit characters.
450 It stores a character combined with attributes and a color pair in a
453 which is often an alias of
457 characters is similar to a C
462 string ends with an integral
468 Attributes and a color pair selection
469 (with no corresponding character)
470 can be stored in variables of
476 they are accessed via an integral bit mask.
482 X/Open Curses does not specify the sizes of the character code or
483 color pair identifier,
484 nor the quantity of attribute bits,
487 these are implementation-dependent.
489 uses eight bits for the character code.
490 An application requiring a wider character type,
491 for instance to represent Unicode,
492 should use the wide-character API.
495 is the library in its \*(``wide\*('' configuration,
496 which handles character encodings requiring a larger data type than
500 It provides additional functions that complement those in
501 the non-wide library where the size of the underlying character type is
503 A somewhat regular naming convention relates many of the wide variants
504 to their non-wide counterparts;
505 where a non-wide function name contains \*(``ch\*('' or \*(``str\*('',
506 prefix it with \*(``_w\*('' to obtain the wide counterpart.
508 \fB\%waddch\fP becomes \fB\%wadd_wch\fP.
509 (Exceptions that add only \*(``w\*('' comprise
513 .\" This is because they operate on "plain" wide-character strings
514 .\" (`wchar_t*`) and not curses complex character strings (`cchar_t*`).
515 .\" SVID 4 did specify functions like `addwch()` and `inswch()` that
516 .\" operated on `chtype`s assuming that they were wide enough for a
517 .\" `wchar_t` plus attribute and color pair bits; X/Open Curses did not
518 .\" standardize these.
520 This convention is inapplicable to some non-wide function names,
521 so other transformations are used for the wide configuration:
522 the window background management function \*(``bkgd\*('' becomes
524 the window border-drawing and -clearing functions are suffixed with
526 and character attribute manipulation functions like
527 \*(``attron\*('' become \*(``attr_on\*(''.
528 .RS 10 \" same as foregoing tag width
529 .TP 9 \" "cchar_t" + 2n
531 corresponds to the non-wide configuration's
533 It is a structure type
534 because it requires more storage than a standard scalar type offers.
535 A character code may not be representable as a
537 and moreover more than one character may occupy a cell
538 (as with accent marks and other diacritics).
539 Each character is of type
541 a complex character contains one spacing character and zero or more
542 non-spacing characters
544 A string of complex characters ends with a
548 member is the null wide character.
549 Attributes and a color pair selection are stored in separate fields of
551 not combined into an integer as in
559 \fB\%setcchar\fP(3X) and \fB\%getcchar\fP(3X)
563 The wide library API of
565 depends on two data types standardized by ISO C95.
568 stores a wide character.
571 it may be an alias of
573 Depending on the character encoding,
574 a wide character may be
576 meaning that it occupies a character cell by itself and typically
577 accompanies cursor advancement,
580 meaning that it occupies the same cell as a spacing character,
581 is often regarded as a \*(``modifier\*('' of the base glyph with which
583 and typically does not advance the cursor.
592 character manipulation functions of ISO C and its constant
596 .SS "Function Name Index"
597 The following table lists the
599 functions provided in the non-wide and wide APIs and the corresponding
600 man pages that describe them.
601 Those flagged with \*(``*\*(''
603 .IR \%ncurses "-specific,"
604 neither described by X/Open Curses nor present in SVr4.
609 \f(BIcurses\fP Function Name/Man Page
611 COLOR_PAIR/\fBcurs_color\fP(3X)
612 PAIR_NUMBER/\fBcurs_color\fP(3X)
613 add_wch/\fBcurs_add_wch\fP(3X)
614 add_wchnstr/\fBcurs_add_wchstr\fP(3X)
615 add_wchstr/\fBcurs_add_wchstr\fP(3X)
616 addch/\fBcurs_addch\fP(3X)
617 addchnstr/\fBcurs_addchstr\fP(3X)
618 addchstr/\fBcurs_addchstr\fP(3X)
619 addnstr/\fBcurs_addstr\fP(3X)
620 addnwstr/\fBcurs_addwstr\fP(3X)
621 addstr/\fBcurs_addstr\fP(3X)
622 addwstr/\fBcurs_addwstr\fP(3X)
623 alloc_pair/\fBnew_pair\fP(3X)*
624 assume_default_colors/\fBdefault_colors\fP(3X)*
625 attr_get/\fBcurs_attr\fP(3X)
626 attr_off/\fBcurs_attr\fP(3X)
627 attr_on/\fBcurs_attr\fP(3X)
628 attr_set/\fBcurs_attr\fP(3X)
629 attroff/\fBcurs_attr\fP(3X)
630 attron/\fBcurs_attr\fP(3X)
631 attrset/\fBcurs_attr\fP(3X)
632 baudrate/\fBcurs_termattrs\fP(3X)
633 beep/\fBcurs_beep\fP(3X)
634 bkgd/\fBcurs_bkgd\fP(3X)
635 bkgdset/\fBcurs_bkgd\fP(3X)
636 bkgrnd/\fBcurs_bkgrnd\fP(3X)
637 bkgrndset/\fBcurs_bkgrnd\fP(3X)
638 border/\fBcurs_border\fP(3X)
639 border_set/\fBcurs_border_set\fP(3X)
640 box/\fBcurs_border\fP(3X)
641 box_set/\fBcurs_border_set\fP(3X)
642 can_change_color/\fBcurs_color\fP(3X)
643 cbreak/\fBcurs_inopts\fP(3X)
644 chgat/\fBcurs_attr\fP(3X)
645 clear/\fBcurs_clear\fP(3X)
646 clearok/\fBcurs_outopts\fP(3X)
647 clrtobot/\fBcurs_clear\fP(3X)
648 clrtoeol/\fBcurs_clear\fP(3X)
649 color_content/\fBcurs_color\fP(3X)
650 color_set/\fBcurs_attr\fP(3X)
651 copywin/\fBcurs_overlay\fP(3X)
652 curs_set/\fBcurs_kernel\fP(3X)
653 curses_trace/\fBcurs_trace\fP(3X)*
654 curses_version/\fBcurs_extend\fP(3X)*
655 def_prog_mode/\fBcurs_kernel\fP(3X)
656 def_shell_mode/\fBcurs_kernel\fP(3X)
657 define_key/\fBdefine_key\fP(3X)*
658 del_curterm/\fBcurs_terminfo\fP(3X)
659 delay_output/\fBcurs_util\fP(3X)
660 delch/\fBcurs_delch\fP(3X)
661 deleteln/\fBcurs_deleteln\fP(3X)
662 delscreen/\fBcurs_initscr\fP(3X)
663 delwin/\fBcurs_window\fP(3X)
664 derwin/\fBcurs_window\fP(3X)
665 doupdate/\fBcurs_refresh\fP(3X)
666 dupwin/\fBcurs_window\fP(3X)
667 echo/\fBcurs_inopts\fP(3X)
668 echo_wchar/\fBcurs_add_wch\fP(3X)
669 echochar/\fBcurs_addch\fP(3X)
670 endwin/\fBcurs_initscr\fP(3X)
671 erase/\fBcurs_clear\fP(3X)
672 erasechar/\fBcurs_termattrs\fP(3X)
673 erasewchar/\fBcurs_termattrs\fP(3X)
674 exit_curses/\fBcurs_memleaks\fP(3X)*
675 exit_terminfo/\fBcurs_memleaks\fP(3X)*
676 extended_color_content/\fBcurs_color\fP(3X)*
677 extended_pair_content/\fBcurs_color\fP(3X)*
678 extended_slk_color/\fBcurs_slk\fP(3X)*
679 filter/\fBcurs_util\fP(3X)
680 find_pair/\fBnew_pair\fP(3X)*
681 flash/\fBcurs_beep\fP(3X)
682 flushinp/\fBcurs_util\fP(3X)
683 free_pair/\fBnew_pair\fP(3X)*
684 get_escdelay/\fBcurs_threads\fP(3X)*
685 get_wch/\fBcurs_get_wch\fP(3X)
686 get_wstr/\fBcurs_get_wstr\fP(3X)
687 getattrs/\fBcurs_attr\fP(3X)
688 getbegx/\fBcurs_legacy\fP(3X)*
689 getbegy/\fBcurs_legacy\fP(3X)*
690 getbegyx/\fBcurs_getyx\fP(3X)
691 getbkgd/\fBcurs_bkgd\fP(3X)
692 getbkgrnd/\fBcurs_bkgrnd\fP(3X)
693 getcchar/\fBcurs_getcchar\fP(3X)
694 getch/\fBcurs_getch\fP(3X)
695 getcurx/\fBcurs_legacy\fP(3X)*
696 getcury/\fBcurs_legacy\fP(3X)*
697 getmaxx/\fBcurs_legacy\fP(3X)*
698 getmaxy/\fBcurs_legacy\fP(3X)*
699 getmaxyx/\fBcurs_getyx\fP(3X)
700 getmouse/\fBcurs_mouse\fP(3X)*
701 getn_wstr/\fBcurs_get_wstr\fP(3X)
702 getnstr/\fBcurs_getstr\fP(3X)
703 getparx/\fBcurs_legacy\fP(3X)*
704 getpary/\fBcurs_legacy\fP(3X)*
705 getparyx/\fBcurs_getyx\fP(3X)
706 getstr/\fBcurs_getstr\fP(3X)
707 getsyx/\fBcurs_kernel\fP(3X)
708 getwin/\fBcurs_util\fP(3X)
709 getyx/\fBcurs_getyx\fP(3X)
710 halfdelay/\fBcurs_inopts\fP(3X)
711 has_colors/\fBcurs_color\fP(3X)
712 has_ic/\fBcurs_termattrs\fP(3X)
713 has_il/\fBcurs_termattrs\fP(3X)
714 has_key/\fBcurs_getch\fP(3X)*
715 has_mouse/\fBcurs_mouse\fP(3X)*
716 hline/\fBcurs_border\fP(3X)
717 hline_set/\fBcurs_border_set\fP(3X)
718 idcok/\fBcurs_outopts\fP(3X)
719 idlok/\fBcurs_outopts\fP(3X)
720 immedok/\fBcurs_outopts\fP(3X)
721 in_wch/\fBcurs_in_wch\fP(3X)
722 in_wchnstr/\fBcurs_in_wchstr\fP(3X)
723 in_wchstr/\fBcurs_in_wchstr\fP(3X)
724 inch/\fBcurs_inch\fP(3X)
725 inchnstr/\fBcurs_inchstr\fP(3X)
726 inchstr/\fBcurs_inchstr\fP(3X)
727 init_color/\fBcurs_color\fP(3X)
728 init_extended_color/\fBcurs_color\fP(3X)*
729 init_extended_pair/\fBcurs_color\fP(3X)*
730 init_pair/\fBcurs_color\fP(3X)
731 initscr/\fBcurs_initscr\fP(3X)
732 innstr/\fBcurs_instr\fP(3X)
733 innwstr/\fBcurs_inwstr\fP(3X)
734 ins_nwstr/\fBcurs_ins_wstr\fP(3X)
735 ins_wch/\fBcurs_ins_wch\fP(3X)
736 ins_wstr/\fBcurs_ins_wstr\fP(3X)
737 insch/\fBcurs_insch\fP(3X)
738 insdelln/\fBcurs_deleteln\fP(3X)
739 insertln/\fBcurs_deleteln\fP(3X)
740 insnstr/\fBcurs_insstr\fP(3X)
741 insstr/\fBcurs_insstr\fP(3X)
742 instr/\fBcurs_instr\fP(3X)
743 intrflush/\fBcurs_inopts\fP(3X)
744 inwstr/\fBcurs_inwstr\fP(3X)
745 is_cbreak/\fBcurs_inopts\fP(3X)*
746 is_cleared/\fBcurs_opaque\fP(3X)*
747 is_echo/\fBcurs_inopts\fP(3X)*
748 is_idcok/\fBcurs_opaque\fP(3X)*
749 is_idlok/\fBcurs_opaque\fP(3X)*
750 is_immedok/\fBcurs_opaque\fP(3X)*
751 is_keypad/\fBcurs_opaque\fP(3X)*
752 is_leaveok/\fBcurs_opaque\fP(3X)*
753 is_linetouched/\fBcurs_touch\fP(3X)
754 is_nl/\fBcurs_inopts\fP(3X)*
755 is_nodelay/\fBcurs_opaque\fP(3X)*
756 is_notimeout/\fBcurs_opaque\fP(3X)*
757 is_pad/\fBcurs_opaque\fP(3X)*
758 is_raw/\fBcurs_inopts\fP(3X)*
759 is_scrollok/\fBcurs_opaque\fP(3X)*
760 is_subwin/\fBcurs_opaque\fP(3X)*
761 is_syncok/\fBcurs_opaque\fP(3X)*
762 is_term_resized/\fBresizeterm\fP(3X)*
763 is_wintouched/\fBcurs_touch\fP(3X)
764 isendwin/\fBcurs_initscr\fP(3X)
765 key_defined/\fBkey_defined\fP(3X)*
766 key_name/\fBcurs_util\fP(3X)
767 keybound/\fBkeybound\fP(3X)*
768 keyname/\fBcurs_util\fP(3X)
769 keyok/\fBkeyok\fP(3X)*
770 keypad/\fBcurs_inopts\fP(3X)
771 killchar/\fBcurs_termattrs\fP(3X)
772 killwchar/\fBcurs_termattrs\fP(3X)
773 leaveok/\fBcurs_outopts\fP(3X)
774 longname/\fBcurs_termattrs\fP(3X)
775 mcprint/\fBcurs_print\fP(3X)*
776 meta/\fBcurs_inopts\fP(3X)
777 mouse_trafo/\fBcurs_mouse\fP(3X)*
778 mouseinterval/\fBcurs_mouse\fP(3X)*
779 mousemask/\fBcurs_mouse\fP(3X)*
780 move/\fBcurs_move\fP(3X)
781 mvadd_wch/\fBcurs_add_wch\fP(3X)
782 mvadd_wchnstr/\fBcurs_add_wchstr\fP(3X)
783 mvadd_wchstr/\fBcurs_add_wchstr\fP(3X)
784 mvaddch/\fBcurs_addch\fP(3X)
785 mvaddchnstr/\fBcurs_addchstr\fP(3X)
786 mvaddchstr/\fBcurs_addchstr\fP(3X)
787 mvaddnstr/\fBcurs_addstr\fP(3X)
788 mvaddnwstr/\fBcurs_addwstr\fP(3X)
789 mvaddstr/\fBcurs_addstr\fP(3X)
790 mvaddwstr/\fBcurs_addwstr\fP(3X)
791 mvchgat/\fBcurs_attr\fP(3X)
792 mvcur/\fBcurs_kernel\fP(3X)
793 mvdelch/\fBcurs_delch\fP(3X)
794 mvderwin/\fBcurs_window\fP(3X)
795 mvget_wch/\fBcurs_get_wch\fP(3X)
796 mvget_wstr/\fBcurs_get_wstr\fP(3X)
797 mvgetch/\fBcurs_getch\fP(3X)
798 mvgetn_wstr/\fBcurs_get_wstr\fP(3X)
799 mvgetnstr/\fBcurs_getstr\fP(3X)
800 mvgetstr/\fBcurs_getstr\fP(3X)
801 mvhline/\fBcurs_border\fP(3X)
802 mvhline_set/\fBcurs_border_set\fP(3X)
803 mvin_wch/\fBcurs_in_wch\fP(3X)
804 mvin_wchnstr/\fBcurs_in_wchstr\fP(3X)
805 mvin_wchstr/\fBcurs_in_wchstr\fP(3X)
806 mvinch/\fBcurs_inch\fP(3X)
807 mvinchnstr/\fBcurs_inchstr\fP(3X)
808 mvinchstr/\fBcurs_inchstr\fP(3X)
809 mvinnstr/\fBcurs_instr\fP(3X)
810 mvinnwstr/\fBcurs_inwstr\fP(3X)
811 mvins_nwstr/\fBcurs_ins_wstr\fP(3X)
812 mvins_wch/\fBcurs_ins_wch\fP(3X)
813 mvins_wstr/\fBcurs_ins_wstr\fP(3X)
814 mvinsch/\fBcurs_insch\fP(3X)
815 mvinsnstr/\fBcurs_insstr\fP(3X)
816 mvinsstr/\fBcurs_insstr\fP(3X)
817 mvinstr/\fBcurs_instr\fP(3X)
818 mvinwstr/\fBcurs_inwstr\fP(3X)
819 mvprintw/\fBcurs_printw\fP(3X)
820 mvscanw/\fBcurs_scanw\fP(3X)
821 mvvline/\fBcurs_border\fP(3X)
822 mvvline_set/\fBcurs_border_set\fP(3X)
823 mvwadd_wch/\fBcurs_add_wch\fP(3X)
824 mvwadd_wchnstr/\fBcurs_add_wchstr\fP(3X)
825 mvwadd_wchstr/\fBcurs_add_wchstr\fP(3X)
826 mvwaddch/\fBcurs_addch\fP(3X)
827 mvwaddchnstr/\fBcurs_addchstr\fP(3X)
828 mvwaddchstr/\fBcurs_addchstr\fP(3X)
829 mvwaddnstr/\fBcurs_addstr\fP(3X)
830 mvwaddnwstr/\fBcurs_addwstr\fP(3X)
831 mvwaddstr/\fBcurs_addstr\fP(3X)
832 mvwaddwstr/\fBcurs_addwstr\fP(3X)
833 mvwchgat/\fBcurs_attr\fP(3X)
834 mvwdelch/\fBcurs_delch\fP(3X)
835 mvwget_wch/\fBcurs_get_wch\fP(3X)
836 mvwget_wstr/\fBcurs_get_wstr\fP(3X)
837 mvwgetch/\fBcurs_getch\fP(3X)
838 mvwgetn_wstr/\fBcurs_get_wstr\fP(3X)
839 mvwgetnstr/\fBcurs_getstr\fP(3X)
840 mvwgetstr/\fBcurs_getstr\fP(3X)
841 mvwhline/\fBcurs_border\fP(3X)
842 mvwhline_set/\fBcurs_border_set\fP(3X)
843 mvwin/\fBcurs_window\fP(3X)
844 mvwin_wch/\fBcurs_in_wch\fP(3X)
845 mvwin_wchnstr/\fBcurs_in_wchstr\fP(3X)
846 mvwin_wchstr/\fBcurs_in_wchstr\fP(3X)
847 mvwinch/\fBcurs_inch\fP(3X)
848 mvwinchnstr/\fBcurs_inchstr\fP(3X)
849 mvwinchstr/\fBcurs_inchstr\fP(3X)
850 mvwinnstr/\fBcurs_instr\fP(3X)
851 mvwinnwstr/\fBcurs_inwstr\fP(3X)
852 mvwins_nwstr/\fBcurs_ins_wstr\fP(3X)
853 mvwins_wch/\fBcurs_ins_wch\fP(3X)
854 mvwins_wstr/\fBcurs_ins_wstr\fP(3X)
855 mvwinsch/\fBcurs_insch\fP(3X)
856 mvwinsnstr/\fBcurs_insstr\fP(3X)
857 mvwinsstr/\fBcurs_insstr\fP(3X)
858 mvwinstr/\fBcurs_instr\fP(3X)
859 mvwinwstr/\fBcurs_inwstr\fP(3X)
860 mvwprintw/\fBcurs_printw\fP(3X)
861 mvwscanw/\fBcurs_scanw\fP(3X)
862 mvwvline/\fBcurs_border\fP(3X)
863 mvwvline_set/\fBcurs_border_set\fP(3X)
864 napms/\fBcurs_kernel\fP(3X)
865 newpad/\fBcurs_pad\fP(3X)
866 newterm/\fBcurs_initscr\fP(3X)
867 newwin/\fBcurs_window\fP(3X)
868 nl/\fBcurs_inopts\fP(3X)
869 nocbreak/\fBcurs_inopts\fP(3X)
870 nodelay/\fBcurs_inopts\fP(3X)
871 noecho/\fBcurs_inopts\fP(3X)
872 nofilter/\fBcurs_util\fP(3X)*
873 nonl/\fBcurs_inopts\fP(3X)
874 noqiflush/\fBcurs_inopts\fP(3X)
875 noraw/\fBcurs_inopts\fP(3X)
876 notimeout/\fBcurs_inopts\fP(3X)
877 overlay/\fBcurs_overlay\fP(3X)
878 overwrite/\fBcurs_overlay\fP(3X)
879 pair_content/\fBcurs_color\fP(3X)
880 pecho_wchar/\fBcurs_pad\fP(3X)
881 pechochar/\fBcurs_pad\fP(3X)
882 pnoutrefresh/\fBcurs_pad\fP(3X)
883 prefresh/\fBcurs_pad\fP(3X)
884 printw/\fBcurs_printw\fP(3X)
885 putp/\fBcurs_terminfo\fP(3X)
886 putwin/\fBcurs_util\fP(3X)
887 qiflush/\fBcurs_inopts\fP(3X)
888 raw/\fBcurs_inopts\fP(3X)
889 redrawwin/\fBcurs_refresh\fP(3X)
890 refresh/\fBcurs_refresh\fP(3X)
891 reset_color_pairs/\fBcurs_color\fP(3X)*
892 reset_prog_mode/\fBcurs_kernel\fP(3X)
893 reset_shell_mode/\fBcurs_kernel\fP(3X)
894 resetty/\fBcurs_kernel\fP(3X)
895 resize_term/\fBresizeterm\fP(3X)*
896 resizeterm/\fBresizeterm\fP(3X)*
897 restartterm/\fBcurs_terminfo\fP(3X)
898 ripoffline/\fBcurs_kernel\fP(3X)
899 savetty/\fBcurs_kernel\fP(3X)
900 scanw/\fBcurs_scanw\fP(3X)
901 scr_dump/\fBcurs_scr_dump\fP(3X)
902 scr_init/\fBcurs_scr_dump\fP(3X)
903 scr_restore/\fBcurs_scr_dump\fP(3X)
904 scr_set/\fBcurs_scr_dump\fP(3X)
905 scrl/\fBcurs_scroll\fP(3X)
906 scroll/\fBcurs_scroll\fP(3X)
907 scrollok/\fBcurs_outopts\fP(3X)
908 set_curterm/\fBcurs_terminfo\fP(3X)
909 set_escdelay/\fBcurs_threads\fP(3X)*
910 set_tabsize/\fBcurs_threads\fP(3X)*
911 set_term/\fBcurs_initscr\fP(3X)
912 setcchar/\fBcurs_getcchar\fP(3X)
913 setscrreg/\fBcurs_outopts\fP(3X)
914 setsyx/\fBcurs_kernel\fP(3X)
915 setupterm/\fBcurs_terminfo\fP(3X)
916 slk_attr/\fBcurs_slk\fP(3X)*
917 slk_attr_off/\fBcurs_slk\fP(3X)
918 slk_attr_on/\fBcurs_slk\fP(3X)
919 slk_attr_set/\fBcurs_slk\fP(3X)
920 slk_attroff/\fBcurs_slk\fP(3X)
921 slk_attron/\fBcurs_slk\fP(3X)
922 slk_attrset/\fBcurs_slk\fP(3X)
923 slk_clear/\fBcurs_slk\fP(3X)
924 slk_color/\fBcurs_slk\fP(3X)
925 slk_init/\fBcurs_slk\fP(3X)
926 slk_label/\fBcurs_slk\fP(3X)
927 slk_noutrefresh/\fBcurs_slk\fP(3X)
928 slk_refresh/\fBcurs_slk\fP(3X)
929 slk_restore/\fBcurs_slk\fP(3X)
930 slk_set/\fBcurs_slk\fP(3X)
931 slk_touch/\fBcurs_slk\fP(3X)
932 slk_wset/\fBcurs_slk\fP(3X)
933 standend/\fBcurs_attr\fP(3X)
934 standout/\fBcurs_attr\fP(3X)
935 start_color/\fBcurs_color\fP(3X)
936 subpad/\fBcurs_pad\fP(3X)
937 subwin/\fBcurs_window\fP(3X)
938 syncok/\fBcurs_window\fP(3X)
939 term_attrs/\fBcurs_termattrs\fP(3X)
940 termattrs/\fBcurs_termattrs\fP(3X)
941 termname/\fBcurs_termattrs\fP(3X)
942 tgetent/\fBcurs_termcap\fP(3X)
943 tgetflag/\fBcurs_termcap\fP(3X)
944 tgetnum/\fBcurs_termcap\fP(3X)
945 tgetstr/\fBcurs_termcap\fP(3X)
946 tgoto/\fBcurs_termcap\fP(3X)
947 tigetflag/\fBcurs_terminfo\fP(3X)
948 tigetnum/\fBcurs_terminfo\fP(3X)
949 tigetstr/\fBcurs_terminfo\fP(3X)
950 timeout/\fBcurs_inopts\fP(3X)
951 tiparm/\fBcurs_terminfo\fP(3X)
952 tiparm_s/\fBcurs_terminfo\fP(3X)*
953 tiscan_s/\fBcurs_terminfo\fP(3X)*
954 touchline/\fBcurs_touch\fP(3X)
955 touchwin/\fBcurs_touch\fP(3X)
956 tparm/\fBcurs_terminfo\fP(3X)
957 tputs/\fBcurs_termcap\fP(3X)
958 tputs/\fBcurs_terminfo\fP(3X)
959 trace/\fBcurs_trace\fP(3X)*
960 typeahead/\fBcurs_inopts\fP(3X)
961 unctrl/\fBcurs_util\fP(3X)
962 unget_wch/\fBcurs_get_wch\fP(3X)
963 ungetch/\fBcurs_getch\fP(3X)
964 ungetmouse/\fBcurs_mouse\fP(3X)*
965 untouchwin/\fBcurs_touch\fP(3X)
966 use_default_colors/\fBdefault_colors\fP(3X)*
967 use_env/\fBcurs_util\fP(3X)
968 use_extended_names/\fBcurs_extend\fP(3X)*
969 use_legacy_coding/\fBlegacy_coding\fP(3X)*
970 use_screen/\fBcurs_threads\fP(3X)*
971 use_tioctl/\fBcurs_util\fP(3X)*
972 use_window/\fBcurs_threads\fP(3X)*
973 vid_attr/\fBcurs_terminfo\fP(3X)
974 vid_puts/\fBcurs_terminfo\fP(3X)
975 vidattr/\fBcurs_terminfo\fP(3X)
976 vidputs/\fBcurs_terminfo\fP(3X)
977 vline/\fBcurs_border\fP(3X)
978 vline_set/\fBcurs_border_set\fP(3X)
979 vw_printw/\fBcurs_printw\fP(3X)
980 vw_scanw/\fBcurs_scanw\fP(3X)
981 vwprintw/\fBcurs_printw\fP(3X)
982 vwscanw/\fBcurs_scanw\fP(3X)
983 wadd_wch/\fBcurs_add_wch\fP(3X)
984 wadd_wchnstr/\fBcurs_add_wchstr\fP(3X)
985 wadd_wchstr/\fBcurs_add_wchstr\fP(3X)
986 waddch/\fBcurs_addch\fP(3X)
987 waddchnstr/\fBcurs_addchstr\fP(3X)
988 waddchstr/\fBcurs_addchstr\fP(3X)
989 waddnstr/\fBcurs_addstr\fP(3X)
990 waddnwstr/\fBcurs_addwstr\fP(3X)
991 waddstr/\fBcurs_addstr\fP(3X)
992 waddwstr/\fBcurs_addwstr\fP(3X)
993 wattr_get/\fBcurs_attr\fP(3X)
994 wattr_off/\fBcurs_attr\fP(3X)
995 wattr_on/\fBcurs_attr\fP(3X)
996 wattr_set/\fBcurs_attr\fP(3X)
997 wattroff/\fBcurs_attr\fP(3X)
998 wattron/\fBcurs_attr\fP(3X)
999 wattrset/\fBcurs_attr\fP(3X)
1000 wbkgd/\fBcurs_bkgd\fP(3X)
1001 wbkgdset/\fBcurs_bkgd\fP(3X)
1002 wbkgrnd/\fBcurs_bkgrnd\fP(3X)
1003 wbkgrndset/\fBcurs_bkgrnd\fP(3X)
1004 wborder/\fBcurs_border\fP(3X)
1005 wborder_set/\fBcurs_border_set\fP(3X)
1006 wchgat/\fBcurs_attr\fP(3X)
1007 wclear/\fBcurs_clear\fP(3X)
1008 wclrtobot/\fBcurs_clear\fP(3X)
1009 wclrtoeol/\fBcurs_clear\fP(3X)
1010 wcolor_set/\fBcurs_attr\fP(3X)
1011 wcursyncup/\fBcurs_window\fP(3X)
1012 wdelch/\fBcurs_delch\fP(3X)
1013 wdeleteln/\fBcurs_deleteln\fP(3X)
1014 wecho_wchar/\fBcurs_add_wch\fP(3X)
1015 wechochar/\fBcurs_addch\fP(3X)
1016 wenclose/\fBcurs_mouse\fP(3X)*
1017 werase/\fBcurs_clear\fP(3X)
1018 wget_wch/\fBcurs_get_wch\fP(3X)
1019 wget_wstr/\fBcurs_get_wstr\fP(3X)
1020 wgetbkgrnd/\fBcurs_bkgrnd\fP(3X)
1021 wgetch/\fBcurs_getch\fP(3X)
1022 wgetdelay/\fBcurs_opaque\fP(3X)*
1023 wgetn_wstr/\fBcurs_get_wstr\fP(3X)
1024 wgetnstr/\fBcurs_getstr\fP(3X)
1025 wgetparent/\fBcurs_opaque\fP(3X)*
1026 wgetscrreg/\fBcurs_opaque\fP(3X)*
1027 wgetstr/\fBcurs_getstr\fP(3X)
1028 whline/\fBcurs_border\fP(3X)
1029 whline_set/\fBcurs_border_set\fP(3X)
1030 win_wch/\fBcurs_in_wch\fP(3X)
1031 win_wchnstr/\fBcurs_in_wchstr\fP(3X)
1032 win_wchstr/\fBcurs_in_wchstr\fP(3X)
1033 winch/\fBcurs_inch\fP(3X)
1034 winchnstr/\fBcurs_inchstr\fP(3X)
1035 winchstr/\fBcurs_inchstr\fP(3X)
1036 winnstr/\fBcurs_instr\fP(3X)
1037 winnwstr/\fBcurs_inwstr\fP(3X)
1038 wins_nwstr/\fBcurs_ins_wstr\fP(3X)
1039 wins_wch/\fBcurs_ins_wch\fP(3X)
1040 wins_wstr/\fBcurs_ins_wstr\fP(3X)
1041 winsch/\fBcurs_insch\fP(3X)
1042 winsdelln/\fBcurs_deleteln\fP(3X)
1043 winsertln/\fBcurs_deleteln\fP(3X)
1044 winsnstr/\fBcurs_insstr\fP(3X)
1045 winsstr/\fBcurs_insstr\fP(3X)
1046 winstr/\fBcurs_instr\fP(3X)
1047 winwstr/\fBcurs_inwstr\fP(3X)
1048 wmouse_trafo/\fBcurs_mouse\fP(3X)*
1049 wmove/\fBcurs_move\fP(3X)
1050 wnoutrefresh/\fBcurs_refresh\fP(3X)
1051 wprintw/\fBcurs_printw\fP(3X)
1052 wredrawln/\fBcurs_refresh\fP(3X)
1053 wrefresh/\fBcurs_refresh\fP(3X)
1054 wresize/\fBwresize\fP(3X)*
1055 wscanw/\fBcurs_scanw\fP(3X)
1056 wscrl/\fBcurs_scroll\fP(3X)
1057 wsetscrreg/\fBcurs_outopts\fP(3X)
1058 wstandend/\fBcurs_attr\fP(3X)
1059 wstandout/\fBcurs_attr\fP(3X)
1060 wsyncdown/\fBcurs_window\fP(3X)
1061 wsyncup/\fBcurs_window\fP(3X)
1062 wtimeout/\fBcurs_inopts\fP(3X)
1063 wtouchln/\fBcurs_touch\fP(3X)
1064 wunctrl/\fBcurs_util\fP(3X)
1065 wvline/\fBcurs_border\fP(3X)
1066 wvline_set/\fBcurs_border_set\fP(3X)
1070 .I "screen-pointer extension"
1071 adds additional functions corresponding to many of the above,
1072 each with an \*(``_sp\*('' suffix;
1073 see \fBcurs_sp_funcs\fP(3X).
1075 The availability of some extensions is configurable when
1078 see sections \*(``ALTERNATE CONFIGURATIONS\*('' and \*(``EXTENSIONS\*(''
1081 Unless otherwise noted,
1082 functions that return integers return the constants
1087 see \fB\%curs_variables\fP(3X).
1088 Functions that return pointers return
1093 treats a null pointer passed as a function parameter as a failure.
1094 Functions prefixed with \*(``mv\*('' first perform cursor movement and
1095 fail if the position
1098 is outside the window boundaries.
1100 The following symbols from the process environment customize the
1104 The library may be configured to disregard the variables
1106 .IR \%TERMINFO_DIRS ,
1110 if the user is the superuser (root),
1111 or the application uses \fI\%setuid\fP(2) or \fI\%setgid\fP(2).
1112 .SS "\fIBAUDRATE\fP"
1113 The debugging library checks this variable when the application has
1114 redirected output to a file.
1115 Its integral value is used for the baud rate.
1116 If that value is absent or invalid,
1119 This feature allows developers to construct repeatable test cases
1120 that take into account optimization decisions that depend on baud rate.
1121 .SS "\fICC\fP (command character)"
1124 .B \%command_character
1126 capability value of loaded
1128 entries changes to the value of this variable.
1131 entries provide this feature.
1133 Because this name is also used in development environments to store the
1136 ignores its value if it is not one character in length.
1138 This variable specifies the width of the screen in characters.
1139 Applications running in a windowing environment usually are able to
1140 obtain the width of the window in which they are executing.
1143 is not defined and the terminal's screen size is not available from the
1146 uses the size specified by the
1149 capability of the terminal type's entry in the
1154 It is important that your application use the correct screen size.
1155 Automatic detection thereof is not always possible because an
1156 application may be running on a host that does not honor NAWS
1157 (Negotiations About Window Size)
1158 or as a different user ID than the owner of the terminal device file.
1163 overrides the library's use of the screen size obtained from the
1170 variables may be specified independently.
1172 enforces an upper limit of 512 on each when reading the value.
1173 This property is useful to circumvent misfeatures of legacy terminal
1175 \fI\%xterm\fP(1) descriptions specifying 65 lines were once notorious.
1183 descriptions of terminal emulators.
1185 \fBuse_env\fP(3X) can disable use of the process environment
1186 in determining the screen size.
1187 \fBuse_tioctl\fP(3X) can update
1191 to match the screen size obtained from system calls or the terminal
1193 .SS "\fIESCDELAY\fP"
1196 to distinguish the ESC character resulting from a user's press of the
1197 \*(``Escape\*('' key on the input device from one beginning an
1198 .I "escape sequence"
1199 (as commonly produced by function keys),
1200 it waits after receiving the escape character to see if further
1201 characters are available on the input stream within a short interval.
1204 stores this interval in milliseconds.
1205 The default value of 1000
1207 is adequate for most uses.
1208 This environment variable overrides it;
1210 enforces an upper limit of 30,000
1212 when reading the value.
1214 The most common instance where you may wish to change this value
1215 is to work with a remote host over a slow communication channel.
1216 If the host running a
1218 application does not receive the characters of an escape sequence in a
1220 the library can interpret them as multiple key stroke events.
1222 \fI\%xterm\fP(1) mouse events are a form of escape sequence;
1224 if your application makes heavy use of multiple-clicking,
1225 you may wish to lengthen the default value because the delay applies
1226 to the composite multi-click event as well as the individual clicks.
1228 Portable applications should not rely upon the presence of
1231 but setting the environment variable rather than the global variable
1232 does not create problems when compiling an application.
1234 If \fB\%keypad\fP(3X) is disabled for the
1236 window receiving input,
1237 a program must disambiguate escape sequences itself.
1240 may read and write auxiliary terminal descriptions in
1244 files in the user's home directory.
1248 specifies the height of the screen in characters.
1251 capability and code is
1253 See the description of the
1256 .SS "\fIMOUSE_BUTTONS_123\fP"
1257 (OS/2 EMX port only)
1258 OS/2 numbers a three-button mouse inconsistently with other platforms,
1259 such that 1 is the left button,
1262 This variable customizes the mouse button numbering.
1263 Its value must be three digits 1\-3 in any order.
1266 assumes a numbering of \*(``132\*(''.
1267 .SS "\fINCURSES_ASSUMED_COLORS\fP"
1269 this variable overrides the
1271 library's compiled-in assumption that the terminal's default colors are
1273 see \fB\%default_colors\fP(3X).
1274 Set the foreground and background color values with this environment
1275 variable by assigning it two integer values separated by a comma,
1276 indicating foregound and background color numbers,
1282 not to assume anything about the colors,
1283 use a value of \*(``\-1,\-1\*(''.
1284 To make the default color scheme green on black,
1287 accepts integral values from \-1 up to the value of the
1292 .SS "\fINCURSES_CONSOLE2\fP"
1296 .\" https://www.hanselman.com/blog/console2-a-better-windows-command-prompt
1297 program defectively handles the Microsoft Console API call
1298 .IR \%Create\%Console\%Screen\%Buffer .
1299 Applications that use it will hang.
1301 it is possible to simulate the action of this call by mapping
1303 explicitly saving and restoring the original screen contents.
1304 Setting the environment variable
1306 has the same effect.
1307 .SS "\fINCURSES_GPM_TERMS\fP"
1311 is configured to use the GPM interface,
1312 this variable may list one or more terminal type names,
1313 delimited by vertical bars
1322 An empty value disables the GPM interface,
1325 built-in support for \fI\%xterm\fP(1) mouse protocols instead.
1326 If the variable is absent,
1328 attempts to open GPM if
1330 contains \*(``linux\*(''.
1331 .SS "\fINCURSES_NO_HARD_TABS\fP"
1333 may use tab characters in cursor movement optimization.
1335 your terminal driver may not handle them properly.
1336 Set this environment variable to any value to disable the feature.
1337 You can also adjust your \fI\%stty\fP(1) settings to avoid the problem.
1338 .SS "\fINCURSES_NO_MAGIC_COOKIE\fP"
1339 Many terminals store video attributes as a property of a character cell,
1344 some recorded changes in video attributes as data that logically
1346 character cells on the display,
1347 switching attributes on or off,
1348 similarly to tags in a markup language;
1349 these are termed \*(``magic cookies\*('',
1350 and must be subsequently overprinted.
1353 entry for your terminal type does not adequately describe its handling
1355 set this variable to any value to instruct
1357 to disable attributes entirely.
1358 .SS "\fINCURSES_NO_PADDING\fP"
1359 Most terminal type descriptions in the
1361 database detail hardware devices.
1364 applications in terminal emulator programs that run in a windowing
1366 These programs can duplicate all of the important features of a hardware
1368 but often lack their limitations.
1369 Chief among these absent drawbacks is the problem of data flow
1372 limiting the speed of communication to what the hardware could handle.
1373 Unless a hardware terminal is interfaced into a terminal concentrator
1374 (which does flow control),
1375 an application must manage flow itself to prevent overruns and data
1378 A solution that comes at no hardware cost is for an application to pause
1379 after directing a terminal to execute an operation that it performs
1381 such as clearing the display.
1382 Many terminal type descriptions,
1383 including that for the VT100,
1384 embed delay specifications in capabilities.
1385 You may wish to use these terminal descriptions without paying the
1386 performance penalty.
1388 .I \%NCURSES_NO_PADDING
1389 to any value to disable all but mandatory padding.
1390 Mandatory padding is used by such terminal capabilities as
1393 .SS "\fINCURSES_NO_SETBUF\fP"
1395 Prior to internal changes developed in
1398 (patches 20120825 through 20130126),
1399 the library used \fI\%setbuf\fP(3) to enable fully buffered output when
1400 initializing the terminal.
1404 to increase performance.
1405 For testing purposes,
1408 and of certain applications,
1409 this feature was made optional.
1410 Setting this variable disabled output buffering,
1411 leaving the output stream in the original
1412 (usually line-buffered)
1417 performs its own buffering and does not require this workaround;
1418 it does not modify the buffering of the standard output stream.
1419 This approach makes signal handling,
1422 A drawback is that certain unconventional programs mixed
1423 \fI\%stdio\fP(3) calls with
1426 got the behavior they expected.
1427 This is no longer the case;
1429 does not write to the standard output file descriptor through a
1434 low-level API calls such as \fB\%putp\fP(3X) still use the
1435 standard output stream.
1438 calls such as \fB\%printw\fP(3X) do not.
1439 .SS "\fINCURSES_NO_UTF8_ACS\fP"
1444 environment variable for special cases where VT100 forms-drawing
1446 (and the corresponding alternate character set
1449 are known to be unsupported by terminal types that otherwise claim VT100
1452 when running in a UTF-8 locale,
1453 the Linux virtual console device and the GNU \fI\%screen\fP(1)
1454 program ignore them.
1455 Set this variable to a nonzero value to instruct
1457 that the terminal's ACS support is broken;
1458 the library then outputs Unicode code points that correspond to the
1463 to disable the special check for terminal type names matching
1464 \*(``linux\*('' or \*(``screen\*('',
1467 to assume that the ACS feature works if the terminal type description
1470 As an alternative to use of this variable,
1472 checks for an extended
1474 numeric capability \fBU8\fP
1475 that can be compiled using
1476 .RB \*(`` "@TIC@ \-x" \*(''.
1481 # linux console, if patched to provide working
1482 # VT100 shift\-in/shift\-out, with corresponding font.
1483 linux\-vt100|linux console with VT100 line\-graphics,
1486 # uxterm with vt100Graphics resource set to false
1487 xterm\-utf8|xterm relying on UTF\-8 line\-graphics,
1492 The two-character name \*(``U8\*('' was chosen to permit its use via
1496 .SS "\fINCURSES_TRACE\fP"
1499 (in its debugging configuration)
1500 checks for this variable's presence.
1501 If defined with an integral value,
1502 the library calls \fB\%curses_trace\fP(3X) with that value as the
1507 variable denotes the terminal type.
1509 though many are similar.
1510 It is commonly set by terminal emulators to help applications find a
1511 workable terminal description.
1512 Some choose a popular approximation such as \*(``ansi\*('',
1513 \*(``vt100\*('', or \*(``xterm\*('' rather than an exact fit to their
1516 an application will have problems with that approach;
1518 a key stroke may not operate correctly,
1519 or produce no effect but seeming garbage characters on the screen.
1523 has no effect on hardware operation;
1524 it affects the way applications communicate with the terminal.
1527 (\fIxterm\fP(1) being a rare exception),
1528 terminal emulators that allow you to specify
1530 as a parameter or configuration value do not change their behavior to
1538 it checks for a terminal type description in
1542 format is not available.
1543 Setting this variable directs
1548 .IR \%/etc/termcap ;
1553 should contain either a terminal description
1554 (with newlines stripped out),
1555 or a file name indicating where the information required by the
1557 environment variable is stored.
1558 .SS "\fITERMINFO\fP"
1560 can be configured to read terminal type description databases in various
1561 locations using different formats.
1562 This variable overrides the default location.
1566 format are normally stored in a directory tree using subdirectories
1567 named by the common first letters of the terminal types named therein.
1568 This is the scheme used in System\ V.
1572 is configured to use hashed databases,
1575 may name its location,
1577 .IR \%/usr/share/terminfo.db ,
1579 .IR \%/usr/share/terminfo/ .
1581 The hashed database uses less disk space and is a little faster than the
1584 some applications assume the existence of the directory tree,
1585 and read it directly
1586 rather than using the
1595 this variable may contain the location of a
1601 begins with \*(``hex:\*('' or \*(``b64:\*('',
1603 uses the remainder of the value as a compiled
1606 You might produce the base64 format using \fB\%infocmp\fP(1M).
1610 TERMINFO=$(infocmp \-0 \-Q2 \-q)
1615 The compiled description is used only if it corresponds to the terminal
1625 to a terminal database.
1626 The search path is as follows.
1628 the last terminal database to which the running
1633 the location specified by the
1635 environment variable
1639 locations listed in the
1641 environment variable
1643 .if !'@TERMINFO_DIRS@'no default value' .as td @TERMINFO_DIRS@
1644 .if !'@TERMINFO@\*(td'' \{\
1646 location(s) configured and compiled into
1651 .I \%@TERMINFO_DIRS@
1653 .if !'@TERMINFO'' .if !'\*(td'@TERMINFO@' \{\
1659 .SS "\fITERMINFO_DIRS\fP"
1660 This variable specifies a list of locations,
1665 searches for the terminal type descriptions described by
1668 The list items are separated by colons on Unix
1669 and semicolons on OS/2 EMX.
1672 lacks a corresponding feature;
1677 .SS "\fITERMPATH\fP"
1680 does not hold a terminal type description or file name,
1683 checks the contents of
1685 a list of locations,
1688 in which it searches for
1690 terminal type descriptions.
1691 The list items are separated by colons on Unix
1692 and semicolons on OS/2 EMX.
1698 are unset or invalid,
1700 searches for the files
1701 .IR \%/etc/termcap ,
1702 .IR \%/usr/share/misc/termcap ,
1704 .IR \%$HOME/.termcap ,
1706 .SH "ALTERNATE CONFIGURATIONS"
1709 configurations are possible,
1710 determined by the options given to the
1712 script when building the library.
1713 Run the script with the
1715 option to peruse them all.
1716 A few are of particular significance to the application developer
1720 .B \-\-disable\-overwrite
1721 The standard C preprocessor inclusion for the
1723 library is as follows.
1728 .\" The dummy character prevents undesired rewriting of the next line on
1729 .\" installation of the man page.
1730 \fB#\&include <curses.h>\fP
1734 This option is used to avoid file name conflicts between
1738 installation on the system.
1741 is installed disabling overwrite,
1742 it puts its header files in a subdirectory.
1747 .\" The dummy character prevents undesired rewriting of the next line on
1748 .\" installation of the man page.
1749 \fB#\&include <ncurses/curses.h>\fP
1753 Installation also omits a symbolic link that would cause the compiler's
1755 option to link object files with
1757 instead of the system
1761 The directory used by this configuration of
1763 is shown in section \*(``SYNOPSIS\*('' above.
1766 .B \-\-enable\-widec
1767 The configure script renames the library and
1768 (if the \fB\-\-disable\-overwrite\fP option is used)
1769 puts the header files in a different subdirectory.
1770 All of the library names have a \*(``w\*('' appended to them,
1788 You must also enable the wide-character features in the header file
1789 when compiling for the wide-character library
1790 to use the extended (wide-character) functions.
1791 The symbol which enables these features has changed
1792 since X/Open Curses, Issue 4:
1794 Originally, the wide-character feature required the symbol
1795 \fB_XOPEN_SOURCE_EXTENDED\fP
1796 but that was only valid for XPG4 (1996).
1798 Later, that was deemed conflicting with \fB_XOPEN_SOURCE\fP defined to 500.
1801 none of the features in this implementation require a \fB_XOPEN_SOURCE\fP
1802 feature greater than 600.
1803 However, X/Open Curses, Issue 7 (2009) recommends defining it to 700.
1805 Alternatively, you can enable the feature by defining \fBNCURSES_WIDECHAR\fP
1806 with the caveat that some other header file than \fBcurses.h\fP
1807 may require a specific value for \fB_XOPEN_SOURCE\fP
1808 (or a system-specific symbol).
1810 The \fI\%curses.h\fP header file installed for the wide-character
1811 library is designed to be compatible with the non-wide library's header.
1812 Only the size of the \fI\%WINDOW\fP structure differs;
1813 few applications require more than pointers to \fI\%WINDOW\fPs.
1815 If the headers are installed allowing overwrite,
1816 the wide-character library's headers should be installed last,
1817 to allow applications to be built using either library
1818 from the same set of headers.
1821 .B \-\-with\-pthread
1822 The configure script renames the library.
1823 All of the library names have a \*(``t\*('' appended to them
1824 (before any \*(``w\*('' added by \fB\-\-enable\-widec\fP).
1826 The global variables such as \fBLINES\fP are replaced by macros to
1827 allow read-only access.
1828 At the same time, setter-functions are provided to set these values.
1829 Some applications (very few) may require changes to work with this convention.
1837 .B \-\-with\-profile
1838 The shared and normal (static) library names differ by their suffixes,
1839 e.g., \fBlibncurses.so\fP and \fBlibncurses.a\fP.
1840 The debug and profiling libraries add a \*(``_g\*(''
1841 and a \*(``_p\*('' to the root names respectively,
1842 e.g., \fBlibncurses_g.a\fP and \fBlibncurses_p.a\fP.
1844 .B \-\-with\-termlib
1845 Low-level functions which do not depend upon whether the library
1846 supports wide-characters, are provided in the tinfo library.
1848 By doing this, it is possible to share the tinfo library between
1849 wide/normal configurations as well as reduce the size of the library
1850 when only low-level functions are needed.
1852 Those functions are described in these pages:
1855 \fB\%curs_extend\fP(3X) \- miscellaneous \fIcurses\fP extensions
1857 \fB\%curs_inopts\fP(3X) \- \fIcurses\fP input options
1859 \fB\%curs_kernel\fP(3X) \- low-level \fIcurses\fP routines
1861 \fB\%curs_termattrs\fP(3X) \- \fIcurses\fP environment query routines
1863 \fB\%curs_termcap\fP(3X) \- \fIcurses\fP emulation of \fItermcap\fP
1865 \fB\%curs_terminfo\fP(3X) \- \fIcurses\fP interface to \fIterminfo\fP
1868 \fB\%curs_util\fP(3X) \- miscellaneous \fIcurses\fP utility routines
1872 The \fBtrace\fP function normally resides in the debug library,
1873 but it is sometimes useful to configure this in the shared library.
1874 Configure scripts should check for the function's existence rather
1875 than assuming it is always in the debug library.
1879 tab stop initialization database
1882 compiled terminal capability database
1884 X/Open Curses permits most functions it specifies to be made available
1886 .\" See X/Open Curses Issue 4, Version 2, pp. 227-234.
1887 .\" See X/Open Curses Issue 7, pp. 311-318.
1888 \fI\%ncurses\fP does so
1890 for functions that return values via their parameters,
1892 to support obsolete features,
1896 those that move the cursor before another operation),
1899 in a few special cases.
1901 If the standard output file descriptor of an
1903 program is redirected to something that is not a terminal device,
1904 the library writes screen updates to the standard error file descriptor.
1905 This was an undocumented feature of SVr3
1908 See subsection \*(``Header Files\*('' below regarding symbols exposed by
1909 inclusion of \fI\%curses.h\fP.
1912 enables an application to capture mouse events on certain terminals,
1913 including \fI\%xterm\fP(1);
1914 see \fB\%curs_mouse\fP(3X).
1917 provides a means of responding to window resizing events,
1918 as when running in a GUI terminal emulator application such as
1920 see \fB\%resizeterm\fP(3X) and \fB\%wresize\fP(3X).
1923 allows an application to query the terminal for the presence of a wide
1924 variety of special keys;
1925 see \fB\%has_key\fP(3X).
1928 extends the fixed set of function key capabilities specified by X/Open
1929 Curses by allowing the application programmer to define additional key
1932 \fB\%define_key\fP(3X),
1933 \fB\%key_defined\fP(3X),
1934 \fB\%keybound\fP(3X),
1939 can exploit the capabilities of terminals implementing ISO\ 6429/ECMA-48
1940 SGR\ 39 and SGR\ 49 sequences,
1941 which allow an application to reset the terminal to its original
1942 foreground and background colors.
1943 From a user's perspective,
1944 the application is able to draw colored text on a background whose color
1945 is set independently,
1946 providing better control over color contrasts.
1947 See \fB\%default_colors\fP(3X).
1951 application can eschew knowledge of
1955 structure internals,
1956 instead using accessor functions such as
1957 \fB\%is_cbreak\fP(3X) and
1958 \fB\%is_scrollok\fP(3X).
1961 enables an application to direct its output to a printer attached to the
1963 see \fB\%curs_print\fP(3X).
1966 offers \fB\%slk_attr\fP(3X) as a counterpart of \fB\%attr_get\fP(3X) for
1967 soft-label key lines,
1968 and \fB\%extended_slk_color\fP(3X) as a form of \fB\%slk_color\fP(3X)
1969 that can gather color information from them when many colors are
1973 permits modification of \fB\%unctrl\fP(3X)'s behavior;
1974 see \fB\%use_legacy_coding\fP(3X).
1976 Rudimentary support for multi-threaded applications may be available;
1977 see \fBcurs_threads\fP(3X).
1979 Functions that ease the management of multiple screens can be exposed;
1980 see \fBcurs_sp_funcs\fP(3X).
1982 To aid applications to debug their memory usage,
1984 optionally offers functions to more aggressively free memory it
1985 dynamically allocates itself;
1986 see \fBcurs_memleaks\fP(3X).
1988 The library facilitates auditing and troubleshooting of its behavior;
1989 see \fBcurs_trace\fP(3X).
1995 causes it to fall back to reading
1997 if the terminal setup code cannot find a
1999 entry corresponding to
2001 Use of this feature is not recommended,
2002 as it essentially includes an entire
2007 at a cost in memory usage and application launch latency.
2015 Individual man pages indicate where this is the case.
2017 X/Open Curses defines two levels of conformance,
2018 \*(``base\*('' and \*(``enhanced\*(''.
2019 The latter includes several additional features,
2020 such as wide-character and color support.
2022 intends base-level conformance with X/Open Curses,
2023 and supports all features of its enhanced level
2028 Differences between X/Open Curses and
2030 are documented in the \*(``PORTABILITY\*('' sections of applicable man
2032 .SS "Error Checking"
2033 In many cases, X/Open Curses is vague about error conditions,
2034 omitting some of the SVr4 documentation.
2036 Unlike other implementations,
2038 checks pointer parameters,
2042 to ensure that they are not null.
2043 This is done primarily to guard against programmer error.
2044 The standard interface does not provide a way for the library
2045 to tell an application which of several possible errors occurred.
2046 An application that relies on
2048 to check its function parameters for validity limits its portability and
2050 .SS "Padding Differences"
2054 delays embedded in the
2057 .B \%carriage_return
2068 activated corresponding delay bits in the Unix terminal driver.
2070 performs all padding by sending NUL bytes to the device.
2071 This method is slightly more expensive,
2072 but narrows the interface to the Unix kernel significantly and
2073 correspondingly increases the package's portability.
2077 itself includes the header files
2082 X/Open Curses has more to say,
2087 may make visible all symbols from the headers
2095 but does not finish the story.
2096 A more complete account follows.
2111 from an internal header file
2114 \*(``ext\*('' abbreviated \*(``externs\*(''.
2116 The implementations of
2120 used undocumented internal functions of the standard I/O library
2135 because its function prototype employs the
2148 X/Open Curses specifies all three of these functions.
2152 and X/Open Curses do not require the developer to include
2156 Both document use of
2167 X/Open Curses and SVr4
2169 are inconsistent with respect to
2172 As noted in \fBcurs_util\fP(3X),
2180 X/Open Curses's comments about
2184 may refer to HP-UX and AIX.
2214 X/Open Curses says that
2219 but does not require it to do so.
2221 Some programs use functions declared in both
2225 and must include both header files in the same module.
2226 Very old versions of AIX
2228 required inclusion of
2233 The header files supplied by
2235 include the standard library headers required for its declarations,
2238 own header files can be included in any order.
2239 But for portability,
2245 X/Open Curses says \*(``may make visible\*('' because including a header
2246 file does not necessarily make visible all of the symbols in it
2254 .B may \" bold to contrast with preceding italic
2257 if the proper symbol is defined,
2260 is configured for wide-character support.
2265 .B may \" bold for consistency in this paragraph
2266 be made visible depending on the value of the
2270 X/Open Curses mandates an application's inclusion of one standard C
2271 library header in a special case:
2275 to prototype the functions
2279 (as well as the obsolete
2283 Each of these takes a variadic argument list,
2287 like that of \fI\%printf\fP(3).
2292 the two obsolete functions,
2293 and X/Open Curses the others.
2297 provided for the possibility that an application might include either
2301 These represented contrasting approaches to handling variadic
2303 The older interface,
2306 .I char \" V7, 32V, System III, 3BSD
2307 for variadic functions'
2311 the list acquired its own standard data type,
2315 empowering the compiler to check the types of a function call's actual
2316 parameters against the formal ones declared in its prototype.
2318 No conforming implementations of X/Open Curses require an application
2323 because they either have allowed for a special type,
2329 themselves to provide a portable interface.
2338 \fB\%curs_variables\fP(3X),
2339 \fB\%terminfo\fP(5),
2340 \fB\%user_caps\fP(5)