]> ncurses.scripts.mit.edu Git - ncurses.git/blob - man/ncurses.3x
60379641415f4bea860003a37477589f12c99535
[ncurses.git] / man / ncurses.3x
1 '\" t
2 .\"***************************************************************************
3 .\" Copyright 2018-2023,2024 Thomas E. Dickey                                *
4 .\" Copyright 1998-2015,2017 Free Software Foundation, Inc.                  *
5 .\"                                                                          *
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:                 *
13 .\"                                                                          *
14 .\" The above copyright notice and this permission notice shall be included  *
15 .\" in all copies or substantial portions of the Software.                   *
16 .\"                                                                          *
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.                               *
24 .\"                                                                          *
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       *
28 .\" authorization.                                                           *
29 .\"***************************************************************************
30 .\"
31 .\" $Id: ncurses.3x,v 1.215 2024/05/11 20:39:53 tom Exp $
32 .TH ncurses 3X 2024-05-11 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls"
33 .ie \n(.g \{\
34 .ds `` \(lq
35 .ds '' \(rq
36 .\}
37 .el \{\
38 .ie t .ds `` ``
39 .el   .ds `` ""
40 .ie t .ds '' ''
41 .el   .ds '' ""
42 .\}
43 .
44 .de bP
45 .ie n  .IP \(bu 4
46 .el    .IP \(bu 2
47 ..
48 .
49 .\" Add supplementary paragraph tag on its own line after TP.
50 .\" Adapted from TQ (which would produce mandoc warnings).
51 .de tQ
52 .  br
53 .  ns
54 .  TP
55 ..
56 .
57 .SH NAME
58 \fB\%ncurses\fP \-
59 character-cell terminal interface with optimized output
60 .SH SYNOPSIS
61 .nf
62 \fB#include <curses.h>
63 .fi
64 .SH DESCRIPTION
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
68 screen updates.
69 .I \%ncurses
70 replaces the
71 .I curses
72 libraries from
73 System V Release 4 Unix (\*(``SVr4\*('')
74 and
75 4.4BSD Unix,
76 the development of which ceased in the 1990s.
77 This document describes
78 .I \%ncurses
79 version @NCURSES_MAJOR@.@NCURSES_MINOR@
80 (patch @NCURSES_PATCH@).
81 .PP
82 .I \%ncurses
83 permits control of the terminal screen's contents;
84 abstraction and subdivision thereof with
85 .I windows
86 and
87 .IR pads ;
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
93 .I "soft label"
94 keys;
95 access to the
96 .I \%term\%info
97 terminal capability database;
98 a
99 .I termcap
100 compatibility interface;
101 and an abstraction of the system's API for manipulating the terminal
102 (such as \fI\%termios\fP(3)).
103 .PP
104 .I \%ncurses
105 implements the interface described by X/Open Curses Issue\ 7.
106 In many behavioral details not standardized by X/Open,
107 .I \%ncurses
108 emulates the
109 .I curses
110 library of SVr4 and provides numerous useful extensions.
111 .PP
112 .I \%ncurses
113 man pages employ several sections to clarify matters of usage and
114 interoperability with other
115 .I curses
116 implementations.
117 .bP
118 \*(``NOTES\*('' describes issues and caveats of which any user of the
119 .I \%ncurses
120 API should be aware,
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 that will be
125 significant to the programmer but which are not standardized.
126 .bP
127 \*(``EXTENSIONS\*('' presents
128 .I \%ncurses
129 innovations beyond the X/Open Curses standard and/or the SVr4
130 .I curses
131 implementation.
132 They are termed
133 .I extensions
134 to indicate that they cannot be implemented solely by using the library
135 API,
136 but require access to the library's internal state.
137 .bP
138 \*(``PORTABILITY\*('' discusses matters
139 (beyond the exercise of extensions)
140 that should be considered when writing to a
141 .I curses
142 standard,
143 or for multiple implementations.
144 .bP
145 \*(``HISTORY\*('' examines points of detail in
146 .I \%ncurses
147 and other
148 .I curses
149 implementations over the decades of their development,
150 particularly where precedent or inertia have frustrated better design
151 (and,
152 in a few cases,
153 where such inertia has been overcome).
154 .PP
155 A
156 .I curses
157 application must be linked with the library;
158 use the
159 .B \-lncurses
160 option to your compiler or linker.
161 A debugging version of the library may be available;
162 if so,
163 link with it using
164 .BR \-lncurses_g .
165 (Your system integrator may have installed these libraries such that you
166 can use the options
167 .B \-lcurses
168 and
169 .BR \-lcurses_g ,
170 respectively.)
171 The
172 .I \%ncurses_g
173 library generates trace logs
174 (in a file called
175 .I \%trace
176 in the current directory)
177 that describe
178 .I \%ncurses
179 actions.
180 See section \*(``ALTERNATE CONFIGURATIONS\*('' below.
181 .SS "Application Structure"
182 A
183 .I curses
184 application uses information from the system locale;
185 \fI\%setlocale\fP(3) prepares it for
186 .I curses
187 library calls.
188 .PP
189 .RS 4
190 .EX
191 setlocale(LC_ALL, "");
192 .EE
193 .RE
194 .PP
195 If the locale is not thus initialized,
196 the library assumes that characters are printable as in ISO\ 8859-1,
197 to work with certain legacy programs.
198 You should initialize the locale;
199 do not expect consistent behavior from the library when the locale has
200 not been set up.
201 .PP
202 \fB\%initscr\fP(3X) or \fB\%newterm\fP(3X)
203 must be called to initialize
204 .I curses
205 before use of any functions that deal with windows and screens.
206 .PP
207 To get character-at-a-time input without echoing\(emmost interactive,
208 screen-oriented programs want this\(emuse the following sequence.
209 .PP
210 .RS 4
211 .EX
212 initscr(); cbreak(); noecho();
213 .EE
214 .RE
215 .PP
216 Most applications perform further setup as follows.
217 .PP
218 .RS 4
219 .EX
220 intrflush(stdscr, FALSE);
221 keypad(stdscr, TRUE);
222 .EE
223 .RE
224 .PP
225 A
226 .I curses
227 program then often enters an event loop of some sort.
228 Call \fB\%endwin\fP(3X) before exiting.
229 .SS Overview
230 A
231 .I curses
232 library abstracts the terminal screen by representing all or part of it
233 as a
234 .I \%WINDOW
235 data structure.
236 A
237 .I window
238 is a rectangular grid of character cells,
239 addressed by row and column coordinates
240 .RI ( y ,
241 .IR x ),
242 with the upper left corner as (0, 0).
243 A window called
244 .BR \%stdscr ,
245 the same size as the terminal screen,
246 is always available.
247 Create others with \fB\%newwin\fP(3X).
248 .PP
249 A
250 .I curses
251 library does not manage overlapping windows
252 (but see below).
253 You can either use
254 .B \%stdscr
255 to manage one screen-filling window,
256 or tile the screen into non-overlapping windows and not use
257 .B \%stdscr
258 at all.
259 Mixing the two approaches will result in unpredictable and undesired
260 effects.
261 .PP
262 Functions permit manipulation of a window and the
263 .I cursor
264 identifying the cell within it at which the next output operation will
265 occur.
266 Among those,
267 the most basic are \fB\%move\fP(3X) and \fB\%addch\fP(3X):
268 these place the cursor and write a character to
269 .BR \%stdscr ,
270 respectively.
271 .PP
272 Frequent changes to the terminal screen can cause unpleasant flicker or
273 inefficient use of the communication channel to the device,
274 so as a rule the library does not update it automatically.
275 Therefore,
276 after using
277 .I curses
278 functions to accumulate a set of desired updates that make sense to
279 present together,
280 call \fB\%refresh\fP(3X) to tell the library to make the user's screen
281 look like \fBstdscr\fP.
282 The library
283 .\" X/Open Curses Issue 7 assumes some optimization will be done, but
284 .\" does not mandate it in any way.
285 .I optimizes
286 its output by computing a minimal volume of operations to mutate the
287 screen from its state at the previous refresh to the new one.
288 Effective optimization demands accurate information about the terminal
289 device:
290 the management of such information is the province of the
291 \fB\%terminfo\fP(3X) API,
292 a feature of every standard
293 .I curses
294 implementation.
295 .PP
296 Special windows called
297 .I pads
298 may also be manipulated.
299 These are not constrained to the size of the terminal screen and their
300 contents need not be completely displayed.
301 See \fB\%curs_pad\fP(3X).
302 .PP
303 Many terminals support configuration of character cell foreground and
304 background colors as well as rendering
305 .I attributes ,
306 which cause characters to show up in such modes as
307 boldfaced,
308 underlined,
309 or in reverse video.
310 See \fB\%curs_attr\fP(3X).
311 .PP
312 .I curses
313 predefines constants for a small set of forms-drawing graphics
314 corresponding to the DEC Alternate Character Set (ACS),
315 a feature of VT100 and other terminals.
316 See \fB\%addch\fP(3X).
317 .PP
318 .I curses
319 is implemented using the operating system's terminal driver;
320 key events are received not as scan codes but as byte sequences.
321 Graphical keycaps
322 (alphanumeric and punctuation keys,
323 and the space)
324 appear as-is.
325 Everything else,
326 including the tab,
327 enter/return,
328 keypad,
329 arrow,
330 and function keys,
331 appears as a control character or a multibyte
332 .I "escape sequence."
333 .I curses
334 translates the latter into unique
335 .I "key codes."
336 See \fB\%getch\fP(3X).
337 .PP
338 .I \%ncurses
339 provides reimplementations of the SVr4 \fBpanel\fP(3X), \fBform\fP(3X),
340 and \fBmenu\fP(3X) libraries;
341 they permit overlapping windows and ease construction of user interfaces
342 with
343 .IR curses .
344 .SS "Initialization"
345 The selection of an appropriate value of
346 .I TERM
347 in the process environment is essential to correct
348 .I curses
349 and
350 .I \%term\%info
351 library operation.
352 A well-configured system selects a correct
353 .I TERM
354 value automatically;
355 \fB\%tset\fP(1) may assist with troubleshooting exotic situations.
356 .PP
357 If you change the terminal type,
358 export the shell's
359 .I TERM
360 variable,
361 then run \fB\%tset\fP(1) or the
362 .RB \*(`` "@TPUT@ init" \*(''
363 command.
364 See subsection \*(``Tabs and Initialization\*('' of \fB\%terminfo\fP(5).
365 .PP
366 If the environment variables
367 .I \%LINES
368 and
369 .I \%COLUMNS
370 are set,
371 or if the
372 .I curses
373 program is executing in a graphical windowing environment,
374 the information obtained thence overrides that obtained by
375 .IR \%term\%info .
376 An
377 .I \%ncurses
378 extension supports resizable terminals;
379 see \fB\%wresize\fP(3X).
380 .PP
381 If the environment variable
382 .I \%TERMINFO
383 is defined,
384 a
385 .I curses
386 program checks first for a terminal type description in the location it
387 identifies.
388 .I \%TERMINFO
389 is useful for developing type descriptions or when write permission to
390 .I \%@TERMINFO@
391 is not available.
392 .PP
393 See section \*(``ENVIRONMENT\*('' below.
394 .SS "Naming Conventions"
395 .I curses
396 offers many functions in variant forms using a regular set of
397 alternatives to the name of an elemental one.
398 Those prefixed with \*(``w\*('' require a
399 .I \%WINDOW
400 pointer argument;
401 those with a \*(``mv\*('' prefix first perform cursor movement using
402 \fB\%wmove\fP(3X);
403 a \*(``mvw\*('' prefix indicates both.
404 The \*(``w\*('' function is typically the elemental one;
405 the removal of this prefix usually indicates operation on
406 .BR \%stdscr .
407 .PP
408 Four functions prefixed with \*(``p\*('' require a pad argument.
409 .PP
410 In function synopses,
411 .I \%ncurses
412 man pages apply the following names to parameters.
413 .PP
414 .TS
415 center;
416 Li L.
417 bf      a \fIbool\fP (\fBTRUE\fP or \fBFALSE\fP)
418 c       a \fIchar\fP or \fIint\fP
419 ch      a \fIchtype\fP
420 wc      a \fIwchar_t\fP or \fIwint_t\fP
421 wch     a \fIcchar_t\fP
422 win     pointer to a \fIWINDOW\fP
423 pad     pointer to a \fIWINDOW\fP that is a pad
424 .TE
425 .SS "Wide and Non-wide Character Configurations"
426 This man page primarily surveys functions that appear in any
427 configuration of the library.
428 There are two common configurations;
429 see section \*(``ALTERNATE CONFIGURATIONS\*('' below.
430 .TP 10 \" "ncursesw" + 2n
431 .I \%ncurses
432 is the library in its \*(``non-wide\*('' configuration,
433 handling only eight-bit characters.
434 It stores a character combined with attributes and a color pair in a
435 .I \%chtype
436 datum,
437 which is often an alias of
438 .IR int .
439 A string of
440 .I curses
441 characters is similar to a C
442 .I char
443 string;
444 a
445 .I chtype
446 string ends with an integral
447 .BR 0 ","
448 the null
449 .I curses
450 character.
451 .IP
452 Attributes and a color pair selection
453 (with no corresponding character)
454 can be stored in variables of
455 .I \%chtype
456 or
457 .I \%attr_t
458 type.
459 In either case,
460 they are accessed via an integral bit mask.
461 .IP
462 Each cell of a
463 .I \%WINDOW
464 is stored as a
465 .IR \%chtype .
466 .TP 10
467 .I \%ncursesw
468 is the library in its \*(``wide\*('' configuration,
469 which handles character encodings requiring a larger data type than
470 .I \%char
471 (a byte-sized type)
472 can represent.
473 It adds about one third more calls using additional data types that
474 can store such
475 .I multibyte
476 characters.
477 .RS 10 \" same as foregoing tag width
478 .TP 9 \" "cchar_t" + 2n
479 .I \%cchar_t
480 corresponds to the non-wide configuration's
481 .IR \%chtype .
482 It always a structure type,
483 because it stores more data than fit into a standard scalar type.
484 A character code may not be representable as a
485 .IR \%char ,
486 and moreover more than one character may occupy a cell
487 (as with accent marks and other diacritics).
488 Each character is of type
489 .IR \%wchar_t ;
490 a complex character contains one spacing character and zero or more
491 non-spacing characters
492 (see below).
493 A string of complex characters ends with a
494 .I \%cchar_t
495 whose
496 .I \%wchar_t
497 member is the null wide character.
498 Attributes and a color pair selection are stored in separate fields of
499 the structure,
500 not combined into an integer as in
501 .IR \%chtype .
502 .PP
503 Each cell of a
504 .I \%WINDOW
505 is stored as a
506 .IR \%cchar_t .
507 .PP
508 \fB\%setcchar\fP(3X) and \fB\%getcchar\fP(3X)
509 store and retrieve
510 .I \%cchar_t
511 data.
512 The wide library API of
513 .I \%ncurses
514 depends on two data types standardized by ISO C95.
515 .TP 9
516 .I \%wchar_t
517 stores a wide character.
518 Like
519 .IR \%chtype ,
520 it may be an alias of
521 .IR int .
522 Depending on the character encoding,
523 a wide character may be
524 .IR spacing ,
525 meaning that it occupies a character cell by itself and typically
526 accompanies cursor advancement,
527 or
528 .IR non-spacing ,
529 meaning that it occupies the same cell as a spacing character,
530 is often regarded as a \*(``modifier\*('' of the base glyph with which
531 it combines,
532 and typically does not advance the cursor.
533 .TP 9
534 .I \%wint_t
535 can store a
536 .I \%wchar_t
537 or the constant
538 .BR \%WEOF ,
539 analogously to the
540 .IR int -sized
541 character manipulation functions of ISO C and its constant
542 .BR \%EOF .
543 .RE
544 .IP
545 The wide library provides additional functions that complement those in
546 the non-wide library where the size of the underlying character type is
547 significant.
548 A somewhat regular naming convention relates many of the wide variants
549 to their non-wide counterparts;
550 where a non-wide function name contains \*(``ch\*('' or \*(``str\*('',
551 prefix it with \*(``_w\*('' to obtain the wide counterpart.
552 For example,
553 \fB\%waddch\fP becomes \fB\%wadd_wch\fP.
554 (Exceptions that add only \*(``w\*('' comprise
555 .BR \%addwstr ,
556 .BR \%inwstr ,
557 and their variants.)
558 .IP
559 This convention is inapplicable to some non-wide function names,
560 so other transformations are used for the wide configuration:
561 the window background management function \*(``bkgd\*('' becomes
562 \*(``bkgrnd\*('';
563 the window border-drawing and -clearing functions are suffixed with
564 \*(``_set\*('';
565 and character attribute manipulation functions like
566 \*(``attron\*('' become \*(``attr_on\*(''.
567 .\"
568 .SS "Function Name Index"
569 The following table lists the
570 .I curses
571 functions provided in the non-wide and wide APIs and the corresponding
572 man pages that describe them.
573 Those flagged with \*(``*\*(''
574 are
575 .IR \%ncurses "-specific,"
576 neither described by X/Open Curses nor present in SVr4.
577 .PP
578 .TS
579 center tab(/);
580 l l .
581 \f(BIcurses\fP Function Name/Man Page
582 _
583 COLOR_PAIR/\fBcurs_color\fP(3X)
584 PAIR_NUMBER/\fBcurs_color\fP(3X)
585 add_wch/\fBcurs_add_wch\fP(3X)
586 add_wchnstr/\fBcurs_add_wchstr\fP(3X)
587 add_wchstr/\fBcurs_add_wchstr\fP(3X)
588 addch/\fBcurs_addch\fP(3X)
589 addchnstr/\fBcurs_addchstr\fP(3X)
590 addchstr/\fBcurs_addchstr\fP(3X)
591 addnstr/\fBcurs_addstr\fP(3X)
592 addnwstr/\fBcurs_addwstr\fP(3X)
593 addstr/\fBcurs_addstr\fP(3X)
594 addwstr/\fBcurs_addwstr\fP(3X)
595 alloc_pair/\fBnew_pair\fP(3X)*
596 assume_default_colors/\fBdefault_colors\fP(3X)*
597 attr_get/\fBcurs_attr\fP(3X)
598 attr_off/\fBcurs_attr\fP(3X)
599 attr_on/\fBcurs_attr\fP(3X)
600 attr_set/\fBcurs_attr\fP(3X)
601 attroff/\fBcurs_attr\fP(3X)
602 attron/\fBcurs_attr\fP(3X)
603 attrset/\fBcurs_attr\fP(3X)
604 baudrate/\fBcurs_termattrs\fP(3X)
605 beep/\fBcurs_beep\fP(3X)
606 bkgd/\fBcurs_bkgd\fP(3X)
607 bkgdset/\fBcurs_bkgd\fP(3X)
608 bkgrnd/\fBcurs_bkgrnd\fP(3X)
609 bkgrndset/\fBcurs_bkgrnd\fP(3X)
610 border/\fBcurs_border\fP(3X)
611 border_set/\fBcurs_border_set\fP(3X)
612 box/\fBcurs_border\fP(3X)
613 box_set/\fBcurs_border_set\fP(3X)
614 can_change_color/\fBcurs_color\fP(3X)
615 cbreak/\fBcurs_inopts\fP(3X)
616 chgat/\fBcurs_attr\fP(3X)
617 clear/\fBcurs_clear\fP(3X)
618 clearok/\fBcurs_outopts\fP(3X)
619 clrtobot/\fBcurs_clear\fP(3X)
620 clrtoeol/\fBcurs_clear\fP(3X)
621 color_content/\fBcurs_color\fP(3X)
622 color_set/\fBcurs_attr\fP(3X)
623 copywin/\fBcurs_overlay\fP(3X)
624 curs_set/\fBcurs_kernel\fP(3X)
625 curses_trace/\fBcurs_trace\fP(3X)*
626 curses_version/\fBcurs_extend\fP(3X)*
627 def_prog_mode/\fBcurs_kernel\fP(3X)
628 def_shell_mode/\fBcurs_kernel\fP(3X)
629 define_key/\fBdefine_key\fP(3X)*
630 del_curterm/\fBcurs_terminfo\fP(3X)
631 delay_output/\fBcurs_util\fP(3X)
632 delch/\fBcurs_delch\fP(3X)
633 deleteln/\fBcurs_deleteln\fP(3X)
634 delscreen/\fBcurs_initscr\fP(3X)
635 delwin/\fBcurs_window\fP(3X)
636 derwin/\fBcurs_window\fP(3X)
637 doupdate/\fBcurs_refresh\fP(3X)
638 dupwin/\fBcurs_window\fP(3X)
639 echo/\fBcurs_inopts\fP(3X)
640 echo_wchar/\fBcurs_add_wch\fP(3X)
641 echochar/\fBcurs_addch\fP(3X)
642 endwin/\fBcurs_initscr\fP(3X)
643 erase/\fBcurs_clear\fP(3X)
644 erasechar/\fBcurs_termattrs\fP(3X)
645 erasewchar/\fBcurs_termattrs\fP(3X)
646 exit_curses/\fBcurs_memleaks\fP(3X)*
647 exit_terminfo/\fBcurs_memleaks\fP(3X)*
648 extended_color_content/\fBcurs_color\fP(3X)*
649 extended_pair_content/\fBcurs_color\fP(3X)*
650 extended_slk_color/\fBcurs_slk\fP(3X)*
651 filter/\fBcurs_util\fP(3X)
652 find_pair/\fBnew_pair\fP(3X)*
653 flash/\fBcurs_beep\fP(3X)
654 flushinp/\fBcurs_util\fP(3X)
655 free_pair/\fBnew_pair\fP(3X)*
656 get_escdelay/\fBcurs_threads\fP(3X)*
657 get_wch/\fBcurs_get_wch\fP(3X)
658 get_wstr/\fBcurs_get_wstr\fP(3X)
659 getattrs/\fBcurs_attr\fP(3X)
660 getbegx/\fBcurs_legacy\fP(3X)*
661 getbegy/\fBcurs_legacy\fP(3X)*
662 getbegyx/\fBcurs_getyx\fP(3X)
663 getbkgd/\fBcurs_bkgd\fP(3X)
664 getbkgrnd/\fBcurs_bkgrnd\fP(3X)
665 getcchar/\fBcurs_getcchar\fP(3X)
666 getch/\fBcurs_getch\fP(3X)
667 getcurx/\fBcurs_legacy\fP(3X)*
668 getcury/\fBcurs_legacy\fP(3X)*
669 getmaxx/\fBcurs_legacy\fP(3X)*
670 getmaxy/\fBcurs_legacy\fP(3X)*
671 getmaxyx/\fBcurs_getyx\fP(3X)
672 getmouse/\fBcurs_mouse\fP(3X)*
673 getn_wstr/\fBcurs_get_wstr\fP(3X)
674 getnstr/\fBcurs_getstr\fP(3X)
675 getparx/\fBcurs_legacy\fP(3X)*
676 getpary/\fBcurs_legacy\fP(3X)*
677 getparyx/\fBcurs_getyx\fP(3X)
678 getstr/\fBcurs_getstr\fP(3X)
679 getsyx/\fBcurs_kernel\fP(3X)
680 getwin/\fBcurs_util\fP(3X)
681 getyx/\fBcurs_getyx\fP(3X)
682 halfdelay/\fBcurs_inopts\fP(3X)
683 has_colors/\fBcurs_color\fP(3X)
684 has_ic/\fBcurs_termattrs\fP(3X)
685 has_il/\fBcurs_termattrs\fP(3X)
686 has_key/\fBcurs_getch\fP(3X)*
687 has_mouse/\fBcurs_mouse\fP(3X)*
688 hline/\fBcurs_border\fP(3X)
689 hline_set/\fBcurs_border_set\fP(3X)
690 idcok/\fBcurs_outopts\fP(3X)
691 idlok/\fBcurs_outopts\fP(3X)
692 immedok/\fBcurs_outopts\fP(3X)
693 in_wch/\fBcurs_in_wch\fP(3X)
694 in_wchnstr/\fBcurs_in_wchstr\fP(3X)
695 in_wchstr/\fBcurs_in_wchstr\fP(3X)
696 inch/\fBcurs_inch\fP(3X)
697 inchnstr/\fBcurs_inchstr\fP(3X)
698 inchstr/\fBcurs_inchstr\fP(3X)
699 init_color/\fBcurs_color\fP(3X)
700 init_extended_color/\fBcurs_color\fP(3X)*
701 init_extended_pair/\fBcurs_color\fP(3X)*
702 init_pair/\fBcurs_color\fP(3X)
703 initscr/\fBcurs_initscr\fP(3X)
704 innstr/\fBcurs_instr\fP(3X)
705 innwstr/\fBcurs_inwstr\fP(3X)
706 ins_nwstr/\fBcurs_ins_wstr\fP(3X)
707 ins_wch/\fBcurs_ins_wch\fP(3X)
708 ins_wstr/\fBcurs_ins_wstr\fP(3X)
709 insch/\fBcurs_insch\fP(3X)
710 insdelln/\fBcurs_deleteln\fP(3X)
711 insertln/\fBcurs_deleteln\fP(3X)
712 insnstr/\fBcurs_insstr\fP(3X)
713 insstr/\fBcurs_insstr\fP(3X)
714 instr/\fBcurs_instr\fP(3X)
715 intrflush/\fBcurs_inopts\fP(3X)
716 inwstr/\fBcurs_inwstr\fP(3X)
717 is_cbreak/\fBcurs_inopts\fP(3X)*
718 is_cleared/\fBcurs_opaque\fP(3X)*
719 is_echo/\fBcurs_inopts\fP(3X)*
720 is_idcok/\fBcurs_opaque\fP(3X)*
721 is_idlok/\fBcurs_opaque\fP(3X)*
722 is_immedok/\fBcurs_opaque\fP(3X)*
723 is_keypad/\fBcurs_opaque\fP(3X)*
724 is_leaveok/\fBcurs_opaque\fP(3X)*
725 is_linetouched/\fBcurs_touch\fP(3X)
726 is_nl/\fBcurs_inopts\fP(3X)*
727 is_nodelay/\fBcurs_opaque\fP(3X)*
728 is_notimeout/\fBcurs_opaque\fP(3X)*
729 is_pad/\fBcurs_opaque\fP(3X)*
730 is_raw/\fBcurs_inopts\fP(3X)*
731 is_scrollok/\fBcurs_opaque\fP(3X)*
732 is_subwin/\fBcurs_opaque\fP(3X)*
733 is_syncok/\fBcurs_opaque\fP(3X)*
734 is_term_resized/\fBresizeterm\fP(3X)*
735 is_wintouched/\fBcurs_touch\fP(3X)
736 isendwin/\fBcurs_initscr\fP(3X)
737 key_defined/\fBkey_defined\fP(3X)*
738 key_name/\fBcurs_util\fP(3X)
739 keybound/\fBkeybound\fP(3X)*
740 keyname/\fBcurs_util\fP(3X)
741 keyok/\fBkeyok\fP(3X)*
742 keypad/\fBcurs_inopts\fP(3X)
743 killchar/\fBcurs_termattrs\fP(3X)
744 killwchar/\fBcurs_termattrs\fP(3X)
745 leaveok/\fBcurs_outopts\fP(3X)
746 longname/\fBcurs_termattrs\fP(3X)
747 mcprint/\fBcurs_print\fP(3X)*
748 meta/\fBcurs_inopts\fP(3X)
749 mouse_trafo/\fBcurs_mouse\fP(3X)*
750 mouseinterval/\fBcurs_mouse\fP(3X)*
751 mousemask/\fBcurs_mouse\fP(3X)*
752 move/\fBcurs_move\fP(3X)
753 mvadd_wch/\fBcurs_add_wch\fP(3X)
754 mvadd_wchnstr/\fBcurs_add_wchstr\fP(3X)
755 mvadd_wchstr/\fBcurs_add_wchstr\fP(3X)
756 mvaddch/\fBcurs_addch\fP(3X)
757 mvaddchnstr/\fBcurs_addchstr\fP(3X)
758 mvaddchstr/\fBcurs_addchstr\fP(3X)
759 mvaddnstr/\fBcurs_addstr\fP(3X)
760 mvaddnwstr/\fBcurs_addwstr\fP(3X)
761 mvaddstr/\fBcurs_addstr\fP(3X)
762 mvaddwstr/\fBcurs_addwstr\fP(3X)
763 mvchgat/\fBcurs_attr\fP(3X)
764 mvcur/\fBcurs_terminfo\fP(3X)
765 mvdelch/\fBcurs_delch\fP(3X)
766 mvderwin/\fBcurs_window\fP(3X)
767 mvget_wch/\fBcurs_get_wch\fP(3X)
768 mvget_wstr/\fBcurs_get_wstr\fP(3X)
769 mvgetch/\fBcurs_getch\fP(3X)
770 mvgetn_wstr/\fBcurs_get_wstr\fP(3X)
771 mvgetnstr/\fBcurs_getstr\fP(3X)
772 mvgetstr/\fBcurs_getstr\fP(3X)
773 mvhline/\fBcurs_border\fP(3X)
774 mvhline_set/\fBcurs_border_set\fP(3X)
775 mvin_wch/\fBcurs_in_wch\fP(3X)
776 mvin_wchnstr/\fBcurs_in_wchstr\fP(3X)
777 mvin_wchstr/\fBcurs_in_wchstr\fP(3X)
778 mvinch/\fBcurs_inch\fP(3X)
779 mvinchnstr/\fBcurs_inchstr\fP(3X)
780 mvinchstr/\fBcurs_inchstr\fP(3X)
781 mvinnstr/\fBcurs_instr\fP(3X)
782 mvinnwstr/\fBcurs_inwstr\fP(3X)
783 mvins_nwstr/\fBcurs_ins_wstr\fP(3X)
784 mvins_wch/\fBcurs_ins_wch\fP(3X)
785 mvins_wstr/\fBcurs_ins_wstr\fP(3X)
786 mvinsch/\fBcurs_insch\fP(3X)
787 mvinsnstr/\fBcurs_insstr\fP(3X)
788 mvinsstr/\fBcurs_insstr\fP(3X)
789 mvinstr/\fBcurs_instr\fP(3X)
790 mvinwstr/\fBcurs_inwstr\fP(3X)
791 mvprintw/\fBcurs_printw\fP(3X)
792 mvscanw/\fBcurs_scanw\fP(3X)
793 mvvline/\fBcurs_border\fP(3X)
794 mvvline_set/\fBcurs_border_set\fP(3X)
795 mvwadd_wch/\fBcurs_add_wch\fP(3X)
796 mvwadd_wchnstr/\fBcurs_add_wchstr\fP(3X)
797 mvwadd_wchstr/\fBcurs_add_wchstr\fP(3X)
798 mvwaddch/\fBcurs_addch\fP(3X)
799 mvwaddchnstr/\fBcurs_addchstr\fP(3X)
800 mvwaddchstr/\fBcurs_addchstr\fP(3X)
801 mvwaddnstr/\fBcurs_addstr\fP(3X)
802 mvwaddnwstr/\fBcurs_addwstr\fP(3X)
803 mvwaddstr/\fBcurs_addstr\fP(3X)
804 mvwaddwstr/\fBcurs_addwstr\fP(3X)
805 mvwchgat/\fBcurs_attr\fP(3X)
806 mvwdelch/\fBcurs_delch\fP(3X)
807 mvwget_wch/\fBcurs_get_wch\fP(3X)
808 mvwget_wstr/\fBcurs_get_wstr\fP(3X)
809 mvwgetch/\fBcurs_getch\fP(3X)
810 mvwgetn_wstr/\fBcurs_get_wstr\fP(3X)
811 mvwgetnstr/\fBcurs_getstr\fP(3X)
812 mvwgetstr/\fBcurs_getstr\fP(3X)
813 mvwhline/\fBcurs_border\fP(3X)
814 mvwhline_set/\fBcurs_border_set\fP(3X)
815 mvwin/\fBcurs_window\fP(3X)
816 mvwin_wch/\fBcurs_in_wch\fP(3X)
817 mvwin_wchnstr/\fBcurs_in_wchstr\fP(3X)
818 mvwin_wchstr/\fBcurs_in_wchstr\fP(3X)
819 mvwinch/\fBcurs_inch\fP(3X)
820 mvwinchnstr/\fBcurs_inchstr\fP(3X)
821 mvwinchstr/\fBcurs_inchstr\fP(3X)
822 mvwinnstr/\fBcurs_instr\fP(3X)
823 mvwinnwstr/\fBcurs_inwstr\fP(3X)
824 mvwins_nwstr/\fBcurs_ins_wstr\fP(3X)
825 mvwins_wch/\fBcurs_ins_wch\fP(3X)
826 mvwins_wstr/\fBcurs_ins_wstr\fP(3X)
827 mvwinsch/\fBcurs_insch\fP(3X)
828 mvwinsnstr/\fBcurs_insstr\fP(3X)
829 mvwinsstr/\fBcurs_insstr\fP(3X)
830 mvwinstr/\fBcurs_instr\fP(3X)
831 mvwinwstr/\fBcurs_inwstr\fP(3X)
832 mvwprintw/\fBcurs_printw\fP(3X)
833 mvwscanw/\fBcurs_scanw\fP(3X)
834 mvwvline/\fBcurs_border\fP(3X)
835 mvwvline_set/\fBcurs_border_set\fP(3X)
836 napms/\fBcurs_kernel\fP(3X)
837 newpad/\fBcurs_pad\fP(3X)
838 newterm/\fBcurs_initscr\fP(3X)
839 newwin/\fBcurs_window\fP(3X)
840 nl/\fBcurs_inopts\fP(3X)
841 nocbreak/\fBcurs_inopts\fP(3X)
842 nodelay/\fBcurs_inopts\fP(3X)
843 noecho/\fBcurs_inopts\fP(3X)
844 nofilter/\fBcurs_util\fP(3X)*
845 nonl/\fBcurs_inopts\fP(3X)
846 noqiflush/\fBcurs_inopts\fP(3X)
847 noraw/\fBcurs_inopts\fP(3X)
848 notimeout/\fBcurs_inopts\fP(3X)
849 overlay/\fBcurs_overlay\fP(3X)
850 overwrite/\fBcurs_overlay\fP(3X)
851 pair_content/\fBcurs_color\fP(3X)
852 pecho_wchar/\fBcurs_pad\fP(3X)
853 pechochar/\fBcurs_pad\fP(3X)
854 pnoutrefresh/\fBcurs_pad\fP(3X)
855 prefresh/\fBcurs_pad\fP(3X)
856 printw/\fBcurs_printw\fP(3X)
857 putp/\fBcurs_terminfo\fP(3X)
858 putwin/\fBcurs_util\fP(3X)
859 qiflush/\fBcurs_inopts\fP(3X)
860 raw/\fBcurs_inopts\fP(3X)
861 redrawwin/\fBcurs_refresh\fP(3X)
862 refresh/\fBcurs_refresh\fP(3X)
863 reset_color_pairs/\fBcurs_color\fP(3X)*
864 reset_prog_mode/\fBcurs_kernel\fP(3X)
865 reset_shell_mode/\fBcurs_kernel\fP(3X)
866 resetty/\fBcurs_kernel\fP(3X)
867 resize_term/\fBresizeterm\fP(3X)*
868 resizeterm/\fBresizeterm\fP(3X)*
869 restartterm/\fBcurs_terminfo\fP(3X)
870 ripoffline/\fBcurs_kernel\fP(3X)
871 savetty/\fBcurs_kernel\fP(3X)
872 scanw/\fBcurs_scanw\fP(3X)
873 scr_dump/\fBcurs_scr_dump\fP(3X)
874 scr_init/\fBcurs_scr_dump\fP(3X)
875 scr_restore/\fBcurs_scr_dump\fP(3X)
876 scr_set/\fBcurs_scr_dump\fP(3X)
877 scrl/\fBcurs_scroll\fP(3X)
878 scroll/\fBcurs_scroll\fP(3X)
879 scrollok/\fBcurs_outopts\fP(3X)
880 set_curterm/\fBcurs_terminfo\fP(3X)
881 set_escdelay/\fBcurs_threads\fP(3X)*
882 set_tabsize/\fBcurs_threads\fP(3X)*
883 set_term/\fBcurs_initscr\fP(3X)
884 setcchar/\fBcurs_getcchar\fP(3X)
885 setscrreg/\fBcurs_outopts\fP(3X)
886 setsyx/\fBcurs_kernel\fP(3X)
887 setupterm/\fBcurs_terminfo\fP(3X)
888 slk_attr/\fBcurs_slk\fP(3X)*
889 slk_attr_off/\fBcurs_slk\fP(3X)
890 slk_attr_on/\fBcurs_slk\fP(3X)
891 slk_attr_set/\fBcurs_slk\fP(3X)
892 slk_attroff/\fBcurs_slk\fP(3X)
893 slk_attron/\fBcurs_slk\fP(3X)
894 slk_attrset/\fBcurs_slk\fP(3X)
895 slk_clear/\fBcurs_slk\fP(3X)
896 slk_color/\fBcurs_slk\fP(3X)
897 slk_init/\fBcurs_slk\fP(3X)
898 slk_label/\fBcurs_slk\fP(3X)
899 slk_noutrefresh/\fBcurs_slk\fP(3X)
900 slk_refresh/\fBcurs_slk\fP(3X)
901 slk_restore/\fBcurs_slk\fP(3X)
902 slk_set/\fBcurs_slk\fP(3X)
903 slk_touch/\fBcurs_slk\fP(3X)
904 slk_wset/\fBcurs_slk\fP(3X)
905 standend/\fBcurs_attr\fP(3X)
906 standout/\fBcurs_attr\fP(3X)
907 start_color/\fBcurs_color\fP(3X)
908 subpad/\fBcurs_pad\fP(3X)
909 subwin/\fBcurs_window\fP(3X)
910 syncok/\fBcurs_window\fP(3X)
911 term_attrs/\fBcurs_termattrs\fP(3X)
912 termattrs/\fBcurs_termattrs\fP(3X)
913 termname/\fBcurs_termattrs\fP(3X)
914 tgetent/\fBcurs_termcap\fP(3X)
915 tgetflag/\fBcurs_termcap\fP(3X)
916 tgetnum/\fBcurs_termcap\fP(3X)
917 tgetstr/\fBcurs_termcap\fP(3X)
918 tgoto/\fBcurs_termcap\fP(3X)
919 tigetflag/\fBcurs_terminfo\fP(3X)
920 tigetnum/\fBcurs_terminfo\fP(3X)
921 tigetstr/\fBcurs_terminfo\fP(3X)
922 timeout/\fBcurs_inopts\fP(3X)
923 tiparm/\fBcurs_terminfo\fP(3X)
924 tiparm_s/\fBcurs_terminfo\fP(3X)*
925 tiscan_s/\fBcurs_terminfo\fP(3X)*
926 touchline/\fBcurs_touch\fP(3X)
927 touchwin/\fBcurs_touch\fP(3X)
928 tparm/\fBcurs_terminfo\fP(3X)
929 tputs/\fBcurs_termcap\fP(3X)
930 tputs/\fBcurs_terminfo\fP(3X)
931 trace/\fBcurs_trace\fP(3X)*
932 typeahead/\fBcurs_inopts\fP(3X)
933 unctrl/\fBcurs_util\fP(3X)
934 unget_wch/\fBcurs_get_wch\fP(3X)
935 ungetch/\fBcurs_getch\fP(3X)
936 ungetmouse/\fBcurs_mouse\fP(3X)*
937 untouchwin/\fBcurs_touch\fP(3X)
938 use_default_colors/\fBdefault_colors\fP(3X)*
939 use_env/\fBcurs_util\fP(3X)
940 use_extended_names/\fBcurs_extend\fP(3X)*
941 use_legacy_coding/\fBlegacy_coding\fP(3X)*
942 use_screen/\fBcurs_threads\fP(3X)*
943 use_tioctl/\fBcurs_util\fP(3X)*
944 use_window/\fBcurs_threads\fP(3X)*
945 vid_attr/\fBcurs_terminfo\fP(3X)
946 vid_puts/\fBcurs_terminfo\fP(3X)
947 vidattr/\fBcurs_terminfo\fP(3X)
948 vidputs/\fBcurs_terminfo\fP(3X)
949 vline/\fBcurs_border\fP(3X)
950 vline_set/\fBcurs_border_set\fP(3X)
951 vw_printw/\fBcurs_printw\fP(3X)
952 vw_scanw/\fBcurs_scanw\fP(3X)
953 vwprintw/\fBcurs_printw\fP(3X)
954 vwscanw/\fBcurs_scanw\fP(3X)
955 wadd_wch/\fBcurs_add_wch\fP(3X)
956 wadd_wchnstr/\fBcurs_add_wchstr\fP(3X)
957 wadd_wchstr/\fBcurs_add_wchstr\fP(3X)
958 waddch/\fBcurs_addch\fP(3X)
959 waddchnstr/\fBcurs_addchstr\fP(3X)
960 waddchstr/\fBcurs_addchstr\fP(3X)
961 waddnstr/\fBcurs_addstr\fP(3X)
962 waddnwstr/\fBcurs_addwstr\fP(3X)
963 waddstr/\fBcurs_addstr\fP(3X)
964 waddwstr/\fBcurs_addwstr\fP(3X)
965 wattr_get/\fBcurs_attr\fP(3X)
966 wattr_off/\fBcurs_attr\fP(3X)
967 wattr_on/\fBcurs_attr\fP(3X)
968 wattr_set/\fBcurs_attr\fP(3X)
969 wattroff/\fBcurs_attr\fP(3X)
970 wattron/\fBcurs_attr\fP(3X)
971 wattrset/\fBcurs_attr\fP(3X)
972 wbkgd/\fBcurs_bkgd\fP(3X)
973 wbkgdset/\fBcurs_bkgd\fP(3X)
974 wbkgrnd/\fBcurs_bkgrnd\fP(3X)
975 wbkgrndset/\fBcurs_bkgrnd\fP(3X)
976 wborder/\fBcurs_border\fP(3X)
977 wborder_set/\fBcurs_border_set\fP(3X)
978 wchgat/\fBcurs_attr\fP(3X)
979 wclear/\fBcurs_clear\fP(3X)
980 wclrtobot/\fBcurs_clear\fP(3X)
981 wclrtoeol/\fBcurs_clear\fP(3X)
982 wcolor_set/\fBcurs_attr\fP(3X)
983 wcursyncup/\fBcurs_window\fP(3X)
984 wdelch/\fBcurs_delch\fP(3X)
985 wdeleteln/\fBcurs_deleteln\fP(3X)
986 wecho_wchar/\fBcurs_add_wch\fP(3X)
987 wechochar/\fBcurs_addch\fP(3X)
988 wenclose/\fBcurs_mouse\fP(3X)*
989 werase/\fBcurs_clear\fP(3X)
990 wget_wch/\fBcurs_get_wch\fP(3X)
991 wget_wstr/\fBcurs_get_wstr\fP(3X)
992 wgetbkgrnd/\fBcurs_bkgrnd\fP(3X)
993 wgetch/\fBcurs_getch\fP(3X)
994 wgetdelay/\fBcurs_opaque\fP(3X)*
995 wgetn_wstr/\fBcurs_get_wstr\fP(3X)
996 wgetnstr/\fBcurs_getstr\fP(3X)
997 wgetparent/\fBcurs_opaque\fP(3X)*
998 wgetscrreg/\fBcurs_opaque\fP(3X)*
999 wgetstr/\fBcurs_getstr\fP(3X)
1000 whline/\fBcurs_border\fP(3X)
1001 whline_set/\fBcurs_border_set\fP(3X)
1002 win_wch/\fBcurs_in_wch\fP(3X)
1003 win_wchnstr/\fBcurs_in_wchstr\fP(3X)
1004 win_wchstr/\fBcurs_in_wchstr\fP(3X)
1005 winch/\fBcurs_inch\fP(3X)
1006 winchnstr/\fBcurs_inchstr\fP(3X)
1007 winchstr/\fBcurs_inchstr\fP(3X)
1008 winnstr/\fBcurs_instr\fP(3X)
1009 winnwstr/\fBcurs_inwstr\fP(3X)
1010 wins_nwstr/\fBcurs_ins_wstr\fP(3X)
1011 wins_wch/\fBcurs_ins_wch\fP(3X)
1012 wins_wstr/\fBcurs_ins_wstr\fP(3X)
1013 winsch/\fBcurs_insch\fP(3X)
1014 winsdelln/\fBcurs_deleteln\fP(3X)
1015 winsertln/\fBcurs_deleteln\fP(3X)
1016 winsnstr/\fBcurs_insstr\fP(3X)
1017 winsstr/\fBcurs_insstr\fP(3X)
1018 winstr/\fBcurs_instr\fP(3X)
1019 winwstr/\fBcurs_inwstr\fP(3X)
1020 wmouse_trafo/\fBcurs_mouse\fP(3X)*
1021 wmove/\fBcurs_move\fP(3X)
1022 wnoutrefresh/\fBcurs_refresh\fP(3X)
1023 wprintw/\fBcurs_printw\fP(3X)
1024 wredrawln/\fBcurs_refresh\fP(3X)
1025 wrefresh/\fBcurs_refresh\fP(3X)
1026 wresize/\fBwresize\fP(3X)*
1027 wscanw/\fBcurs_scanw\fP(3X)
1028 wscrl/\fBcurs_scroll\fP(3X)
1029 wsetscrreg/\fBcurs_outopts\fP(3X)
1030 wstandend/\fBcurs_attr\fP(3X)
1031 wstandout/\fBcurs_attr\fP(3X)
1032 wsyncdown/\fBcurs_window\fP(3X)
1033 wsyncup/\fBcurs_window\fP(3X)
1034 wtimeout/\fBcurs_inopts\fP(3X)
1035 wtouchln/\fBcurs_touch\fP(3X)
1036 wunctrl/\fBcurs_util\fP(3X)
1037 wvline/\fBcurs_border\fP(3X)
1038 wvline_set/\fBcurs_border_set\fP(3X)
1039 .TE
1040 .PP
1041 .IR \%ncurses 's
1042 .I "screen-pointer extension"
1043 adds additional functions corresponding to many of the above,
1044 each with an \*(``_sp\*('' suffix;
1045 see \fBcurs_sp_funcs\fP(3X).
1046 .PP
1047 The availability of some extensions is configurable when
1048 .I \%ncurses
1049 is compiled;
1050 see sections \*(``ALTERNATE CONFIGURATIONS\*('' and \*(``EXTENSIONS\*(''
1051 below.
1052 .SH RETURN VALUE
1053 Unless otherwise noted,
1054 functions that return integers return the constants
1055 .B OK
1056 on success and
1057 .B ERR
1058 on failure;
1059 see \fB\%curs_variables\fP(3X).
1060 Functions that return pointers return
1061 .B NULL
1062 on failure.
1063 Typically,
1064 .I \%ncurses
1065 treats a null pointer passed as a function parameter as a failure.
1066 Functions prefixed with \*(``mv\*('' first perform cursor movement and
1067 fail if the position
1068 .RI ( y ,
1069 .IR x )
1070 is outside the window boundaries.
1071 .SH ENVIRONMENT
1072 The following symbols from the process environment customize the
1073 runtime behavior of
1074 .I \%ncurses
1075 applications.
1076 The library may be configured to disregard the variables
1077 .IR \%TERMINFO ,
1078 .IR \%TERMINFO_DIRS ,
1079 .IR \%TERMPATH ,
1080 and
1081 .IR HOME ,
1082 if the user is the superuser (root),
1083 or the application uses \fI\%setuid\fP(2) or \fI\%setgid\fP(2).
1084 .SS "\fIBAUDRATE\fP"
1085 The debugging library checks this variable when the application has
1086 redirected output to a file.
1087 Its integral value is used for the baud rate.
1088 If that value is absent or invalid,
1089 .I \%ncurses
1090 uses 9600.
1091 This feature allows developers to construct repeatable test cases
1092 that take into account optimization decisions that depend on baud rate.
1093 .SS "\fICC\fP (command character)"
1094 When set,
1095 the
1096 .B \%command_character
1097 .RB ( \%cmdch )
1098 capability value of loaded
1099 .I \%term\%info
1100 entries changes to the value of this variable.
1101 Very few
1102 .I \%term\%info
1103 entries provide this feature.
1104 .PP
1105 Because this name is also used in development environments to represent
1106 the C compiler's name,
1107 .I \%ncurses
1108 ignores its value if it is not one character in length.
1109 .SS "\fICOLUMNS\fP"
1110 This variable specifies the width of the screen in characters.
1111 Applications running in a windowing environment usually are able to
1112 obtain the width of the window in which they are executing.
1113 If
1114 .I \%COLUMNS
1115 is not defined and the terminal's screen size is not available from the
1116 terminal driver,
1117 .I \%ncurses
1118 uses the size specified by the
1119 .B \%columns
1120 .RB ( \%cols )
1121 capability of the terminal type's entry in the
1122 .I \%term\%info
1123 database,
1124 if any.
1125 .PP
1126 It is important that your application use the correct screen size.
1127 Automatic detection thereof is not always possible because an
1128 application may be running on a host that does not honor NAWS
1129 (Negotiations About Window Size)
1130 or as a different user ID than the owner of the terminal device file.
1131 Setting
1132 .I \%COLUMNS
1133 and/or
1134 .I \%LINES
1135 overrides the library's use of the screen size obtained from the
1136 operating system.
1137 .PP
1138 The
1139 .I \%COLUMNS
1140 and
1141 .I \%LINES
1142 variables may be specified independently.
1143 This property is useful to circumvent misfeatures of legacy terminal
1144 type descriptions;
1145 \fI\%xterm\fP(1) descriptions specifying 65 lines were once notorious.
1146 For best results,
1147 avoid specifying
1148 .B cols
1149 and
1150 .B lines
1151 capability codes in
1152 .I \%term\%info
1153 descriptions of terminal emulators.
1154 .PP
1155 \fBuse_env\fP(3X) can disable use of the process environment
1156 in determining the screen size.
1157 \fBuse_tioctl\fP(3X) can update
1158 .I \%COLUMNS
1159 and
1160 .I \%LINES
1161 to match the screen size obtained from system calls or the terminal
1162 database.
1163 .SS "\fIESCDELAY\fP"
1164 For
1165 .I curses
1166 to distinguish the ESC character resulting from a user's press of the
1167 \*(``Escape\*('' key on the input device from one beginning an
1168 .I "escape sequence"
1169 (as commonly produced by function keys),
1170 it waits after receiving the escape character to see if further
1171 characters are available on the input stream within a short interval.
1172 A global variable
1173 .B \%ESCDELAY
1174 stores this interval in milliseconds.
1175 The default value of 1000
1176 (one second)
1177 is adequate for most uses.
1178 This environment variable overrides it.
1179 .PP
1180 The most common instance where you may wish to change this value
1181 is to work with a remote host over a slow communication channel.
1182 If the host running a
1183 .I curses
1184 application does not receive the characters of an escape sequence in a
1185 timely manner,
1186 the library can interpret them as multiple key stroke events.
1187 .PP
1188 \fI\%xterm\fP(1) mouse events are a form of escape sequence;
1189 therefore,
1190 if your application makes heavy use of multiple-clicking,
1191 you may wish to lengthen the default value because the delay applies
1192 to the composite multi-click event as well as the individual clicks.
1193 .PP
1194 Portable applications should not rely upon the presence of
1195 .B \%ESCDELAY
1196 in either form,
1197 but setting the environment variable rather than the global variable
1198 does not create problems when compiling an application.
1199 .PP
1200 If \fB\%keypad\fP(3X) is disabled for the
1201 .I curses
1202 window receiving input,
1203 a program must disambiguate escape sequences itself.
1204 .SS "\fIHOME\fP"
1205 .I \%ncurses
1206 may read and write auxiliary terminal descriptions in
1207 .I \%.termcap
1208 and
1209 .I \%.terminfo
1210 files in the user's home directory.
1211 .SS "\fILINES\fP"
1212 This counterpart to
1213 .I \%COLUMNS
1214 specifies the height of the screen in characters.
1215 The corresponding
1216 .I \%term\%info
1217 capability and code is
1218 .BR \%lines .
1219 See the description of the
1220 .I \%COLUMNS
1221 variable above.
1222 .SS "\fIMOUSE_BUTTONS_123\fP"
1223 (OS/2 EMX port only)
1224 OS/2 numbers a three-button mouse inconsistently with other platforms,
1225 such that 1 is the left button,
1226 2 the right,
1227 and 3 the middle.
1228 This variable customizes the mouse button numbering.
1229 Its value must be three digits 1\-3 in any order.
1230 By default,
1231 .I \%ncurses
1232 assumes a numbering of \*(``132\*(''.
1233 .SS "\fINCURSES_ASSUMED_COLORS\fP"
1234 If set,
1235 this variable overrides the
1236 .I \%ncurses
1237 library's compiled-in assumption that the terminal's default colors are
1238 white on black;
1239 see \fB\%default_colors\fP(3X).
1240 Set the foreground and background color values with this environment
1241 variable by assigning it two integer values separated by a comma,
1242 indicating foregound and background color numbers,
1243 respectively.
1244 .PP
1245 For example,
1246 to tell
1247 .I \%ncurses
1248 not to assume anything about the colors,
1249 use a value of \*(``\-1,\-1\*(''.
1250 To make the default color scheme green on black,
1251 use \*(``2,0\*(''.
1252 .I \%ncurses
1253 accepts integral values from \-1 up to the value of the
1254 .I \%term\%info
1255 .B \%max_colors
1256 .RB ( colors )
1257 capability.
1258 .SS "\fINCURSES_CONSOLE2\fP"
1259 (MinGW port only)
1260 The
1261 .I \%Console2
1262 .\" https://www.hanselman.com/blog/console2-a-better-windows-command-prompt
1263 program defectively handles the Microsoft Console API call
1264 .IR \%Create\%Console\%Screen\%Buffer .
1265 Applications that use it will hang.
1266 However,
1267 it is possible to simulate the action of this call by mapping
1268 coordinates,
1269 explicitly saving and restoring the original screen contents.
1270 Setting the environment variable
1271 .I \%NCGDB
1272 has the same effect.
1273 .SS "\fINCURSES_GPM_TERMS\fP"
1274 (Linux only)
1275 When
1276 .I \%ncurses
1277 is configured to use the GPM interface,
1278 this variable may list one or more terminal type names
1279 against which the
1280 .I TERM
1281 variable
1282 (see below)
1283 is matched.
1284 An empty value disables the GPM interface,
1285 using
1286 .IR \%ncurses 's
1287 built-in support for \fI\%xterm\fP(1) mouse protocols instead.
1288 If the variable is absent,
1289 .I \%ncurses
1290 attempts to open GPM if
1291 .I TERM
1292 contains \*(``linux\*(''.
1293 .SS "\fINCURSES_NO_HARD_TABS\fP"
1294 .I \%ncurses
1295 may use tab characters in cursor movement optimization.
1296 In some cases,
1297 your terminal driver may not handle them properly.
1298 Set this environment variable to any value to disable the feature.
1299 You can also adjust your \fI\%stty\fP(1) settings to avoid the problem.
1300 .SS "\fINCURSES_NO_MAGIC_COOKIE\fP"
1301 Many terminals store video attributes as a property of a character cell,
1302 as
1303 .I curses
1304 does.
1305 Historically,
1306 some recorded changes in video attributes as data that logically
1307 .I occupies
1308 character cells on the display,
1309 switching attributes on or off,
1310 similarly to tags in a markup language;
1311 these are termed \*(``magic cookies\*('',
1312 and must be subsequently overprinted.
1313 If the
1314 .I \%term\%info
1315 entry for your terminal type does not adequately describe its handling
1316 of magic cookies,
1317 set this variable to any value to instruct
1318 .I \%ncurses
1319 to disable attributes entirely.
1320 .SS "\fINCURSES_NO_PADDING\fP"
1321 Most terminal type descriptions in the
1322 .I \%term\%info
1323 database detail hardware devices.
1324 Many people use
1325 .IR curses -based
1326 applications in terminal emulator programs that run in a windowing
1327 environment.
1328 These programs can duplicate all of the important features of a hardware
1329 terminal,
1330 but often lack their limitations.
1331 Chief among these absent drawbacks is the problem of data flow
1332 management;
1333 that is,
1334 limiting the speed of communication to what the hardware could handle.
1335 Unless a hardware terminal is interfaced into a terminal concentrator
1336 (which does flow control),
1337 an application must manage flow itself to prevent overruns and data
1338 loss.
1339 .PP
1340 A solution that comes at no hardware cost is for an application to pause
1341 after directing a terminal to execute an operation that it performs
1342 slowly,
1343 such as clearing the display.
1344 Many terminal type descriptions,
1345 including that for the VT100,
1346 embed delay specifications in capabilities.
1347 You may wish to use these terminal descriptions without paying the
1348 performance penalty.
1349 Set
1350 .I \%NCURSES_NO_PADDING
1351 to any value to disable all but mandatory padding.
1352 Mandatory padding is used by such terminal capabilities as
1353 .B \%flash_screen
1354 .RB ( flash ).
1355 .SS "\fINCURSES_NO_SETBUF\fP"
1356 (Obsolete)
1357 Prior to internal changes developed in
1358 .I \%ncurses
1359 5.9
1360 (patches 20120825 through 20130126),
1361 the library used \fI\%setbuf\fP(3) to enable fully buffered output when
1362 initializing the terminal.
1363 This was done,
1364 as in SVr4
1365 .IR curses ,
1366 to increase performance.
1367 For testing purposes,
1368 both of
1369 .I \%ncurses
1370 and of certain applications,
1371 this feature was made optional.
1372 Setting this variable disabled output buffering,
1373 leaving the output stream in the original
1374 (usually line-buffered)
1375 mode.
1376 .PP
1377 Nowadays,
1378 .I \%ncurses
1379 performs its own buffering and does not require this workaround;
1380 it does not modify the buffering of the standard output stream.
1381 This approach makes signal handling,
1382 as for interrupts,
1383 more robust.
1384 A drawback is that certain unconventional programs mixed
1385 \fI\%stdio\fP(3) calls with
1386 .I \%ncurses
1387 calls and (usually)
1388 got the behavior they expected.
1389 This is no longer the case;
1390 .I \%ncurses
1391 does not write to the standard output file descriptor through a
1392 .IR stdio -buffered
1393 stream.
1394 .PP
1395 As a special case,
1396 low-level API calls such as \fB\%putp\fP(3X) still use the
1397 standard output stream.
1398 High-level
1399 .I curses
1400 calls such as \fB\%printw\fP(3X) do not.
1401 .SS "\fINCURSES_NO_UTF8_ACS\fP"
1402 At initialization,
1403 .I \%ncurses
1404 inspects the
1405 .I TERM
1406 environment variable for special cases where VT100 forms-drawing
1407 characters
1408 (and the corresponding alternate character set
1409 .I \%term\%info
1410 capabilities)
1411 are known to be unsupported by terminal types that otherwise claim VT100
1412 compatibility.
1413 Specifically,
1414 when running in a UTF-8 locale,
1415 the Linux virtual console device and the GNU \fI\%screen\fP(1)
1416 program ignore them.
1417 Set this variable to a nonzero value to instruct
1418 .I \%ncurses
1419 that the terminal's ACS support is broken;
1420 the library then outputs Unicode code points that correspond to the
1421 forms-drawing
1422 characters.
1423 Set it to zero
1424 (or a non-integer)
1425 to disable the special check for terminal type names matching
1426 \*(``linux\*('' or \*(``screen\*('',
1427 directing
1428 .I \%ncurses
1429 to assume that the ACS feature works if the terminal type description
1430 advertises it.
1431 .PP
1432 As an alternative to use of this variable,
1433 .I \%ncurses
1434 checks for an extended
1435 .I \%term\%info
1436 numeric capability \fBU8\fP
1437 that can be compiled using
1438 .RB \*(`` "@TIC@ \-x" \*(''.
1439 Examples follow.
1440 .PP
1441 .RS 3
1442 .EX
1443 # linux console, if patched to provide working
1444 # VT100 shift\-in/shift\-out, with corresponding font.
1445 linux\-vt100|linux console with VT100 line\-graphics,
1446         U8#0, use=linux,
1447 \&
1448 # uxterm with vt100Graphics resource set to false
1449 xterm\-utf8|xterm relying on UTF\-8 line\-graphics,
1450         U8#1, use=xterm,
1451 .EE
1452 .RE
1453 .PP
1454 The two-character name \*(``U8\*('' was chosen to permit its use via
1455 .IR \%ncurses 's
1456 .I termcap
1457 interface.
1458 .SS "\fINCURSES_TRACE\fP"
1459 At initialization,
1460 .I \%ncurses
1461 (in its debugging configuration)
1462 checks for this variable's presence.
1463 If defined with an integral value,
1464 the library calls \fB\%curses_trace\fP(3X) with that value as the
1465 argument.
1466 .SS "\fITERM\fP"
1467 The
1468 .I TERM
1469 variable denotes the terminal type.
1470 Each is distinct,
1471 though many are similar.
1472 It is commonly set by terminal emulators to help applications find a
1473 workable terminal description.
1474 Some choose a popular approximation such as \*(``ansi\*('',
1475 \*(``vt100\*('', or \*(``xterm\*('' rather than an exact fit to their
1476 capabilities.
1477 Not infrequently,
1478 an application will have problems with that approach;
1479 for example,
1480 a key stroke may not operate correctly,
1481 or produce no effect but seeming garbage characters on the screen.
1482 .PP
1483 Setting
1484 .I TERM
1485 has no effect on hardware operation;
1486 it affects the way applications communicate with the terminal.
1487 Likewise,
1488 as a general rule
1489 (\fIxterm\fP(1) being a rare exception),
1490 terminal emulators that allow you to specify
1491 .I TERM
1492 as a parameter or configuration value do not change their behavior to
1493 match that setting.
1494 .SS "\fITERMCAP\fP"
1495 If
1496 .I \%ncurses
1497 is configured with
1498 .I termcap
1499 support,
1500 it checks for a terminal type description in
1501 .I termcap
1502 format if one in
1503 .I \%term\%info
1504 format is not available.
1505 Setting this variable directs
1506 .I \%ncurses
1507 to ignore the usual
1508 .I termcap
1509 database location,
1510 .IR \%/etc/termcap ;
1511 see
1512 .I \%TERMPATH
1513 below.
1514 .I \%TERMCAP
1515 should contain either a terminal description
1516 (with newlines stripped out),
1517 or a file name indicating where the information required by the
1518 .I TERM
1519 environment variable is stored.
1520 .SS "\fITERMINFO\fP"
1521 .I \%ncurses
1522 can be configured to read terminal type description databases in various
1523 locations using different formats.
1524 This variable overrides the default location.
1525 .bP
1526 Descriptions in
1527 .I \%term\%info
1528 format are normally stored in a directory tree using subdirectories
1529 named by the common first letters of the terminal types named therein.
1530 This is the scheme used in System\ V.
1531 .bP
1532 If
1533 .I \%ncurses
1534 is configured to use hashed databases,
1535 then
1536 .I \%TERM\%INFO
1537 may name its location,
1538 such as
1539 .IR \%/usr/share/terminfo.db ,
1540 rather than
1541 .IR \%/usr/share/terminfo/ .
1542 .PP
1543 The hashed database uses less disk space and is a little faster than the
1544 directory tree.
1545 However,
1546 some applications assume the existence of the directory tree,
1547 and read it directly
1548 rather than using the
1549 .I \%term\%info
1550 API.
1551 .bP
1552 If
1553 .I \%ncurses
1554 is configured with
1555 .I termcap
1556 support,
1557 this variable may contain the location of a
1558 .I \%termcap
1559 file.
1560 .bP
1561 If the value of
1562 .I \%TERM\%INFO
1563 begins with \*(``hex:\*('' or \*(``b64:\*('',
1564 .I \%ncurses
1565 uses the remainder of the value as a compiled
1566 .I \%term\%info
1567 description.
1568 You might produce the base64 format using \fB\%infocmp\fP(1M).
1569 .RS 4
1570 .IP
1571 .EX
1572 TERMINFO=$(infocmp \-0 \-Q2 \-q)
1573 export TERMINFO
1574 .EE
1575 .RE
1576 .IP
1577 The compiled description is used only if it corresponds to the terminal
1578 type identified by
1579 .IR TERM .
1580 .PP
1581 Setting
1582 .I \%TERM\%INFO
1583 is the simplest,
1584 but not the only,
1585 way to direct
1586 .I \%ncurses
1587 to a terminal database.
1588 The search path is as follows.
1589 .bP
1590 the last terminal database to which the running
1591 .I \%ncurses
1592 application wrote,
1593 if any
1594 .bP
1595 the location specified by the
1596 .I \%TERM\%INFO
1597 environment variable
1598 .bP
1599 .I $HOME/.terminfo
1600 .bP
1601 locations listed in the
1602 .I \%TERMINFO_DIRS
1603 environment variable
1604 .ds td \" empty
1605 .if !'@TERMINFO_DIRS@'no default value' .as td @TERMINFO_DIRS@
1606 .if !'@TERMINFO@\*(td'' \{\
1607 .bP
1608 location(s) configured and compiled into
1609 .I \%ncurses
1610 .RS
1611 .if !'\*(td'' \{\
1612 .bP
1613 .I \%@TERMINFO_DIRS@
1614 .\}
1615 .if !'@TERMINFO'' .if !'\*(td'@TERMINFO@' \{\
1616 .bP
1617 .I \%@TERMINFO@
1618 .\}
1619 .\}
1620 .RE
1621 .SS "\fITERMINFO_DIRS\fP"
1622 This variable specifies a list of locations,
1623 akin to
1624 .IR PATH ,
1625 in which
1626 .I \%ncurses
1627 searches for the terminal type descriptions described by
1628 .I \%TERMINFO
1629 above.
1630 The list items are separated by colons on Unix
1631 and semicolons on OS/2 EMX.
1632 System\ V
1633 .I \%term\%info
1634 lacks a corresponding feature;
1635 .I \%TERMINFO_DIRS
1636 is an
1637 .I \%ncurses
1638 extension.
1639 .SS "\fITERMPATH\fP"
1640 If
1641 .I \%TERMCAP
1642 does not hold a terminal type description or file name,
1643 then
1644 .I \%ncurses
1645 checks the contents of
1646 .IR \%TERMPATH ,
1647 a list of locations,
1648 akin to
1649 .IR PATH ,
1650 in which it searches for
1651 .I termcap
1652 terminal type descriptions.
1653 The list items are separated by colons on Unix
1654 and semicolons on OS/2 EMX.
1655 .PP
1656 If both
1657 .I \%TERMCAP
1658 and
1659 .I \%TERMPATH
1660 are unset or invalid,
1661 .I \%ncurses
1662 searches for the files
1663 .IR \%/etc/termcap ,
1664 .IR \%/usr/share/misc/termcap ,
1665 and
1666 .IR \%$HOME/.termcap ,
1667 in that order.
1668 .SH "ALTERNATE CONFIGURATIONS"
1669 Many different
1670 .I \%ncurses
1671 configurations are possible,
1672 determined by the options given to the
1673 .I \%configure
1674 script when building the library.
1675 Run the script with the
1676 .B \-\-help
1677 option to peruse them all.
1678 A few are of particular significance to the application developer
1679 employing
1680 .IR \%ncurses .
1681 .TP 5
1682 .B \-\-disable\-overwrite
1683 The standard C preprocessor inclusion for the
1684 .I curses
1685 library is as follows.
1686 .RS 5
1687 .PP
1688 .RS 4
1689 .EX
1690 .\" The dummy character prevents undesired rewriting of the next line on
1691 .\" installation of the man page.
1692 \fB#\&include <curses.h>\fP
1693 .EE
1694 .RE
1695 .PP
1696 This option is used to avoid file name conflicts between
1697 .I \%ncurses
1698 and an existing
1699 .I curses
1700 installation on the system.
1701 If
1702 .I \%ncurses
1703 is installed disabling overwrite,
1704 it puts its header files in a subdirectory.
1705 Here is an example.
1706 .PP
1707 .RS 4
1708 .EX
1709 .\" The dummy character prevents undesired rewriting of the next line on
1710 .\" installation of the man page.
1711 \fB#\&include <ncurses/curses.h>\fP
1712 .EE
1713 .RE
1714 .PP
1715 Installation also omits a symbolic link that would cause the compiler's
1716 .B \-lcurses
1717 option to link object files with
1718 .I \%ncurses
1719 instead of the system
1720 .I curses
1721 library.
1722 .PP
1723 The directory used by this configuration of
1724 .I \%ncurses
1725 is shown in section \*(``SYNOPSIS\*('' above.
1726 .RE
1727 .TP 5
1728 .B \-\-enable\-widec
1729 The configure script renames the library and
1730 (if the \fB\-\-disable\-overwrite\fP option is used)
1731 puts the header files in a different subdirectory.
1732 All of the library names have a \*(``w\*('' appended to them,
1733 i.e., instead of
1734 .RS 5
1735 .PP
1736 .RS 4
1737 .EX
1738 \fB\-lncurses\fP
1739 .EE
1740 .RE
1741 .PP
1742 you link with
1743 .PP
1744 .RS 4
1745 .EX
1746 \fB\-lncursesw\fP
1747 .EE
1748 .RE
1749 .PP
1750 You must also enable the wide-character features in the header file
1751 when compiling for the wide-character library
1752 to use the extended (wide-character) functions.
1753 The symbol which enables these features has changed
1754 since X/Open Curses, Issue 4:
1755 .bP
1756 Originally, the wide-character feature required the symbol
1757 \fB_XOPEN_SOURCE_EXTENDED\fP
1758 but that was only valid for XPG4 (1996).
1759 .bP
1760 Later, that was deemed conflicting with \fB_XOPEN_SOURCE\fP defined to 500.
1761 .bP
1762 As of mid-2018,
1763 none of the features in this implementation require a \fB_XOPEN_SOURCE\fP
1764 feature greater than 600.
1765 However, X/Open Curses, Issue 7 (2009) recommends defining it to 700.
1766 .bP
1767 Alternatively, you can enable the feature by defining \fBNCURSES_WIDECHAR\fP
1768 with the caveat that some other header file than \fBcurses.h\fP
1769 may require a specific value for \fB_XOPEN_SOURCE\fP
1770 (or a system-specific symbol).
1771 .PP
1772 The \fI\%curses.h\fP header file installed for the wide-character
1773 library is designed to be compatible with the non-wide library's header.
1774 Only the size of the \fI\%WINDOW\fP structure differs;
1775 few applications require more than pointers to \fI\%WINDOW\fPs.
1776 .PP
1777 If the headers are installed allowing overwrite,
1778 the wide-character library's headers should be installed last,
1779 to allow applications to be built using either library
1780 from the same set of headers.
1781 .RE
1782 .TP 5
1783 .B \-\-with\-pthread
1784 The configure script renames the library.
1785 All of the library names have a \*(``t\*('' appended to them
1786 (before any \*(``w\*('' added by \fB\-\-enable\-widec\fP).
1787 .IP
1788 The global variables such as \fBLINES\fP are replaced by macros to
1789 allow read-only access.
1790 At the same time, setter-functions are provided to set these values.
1791 Some applications (very few) may require changes to work with this convention.
1792 .TP 5
1793 .B \-\-with\-shared
1794 .tQ
1795 .B \-\-with\-normal
1796 .tQ
1797 .B \-\-with\-debug
1798 .tQ
1799 .B \-\-with\-profile
1800 The shared and normal (static) library names differ by their suffixes,
1801 e.g., \fBlibncurses.so\fP and \fBlibncurses.a\fP.
1802 The debug and profiling libraries add a \*(``_g\*(''
1803 and a \*(``_p\*('' to the root names respectively,
1804 e.g., \fBlibncurses_g.a\fP and \fBlibncurses_p.a\fP.
1805 .TP 5
1806 .B \-\-with\-termlib
1807 Low-level functions which do not depend upon whether the library
1808 supports wide-characters, are provided in the tinfo library.
1809 .IP
1810 By doing this, it is possible to share the tinfo library between
1811 wide/normal configurations as well as reduce the size of the library
1812 when only low-level functions are needed.
1813 .IP
1814 Those functions are described in these pages:
1815 .RS
1816 .bP
1817 \fB\%curs_extend\fP(3X) \- miscellaneous \fIcurses\fP extensions
1818 .bP
1819 \fB\%curs_inopts\fP(3X) \- \fIcurses\fP input options
1820 .bP
1821 \fB\%curs_kernel\fP(3X) \- low-level \fIcurses\fP routines
1822 .bP
1823 \fB\%curs_termattrs\fP(3X) \- \fIcurses\fP environment query routines
1824 .bP
1825 \fB\%curs_termcap\fP(3X) \- \fIcurses\fP emulation of \fItermcap\fP
1826 .bP
1827 \fB\%curs_terminfo\fP(3X) \- \fIcurses\fP interface to \fIterminfo\fP
1828 database
1829 .bP
1830 \fB\%curs_util\fP(3X) \- miscellaneous \fIcurses\fP utility routines
1831 .RE
1832 .TP 5
1833 .B \-\-with\-trace
1834 The \fBtrace\fP function normally resides in the debug library,
1835 but it is sometimes useful to configure this in the shared library.
1836 Configure scripts should check for the function's existence rather
1837 than assuming it is always in the debug library.
1838 .SH FILES
1839 .TP
1840 .I @DATADIR@/tabset
1841 tab stop initialization database
1842 .TP
1843 .I @TERMINFO@
1844 compiled terminal capability database
1845 .SH NOTES
1846 X/Open Curses permits most functions it specifies to be made available
1847 as macros as well.
1848 .\" See X/Open Curses Issue 4, Version 2, pp. 227-234.
1849 .\" See X/Open Curses Issue 7, pp. 311-318.
1850 \fI\%ncurses\fP does so
1851 .bP
1852 for functions that return values via their parameters,
1853 .bP
1854 to support obsolete features,
1855 .bP
1856 to reuse functions
1857 (for example,
1858 those that move the cursor before another operation),
1859 and
1860 .bP
1861 in a few special cases.
1862 .PP
1863 If the standard output file descriptor of an
1864 .I \%ncurses
1865 program is redirected to something that is not a terminal device,
1866 the library writes screen updates to the standard error file descriptor.
1867 This was an undocumented feature of SVr3
1868 .IR curses .
1869 .PP
1870 See subsection \*(``Header Files\*('' below regarding symbols exposed by
1871 inclusion of \fI\%curses.h\fP.
1872 .SH EXTENSIONS
1873 .I \%ncurses
1874 enables an application to capture mouse events on certain terminals,
1875 including \fI\%xterm\fP(1);
1876 see \fB\%curs_mouse\fP(3X).
1877 .PP
1878 .I \%ncurses
1879 provides a means of responding to window resizing events,
1880 as when running in a GUI terminal emulator application such as
1881 .IR \%xterm ;
1882 see \fB\%resizeterm\fP(3X) and \fB\%wresize\fP(3X).
1883 .PP
1884 .I \%ncurses
1885 allows an application to query the terminal for the presence of a wide
1886 variety of special keys;
1887 see \fB\%has_key\fP(3X).
1888 .PP
1889 .I \%ncurses
1890 extends the fixed set of function key capabilities specified by X/Open
1891 Curses by allowing the application programmer to define additional key
1892 events at runtime;
1893 see
1894 \fB\%define_key\fP(3X),
1895 \fB\%key_defined\fP(3X),
1896 \fB\%keybound\fP(3X),
1897 and
1898 \fB\%keyok\fP(3X).
1899 .PP
1900 .I \%ncurses
1901 can exploit the capabilities of terminals implementing ISO\ 6429/ECMA-48
1902 SGR\ 39 and SGR\ 49 sequences,
1903 which allow an application to reset the terminal to its original
1904 foreground and background colors.
1905 From a user's perspective,
1906 the application is able to draw colored text on a background whose color
1907 is set independently,
1908 providing better control over color contrasts.
1909 See \fB\%default_colors\fP(3X).
1910 .PP
1911 An
1912 .I \%ncurses
1913 application can eschew knowledge of
1914 .I \%WINDOW
1915 structure internals,
1916 instead using accessor functions such as
1917 \fB\%is_scrollok\fP(3X).
1918 .PP
1919 .I \%ncurses
1920 enables an application to direct its output to a printer attached to the
1921 terminal device;
1922 see \fB\%curs_print\fP(3X).
1923 .PP
1924 .I \%ncurses
1925 offers \fB\%slk_attr\fP(3X) as a counterpart of \fB\%attr_get\fP(3X) for
1926 soft-label key lines,
1927 and \fB\%extended_slk_color\fP(3X) as a form of \fB\%slk_color\fP(3X)
1928 that can gather color information from them when many colors are
1929 supported.
1930 .PP
1931 Some extensions are available only if
1932 .I \%ncurses
1933 permits modification of \fB\%unctrl\fP(3X)'s behavior;
1934 see \fB\%use_legacy_coding\fP(3X).
1935 .I \%ncurses
1936 is compiled to support them;
1937 section \*(``ALTERNATE CONFIGURATIONS\*('' describes how.
1938 .PP
1939 .I \%ncurses
1940 permits modification of \fB\%unctrl\fP(3X)'s behavior;
1941 see \fB\%use_legacy_coding\fP(3X).
1942 .PP
1943 Rudimentary support for multi-threaded applications may be available;
1944 see \fBcurs_threads\fP(3X).
1945 .PP
1946 Functions that ease the management of multiple screens can be exposed;
1947 see \fBcurs_sp_funcs\fP(3X).
1948 .PP
1949 To aid applications to debug their memory usage,
1950 .I \%ncurses
1951 optionally offers functions to more aggressively free memory it
1952 dynamically allocates itself;
1953 see \fBcurs_memleaks\fP(3X).
1954 .PP
1955 The library facilitates auditing and troubleshooting of its behavior;
1956 see \fBcurs_trace\fP(3X).
1957 .PP
1958 Compiling
1959 .I \%ncurses
1960 with the option
1961 .B \%\-DUSE_GETCAP
1962 causes it to fall back to reading
1963 .I \%/etc/termcap
1964 if the terminal setup code cannot find a
1965 .I \%term\%info
1966 entry corresponding to
1967 .IR TERM .
1968 Use of this feature is not recommended,
1969 as it essentially includes an entire
1970 .I termcap
1971 compiler in the
1972 .I \%ncurses
1973 startup code,
1974 at a cost in memory usage and application launch latency.
1975 .PP
1976 .I \%PDCurses
1977 and NetBSD
1978 .I curses
1979 incorporate some
1980 .I \%ncurses
1981 extensions.
1982 Individual man pages indicate where this is the case.
1983 .SH PORTABILITY
1984 X/Open Curses defines two levels of conformance,
1985 \*(``base\*('' and \*(``enhanced\*(''.
1986 The latter includes several additional features,
1987 such as wide-character and color support.
1988 .I \%ncurses
1989 intends base-level conformance with X/Open Curses,
1990 and supports all features of its enhanced level
1991 except the \fB\%untic\fP utility.
1992 .PP
1993 Differences between X/Open Curses and
1994 .I \%ncurses
1995 are documented in the \*(``PORTABILITY\*('' sections of applicable man
1996 pages.
1997 .SS "Error Checking"
1998 In many cases, X/Open Curses is vague about error conditions,
1999 omitting some of the SVr4 documentation.
2000 .PP
2001 Unlike other implementations,
2002 .I \%ncurses
2003 checks pointer parameters,
2004 such as those to
2005 .I \%WINDOW
2006 structures,
2007 to ensure that they are not null.
2008 This is done primarily to guard against programmer error.
2009 The standard interface does not provide a way for the library
2010 to tell an application which of several possible errors occurred.
2011 An application that relies on
2012 .I \%ncurses
2013 to check its function parameters for validity limits its portability and
2014 robustness.
2015 .SS "Padding Differences"
2016 In historical
2017 .I curses
2018 implementations,
2019 delays embedded in the
2020 .I \%term\%info
2021 capabilities
2022 .B \%carriage_return
2023 .RB ( cr ),
2024 .B \%scroll_forward
2025 .RB ( ind ),
2026 .B \%cursor_left
2027 .RB ( cub1 ),
2028 .B \%form_feed
2029 .RB ( ff ),
2030 and
2031 .B \%tab
2032 .RB ( ht )
2033 activated corresponding delay bits in the Unix terminal driver.
2034 .I \%ncurses
2035 performs all padding by sending NUL bytes to the device.
2036 This method is slightly more expensive,
2037 but narrows the interface to the Unix kernel significantly and
2038 correspondingly increases the package's portability.
2039 .SS "Header Files"
2040 The header file
2041 .I \%curses.h
2042 itself includes the header files
2043 .I \%stdio.h
2044 and
2045 .IR \%unctrl.h .
2046 .PP
2047 X/Open Curses has more to say,
2048 .RS 4
2049 .PP
2050 The inclusion of
2051 .I \%curses.h
2052 may make visible all symbols from the headers
2053 .IR \%stdio.h ,
2054 .IR \%term.h ,
2055 .IR \%termios.h ,
2056 and
2057 .IR \%wchar.h .
2058 .RE
2059 .PP
2060 but does not finish the story.
2061 A more complete account follows.
2062 .bP
2063 Starting with 4BSD
2064 .I curses
2065 (1980)
2066 all implementations have provided a
2067 .I \%curses.h
2068 file.
2069 .IP
2070 BSD
2071 .I curses
2072 code included
2073 .I \%curses.h
2074 and
2075 .I \%unctrl.h
2076 from an internal header file
2077 .IR \%curses.ext ,
2078 where
2079 \*(``ext\*('' abbreviated \*(``externs\*(''.
2080 .IP
2081 The implementations of
2082 .I \%printw
2083 and
2084 .I \%scanw
2085 used undocumented internal functions of the standard I/O library
2086 .RI ( _doprnt
2087 and
2088 .IR _doscan ),
2089 but nothing in
2090 .I \%curses.h
2091 itself relied upon
2092 .IR \%stdio.h .
2093 .bP
2094 SVr2
2095 .I curses
2096 added
2097 .IR \%newterm ,
2098 which relies upon
2099 .I \%stdio.h
2100 because its function prototype employs the
2101 .I FILE
2102 type.
2103 .IP
2104 SVr4
2105 .I curses
2106 added
2107 .I \%putwin
2108 and
2109 .IR \%getwin ,
2110 which also use
2111 .IR \%stdio.h .
2112 .IP
2113 X/Open Curses specifies all three of these functions.
2114 .IP
2115 SVr4
2116 .I curses
2117 and X/Open Curses do not require the developer to include
2118 .I \%stdio.h
2119 before
2120 .IR \%curses.h .
2121 Both document use of
2122 .I curses
2123 as requiring only
2124 .IR \%curses.h .
2125 .IP
2126 As a result,
2127 standard
2128 .I \%curses.h
2129 always includes
2130 .IR \%stdio.h .
2131 .bP
2132 X/Open Curses and SVr4
2133 .I curses
2134 are inconsistent with respect to
2135 .IR \%unctrl.h .
2136 .IP
2137 As noted in \fBcurs_util\fP(3X),
2138 .I \%ncurses
2139 includes
2140 .I \%unctrl.h
2141 from
2142 .I \%curses.h
2143 (as SVr4 does).
2144 .bP
2145 X/Open Curses's comments about
2146 .I \%term.h
2147 and
2148 .I \%termios.h
2149 may refer to HP-UX and AIX.
2150 .IP
2151 HP-UX
2152 .I curses
2153 includes
2154 .I \%term.h
2155 from
2156 .I \%curses.h
2157 to declare
2158 .I \%setupterm
2159 in
2160 .IR \%curses.h ,
2161 but
2162 .I \%ncurses
2163 and Solaris
2164 .I curses
2165 do not.
2166 .IP
2167 AIX
2168 .I curses
2169 includes
2170 .I \%term.h
2171 and
2172 .IR \%termios.h .
2173 Again,
2174 .I \%ncurses
2175 and Solaris
2176 .I curses
2177 do not.
2178 .bP
2179 X/Open Curses says that
2180 .I \%curses.h
2181 .B may
2182 include
2183 .IR \%term.h ,
2184 but does not require it to do so.
2185 .IP
2186 Some programs use functions declared in both
2187 .I \%curses.h
2188 and
2189 .IR \%term.h ,
2190 and must include both header files in the same module.
2191 Very old versions of AIX
2192 .I curses
2193 required inclusion of
2194 .I \%curses.h
2195 before
2196 .IR \%term.h .
2197 .IP
2198 The header files supplied by
2199 .I \%ncurses
2200 include the standard library headers required for its declarations,
2201 so
2202 .IR \%ncurses 's
2203 own header files can be included in any order.
2204 But for portability,
2205 you should include
2206 .I \%curses.h
2207 before
2208 .IR \%term.h .
2209 .bP
2210 X/Open Curses says \*(``may make visible\*('' because including a header
2211 file does not necessarily make visible all of the symbols in it
2212 (consider
2213 .B \%#ifdef
2214 and similar).
2215 .IP
2216 For instance,
2217 .IR \%ncurses 's
2218 .I \%curses.h
2219 .B may \" bold to contrast with preceding italic
2220 include
2221 .I \%wchar.h
2222 if the proper symbol is defined,
2223 and if
2224 .I \%ncurses
2225 is configured for wide-character support.
2226 If
2227 .I \%wchar.h
2228 is included,
2229 its symbols
2230 .B may \" bold for consistency in this paragraph
2231 be made visible depending on the value of the
2232 .B _XOPEN_SOURCE
2233 feature test macro.
2234 .bP
2235 X/Open Curses mandates an application's inclusion of one standard C
2236 library header in a special case:
2237 .I \%stdarg.h
2238 before
2239 .I \%curses.h
2240 to prototype the functions
2241 .I \%vw_printw
2242 and
2243 .I \%vw_scanw
2244 (as well as the obsolete
2245 .I \%vwprintw
2246 and
2247 .IR \%vwscanw ).
2248 Each of these takes a variadic argument list,
2249 a
2250 .I \%va_list
2251 parameter,
2252 like that of \fI\%printf\fP(3).
2253 .IP
2254 SVr3
2255 .I curses
2256 introduced
2257 the two obsolete functions,
2258 and X/Open Curses the others.
2259 In between,
2260 SVr4
2261 .I curses
2262 provided for the possibility that an application might include either
2263 .I \%varargs.h
2264 or
2265 .IR \%stdarg.h .
2266 These represented contrasting approaches to handling variadic
2267 argument lists.
2268 The older interface,
2269 .IR \%varargs.h ,
2270 used a pointer to
2271 .I char \" V7, 32V, System III, 3BSD
2272 for variadic functions'
2273 .I \%va_list
2274 parameter.
2275 Later,
2276 the list acquired its own standard data type,
2277 .IR \%va_list ,
2278 defined in
2279 .IR \%stdarg.h ,
2280 empowering the compiler to check the types of a function call's actual
2281 parameters against the formal ones declared in its prototype.
2282 .IP
2283 No conforming implementations of X/Open Curses require an application
2284 to include
2285 .I \%stdarg.h
2286 before
2287 .I \%curses.h
2288 because they either have allowed for a special type,
2289 or,
2290 like
2291 .IR \%ncurses ,
2292 they include
2293 .I \%stdarg.h
2294 themselves to provide a portable interface.
2295 .SH AUTHORS
2296 Zeyd M. Ben-Halim,
2297 Eric S. Raymond,
2298 Thomas E. Dickey.
2299 Based on
2300 .I \%pcurses
2301 by Pavel Curtis.
2302 .SH SEE ALSO
2303 \fB\%curs_variables\fP(3X),
2304 \fB\%terminfo\fP(5),
2305 \fB\%user_caps\fP(5)