Sortix nightly manual
This manual documents Sortix nightly, a development build that has not been officially released. You can instead view this document in the latest official manual.
| CURSES_INPUT(3) | Library Functions Manual | CURSES_INPUT(3) | 
NAME
curses_input,
    getch, wgetch,
    mvgetch, mvwgetch,
    define_key, keyok,
    has_key, getnstr,
    wgetnstr, mvgetnstr,
    mvwgetnstr, getstr,
    wgetstr, mvgetstr,
    mvwgetstr, keypad,
    is_keypad, notimeout,
    timeout, wtimeout,
    nodelay, ungetch,
    set_escdelay — curses input
    stream routines
LIBRARY
Curses Library (libcurses, -lcurses)
SYNOPSIS
#include
    <curses.h>
int
  
  getch(void);
int
  
  wgetch(WINDOW
    *win);
int
  
  mvgetch(int
    y, int x);
int
  
  mvwgetch(WINDOW
    *win, int y,
    int x);
int
  
  keyok(int
    key_symbol, bool
    flag);
int
  
  has_key(int
    key_symbol);
int
  
  define_key(char
    *sequence, int
    key_symbol);
int
  
  getnstr(char
    *str, int
  limit);
int
  
  wgetnstr(WINDOW
    *win, char *str,
    int limit);
int
  
  mvgetnstr(int
    y, int x,
    char *str,
    int limit);
int
  
  mvwgetnstr(WINDOW
    *win, int y,
    int x,
    char *str,
    int limit);
int
  
  getstr(char
    *str);
int
  
  wgetstr(WINDOW
    *win, char
  *str);
int
  
  mvgetstr(int
    y, int x,
    char *str);
int
  
  mvwgetstr(WINDOW
    *win, int y,
    int x,
    char *str);
int
  
  keypad(WINDOW
    *win, boolf
  flag);
bool
  
  is_keypad(const
    WINDOW *win);
int
  
  notimeout(WINDOW
    *win, boolf
  flag);
int
  
  timeout(int
    delay);
int
  
  wtimeout(WINDOW
    *win, int
  delay);
int
  
  nodelay(WINDOW
    *win, boolf
  flag);
int
  
  ungetch(int
    c);
int
  
  set_escdelay(int
    escdelay);
extern int ESCDELAY;
DESCRIPTION
These functions read characters and strings from the window input file descriptor.
The
    getch()
    function reads a character from the stdscr input
    file descriptor and returns it. If the keypad() flag
    has been set to TRUE, then
    getch() will assemble multi-character key sequences
    into key symbols, If the terminal is resized,
    getch() will return
    KEY_RESIZE, regardless of the setting of
    keypad(). Calling getch()
    will cause an implicit
    refresh()
    on stdscr.
The
    wgetch()
    function is the same as the getch() function,
    excepting that it reads from the input file descriptor associated with the
    window specified by win.
If the
    keypad()
    flag is TRUE then the assembly of specific key
    symbols can be disabled by using the keyok()
    function. If the flag is set to
    FALSE on a key symbol then
    getch() will behave as if the character sequence
    associated with that key symbol was not recognised and will return the
    component characters one at a time to the caller. The
    is_keypad()
    function returns TRUE if the keypad flag is set for
    the window specified by win.
The
    has_key()
    function takes a key value and returns TRUE if the
    current terminal recognises a key with that value, otherwise
    FALSE.
Custom associations between sequences of
    characters and a key symbol can be made by using the
    define_key()
    function. Normally, these associations are made by the information in the
    terminfo(5) database but
    the define_key() function gives the capability to
    remove or add more associations. If define_key() is
    passed a non-NULL string in sequence it will associate
    that sequence with the key symbol passed in
    key_symbol. The key symbol may be one of the ones
    listed below or a custom value that is application defined. It is valid to
    have multiple character sequences map to the same key symbol and there are
    no constraints on the length of the sequence allowed. The assembly of custom
    sequences follow the same rules for inter-character timing and so forth as
    the terminfo(5) derived
    ones. If define_key() is passed a NULL in
    sequence then all associations for the key symbol in
    key_symbol will be deleted, this includes any
    associations that were derived from
    terminfo(5).
The
    mvgetch()
    and
    mvwgetch()
    functions are the same as the getch() and
    wgetch() functions, respectively, excepting that
    wmove()
    is called to move the cursor to the position specified by
    y, x before the character is
    read.
Calling
    getnstr(),
    wgetnstr(),
    mvgetnstr()
    or
    mvwgetnstr()
    is effectively the same as calling getch()
    repeatedly until a newline is received or the character limit
    limit is reached. Once this happens the string is
    NULL terminated and returned in
    str. During input, the normal curses input key
    processing is performed and affects the input buffer. The
    mvgetnstr() function calls
    wmove() to move the cursor to the position given by
    y, x before getting the string,
    wgetnstr() reads the input from the designated
    window, mvwgetnstr() moves the cursor to the
    position given by y, x before
    getting the input from the designated window.
The functions
    getstr(),
    wgetstr(),
    mvgetstr(),
    and
    mvwgetstr()
    are similar to getnstr(),
    wgetnstr(), mvgetnstr(), and
    mvwgetnstr(), respectively, excepting that there is
    no limit on the number of characters that may be inserted into
    str. This may cause the buffer to be overflowed, so
    their use is not recommended.
The
    keypad()
    function is used to affect how getch() processes
    input characters. If flag is set to
    TRUE, then getch() will scan
    the input stream looking for multi-character key sequences that are emitted
    by some terminal function keys. If a recognised sequence of characters is
    found, then getch() will collapse that sequence into
    an integer key symbol, as shown below. The default setting for the flag is
    FALSE.
The
    notimeout()
    function controls whether or not getch() will wait
    indefinitely between characters in a multi-character key sequence or not. If
    flag is TRUE, then there is no
    timeout applied between characters comprising a multi-character key
    sequence. If flag is FALSE,
    then the component characters of a multi-character sequence must not have an
    inter-character gap of more than ESCDELAY. If this
    timing is exceeded, then the multi-character key assembly is deemed to have
    failed and the characters read thus far are returned one at a time when
    getch() is called. The default setting for the flag
    is FALSE. The default value of
    ESCDELAY is 300ms. If ESCDELAY
    is negative, no timeout is applied between characters comprising a
    multi-character key sequence.
The
    timeout()
    function affects the behaviour of getch() when
    reading a character from stdscr. If
    delay is negative, then
    getch() will block indefinitely on a read. If
    delay is 0, then getch() will
    return immediately with ERR if there are no
    characters immediately available. If delay is a
    positive number, then getch() will wait for that
    many milliseconds before returning and, if no character was available, then
    ERR will be returned. Note that for a positive
    number, the timeout is only accurate to the nearest tenth of a second. Also,
    the maximum value of delay is 25500 milliseconds. The
    wtimeout() function does the same as
    timeout() but applies to the specified window
    win.
The
    nodelay()
    function turns on and off blocking reads for
    getch(). If flag is
    TRUE, then getch() will not
    block on reads, if flag is
    FALSE, then reads will block. The default setting
    for the flag is FALSE.
    nodelay(win,
    TRUE) is equivalent to
    wtimeout(win,
    0) and
    nodelay(win,
    FALSE) is equivalent to
    wtimeout(win,
    -1).
ungetch()
    will convert c into an unsigned char and push that
    character back onto the input stream. Only one character of push-back is
    guaranteed to work, more may be possible depending on system resources.
The
    set_escdelay()
    function sets the ESCDELAY value of the current screen
    to escdelay.
RETURN VALUES
The functions getch(),
    wgetch(), mvgetch(), and
    mvwgetch() will return the value of the key pressed
    or ERR in the case of an error or a timeout.
    Additionally, if keypad(TRUE)
    has been called on a window, then it may return one of the following
  values:
| Termcap entry | getch Return Value | Key Function | 
| !1 | KEY_SSAVE | Shift Save | 
| !2 | KEY_SSUSPEND | Shift Suspend | 
| !3 | KEY_SUNDO | Shift Undo | 
| #1 | KEY_SHELP | Shift Help | 
| #2 | KEY_SHOME | Shift Home | 
| #3 | KEY_SIC | Shift Insert Character | 
| #4 | KEY_SLEFT | Shift Left Arrow | 
| %0 | KEY_REDO | Redo | 
| %1 | KEY_HELP | Help | 
| %2 | KEY_MARK | Mark | 
| %3 | KEY_MESSAGE | Message | 
| %4 | KEY_MOVE | Move | 
| %5 | KEY_NEXT | Next Object | 
| %6 | KEY_OPEN | Open | 
| %7 | KEY_OPTIONS | Options | 
| %8 | KEY_PREVIOUS | Previous Object | 
| %9 | KEY_PRINT | |
| %a | KEY_SMESSAGE | Shift Message | 
| %b | KEY_SMOVE | Shift Move | 
| %c | KEY_SNEXT | Shift Next Object | 
| %d | KEY_SOPTIONS | Shift Options | 
| %e | KEY_SPREVIOUS | Shift Previous Object | 
| %f | KEY_SPRINT | Shift Print | 
| %g | KEY_SREDO | Shift Redo | 
| %h | KEY_SREPLACE | Shift Replace | 
| %i | KEY_SRIGHT | Shift Right Arrow | 
| %j | KEY_SRSUME | Shift Resume | 
| &0 | KEY_SCANCEL | Shift Cancel | 
| &1 | KEY_REFERENCE | Reference | 
| &2 | KEY_REFRESH | Refresh | 
| &3 | KEY_REPLACE | Replace | 
| &4 | KEY_RESTART | Restart | 
| &5 | KEY_RESUME | Resume | 
| &6 | KEY_SAVE | Save | 
| &7 | KEY_SUSPEND | Suspend | 
| &8 | KEY_UNDO | Undo | 
| &9 | KEY_SBEG | Shift Begin | 
| *0 | KEY_SFIND | Shift Find | 
| *1 | KEY_SCOMMAND | Shift Command | 
| *2 | KEY_SCOPY | Shift Copy | 
| *3 | KEY_SCREATE | Shift Create | 
| *4 | KEY_SDC | Shift Delete Character | 
| *5 | KEY_SDL | Shift Delete Line | 
| *6 | KEY_SELECT | Select | 
| *7 | KEY_SEND | Shift End | 
| *8 | KEY_SEOL | Shift Clear to EOL | 
| *9 | KEY_SEXIT | Shift Exit | 
| @0 | KEY_FIND | Find | 
| @1 | KEY_BEG | Begin | 
| @2 | KEY_CANCEL | Cancel | 
| @3 | KEY_CLOSE | Close | 
| @4 | KEY_COMMAND | Command | 
| @5 | KEY_COPY | Copy | 
| @6 | KEY_CREATE | Create | 
| @7 | KEY_END | End | 
| @8 | KEY_ENTER | Enter | 
| @9 | KEY_EXIT | Exit | 
| F1 | KEY_F(11) | Function Key 11 | 
| F2 | KEY_F(12) | Function Key 12 | 
| F3 | KEY_F(13) | Function Key 13 | 
| F4 | KEY_F(14) | Function Key 14 | 
| F5 | KEY_F(15) | Function Key 15 | 
| F6 | KEY_F(16) | Function Key 16 | 
| F7 | KEY_F(17) | Function Key 17 | 
| F8 | KEY_F(18) | Function Key 18 | 
| F9 | KEY_F(19) | Function Key 19 | 
| FA | KEY_F(20) | Function Key 20 | 
| FB | KEY_F(21) | Function Key 21 | 
| FC | KEY_F(22) | Function Key 22 | 
| FD | KEY_F(23) | Function Key 23 | 
| FE | KEY_F(24) | Function Key 24 | 
| FF | KEY_F(25) | Function Key 25 | 
| FG | KEY_F(26) | Function Key 26 | 
| FH | KEY_F(27) | Function Key 27 | 
| FI | KEY_F(28) | Function Key 28 | 
| FJ | KEY_F(29) | Function Key 29 | 
| FK | KEY_F(30) | Function Key 30 | 
| FL | KEY_F(31) | Function Key 31 | 
| FM | KEY_F(32) | Function Key 32 | 
| FN | KEY_F(33) | Function Key 33 | 
| FO | KEY_F(34) | Function Key 34 | 
| FP | KEY_F(35) | Function Key 35 | 
| FQ | KEY_F(36) | Function Key 36 | 
| FR | KEY_F(37) | Function Key 37 | 
| FS | KEY_F(38) | Function Key 38 | 
| FT | KEY_F(39) | Function Key 39 | 
| FU | KEY_F(40) | Function Key 40 | 
| FV | KEY_F(41) | Function Key 41 | 
| FW | KEY_F(42) | Function Key 42 | 
| FX | KEY_F(43) | Function Key 43 | 
| FY | KEY_F(44) | Function Key 44 | 
| FZ | KEY_F(45) | Function Key 45 | 
| Fa | KEY_F(46) | Function Key 46 | 
| Fb | KEY_F(47) | Function Key 47 | 
| Fc | KEY_F(48) | Function Key 48 | 
| Fd | KEY_F(49) | Function Key 49 | 
| Fe | KEY_F(50) | Function Key 50 | 
| Ff | KEY_F(51) | Function Key 51 | 
| Fg | KEY_F(52) | Function Key 52 | 
| Fh | KEY_F(53) | Function Key 53 | 
| Fi | KEY_F(54) | Function Key 54 | 
| Fj | KEY_F(55) | Function Key 55 | 
| Fk | KEY_F(56) | Function Key 56 | 
| Fl | KEY_F(57) | Function Key 57 | 
| Fm | KEY_F(58) | Function Key 58 | 
| Fn | KEY_F(59) | Function Key 59 | 
| Fo | KEY_F(60) | Function Key 60 | 
| Fp | KEY_F(61) | Function Key 61 | 
| Fq | KEY_F(62) | Function Key 62 | 
| Fr | KEY_F(63) | Function Key 63 | 
| K1 | KEY_A1 | Upper left key in keypad | 
| K2 | KEY_B2 | Centre key in keypad | 
| K3 | KEY_A3 | Upper right key in keypad | 
| K4 | KEY_C1 | Lower left key in keypad | 
| K5 | KEY_C3 | Lower right key in keypad | 
| Km | KEY_MOUSE | Mouse Event | 
| k0 | KEY_F0 | Function Key 0 | 
| k1 | KEY_F(1) | Function Key 1 | 
| k2 | KEY_F(2) | Function Key 2 | 
| k3 | KEY_F(3) | Function Key 3 | 
| k4 | KEY_F(4) | Function Key 4 | 
| k5 | KEY_F(5) | Function Key 5 | 
| k6 | KEY_F(6) | Function Key 6 | 
| k7 | KEY_F(7) | Function Key 7 | 
| k8 | KEY_F(8) | Function Key 8 | 
| k9 | KEY_F(9) | Function Key 9 | 
| k; | KEY_F(10) | Function Key 10 | 
| kA | KEY_IL | Insert Line | 
| ka | KEY_CATAB | Clear All Tabs | 
| kB | KEY_BTAB | Back Tab | 
| kb | KEY_BACKSPACE | Backspace | 
| kC | KEY_CLEAR | Clear | 
| kD | KEY_DC | Delete Character | 
| kd | KEY_DOWN | Down Arrow | 
| kE | KEY_EOL | Clear to End Of Line | 
| kF | KEY_SF | Scroll Forward one line | 
| kH | KEY_LL | Home Down | 
| kh | KEY_HOME | Home | 
| kI | KEY_IC | Insert Character | 
| kL | KEY_DL | Delete Line | 
| kl | KEY_LEFT | Left Arrow | 
| kM | KEY_EIC | Exit Insert Character Mode | 
| kN | KEY_NPAGE | Next Page | 
| kP | KEY_PPAGE | Previous Page | 
| kR | KEY_SR | Scroll One Line Back | 
| kr | KEY_RIGHT | Right Arrow | 
| kS | KEY_EOS | Clear to End Of Screen | 
| kT | KEY_STAB | Set Tab | 
| kt | KEY_CTAB | Clear Tab | 
| ku | KEY_UP | Up Arrow | 
Note that not all terminals are capable of generating all the keycodes listed above nor are terminfo entries normally configured with all the above capabilities defined.
Other functions that return an int will return one of the following values:
- OK
- The function completed successfully.
- ERR
- An error occurred in the function.
Functions returning pointers will return
    NULL if an error is detected.
SEE ALSO
curses_cursor(3), curses_keyname(3), curses_refresh(3), curses_tty(3), terminfo(5)
STANDARDS
The NetBSD Curses library complies with the X/Open Curses specification, part of the Single Unix Specification.
NOTES
The
    keyok()
    and define_key() functions are implementations of
    extensions made by the NCurses library to the Curses standard. Portable
    implementations should avoid the use of these functions.
HISTORY
The Curses package appeared in 4.0BSD. The
    is_keypad() and
    set_tabsize() functions are
    ncurses
    extension to the Curses library and was added in NetBSD
    8.0.
| January 5, 2017 | Sortix 1.1.0-dev | 
