* sale, use or other dealings in this Software without prior written *
* authorization. *
****************************************************************************
- * @Id: curs_inopts.3x,v 1.43 2023/08/19 20:55:23 tom Exp @
+ * @Id: curs_inopts.3x,v 1.60 2023/12/23 16:36:18 tom Exp @
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
-<TITLE>curs_inopts 3x 2023-08-19 ncurses 6.4 Library calls</TITLE>
+<TITLE>curs_inopts 3x 2023-12-23 ncurses 6.4 Library calls</TITLE>
<link rel="author" href="mailto:bug-ncurses@gnu.org">
</HEAD>
<BODY>
-<H1 class="no-header">curs_inopts 3x 2023-08-19 ncurses 6.4 Library calls</H1>
+<H1 class="no-header">curs_inopts 3x 2023-12-23 ncurses 6.4 Library calls</H1>
<PRE>
<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3x)</A></STRONG> Library calls <STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3x)</A></STRONG>
</PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
- <STRONG>cbreak</STRONG>, <STRONG>echo</STRONG>, <STRONG>halfdelay</STRONG>, <STRONG>intrflush</STRONG>, <STRONG>is_cbreak</STRONG>, <STRONG>is_echo</STRONG>, <STRONG>is_nl</STRONG>, <STRONG>is_raw</STRONG>,
- <STRONG>keypad</STRONG>, <STRONG>meta</STRONG>, <STRONG>nl</STRONG>, <STRONG>nocbreak</STRONG>, <STRONG>nodelay</STRONG>, <STRONG>noecho</STRONG>, <STRONG>nonl</STRONG>, <STRONG>noqiflush</STRONG>, <STRONG>noraw</STRONG>,
- <STRONG>notimeout</STRONG>, <STRONG>qiflush</STRONG>, <STRONG>raw</STRONG>, <STRONG>timeout</STRONG>, <STRONG>wtimeout</STRONG>, <STRONG>typeahead</STRONG> - <STRONG>curses</STRONG> input
- options
+ <STRONG>cbreak</STRONG>, <STRONG>echo</STRONG>, <STRONG>halfdelay</STRONG>, <STRONG>intrflush</STRONG>, <STRONG>is_cbreak</STRONG>, <STRONG>is_echo</STRONG>, <STRONG>is_nl</STRONG>, <STRONG>is_raw</STRONG>,
+ <STRONG>keypad</STRONG>, <STRONG>meta</STRONG>, <STRONG>nl</STRONG>, <STRONG>nocbreak</STRONG>, <STRONG>nodelay</STRONG>, <STRONG>noecho</STRONG>, <STRONG>nonl</STRONG>, <STRONG>noqiflush</STRONG>, <STRONG>noraw</STRONG>,
+ <STRONG>notimeout</STRONG>, <STRONG>qiflush</STRONG>, <STRONG>raw</STRONG>, <STRONG>timeout</STRONG>, <STRONG>wtimeout</STRONG>, <STRONG>typeahead</STRONG> - get and set
+ <EM>curses</EM> terminal input options
</PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
<STRONG>int</STRONG> <STRONG>typeahead(int</STRONG> <EM>fd</EM><STRONG>);</STRONG>
- /* extensions */
+ <EM>/*</EM> <EM>extensions</EM> <EM>*/</EM>
<STRONG>int</STRONG> <STRONG>is_cbreak(void);</STRONG>
<STRONG>int</STRONG> <STRONG>is_echo(void);</STRONG>
<STRONG>int</STRONG> <STRONG>is_nl(void);</STRONG>
</PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
- The <STRONG>ncurses</STRONG> library provides several functions which let an application
- change the way input from the terminal is handled. Some are global,
- applying to all windows. Others apply only to a specific window. Win-
- dow-specific settings are not automatically applied to new or derived
- windows. An application must apply these to each window, if the same
- behavior is needed.
-
-
-</PRE><H3><a name="h3-cbreak_nocbreak">cbreak/nocbreak</a></H3><PRE>
- Normally, the tty driver buffers typed characters until a newline or
- carriage return is typed. The <STRONG>cbreak</STRONG> routine disables line buffering
- and erase/kill character-processing (interrupt and flow control charac-
- ters are unaffected), making characters typed by the user immediately
- available to the program. The <STRONG>nocbreak</STRONG> routine returns the terminal to
- normal (cooked) mode.
+ <EM>ncurses</EM> provides several functions that let an application change the
+ way input from the terminal is handled. Some are global, applying to
+ all windows. Others apply only to a specific window. Window-specific
+ settings are not automatically applied to new or derived windows. An
+ application must apply these to each window if the same behavior is
+ desired.
+
+
+</PRE><H3><a name="h3-cbreak_nocbreak">cbreak, nocbreak</a></H3><PRE>
+ Normally, the terminal driver buffers typed characters until a newline
+ or carriage return is typed. The <STRONG>cbreak</STRONG> 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 <STRONG>nocbreak</STRONG> routine returns the
+ terminal to normal (cooked) mode.
Initially the terminal may or may not be in <STRONG>cbreak</STRONG> mode, as the mode is
- inherited; therefore, a program should call <STRONG>cbreak</STRONG> or <STRONG>nocbreak</STRONG> explic-
- itly. Most interactive programs using <STRONG>curses</STRONG> set the <STRONG>cbreak</STRONG> mode.
- Note that <STRONG>cbreak</STRONG> overrides <STRONG>raw</STRONG>. [See <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG> for a discussion
- of how these routines interact with <STRONG>echo</STRONG> and <STRONG>noecho</STRONG>.]
+ inherited; therefore, a program should call <STRONG>cbreak</STRONG> or <STRONG>nocbreak</STRONG>
+ explicitly. Most interactive programs using <EM>curses</EM> set the <STRONG>cbreak</STRONG>
+ mode. Note that <STRONG>cbreak</STRONG> overrides <STRONG>raw</STRONG>. [See <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG> for a
+ discussion of how these routines interact with <STRONG>echo</STRONG> and <STRONG>noecho</STRONG>.]
-</PRE><H3><a name="h3-echo_noecho">echo/noecho</a></H3><PRE>
+</PRE><H3><a name="h3-echo_noecho">echo, noecho</a></H3><PRE>
The <STRONG>echo</STRONG> and <STRONG>noecho</STRONG> routines control whether characters typed by the
- user are echoed by <STRONG><A HREF="curs_getch.3x.html">getch(3x)</A></STRONG> as they are typed. Echoing by the tty
- driver is always disabled, but initially <STRONG>getch</STRONG> is in echo mode, so
- characters typed are echoed. Authors of most interactive programs pre-
- fer to do their own echoing in a controlled area of the screen, or not
- to echo at all, so they disable echoing by calling <STRONG>noecho</STRONG>. [See
- <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG> for a discussion of how these routines interact with
- <STRONG>cbreak</STRONG> and <STRONG>nocbreak</STRONG>.]
+ user are echoed by <STRONG><A HREF="curs_getch.3x.html">getch(3x)</A></STRONG> as they are typed. Echoing by the
+ terminal driver is always disabled, but initially <STRONG>getch</STRONG> 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
+ <STRONG>noecho</STRONG>. [See <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG> for a discussion of how these routines
+ interact with <STRONG>cbreak</STRONG> and <STRONG>nocbreak</STRONG>.]
</PRE><H3><a name="h3-halfdelay">halfdelay</a></H3><PRE>
The <STRONG>halfdelay</STRONG> routine is used for half-delay mode, which is similar to
- <STRONG>cbreak</STRONG> mode in that characters typed by the user are immediately avail-
- able to the program. However, after blocking for <EM>tenths</EM> tenths of sec-
- onds, <STRONG>ERR</STRONG> is returned if nothing has been typed. The value of <EM>tenths</EM>
- must be a number between 1 and 255. Use <STRONG>nocbreak</STRONG> to leave half-delay
- mode.
+ <STRONG>cbreak</STRONG> mode in that characters typed by the user are immediately
+ available to the program. However, after blocking for <EM>tenths</EM> tenths of
+ seconds, <STRONG>ERR</STRONG> is returned if nothing has been typed. The value of
+ <EM>tenths</EM> must be a number between 1 and 255. Use <STRONG>nocbreak</STRONG> to leave half-
+ delay mode.
</PRE><H3><a name="h3-intrflush">intrflush</a></H3><PRE>
If the <STRONG>intrflush</STRONG> option is enabled (<EM>bf</EM> is <STRONG>TRUE</STRONG>), and 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 <STRONG>curses</STRONG> to have the wrong idea of what is
- on the screen. Disabling the option (<EM>bf</EM> is <STRONG>FALSE</STRONG>) prevents the flush.
- The default for the option is inherited from the tty driver settings.
- The window argument is ignored.
+ terminal driver queue is flushed, giving the effect of faster response
+ to the interrupt, but causing <EM>curses</EM> to have the wrong idea of what is
+ on the screen. Disabling the option (<EM>bf</EM> is <STRONG>FALSE</STRONG>), prevents the flush.
+ The default for the option is inherited from the terminal driver
+ settings. The <EM>win</EM> argument is ignored.
</PRE><H3><a name="h3-keypad">keypad</a></H3><PRE>
- The <STRONG>keypad</STRONG> option enables the keypad of the user's terminal. If en-
- abled (<EM>bf</EM> is <STRONG>TRUE</STRONG>), the user can press a function key (such as an arrow
- key) and <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG> returns a single value representing the function
- key, as in <STRONG>KEY_LEFT</STRONG>. If disabled (<EM>bf</EM> is <STRONG>FALSE</STRONG>), <STRONG>curses</STRONG> does not treat
- function keys specially and the program has to interpret the escape se-
- quences 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 <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG> is called.
- The default value for keypad is <STRONG>FALSE</STRONG>.
+ The <STRONG>keypad</STRONG> option enables the keypad of the user's terminal. If
+ enabled (<EM>bf</EM> is <STRONG>TRUE</STRONG>), the user can press a function key (such as an
+ arrow key) and <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG> returns a single value representing the
+ function key, as in <STRONG>KEY_LEFT</STRONG>. If disabled (<EM>bf</EM> is <STRONG>FALSE</STRONG>), <EM>curses</EM> 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 <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG> is
+ called. The default value for keypad is <STRONG>FALSE</STRONG>.
</PRE><H3><a name="h3-meta">meta</a></H3><PRE>
- Initially, whether the terminal returns 7 or 8 significant bits on in-
- put depends on the control mode of the tty driver [see <STRONG>termios(3)</STRONG>]. To
- force 8 bits to be returned, invoke <STRONG>meta</STRONG>(<EM>win</EM>, <STRONG>TRUE</STRONG>); this is equiva-
- lent, under POSIX, to setting the CS8 flag on the terminal. To force 7
- bits to be returned, invoke <STRONG>meta</STRONG>(<EM>win</EM>, <STRONG>FALSE</STRONG>); this is equivalent, under
- POSIX, to setting the CS7 flag on the terminal. The window argument,
- <EM>win</EM>, is always ignored. If the terminfo capabilities <STRONG>smm</STRONG> (meta_on) and
- <STRONG>rmm</STRONG> (meta_off) are defined for the terminal, <STRONG>smm</STRONG> is sent to the termi-
- nal when <STRONG>meta</STRONG>(<EM>win</EM>, <STRONG>TRUE</STRONG>) is called and <STRONG>rmm</STRONG> is sent when <STRONG>meta</STRONG>(<EM>win</EM>,
- <STRONG>FALSE</STRONG>) is called.
-
-
-</PRE><H3><a name="h3-nl_nonl">nl/nonl</a></H3><PRE>
+ Initially, whether the terminal returns 7 or 8 significant bits on
+ input depends on the control mode of the terminal driver [see
+ <STRONG>termios(3)</STRONG>]. To force 8 bits to be returned, invoke <STRONG>meta</STRONG>(<EM>win</EM>, <STRONG>TRUE</STRONG>);
+ this is equivalent, under POSIX, to setting the CS8 flag on the
+ terminal. To force 7 bits to be returned, invoke <STRONG>meta</STRONG>(<EM>win</EM>, <STRONG>FALSE</STRONG>);
+ this is equivalent, under POSIX, to setting the CS7 flag on the
+ terminal. The window argument, <EM>win,</EM> is always ignored. If the
+ terminfo capabilities <STRONG>smm</STRONG> (meta_on) and <STRONG>rmm</STRONG> (meta_off) are defined for
+ the terminal, <STRONG>smm</STRONG> is sent to the terminal when <STRONG>meta</STRONG>(<EM>win</EM>, <STRONG>TRUE</STRONG>) is
+ called and <STRONG>rmm</STRONG> is sent when <STRONG>meta</STRONG>(<EM>win</EM>, <STRONG>FALSE</STRONG>) is called.
+
+
+</PRE><H3><a name="h3-nl_nonl">nl, nonl</a></H3><PRE>
The <STRONG>nl</STRONG> and <STRONG>nonl</STRONG> routines control whether the underlying display device
translates the return key into newline on input.
When interpreting an escape sequence, <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG> sets a timer while
waiting for the next character. If <STRONG>notimeout(</STRONG><EM>win</EM>, <STRONG>TRUE</STRONG>) is called,
then <STRONG>wgetch</STRONG> 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.
+ distinguish sequences produced by a function key from those typed by a
+ user.
-</PRE><H3><a name="h3-raw_noraw">raw/noraw</a></H3><PRE>
+</PRE><H3><a name="h3-raw_noraw">raw, noraw</a></H3><PRE>
The <STRONG>raw</STRONG> and <STRONG>noraw</STRONG> routines place the terminal into or out of raw mode.
- Raw mode is similar to <STRONG>cbreak</STRONG> mode, in that characters typed are imme-
- diately 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 <STRONG>curses</STRONG>.
+ Raw mode is similar to <STRONG>cbreak</STRONG> 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
+ terminal driver that are not set by <EM>curses.</EM>
-</PRE><H3><a name="h3-qiflush_noqiflush">qiflush/noqiflush</a></H3><PRE>
+</PRE><H3><a name="h3-qiflush_nqiflush">qiflush, nqiflush</a></H3><PRE>
When the <STRONG>noqiflush</STRONG> routine is used, normal flush of input and output
queues associated with the <STRONG>INTR</STRONG>, <STRONG>QUIT</STRONG> and <STRONG>SUSP</STRONG> characters will not be
done [see <STRONG>termios(3)</STRONG>]. When <STRONG>qiflush</STRONG> is called, the queues will be
the interrupt had not occurred, after the handler exits.
-</PRE><H3><a name="h3-timeout_wtimeout">timeout/wtimeout</a></H3><PRE>
+</PRE><H3><a name="h3-timeout_wtimeout">timeout, wtimeout</a></H3><PRE>
The <STRONG>timeout</STRONG> and <STRONG>wtimeout</STRONG> routines set blocking or non-blocking read for
- a given window. If <EM>delay</EM> is negative, blocking read is used (i.e.,
- waits indefinitely for input). If <EM>delay</EM> is zero, then non-blocking
- read is used (i.e., read returns <STRONG>ERR</STRONG> if no input is waiting). If <EM>delay</EM>
- is positive, then read blocks for <EM>delay</EM> milliseconds, and returns <STRONG>ERR</STRONG>
+ a given window. If <EM>delay</EM> is negative, a blocking read is used (i.e.,
+ waits indefinitely for input). If <EM>delay</EM> is zero, then a non-blocking
+ read is used (i.e., <EM>read</EM> returns <STRONG>ERR</STRONG> if no input is waiting). If <EM>delay</EM>
+ is positive, then <EM>read</EM> blocks for <EM>delay</EM> milliseconds, and returns <STRONG>ERR</STRONG>
if there is still no input. Hence, these routines provide the same
functionality as <STRONG>nodelay</STRONG>, plus the additional capability of being able
to block for only <EM>delay</EM> milliseconds (where <EM>delay</EM> is positive).
</PRE><H3><a name="h3-typeahead">typeahead</a></H3><PRE>
- The <STRONG>curses</STRONG> library does "line-breakout optimization" by looking for ty-
- peahead periodically while updating the screen. If input is found, and
- it is coming from a tty, the current update is postponed until <STRONG>re-</STRONG>
- <STRONG><A HREF="refresh.3x.html">fresh(3x)</A></STRONG> or <STRONG>doupdate</STRONG> is called again. This allows faster response to
- commands typed in advance. Normally, the input FILE pointer passed to
- <STRONG>newterm</STRONG>, or <STRONG>stdin</STRONG> in the case that <STRONG>initscr</STRONG> was used, will be used to do
- this typeahead checking. The <STRONG>typeahead</STRONG> routine specifies that the file
- descriptor <EM>fd</EM> is to be used to check for typeahead instead. If <EM>fd</EM> is
- -1, then no typeahead checking is done.
+ <EM>curses</EM> does "line-breakout optimization" by looking for typeahead
+ periodically while updating the screen. If input is found, and it is
+ coming from a terminal, the current update is postponed until
+ <STRONG><A HREF="curs_refresh.3x.html">refresh(3x)</A></STRONG> or <STRONG>doupdate</STRONG> is called again. This allows faster response
+ to commands typed in advance. Normally, the input <EM>FILE</EM> pointer passed
+ to <STRONG>newterm</STRONG>, or <STRONG>stdin</STRONG> in the case that <STRONG>initscr</STRONG> was used, will be used to
+ do this typeahead checking. The <STRONG>typeahead</STRONG> routine specifies that the
+ file descriptor <EM>fd</EM> is to be used to check for typeahead instead. If <EM>fd</EM>
+ is -1, then no typeahead checking is done.
</PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
All routines that return an integer return <STRONG>ERR</STRONG> upon failure and <STRONG>OK</STRONG>
(SVr4 specifies only "an integer value other than <STRONG>ERR</STRONG>") upon successful
- completion, unless otherwise noted in the preceding routine descrip-
- tions.
+ completion, unless otherwise noted in the preceding routine
+ descriptions.
X/Open does not define any error conditions. In this implementation,
functions with a window parameter will return an error if it is null.
- Any function will also return an error if the terminal was not initial-
- ized. Also,
+ Any function will also return an error if the terminal was not
+ initialized. Also,
<STRONG>halfdelay</STRONG>
returns an error if its parameter is outside the range 1..255.
+</PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
+ <STRONG>echo</STRONG>, <STRONG>noecho</STRONG>, <STRONG>halfdelay</STRONG>, <STRONG>intrflush</STRONG>, <STRONG>meta</STRONG>, <STRONG>nl</STRONG>, <STRONG>nonl</STRONG>, <STRONG>nodelay</STRONG>, <STRONG>notimeout</STRONG>,
+ <STRONG>noqiflush</STRONG>, <STRONG>qiflush</STRONG>, <STRONG>timeout</STRONG>, and <STRONG>wtimeout</STRONG> may be implemented as macros.
+
+ <STRONG>noraw</STRONG> and <STRONG>nocbreak</STRONG> follow historical practice in that they attempt to
+ restore normal ("cooked") mode from raw and cbreak modes respectively.
+ Mixing <STRONG>raw</STRONG>/<STRONG>noraw</STRONG> and <STRONG>cbreak</STRONG>/<STRONG>nocbreak</STRONG> calls leads to terminal driver
+ control states that are hard to predict or understand; doing so is not
+ recommended.
+
+
</PRE><H2><a name="h2-EXTENSIONS">EXTENSIONS</a></H2><PRE>
- This implementation provides four functions which may be used to detect
- if the corresponding flags were set or reset:
+ <EM>ncurses</EM> provides four "is_" functions that may be used to detect if the
+ corresponding flags were set or reset.
- <STRONG>Query</STRONG> <STRONG>Set</STRONG> <STRONG>Reset</STRONG>
- ------------------------------
- is_cbreak cbreak nocbreak
- is_echo echo noecho
- is_nl nl nonl
- is_raw raw noraw
+ <STRONG>Query</STRONG> <STRONG>Set</STRONG> <STRONG>Reset</STRONG>
+ ------------------------------
+ is_cbreak cbreak nocbreak
+ is_echo echo noecho
+ is_nl nl nonl
+ is_raw raw noraw
In each case, the function returns
- 1 if the flag is set,
+ 1 if the flag is set,
- 0 if the flag is reset, or
+ 0 if the flag is reset, or
- -1 if the curses library was not initialized.
+ -1 if the library is not initialized.
- These routines are specific to ncurses. They were not supported on
- Version 7, BSD or System V implementations. It is recommended that any
- code depending on ncurses extensions be conditioned using NCURSES_VER-
- SION.
+ They were designed for <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG>, and are not found in SVr4 <EM>curses</EM>,
+ 4.4BSD <EM>curses</EM>, or any other previous <EM>curses</EM> implementation.
</PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
- Except as noted in the section on extensions, these functions are de-
- scribed in the XSI Curses standard, Issue 4.
-
- The ncurses library obeys the XPG4 standard and the historical practice
- of the AT&T curses implementations, in that the echo bit is cleared
- when curses initializes the terminal state. BSD curses differed from
- this slightly; it left the echo bit on at initialization, but the BSD
- <STRONG>raw</STRONG> call turned it off as a side-effect. For best portability, set
- <STRONG>echo</STRONG> or <STRONG>noecho</STRONG> explicitly just after initialization, even if your pro-
- gram remains in cooked mode.
-
- The XSI Curses standard is ambiguous on the question of whether <STRONG>raw</STRONG>
- should disable the CRLF translations controlled by <STRONG>nl</STRONG> and <STRONG>nonl</STRONG>. BSD
- curses did turn off these translations; AT&T curses (at least as late
- as SVr1) did not. We chose to do so, on the theory that a programmer
- requesting raw input wants a clean (ideally 8-bit clean) connection
- that the operating system will not alter.
-
- When <STRONG>keypad</STRONG> is first enabled, ncurses loads the key-definitions for the
- current terminal description. If the terminal description includes ex-
- tended string capabilities, e.g., from using the <STRONG>-x</STRONG> option of <STRONG>tic</STRONG>, then
- ncurses also defines keys for the capabilities whose names begin with
- "k". The corresponding keycodes are generated and (depending on previ-
- ous loads of terminal descriptions) may differ from one execution of a
- program to the next. The generated keycodes are recognized by the <STRONG>key-</STRONG>
- <STRONG>name</STRONG> function (which will then return a name beginning with "k" denot-
- ing the terminfo capability name rather than "K", used for curses key-
- names). On the other hand, an application can use <STRONG>define_key</STRONG> to estab-
- lish a specific keycode for a given string. This makes it possible for
- an application to check for an extended capability's presence with
- <STRONG>tigetstr</STRONG>, and reassign the keycode to match its own needs.
+ Applications employing <EM>ncurses</EM> extensions should condition their use on
+ the visibility of the <STRONG>NCURSES_VERSION</STRONG> preprocessor macro.
+
+ Except as noted in section "EXTENSIONS" above, X/Open Curses, Issue 4,
+ Version 2 describes these functions.
+
+ <EM>ncurses</EM> follows X/Open Curses and the historical practice of AT&T
+ <EM>curses</EM> implementations, in that the echo bit is cleared when <EM>curses</EM>
+ initializes the terminal state. BSD <EM>curses</EM> differed from this
+ slightly; it left the echo bit on at initialization, but the BSD <STRONG>raw</STRONG>
+ call turned it off as a side effect. For best portability, set <STRONG>echo</STRONG> or
+ <STRONG>noecho</STRONG> explicitly just after initialization, even if your program
+ remains in cooked mode.
+
+ X/Open Curses is ambiguous regarding whether <STRONG>raw</STRONG> should disable the
+ CR/LF translations controlled by <STRONG>nl</STRONG> and <STRONG>nonl</STRONG>. BSD <EM>curses</EM> did turn off
+ these translations; AT&T <EM>curses</EM> (at least as late as SVr1) did not.
+ <EM>ncurses</EM> does so, on the assumption that a programmer requesting raw
+ input wants a clean (ideally, 8-bit clean) connection that the
+ operating system will not alter.
+
+ When <STRONG>keypad</STRONG> is first enabled, <EM>ncurses</EM> loads the key definitions for the
+ current terminal description. If the terminal description includes
+ extended string capabilities, e.g., from using the <STRONG>-x</STRONG> option of <STRONG>tic</STRONG>,
+ then <EM>ncurses</EM> also defines keys for the capabilities whose names begin
+ with "k". The corresponding keycodes are generated and (depending on
+ previous loads of terminal descriptions) may differ from one execution
+ of a program to the next. The generated keycodes are recognized by the
+ <STRONG><A HREF="curs_util.3x.html">keyname(3x)</A></STRONG> function (which will then return a name beginning with "k"
+ denoting the terminfo capability name rather than "K", used for <EM>curses</EM>
+ key names). On the other hand, an application can use <STRONG><A HREF="define_key.3x.html">define_key(3x)</A></STRONG>
+ to establish a specific keycode for a given string. This makes it
+ possible for an application to check for an extended capability's
+ presence with <STRONG>tigetstr</STRONG>, and reassign the keycode to match its own
+ needs.
Low-level applications can use <STRONG>tigetstr</STRONG> to obtain the definition of any
- particular string capability. Higher-level applications which use the
- curses <STRONG>wgetch</STRONG> and similar functions to return keycodes rely upon the
+ particular string capability. Higher-level applications which use the
+ <EM>curses</EM> <STRONG>wgetch</STRONG> and similar functions to return keycodes rely upon the
order in which the strings are loaded. If more than one key definition
- has the same string value, then <STRONG>wgetch</STRONG> can return only one keycode.
- Most curses implementations (including ncurses) load key definitions in
- the order defined by the array of string capability names. The last
- key to be loaded determines the keycode which will be returned. In
- ncurses, you may also have extended capabilities interpreted as key
- definitions. These are loaded after the predefined keys, and if a ca-
- pability's value is the same as a previously-loaded key definition, the
- later definition is the one used.
-
-
-</PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
- Note that <STRONG>echo</STRONG>, <STRONG>noecho</STRONG>, <STRONG>halfdelay</STRONG>, <STRONG>intrflush</STRONG>, <STRONG>meta</STRONG>, <STRONG>nl</STRONG>, <STRONG>nonl</STRONG>, <STRONG>nodelay</STRONG>,
- <STRONG>notimeout</STRONG>, <STRONG>noqiflush</STRONG>, <STRONG>qiflush</STRONG>, <STRONG>timeout</STRONG>, and <STRONG>wtimeout</STRONG> may be macros.
-
- The <STRONG>noraw</STRONG> and <STRONG>nocbreak</STRONG> calls follow historical practice in that they
- attempt to restore to normal ("cooked") mode from raw and cbreak modes
- respectively. Mixing raw/noraw and cbreak/nocbreak calls leads to tty
- driver control states that are hard to predict or understand; it is not
- recommended.
+ has the same string value, then <STRONG>wgetch</STRONG> can return only one keycode.
+ Most <EM>curses</EM> implementations (including <EM>ncurses</EM>) load key definitions in
+ the order defined by the array of string capability names. The last
+ key to be loaded determines the keycode which will be returned. In
+ <EM>ncurses,</EM> you may also have extended capabilities interpreted as key
+ definitions. These are loaded after the predefined keys, and if a
+ capability's value is the same as a previously-loaded key definition,
+ the later definition is the one used.
</PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
- <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG>, <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>, <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>, <STRONG>de-</STRONG>
- <STRONG><A HREF="define_key.3x.html">fine_key(3x)</A></STRONG>, <STRONG>termios(3)</STRONG>
+ <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG>, <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>, <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>,
+ <STRONG><A HREF="define_key.3x.html">define_key(3x)</A></STRONG>, <STRONG>termios(3)</STRONG>
-ncurses 6.4 2023-08-19 <STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3x)</A></STRONG>
+ncurses 6.4 2023-12-23 <STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3x)</A></STRONG>
</PRE>
<div class="nav">
<ul>
<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
<ul>
-<li><a href="#h3-cbreak_nocbreak">cbreak/nocbreak</a></li>
-<li><a href="#h3-echo_noecho">echo/noecho</a></li>
+<li><a href="#h3-cbreak_nocbreak">cbreak, nocbreak</a></li>
+<li><a href="#h3-echo_noecho">echo, noecho</a></li>
<li><a href="#h3-halfdelay">halfdelay</a></li>
<li><a href="#h3-intrflush">intrflush</a></li>
<li><a href="#h3-keypad">keypad</a></li>
<li><a href="#h3-meta">meta</a></li>
-<li><a href="#h3-nl_nonl">nl/nonl</a></li>
+<li><a href="#h3-nl_nonl">nl, nonl</a></li>
<li><a href="#h3-nodelay">nodelay</a></li>
<li><a href="#h3-notimeout">notimeout</a></li>
-<li><a href="#h3-raw_noraw">raw/noraw</a></li>
-<li><a href="#h3-qiflush_noqiflush">qiflush/noqiflush</a></li>
-<li><a href="#h3-timeout_wtimeout">timeout/wtimeout</a></li>
+<li><a href="#h3-raw_noraw">raw, noraw</a></li>
+<li><a href="#h3-qiflush_nqiflush">qiflush, nqiflush</a></li>
+<li><a href="#h3-timeout_wtimeout">timeout, wtimeout</a></li>
<li><a href="#h3-typeahead">typeahead</a></li>
</ul>
</li>
<li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
+<li><a href="#h2-NOTES">NOTES</a></li>
<li><a href="#h2-EXTENSIONS">EXTENSIONS</a></li>
<li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
-<li><a href="#h2-NOTES">NOTES</a></li>
<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
</ul>
</div>