]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - doc/html/man/curs_getch.3x.html
ncurses 6.0 - patch 20170401
[ncurses.git] / doc / html / man / curs_getch.3x.html
index 9b3bdc42ace740ac19afab4f0338722043e7e989..d19c4b87454eea094ac47dad7dec1e085756245e 100644 (file)
@@ -1,7 +1,7 @@
 <!-- 
   * t
   ****************************************************************************
-  * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc.              *
+  * Copyright (c) 1998-2015,2016 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            *
@@ -27,7 +27,7 @@
   * sale, use or other dealings in this Software without prior written       *
   * authorization.                                                           *
   ****************************************************************************
-  * @Id: curs_getch.3x,v 1.42 2015/07/21 08:44:04 tom Exp @
+  * @Id: curs_getch.3x,v 1.49 2016/10/15 16:44:01 tom Exp @
 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <HTML>
 
 
 
-</PRE>
-<H2><a name="h2-NAME">NAME</a></H2><PRE>
+</PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
        <STRONG>getch</STRONG>, <STRONG>wgetch</STRONG>, <STRONG>mvgetch</STRONG>, <STRONG>mvwgetch</STRONG>, <STRONG>ungetch</STRONG>, <STRONG>has_key</STRONG> - get
        (or push back) characters from <STRONG>curses</STRONG> terminal keyboard
 
 
-</PRE>
-<H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
+</PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
        <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>
 
        <STRONG>int</STRONG> <STRONG>getch(void);</STRONG>
        <STRONG>int</STRONG> <STRONG>has_key(int</STRONG> <EM>ch</EM><STRONG>);</STRONG>
 
 
-</PRE>
-<H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
+</PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
 
-</PRE>
-<H3><a name="h3-Reading-characters">Reading characters</a></H3><PRE>
+</PRE><H3><a name="h3-Reading-characters">Reading characters</a></H3><PRE>
        The <STRONG>getch</STRONG>, <STRONG>wgetch</STRONG>, <STRONG>mvgetch</STRONG> and <STRONG>mvwgetch</STRONG>, routines  read  a
        character  from the window.  In no-delay mode, if no input
        is waiting, the value <STRONG>ERR</STRONG> is returned.  In delay mode, the
        called before another character is read.
 
 
-</PRE>
-<H3><a name="h3-Keypad-mode">Keypad mode</a></H3><PRE>
+</PRE><H3><a name="h3-Keypad-mode">Keypad mode</a></H3><PRE>
        If  <STRONG>keypad</STRONG> is <STRONG>TRUE</STRONG>, and a function key is pressed, the to-
        ken for that function key is returned instead of  the  raw
-       characters.   Possible function keys are defined in <STRONG>&lt;curs-</STRONG>
-       <STRONG>es.h&gt;</STRONG> as macros with values outside  the  range  of  8-bit
-       characters  whose names begin with <STRONG>KEY_</STRONG>.  Thus, a variable
-       intended to hold the return value of a function  key  must
-       be of short size or larger.
+       characters:
+
+       <STRONG>o</STRONG>   The  predefined function keys are listed in <STRONG>&lt;curses.h&gt;</STRONG>
+           as macros with values outside the range of 8-bit char-
+           acters.  Their names begin with <STRONG>KEY_</STRONG>.
+
+       <STRONG>o</STRONG>   Other  (user-defined)  function  keys which may be de-
+           fined using <STRONG><A HREF="define_key.3x.html">define_key(3x)</A></STRONG> have no names, but also are
+           expected  to  have  values  outside the range of 8-bit
+           characters.
+
+       Thus, a variable intended to hold the return  value  of  a
+       function key must be of short size or larger.
 
        When a character that could be the beginning of a function
        key is received (which, on modern terminals, means an  es-
        experience a delay between the time a user presses the es-
        cape key and the escape is returned to the program.
 
+       In <STRONG>ncurses</STRONG>, the timer normally expires after the value  in
+       <STRONG>ESCDELAY</STRONG>  (see <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>).  If <STRONG>notimeout</STRONG> is <STRONG>TRUE</STRONG>,
+       the timer does not expire; it  is  an  infinite  (or  very
+       large) value.  Because function keys usually begin with an
+       escape character, the terminal may appear to hang  in  no-
+       timeout  mode  after pressing the escape key until another
+       key is pressed.
 
-</PRE>
-<H3><a name="h3-Ungetting-characters">Ungetting characters</a></H3><PRE>
+
+</PRE><H3><a name="h3-Ungetting-characters">Ungetting characters</a></H3><PRE>
        The <STRONG>ungetch</STRONG> routine places <EM>ch</EM> back onto the input queue to
        be returned by the next call to <STRONG>wgetch</STRONG>.  There is just one
        input queue for all windows.
 
 
-</PRE>
-<H3><a name="h3-Predefined-key-codes">Predefined key-codes</a></H3><PRE>
-       The following special keys, defined in <STRONG>&lt;curses.h&gt;</STRONG>, may  be
-       returned  by <STRONG>getch</STRONG> if <STRONG>keypad</STRONG> has been enabled.  Not all of
-       these are necessarily supported on any  particular  termi-
-       nal.
+</PRE><H3><a name="h3-Predefined-key-codes">Predefined key-codes</a></H3><PRE>
+       The following special keys are defined in <STRONG>&lt;curses.h&gt;</STRONG>.
+
+       <STRONG>o</STRONG>   Except for the special case <STRONG>KEY_RESIZE</STRONG>, it  is  neces-
+           sary to enable <STRONG>keypad</STRONG> for <STRONG>getch</STRONG> to return these codes.
+
+       <STRONG>o</STRONG>   Not all of these are necessarily supported on any par-
+           ticular terminal.
+
+       <STRONG>o</STRONG>   The naming convention may seem obscure, with some  ap-
+           parent  misspellings  (such  as "RSUME" for "resume").
+           The names correspond to the long  terminfo  capability
+           names  for the keys, and were defined long ago, in the
+           1980s.
 
             <EM>Name</EM>            <EM>Key</EM> <EM>name</EM>
             -------------------------------------------------
             KEY_SR          Scroll 1 line backward (reverse)
             KEY_NPAGE       Next page
             KEY_PPAGE       Previous page
+
             KEY_STAB        Set tab
             KEY_CTAB        Clear tab
             KEY_CATAB       Clear all tabs
             KEY_FIND        Find key
             KEY_HELP        Help key
             KEY_MARK        Mark key
-
             KEY_MESSAGE     Message key
             KEY_MOUSE       Mouse event read
             KEY_MOVE        Move key
             KEY_SREDO       Shifted redo key
             KEY_SREPLACE    Shifted replace key
             KEY_SRIGHT      Shifted right arrow
+
             KEY_SRSUME      Shifted resume key
             KEY_SSAVE       Shifted save key
             KEY_SSUSPEND    Shifted suspend key
                          +-----+------+-------+
                          | <STRONG>C1</STRONG>  | <STRONG>down</STRONG> |  <STRONG>C3</STRONG>   |
                          +-----+------+-------+
-       A few of these predefined values do <EM>not</EM>  correspond  to  a
+       A  few  of  these predefined values do <EM>not</EM> correspond to a
        real key:
 
-       <STRONG>o</STRONG>   <STRONG>KEY_RESIZE</STRONG>  is  returned  when the <STRONG>SIGWINCH</STRONG> signal has
-           been detected (see <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG> and <STRONG><A HREF="resizeterm.3x.html">resizeterm(3x)</A></STRONG>).
+       <STRONG>o</STRONG>   <STRONG>KEY_RESIZE</STRONG> is returned when the  <STRONG>SIGWINCH</STRONG>  signal  has
+           been  detected  (see  <STRONG><A HREF="curs_initscr.3x.html">initscr(3x)</A></STRONG> and <STRONG><A HREF="resizeterm.3x.html">resizeterm(3x)</A></STRONG>).
+           This code is returned whether or not <STRONG>keypad</STRONG>  has  been
+           enabled.
 
-       <STRONG>o</STRONG>   <STRONG>KEY_MOUSE</STRONG>   is   returned   for   mouse-events    (see
-           <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3x)</A></STRONG>).
+       <STRONG>o</STRONG>   <STRONG>KEY_MOUSE</STRONG>    is   returned   for   mouse-events   (see
+           <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3x)</A></STRONG>).  This code relies upon whether or not
+           <STRONG><A HREF="curs_inopts.3x.html">keypad(3x)</A></STRONG> has been enabled, because (e.g., with <EM>xterm</EM>
+           mouse prototocol) ncurses must read escape  sequences,
+           just like a function key.
 
 
-</PRE>
-<H3><a name="h3-Testing-key-codes">Testing key-codes</a></H3><PRE>
+</PRE><H3><a name="h3-Testing-key-codes">Testing key-codes</a></H3><PRE>
        The  <STRONG>has_key</STRONG> routine takes a key-code value from the above
        list, and returns <STRONG>TRUE</STRONG> or <STRONG>FALSE</STRONG> according to  whether  the
        current terminal type recognizes a key with that value.
                string (see <STRONG><A HREF="key_defined.3x.html">key_defined(3x)</A></STRONG>).
 
 
-</PRE>
-<H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
+</PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
        All  routines  return  the integer <STRONG>ERR</STRONG> upon failure and an
-       integer value other than <STRONG>ERR</STRONG> (<STRONG>OK</STRONG> in the case of ungetch())
+       integer value other than <STRONG>ERR</STRONG> (<STRONG>OK</STRONG> in the case  of  <STRONG>ungetch</STRONG>)
        upon successful completion.
 
           <STRONG>ungetch</STRONG>
 
           <STRONG>wgetch</STRONG>
                returns  ERR  if the window pointer is null, or if
-               its timeout expires without having any data.
+               its timeout expires without having any data, or if
+               the  execution  was interrupted by a signal (<STRONG>errno</STRONG>
+               will be set to <STRONG>EINTR</STRONG>).
 
        Functions with a "mv" prefix first perform a cursor  move-
        ment  using  <STRONG>wmove</STRONG>, and return an error if the position is
        outside the window, or if the window pointer is null.
 
 
-</PRE>
-<H2><a name="h2-NOTES">NOTES</a></H2><PRE>
+</PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
        Use of the escape key by a programmer for a single charac-
        ter  function  is discouraged, as it will cause a delay of
        up to one second while the keypad code looks for a follow-
        Ins key is usually mapped to <STRONG>KEY_IC</STRONG>.
 
 
-</PRE>
-<H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
+</PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
        The  *get* functions are described in the XSI Curses stan-
        dard, Issue 4.  They  read  single-byte  characters  only.
        The  standard  specifies  that they return <STRONG>ERR</STRONG> on failure,
        mentations)  depending on whether an input timeout or non-
        blocking mode has been set.
 
+       <STRONG>KEY_MOUSE</STRONG> is mentioned in XSI Curses, along with a few re-
+       lated terminfo capabilities, but no higher-level functions
+       use the feature.  The implementation in ncurses is an  ex-
+       tension.
+
+       <STRONG>KEY_RESIZE</STRONG>  is an extension first implemented for ncurses.
+       NetBSD curses later added this extension.
+
        Programmers concerned about portability should be prepared
        for  either  of two cases: (a) signal receipt does not in-
        terrupt <STRONG>getch</STRONG>; (b) signal  receipt  interrupts  <STRONG>getch</STRONG>  and
-       causes  it  to  return ERR with <STRONG>errno</STRONG> set to <STRONG>EINTR</STRONG>.  Under
-       the <STRONG>ncurses</STRONG> implementation, handled signals  never  inter-
-       rupt <STRONG>getch</STRONG>.
+       causes it to return ERR with <STRONG>errno</STRONG> set to <STRONG>EINTR</STRONG>.
 
        The  <STRONG>has_key</STRONG>  function is unique to <STRONG>ncurses</STRONG>.  We recommend
        that any code using it be conditionalized  on  the  <STRONG>NCURS-</STRONG>
        <STRONG>ES_VERSION</STRONG> feature macro.
 
 
-</PRE>
-<H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
+</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_inopts.3x.html">curs_inopts(3x)</A></STRONG>,       <STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3x)</A></STRONG>,
-       <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3x)</A></STRONG>,   <STRONG><A HREF="curs_move.3x.html">curs_move(3x)</A></STRONG>,   <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3x)</A></STRONG>,   <STRONG>re-</STRONG>
-       <STRONG><A HREF="resizeterm.3x.html">sizeterm(3x)</A></STRONG>.
+       <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3x)</A></STRONG>,      <STRONG><A HREF="curs_move.3x.html">curs_move(3x)</A></STRONG>,      <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3x)</A></STRONG>,
+       <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>, <STRONG><A HREF="resizeterm.3x.html">resizeterm(3x)</A></STRONG>.
 
        Comparable  functions in the wide-character (ncursesw) li-
        brary are described in <STRONG><A HREF="curs_get_wch.3x.html">curs_get_wch(3x)</A></STRONG>.