ff4ff35918
Red Bear OS is a full fork. All sources must be available from git clone with zero network access. Removed gitignore rules that excluded fetched source trees under recipes/*/source/, local/recipes/kde/*/source/, local/recipes/qt/*/source/, and vendor source trees. Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded. 127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt frameworks, mesa, wayland, DRM drivers, and every other recipe source.
805 lines
20 KiB
Plaintext
805 lines
20 KiB
Plaintext
'\" t
|
|
.\"***************************************************************************
|
|
.\" Copyright 2018-2024,2025 Thomas E. Dickey *
|
|
.\" Copyright 1998-2016,2017 Free Software Foundation, Inc. *
|
|
.\" *
|
|
.\" Permission is hereby granted, free of charge, to any person obtaining a *
|
|
.\" copy of this software and associated documentation files (the *
|
|
.\" "Software"), to deal in the Software without restriction, including *
|
|
.\" without limitation the rights to use, copy, modify, merge, publish, *
|
|
.\" distribute, distribute with modifications, sublicense, and/or sell *
|
|
.\" copies of the Software, and to permit persons to whom the Software is *
|
|
.\" furnished to do so, subject to the following conditions: *
|
|
.\" *
|
|
.\" The above copyright notice and this permission notice shall be included *
|
|
.\" in all copies or substantial portions of the Software. *
|
|
.\" *
|
|
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
|
|
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
|
|
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
|
|
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
|
|
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
|
|
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
|
|
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
|
.\" *
|
|
.\" Except as contained in this notice, the name(s) of the above copyright *
|
|
.\" holders shall not be used in advertising or otherwise to promote the *
|
|
.\" sale, use or other dealings in this Software without prior written *
|
|
.\" authorization. *
|
|
.\"***************************************************************************
|
|
.\"
|
|
.\" $Id: curs_getch.3x,v 1.134 2025/11/12 01:06:36 tom Exp $
|
|
.TH curs_getch 3X 2025-11-11 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls"
|
|
.ie \n(.g \{\
|
|
.ds `` \(lq
|
|
.ds '' \(rq
|
|
.ds ^ \(ha
|
|
.\}
|
|
.el \{\
|
|
.ie t .ds `` ``
|
|
.el .ds `` ""
|
|
.ie t .ds '' ''
|
|
.el .ds '' ""
|
|
.ds ^ ^
|
|
.\}
|
|
.
|
|
.ie \n(.g .ds : \:
|
|
.el .ds : \" empty
|
|
.
|
|
.de bP
|
|
.ie n .IP \(bu 4
|
|
.el .IP \(bu 2
|
|
..
|
|
.SH NAME
|
|
\fB\%getch\fP,
|
|
\fB\%wgetch\fP,
|
|
\fB\%mvgetch\fP,
|
|
\fB\%mvwgetch\fP,
|
|
\fB\%ungetch\fP,
|
|
\fB\%has_key\fP \-
|
|
get (or push back) characters from \fIcurses\fR terminal keyboard buffer
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <curses.h>
|
|
.PP
|
|
.B int getch(void);
|
|
.B int wgetch(WINDOW * \fIwin\fP);
|
|
.B int mvgetch(int \fIy\fP, int \fIx\fP);
|
|
.B int mvwgetch(WINDOW * \fIwin\fP, int \fIy\fP, int \fIx\fP);
|
|
.PP
|
|
.B int ungetch(int \fIc\fP);
|
|
.PP
|
|
.\" XXX: Move has_key into its own page like define_key and key_defined?
|
|
\fI/* extension */\fP
|
|
.B int has_key(int \fIc\fP);
|
|
.fi
|
|
.SH DESCRIPTION
|
|
.SS "Reading Characters"
|
|
.B \%wgetch
|
|
gathers a key event from the terminal keyboard associated with a
|
|
.I curses
|
|
window
|
|
.IR win "."
|
|
\fB\%ncurses\fP(3X) describes the variants of this function.
|
|
.PP
|
|
When input is pending,
|
|
.B \%wgetch
|
|
returns an integer identifying the key event;
|
|
for alphanumeric and punctuation keys,
|
|
the space bar,
|
|
and (usually) the Backspace,
|
|
Tab,
|
|
Return,
|
|
and Escape keys,
|
|
this value corresponds to the character encoding used by the terminal.
|
|
Use of the control key as a modifier,
|
|
by holding it down while pressing and releasing another key,
|
|
often results in a distinct code.
|
|
The behavior of other keys depends on whether
|
|
.I win
|
|
is in keypad mode;
|
|
see subsection \*(``Keypad Mode\*('' below.
|
|
.PP
|
|
If no input is pending,
|
|
then if the no-delay flag is set in the window
|
|
(see \fB\%nodelay\fP(3X)),
|
|
the function returns
|
|
.BR ERR ";"
|
|
otherwise,
|
|
.I curses
|
|
waits until the terminal has input.
|
|
If \fB\%cbreak\fP(3X) or \fB\%raw\fP(3X)
|
|
has been called,
|
|
this happens after
|
|
.I curses
|
|
reads one key event.
|
|
If \fB\%nocbreak\fP(3X) or \fB\%noraw\fP(3X)
|
|
has been called,
|
|
it occurs when
|
|
.I curses
|
|
reads a newline. \" "newline" because canonical mode normalizes NL/CR
|
|
(Because the terminal's canonical or \*(``cooked\*('' mode
|
|
is line-buffered,
|
|
multiple
|
|
.B \%wgetch
|
|
calls may then be necessary to empty the input queue.)
|
|
If \fB\%halfdelay\fP(3X)
|
|
has been called,
|
|
.I curses
|
|
waits until input is available or the specified delay elapses.
|
|
.PP
|
|
If \fB\%echo\fP(3X) has been called,
|
|
and the window is not a pad,
|
|
.I curses
|
|
writes the returned character
|
|
.I c
|
|
to the window
|
|
(at the cursor position)
|
|
per the following rules.
|
|
.bP
|
|
If
|
|
.I c
|
|
matches the terminal's erase character
|
|
(see \fB\%erasechar\fP(3X)),
|
|
and the cursor is not at the window's leftmost column,
|
|
the cursor moves leftward one position
|
|
and the new position is erased
|
|
as if \fB\%wmove\fP(3X) and then \fB\%wdelch\fP(3X) were called.
|
|
When the window's keypad mode is enabled
|
|
(see below),
|
|
.B \%KEY_LEFT
|
|
and
|
|
.B \%KEY_BACKSPACE
|
|
are handled the same way.
|
|
.bP
|
|
.I curses
|
|
writes any other
|
|
.I c
|
|
to the window,
|
|
as with \fB\%wechochar\fP(3X).
|
|
.bP
|
|
If the window
|
|
.I win
|
|
has been moved or modified since the last call to
|
|
\fB\%wrefresh\fP(3X),
|
|
.I curses
|
|
calls
|
|
.B \%wrefresh
|
|
on it.
|
|
.PP
|
|
If
|
|
.I c
|
|
is a carriage return and \fBnl\fP(3X) has been called,
|
|
.B \%wgetch
|
|
returns the character code for line feed instead.
|
|
.SS "Keypad Mode"
|
|
Call \fB\%keypad\fP(3X) on a window to configure keypad mode
|
|
when reading input from it.
|
|
In
|
|
.IR "keypad mode" ","
|
|
.I curses
|
|
treats key strokes not from the alphabetic section of the keyboard
|
|
(those corresponding to the ECMA-6 character set \(em
|
|
see \fI\%ascii\fP(7) \(em
|
|
optionally modified by either the control or shift keys)
|
|
as
|
|
.I function
|
|
keys.
|
|
(In
|
|
.IR curses ","
|
|
the term \*(``function key\*('' includes but is not limited to keycaps
|
|
engraved with \*(``F1\*('',
|
|
\*(``PF1\*('',
|
|
and so on.)
|
|
If a window is in keypad mode,
|
|
.B \%wgetch
|
|
translates these key strokes to a numeric code corresponding to the
|
|
.B KEY_
|
|
symbols listed in subsection \*(``Key Codes\*('' below.
|
|
If the window is not in keypad mode,
|
|
the input queue populates with
|
|
the characters of the function key's escape sequence,
|
|
which the application must collect individually with multiple
|
|
.B \%wgetch
|
|
calls.
|
|
.bP
|
|
The
|
|
.I \%curses.h
|
|
header file declares many
|
|
.I "function keys"
|
|
whose names begin with
|
|
.BR KEY_ ";"
|
|
these object-like macros
|
|
have integer values outside the range of eight-bit character codes.
|
|
.bP
|
|
In
|
|
.IR \%ncurses ","
|
|
.I "user-defined function keys"
|
|
are configured with \fB\%define_key\fP(3X);
|
|
they have no names,
|
|
but are also expected to
|
|
have integer values outside the range of eight-bit character codes.
|
|
.PP
|
|
A variable intended to hold a function key code must thus be of type
|
|
.I short
|
|
or larger.
|
|
.PP
|
|
Most terminals one encounters follow the ECMA-48 standard insofar as
|
|
their function keys produce character sequences prefixed with the
|
|
escape character ESC.
|
|
This fact implies that
|
|
.I curses
|
|
cannot distinguish a user's press of the escape key
|
|
(assuming it sends ESC)
|
|
from the beginning of a function key's character sequence without
|
|
waiting to see if,
|
|
and how soon,
|
|
further input arrives.
|
|
.bP
|
|
If the escape sequence
|
|
matches a string capability defining a function key
|
|
for the terminal type
|
|
(such as
|
|
.B \%key_home
|
|
.RB \%( khome )
|
|
or
|
|
.B \%key_up
|
|
.RB \%( kuu1 )),
|
|
.B \%wgetch
|
|
returns the function key code corresponding to the unique sequence
|
|
defined by the terminal.
|
|
.bP
|
|
If the escape sequence matches no function keys
|
|
defined for the terminal type,
|
|
call
|
|
.B \%wgetch
|
|
repeatedly to obtain
|
|
the codes of the individual characters of the sequence,
|
|
in the order they occurred in the input.
|
|
.bP
|
|
If
|
|
.B \%wgetch
|
|
cannot decide the validity of the input as a function key
|
|
because it has not read enough characters to disambiguate it,
|
|
the function waits until it has this information or the
|
|
.I "escape delay"
|
|
elapses.
|
|
Configure the escape delay
|
|
with the global variable
|
|
.BR \%ESCDELAY ","
|
|
an extension
|
|
(see section \*(``EXTENSIONS\*('' below),
|
|
or the environment variable of the same name
|
|
(see section \*(``ENVIRONMENT\*('' of \fB\%ncurses\fP(3X)),
|
|
also an extension.
|
|
.PP
|
|
Consequently,
|
|
a user of a
|
|
.I curses
|
|
application that employs keypad mode
|
|
may experience a pause or \*(``hang\*(''
|
|
after pressing the escape key while
|
|
.I curses
|
|
collects sufficient characters to disambiguate the input.
|
|
If the window is in \*(``no time-out\*('' mode,
|
|
the escape delay is effectively infinite;
|
|
see \fB\%notimeout\fP(3X).
|
|
In the event of such a pause,
|
|
further typing \*(``awakens\*(''
|
|
.IR curses "."
|
|
.SS "Ungetting Characters"
|
|
.B \%ungetch
|
|
places
|
|
.I c
|
|
into the input queue to be returned by the next call to
|
|
.BR \%wgetch "."
|
|
A single input queue serves all windows associated with the screen.
|
|
.SS "Key Codes"
|
|
The header file
|
|
.I \%curses.h
|
|
defines the following function key codes.
|
|
.bP
|
|
Except for the special case of
|
|
.BR \%KEY_RESIZE ","
|
|
a window's keypad mode must be enabled for
|
|
.B \%wgetch
|
|
to read these codes from it.
|
|
.bP
|
|
Not all of these are necessarily supported on any particular terminal.
|
|
.bP
|
|
The naming convention may seem obscure,
|
|
with some apparent misspellings
|
|
(such as \*(``RSUME\*('' for \*(``resume\*('');
|
|
the names correspond to the
|
|
.I \%term\%info
|
|
capability names for the keys,
|
|
and were standardized before the IBM PC/AT keyboard layout achieved a
|
|
dominant position in industry.
|
|
.PP
|
|
.RS
|
|
.\" XXX: Move this list into ncurses(3X), rather than duplicating it in
|
|
.\" get_wch(3X) or having that page cross reference this one?
|
|
.TS
|
|
Lb Lb
|
|
Lb Lw(36n)x.
|
|
Symbol Key name
|
|
=
|
|
KEY_BREAK Break key
|
|
.ne 4
|
|
KEY_DOWN Arrow keys
|
|
KEY_UP \^
|
|
KEY_LEFT \^
|
|
KEY_RIGHT \^
|
|
KEY_HOME Home key (upward+left arrow)
|
|
KEY_BACKSPACE Backspace
|
|
KEY_F0 T{
|
|
Function keys; space for 64 keys is reserved
|
|
T}
|
|
KEY_F(\fIn\fP) T{
|
|
Function key \fIn\fP where 0 \(<= \fIn\fP \(<= 63
|
|
T}
|
|
KEY_DL Delete line
|
|
KEY_IL Insert line
|
|
KEY_DC Delete character
|
|
KEY_IC Insert character/Enter insert mode
|
|
KEY_EIC Exit insert character mode
|
|
KEY_CLEAR Clear screen
|
|
KEY_EOS Clear to end of screen
|
|
KEY_EOL Clear to end of line
|
|
KEY_SF Scroll one line forward
|
|
KEY_SR Scroll one line backward (reverse)
|
|
KEY_NPAGE Next page/Page up
|
|
KEY_PPAGE Previous page/Page down
|
|
KEY_STAB Set tab
|
|
KEY_CTAB Clear tab
|
|
KEY_CATAB Clear all tabs
|
|
KEY_ENTER Enter/Send
|
|
KEY_SRESET Soft (partial) reset
|
|
KEY_RESET (Hard) reset
|
|
KEY_PRINT Print/Copy
|
|
KEY_LL Home down/Bottom (lower left)
|
|
KEY_A1 Upper left of keypad
|
|
KEY_A3 Upper right of keypad
|
|
KEY_B2 Center of keypad
|
|
KEY_C1 Lower left of keypad
|
|
KEY_C3 Lower right of keypad
|
|
KEY_BTAB Back tab key
|
|
KEY_BEG Beg(inning) key
|
|
KEY_CANCEL Cancel key
|
|
KEY_CLOSE Close key
|
|
KEY_COMMAND Cmd (command) key
|
|
KEY_COPY Copy key
|
|
KEY_CREATE Create key
|
|
KEY_END End key
|
|
KEY_EXIT Exit key
|
|
KEY_FIND Find key
|
|
KEY_HELP Help key
|
|
KEY_MARK Mark key
|
|
KEY_MESSAGE Message key
|
|
KEY_MOUSE Mouse event occurred
|
|
KEY_MOVE Move key
|
|
KEY_NEXT Next object key
|
|
KEY_OPEN Open key
|
|
KEY_OPTIONS Options key
|
|
KEY_PREVIOUS Previous object key
|
|
KEY_REDO Redo key
|
|
KEY_REFERENCE Ref(erence) key
|
|
KEY_REFRESH Refresh key
|
|
KEY_REPLACE Replace key
|
|
KEY_RESIZE Screen resized
|
|
KEY_RESTART Restart key
|
|
KEY_RESUME Resume key
|
|
KEY_SAVE Save key
|
|
KEY_SELECT Select key
|
|
KEY_SUSPEND Suspend key
|
|
KEY_UNDO Undo key
|
|
_
|
|
KEY_SBEG Shifted beginning key
|
|
KEY_SCANCEL Shifted cancel key
|
|
KEY_SCOMMAND Shifted command key
|
|
KEY_SCOPY Shifted copy key
|
|
KEY_SCREATE Shifted create key
|
|
KEY_SDC Shifted delete character key
|
|
KEY_SDL Shifted delete line key
|
|
KEY_SEND Shifted end key
|
|
KEY_SEOL Shifted clear line key
|
|
KEY_SEXIT Shifted exit key
|
|
KEY_SFIND Shifted find key
|
|
KEY_SHELP Shifted help key
|
|
KEY_SHOME Shifted home key
|
|
KEY_SIC Shifted insert key
|
|
KEY_SLEFT Shifted left arrow key
|
|
KEY_SMESSAGE Shifted message key
|
|
KEY_SMOVE Shifted move key
|
|
KEY_SNEXT Shifted next object key
|
|
KEY_SOPTIONS Shifted options key
|
|
KEY_SPREVIOUS Shifted previous object key
|
|
KEY_SPRINT Shifted print key
|
|
KEY_SREDO Shifted redo key
|
|
KEY_SREPLACE Shifted replace key
|
|
KEY_SRIGHT Shifted right arrow key
|
|
KEY_SRSUME Shifted resume key
|
|
KEY_SSAVE Shifted save key
|
|
KEY_SSUSPEND Shifted suspend key
|
|
KEY_SUNDO Shifted undo key
|
|
.TE
|
|
.RE
|
|
.PP
|
|
Many keyboards feature a nine-key directional pad.
|
|
.PP
|
|
.RS
|
|
.TS
|
|
allbox center;
|
|
C C C.
|
|
A1 up A3
|
|
left B2 right
|
|
C1 down C3
|
|
.TE
|
|
.RE
|
|
.sp
|
|
Two of the symbols in the list above do
|
|
.I not
|
|
correspond to a physical key.
|
|
.bP
|
|
.B \%wgetch
|
|
returns
|
|
.BR \%KEY_RESIZE ","
|
|
even if the window's keypad mode is disabled,
|
|
if
|
|
.I \%ncurses
|
|
has handled a
|
|
.I \%SIGWINCH
|
|
signal since
|
|
.B \%wgetch
|
|
was called;
|
|
see \fB\%initscr\fP(3X) and \fB\%resizeterm\fP(3X).
|
|
.bP
|
|
.B \%wgetch
|
|
returns
|
|
.B \%KEY_MOUSE
|
|
to indicate that a mouse event is pending collection;
|
|
see \fB\%curs_mouse\fP(3X).
|
|
Receipt of this code requires a window's keypad mode to be enabled,
|
|
because to interpret mouse input
|
|
(as with \fI\%xterm\fP(1)'s mouse protocol),
|
|
.I \%ncurses
|
|
must read an escape sequence,
|
|
as with a function key.
|
|
.SS "Testing Key Codes"
|
|
In
|
|
.IR \%ncurses ","
|
|
.B \%has_key
|
|
returns a Boolean value indicating whether the terminal type recognizes
|
|
its parameter as a key code value.
|
|
See also
|
|
\fB\%define_key\fP(3X) and \fB\%key_defined\fP(3X).
|
|
.SH RETURN VALUE
|
|
.B \%wgetch
|
|
returns a key code identifying the key event as described above,
|
|
which may include
|
|
.B \%KEY_RESIZE
|
|
or
|
|
.B \%KEY_MOUSE
|
|
indicating non-key events,
|
|
or
|
|
.B ERR
|
|
on failure.
|
|
.B \%wgetch
|
|
fails if
|
|
its timeout expires without any data arriving,
|
|
which cannot happen if \fB\%nodelay\fP(3X) is in effect on the window.
|
|
.PP
|
|
In
|
|
.IR \%ncurses ,
|
|
.B \%wgetch
|
|
also fails if
|
|
.bP
|
|
the
|
|
.I curses
|
|
screen has not been initialized,
|
|
.bP
|
|
(for functions taking a
|
|
.I \%WINDOW
|
|
pointer argument)
|
|
.I win
|
|
is a null pointer,
|
|
or
|
|
.bP
|
|
execution was interrupted by a signal,
|
|
in which case the library sets
|
|
.I \%errno
|
|
to
|
|
.IR \%EINTR "."
|
|
.PP
|
|
Functions prefixed with \*(``mv\*('' first perform cursor movement and
|
|
fail if the position
|
|
.RI ( y ,
|
|
.IR x ")"
|
|
is outside the window boundaries.
|
|
.PP
|
|
.B \%ungetch
|
|
returns
|
|
.B OK
|
|
on success and
|
|
.B ERR
|
|
on failure.
|
|
In
|
|
.IR \%ncurses ,
|
|
.B \%ungetch
|
|
fails if
|
|
.bP
|
|
the
|
|
.I curses
|
|
screen has not been initialized,
|
|
or
|
|
.bP
|
|
there is no more room in the input queue.
|
|
.PP
|
|
.B \%has_key
|
|
returns
|
|
.B TRUE
|
|
or
|
|
.BR FALSE "."
|
|
.SH NOTES
|
|
.BR \%getch ","
|
|
.BR \%mvgetch ","
|
|
and
|
|
.B \%mvwgetch
|
|
may be implemented as macros.
|
|
.PP
|
|
.I curses
|
|
discourages assignment of the ESC key to a discrete function by the
|
|
programmer because the library requires a delay while it awaits the
|
|
potential remainder of a terminal escape sequence.
|
|
.PP
|
|
Some key strokes are indistinguishable from control characters;
|
|
for example,
|
|
.B \%KEY_ENTER
|
|
may be the same as
|
|
.BR \*^M ","
|
|
.\" as with att630 or pccon+keys
|
|
and
|
|
.B \%KEY_BACKSPACE
|
|
may be the same as
|
|
.B \*^H
|
|
.\" as with att505 or vt52-basic
|
|
or
|
|
.BR \*^? "."
|
|
.\" as with pccon+keys or vt320
|
|
Consult the
|
|
.I \%term\%info
|
|
entry for the terminal type to determine whether this is the case;
|
|
see \fB\%infocmp\fP(1).
|
|
Some
|
|
.I curses
|
|
implementations,
|
|
including
|
|
.IR \%ncurses ","
|
|
honor the
|
|
.I \%term\%info
|
|
key definitions;
|
|
others treat such control characters specially.
|
|
.PP
|
|
.I curses
|
|
distinguishes the Enter keys in the alphabetic and numeric keypad
|
|
sections of a keyboard because (most) terminals do.
|
|
.B \%KEY_ENTER
|
|
refers to the key on the numeric keypad and,
|
|
like other function keys,
|
|
is reliably recognized only if the window's keypad mode is enabled.
|
|
.bP
|
|
The
|
|
.I \%term\%info
|
|
.B \%key_enter
|
|
.RB ( kent )
|
|
capability describes the character (sequence) sent by the Enter key of
|
|
a terminal's numeric
|
|
(or similar)
|
|
keypad.
|
|
.bP
|
|
\*(``Enter or send\*('' is X/Open Curses's description of this key.
|
|
.PP
|
|
.I curses
|
|
treats the Enter or Return key in the
|
|
.I alphabetic
|
|
section of the keyboard differently.
|
|
.bP
|
|
It usually produces a control code for carriage return
|
|
.RB ( \*^M )
|
|
or line feed
|
|
.RB ( \*^J ).
|
|
.bP
|
|
Depending on the terminal mode
|
|
(raw,
|
|
cbreak,
|
|
or
|
|
canonical),
|
|
and whether \fB\%nl\fP(3X) or \fB\%nonl\fP(3X) has been called,
|
|
.B \%wgetch
|
|
may return either a carriage return or line feed upon an Enter or Return
|
|
key stroke.
|
|
.PP
|
|
Use of
|
|
.B \%wgetch
|
|
with \fB\%echo\fP(3X) and neither \fB\%cbreak\fP(3X) nor \fB\%raw\fP(3X)
|
|
is not well-defined.
|
|
.PP
|
|
Historically,
|
|
the list of key code macros above was influenced by the keyboard of the
|
|
AT&T 7300
|
|
(also known variously as the \*(``3B1\*('', \*(``Safari 4\*('', and
|
|
\*(``UNIX PC\*(''),
|
|
a 1985 machine rich in function keys.
|
|
Today's computer keyboards are based on that of the IBM PC/AT
|
|
and tend to have fewer.
|
|
A
|
|
.I curses
|
|
application can expect such a keyboard to transmit key codes
|
|
.BR \%KEY_UP ","
|
|
.BR \%KEY_DOWN ","
|
|
.BR \%KEY_LEFT ","
|
|
.BR \%KEY_RIGHT ","
|
|
.BR \%KEY_HOME ","
|
|
.BR \%KEY_END ","
|
|
.B \%KEY_PPAGE
|
|
(Page Up),
|
|
.B \%KEY_NPAGE
|
|
(Page Down),
|
|
.B \%KEY_IC
|
|
(Insert),
|
|
.B \%KEY_DC
|
|
(Delete),
|
|
.BR \%KEY_A1 ","
|
|
.BR \%KEY_A3 ","
|
|
.BR \%KEY_B2 ","
|
|
.BR \%KEY_C1 ","
|
|
.BR \%KEY_C3 ","
|
|
and
|
|
.BI \%KEY_F( n )
|
|
for 1 \(<=
|
|
.I n
|
|
\(<= 12.
|
|
.\" Other numeric keypad keys from the DEC VT220 (specifically, the
|
|
.\" LK201 commonly used with it) and IBM PC/AT keyboards -- the comma
|
|
.\" (DEC); plus, star, and slash (PC); and zero, dot, and minus (both)
|
|
.\" have no standard key capability codes.
|
|
.SH EXTENSIONS
|
|
In
|
|
.IR \%ncurses ","
|
|
when a window's \*(``no time-out\*('' mode is
|
|
.I not
|
|
set,
|
|
the
|
|
.B \%ESCDELAY
|
|
variable configures the duration of the timer used to disambiguate a
|
|
function key character sequence from a series of key strokes beginning
|
|
with ESC typed by the user;
|
|
see
|
|
\fB\%curs_variables\fP(3X).
|
|
.PP
|
|
.B \%has_key
|
|
is an
|
|
.I \%ncurses
|
|
extension,
|
|
and is not found in SVr4
|
|
.IR curses ","
|
|
4.4BSD
|
|
.IR curses ","
|
|
or any other previous
|
|
.I curses
|
|
implementation.
|
|
.SH PORTABILITY
|
|
Applications employing
|
|
.I \%ncurses
|
|
extensions should condition their use on the visibility of the
|
|
.B \%NCURSES_VERSION
|
|
preprocessor macro.
|
|
.PP
|
|
Except as noted in section \*(``EXTENSIONS\*('' above,
|
|
X/Open Curses Issue\ 4 describes these functions.
|
|
It specifies no error conditions for them.
|
|
.PP
|
|
SVr4 describes a successful return value only as
|
|
\*(``an integer value other than
|
|
.IR ERR \*(''. \" Courier roman in source; SVID 4, vol. 3, p. 494
|
|
.PP
|
|
.I \%wgetch
|
|
reads only single-byte characters.
|
|
.PP
|
|
The echo behavior of these functions on input of
|
|
.I KEY_
|
|
or backspace characters is not documented in SVr4
|
|
.IR curses "."
|
|
.PP
|
|
The behavior of
|
|
.I \%wgetch
|
|
in the presence of signal handlers is not documented in SVr4
|
|
.I curses
|
|
and is unspecified by X/Open Curses.
|
|
In historical
|
|
.I curses
|
|
implementations,
|
|
it varied depending on whether the operating system's dispatch of a
|
|
signal to a handler interrupted a \fIread\fP(2) call in progress,
|
|
and also
|
|
(in some implementations)
|
|
whether an input timeout or non-blocking mode had been set.
|
|
A portable
|
|
.I curses
|
|
application prepares for two cases:
|
|
(a) signal receipt does not interrupt
|
|
.IR \%wgetch ";"
|
|
and
|
|
(b) signal receipt interrupts
|
|
.I \%wgetch
|
|
and causes it to return
|
|
.I ERR
|
|
with
|
|
.I \%errno
|
|
set to
|
|
.IR \%EINTR "."
|
|
.PP
|
|
.I \%KEY_MOUSE
|
|
is mentioned in X/Open Curses,
|
|
along with a few related
|
|
.I \%term\%info
|
|
capabilities,
|
|
but no higher-level functions use the feature.
|
|
The implementation in
|
|
.I \%ncurses
|
|
is an extension.
|
|
.PP
|
|
.I \%KEY_RESIZE
|
|
and
|
|
.I \%has_key
|
|
are extensions first implemented for
|
|
.IR \%ncurses "."
|
|
By 2022,
|
|
.I \%PDCurses
|
|
.\" https://web.archive.org/web/20220117232009/https://pdcurses.org/docs/MANUAL.html
|
|
and
|
|
NetBSD
|
|
.I curses
|
|
.\" https://web.archive.org/web/20200923185647/https://man.netbsd.org/curses_input.3
|
|
had added them along with
|
|
.IR \%KEY_MOUSE "."
|
|
.SH HISTORY
|
|
4BSD (1980)
|
|
introduced
|
|
.I \%wgetch
|
|
and its variants.
|
|
.PP
|
|
SVr3 (1987)
|
|
added
|
|
.IR \%ungetch "."
|
|
.PP
|
|
.I \%ncurses
|
|
1.9.9g (1996)
|
|
furnished the
|
|
.I \%has_key
|
|
extension.
|
|
.SH SEE ALSO
|
|
ECMA-6 \*(``7-bit coded Character Set\*(''
|
|
\%<https://\*:ecma\-international\*:.org/\
|
|
\*:publications\-and\-standards/\*:standards/\*:ecma\-6/>
|
|
.PP
|
|
ECMA-48 \*(``Control Functions for Coded Character Sets\*(''
|
|
\%<https://\*:ecma\-international\*:.org/\
|
|
\*:publications\-and\-standards/\*:standards/\*:ecma\-48/>
|
|
.PP
|
|
\fB\%curs_get_wch\fP(3X) describes comparable functions of the
|
|
.I \%ncurses
|
|
library in its wide-character configuration
|
|
.RI \%( ncursesw ).
|
|
.PP
|
|
\fB\%curses\fP(3X),
|
|
\fB\%curs_addch\fP(3X),
|
|
\fB\%curs_inopts\fP(3X),
|
|
\fB\%curs_mouse\fP(3X),
|
|
\fB\%curs_move\fP(3X),
|
|
\fB\%curs_outopts\fP(3X),
|
|
\fB\%curs_refresh\fP(3X),
|
|
\fB\%curs_variables\fP(3X),
|
|
\fB\%resizeterm\fP(3X),
|
|
\fB\%ascii\fP(7)
|