summaryrefslogtreecommitdiffstats
path: root/lib/libncurses/curs_inopts.3
blob: f8cd8148a94dca8aa42b46d990157782ceea9498 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
.TH curs_inopts 3 ""
.SH NAME
\fBcbreak\fR, \fBnocbreak\fR, \fBecho\fR,
\fBnoecho\fR, \fBhalfdelay\fR, \fBintrflush\fR, \fBkeypad\fR,
\fBmeta\fR, \fBnodelay\fR, \fBnotimeout\fR, \fBraw\fR, \fBnoraw\fR,
\fBnoqiflush\fR, \fBqiflush\fR, \fBtimeout\fR, \fBwtimeout\fR,
\fBtypeahead\fR - \fBncurses\fR input options
.SH SYNOPSIS
\fB#include <ncurses.h>\fR

\fBint cbreak(void);\fR
.br
\fBint nocbreak(void);\fR
.br
\fBint echo(void);\fR
.br
\fBint noecho(void);\fR
.br
\fBint halfdelay(int tenths);\fR
.br
\fBint intrflush(WINDOW *win, bool bf);\fR
.br
\fBint keypad(WINDOW *win, bool bf);\fR
.br
\fBint meta(WINDOW *win, bool bf);\fR
.br
\fBint nodelay(WINDOW *win, bool bf);\fR
.br
\fBint notimeout(WINDOW *win, bool bf);\fR
.br
\fBint raw(void);\fR
.br
\fBint noraw(void);\fR
.br
\fBvoid noqiflush(void);\fR
.br
\fBvoid qiflush(void);\fR
.br
\fBvoid timeout(int delay);\fR
.br
\fBvoid wtimeout(WINDOW *win, int delay);\fR
.br
\fBint typeahead(int fd);\fR
.br
.SH DESCRIPTION
Normally, the tty driver buffers typed characters until a newline or carriage
return is typed.  The \fBcbreak\fR routine disables line buffering and
erase/kill character-processing (interrupt and flow control characters are
unaffected), making characters typed by the user immediately available to the
program.  The \fBnocbreak\fR routine returns the terminal to normal (cooked)
mode.

Initially the terminal may or may not be in \fBcbreak\fR mode, as the mode is
inherited; therefore, a program should call \fBcbreak\fR or \fBnocbreak\fR
explicitly.  Most interactive programs using \fBncurses\fR set the \fBcbreak\fR
mode.  Note that \fBcbreak\fR overrides \fBraw\fR.  [See curs_getch(3) for a
discussion of how these routines interact with \fBecho\fR and \fBnoecho\fR.]

The \fBecho\fR and \fBnoecho\fR routines control whether characters typed by
the user are echoed by \fBgetch\fR as they are typed.  Echoing by the tty
driver is always disabled, but initially \fBgetch\fR is in echo mode, so
characters typed are echoed.  Authors of most interactive programs prefer to do
their own echoing in a controlled area of the screen, or not to echo at all, so
they disable echoing by calling \fBnoecho\fR.  [See curs_getch(3) for a
discussion of how these routines interact with \fBcbreak\fR and
\fBnocbreak\fR.]

The \fBhalfdelay\fR routine is used for half-delay mode, which is similar to
\fBcbreak\fR mode in that characters typed by the user are immediately
available to the program.  However, after blocking for \fItenths\fR tenths of
seconds, ERR is returned if nothing has been typed.  The value of \fBtenths\fR
must be a number between 1 and 255.  Use \fBnocbreak\fR to leave half-delay
mode.

If the \fBintrflush\fR option is enabled, (\fIbf\fR is \fBTRUE\fR), when an
interrupt key is pressed on the keyboard (interrupt, break, quit) all output in
the tty driver queue will be flushed, giving the effect of faster response to
the interrupt, but causing \fBncurses\fR to have the wrong idea of what is on
the screen.  Disabling (\fIbf\fR is \fBFALSE\fR), the option prevents the
flush.  The default for the option is inherited from the tty driver settings.
The window argument is ignored.

The \fBkeypad\fR option enables the keypad of the user's terminal.  If
enabled (\fIbf\fR is \fBTRUE\fR), the user can press a function key
(such as an arrow key) and \fBwgetch\fR returns a single value
representing the function key, as in \fBKEY_LEFT\fR.  If disabled
(\fIbf\fR is \fBFALSE\fR), \fBncurses\fR does not treat function keys
specially and the program has to interpret the escape sequences
itself.  If the keypad in the terminal can be turned on (made to
transmit) and off (made to work locally), turning on this option
causes the terminal keypad to be turned on when \fBwgetch\fR is
called.  The default value for keypad is false.

Initially, whether the terminal returns 7 or 8 significant bits on
input depends on the control mode of the tty driver [see termios(4)].
To force 8 bits to be returned, invoke \fBmeta\fR(\fIwin\fR,
\fBTRUE\fR).  To force 7 bits to be returned, invoke
\fBmeta\fR(\fIwin\fR, \fBFALSE\fR).  The window argument, \fIwin\fR,
is always ignored.  If the terminfo capabilities \fBsmm\fR (meta_on)
and \fBrmm\fR (meta_off) are defined for the terminal, \fBsmm\fR is
sent to the terminal when \fBmeta\fR(\fIwin\fR, \fBTRUE\fR) is called
and \fBrmm\fR is sent when \fBmeta\fR(\fIwin\fR, \fBFALSE\fR) is
called.

The \fBnodelay\fR option causes \fBgetch\fR to be a non-blocking call.
If no input is ready, \fBgetch\fR returns \fBERR\fR.  If disabled
(\fIbf\fR is \fBFALSE\fR), \fBgetch\fR waits until a key is pressed.

While interpreting an input escape sequence, \fBwgetch\fR sets a timer
while waiting for the next character.  If \fBnotimeout(\fR\fIwin\fR,
\fBTRUE\fR) is called, then \fBwgetch\fR does not set a timer.  The
purpose of the timeout is to differentiate between sequences received
from a function key and those typed by a user.

With the \fBraw\fR and \fBnoraw\fR routines, the terminal is placed
into or out of raw mode.  Raw mode is similar to \fBcbreak\fR mode, in
that characters typed are immediately passed through to the user
program.  The differences are that in raw mode, the interrupt, quit,
suspend, and flow control characters are all passed through
uninterpreted, instead of generating a signal.  The behavior of the
BREAK key depends on other bits in the tty driver that are not set by
\fBncurses\fR.

When the \fBnoqiflush\fR routine is used, normal flush of input and
output queues associated with the \fBINTR\fR, \fBQUIT\fR and
\fBSUSP\fR characters will not be done [see termios(4)].  When
\fBqiflush\fR is called, the queues will be flushed when these control
characters are read.

The \fBtimeout\fR and \fBwtimeout\fR routines set blocking or
non-blocking read for a given window.  If \fIdelay\fR is negative,
blocking read is used (\fIi\fR.\fIe\fR., waits indefinitely for
input).  If \fIdelay\fR is zero, then non-blocking read is used
(\fIi\fR.\fIe\fR., read returns \fBERR\fR if no input is waiting).  If
\fIdelay\fR is positive, then read blocks for \fIdelay\fR
milliseconds, and returns \fBERR\fR if there is still no input.
Hence, these routines provide the same functionality as \fBnodelay\fR,
plus the additional capability of being able to block for only
\fIdelay\fR milliseconds (where \fIdelay\fR is positive).

\fBncurses\fR does ``line-breakout optimization'' by looking for
typeahead periodically while updating the screen.  If input is found,
and it is coming from a tty, the current update is postponed until
\fBrefresh\fR or \fBdoupdate\fR is called again.  This allows faster
response to commands typed in advance.  Normally, the input FILE
pointer passed to \fBnewterm\fR, or \fBstdin\fR in the case that
\fBinitscr\fR was used, will be used to do this typeahead checking.
The \fBtypeahead\fR routine specifies that the file descriptor
\fIfd\fR is to be used to check for typeahead instead.  If \fIfd\fR is
-1, then no typeahead checking is done.
.SH RETURN VALUE
All routines that return an integer return \fBERR\fR upon failure and an
integer value other than \fBERR\fR upon successful completion, unless otherwise
noted in the preceding routine descriptions.
.SH NOTES
Note that \fBecho\fR, \fBnoecho\fR, \fBhalfdelay\fR, \fBintrflush\fR,
\fBmeta\fR, \fBnodelay\fR, \fBnotimeout\fR, \fBnoqiflush\fR,
\fBqiflush\fR, \fBtimeout\fR, and \fBwtimeout\fR may be macros.
.SH BUGS
The entry points \fBintrflush\fR, \fBqiflush\fR, \fBnoqiflush\fR, and
\fBtypeahead\fR are not yet implemented in ncurses 1.8.6.  The ncurses
code does not do typeahead checking during input as SVr4 curses does.
.SH SEE ALSO
\fBncurses\fR(3), \fBcurs_getch\fR(3), \fBcurs_initscr\fR(3), \fBtermios\fR(4)
.\"#
.\"# The following sets edit modes for GNU EMACS
.\"# Local Variables:
.\"# mode:nroff
.\"# fill-column:79
.\"# End:
OpenPOWER on IntegriCloud