ncurses 6.0 - patch 20160130
[ncurses.git] / doc / html / man / curs_getch.3x.html
1 <!-- 
2   * t
3   ****************************************************************************
4   * Copyright (c) 1998-2014,2015 Free Software Foundation, Inc.              *
5   *                                                                          *
6   * Permission is hereby granted, free of charge, to any person obtaining a  *
7   * copy of this software and associated documentation files (the            *
8   * "Software"), to deal in the Software without restriction, including      *
9   * without limitation the rights to use, copy, modify, merge, publish,      *
10   * distribute, distribute with modifications, sublicense, and/or sell       *
11   * copies of the Software, and to permit persons to whom the Software is    *
12   * furnished to do so, subject to the following conditions:                 *
13   *                                                                          *
14   * The above copyright notice and this permission notice shall be included  *
15   * in all copies or substantial portions of the Software.                   *
16   *                                                                          *
17   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
18   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
19   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
20   * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
21   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
22   * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
23   * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
24   *                                                                          *
25   * Except as contained in this notice, the name(s) of the above copyright   *
26   * holders shall not be used in advertising or otherwise to promote the     *
27   * sale, use or other dealings in this Software without prior written       *
28   * authorization.                                                           *
29   ****************************************************************************
30   * @Id: curs_getch.3x,v 1.44 2015/12/20 01:43:03 tom Exp @
31 -->
32 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
33 <HTML>
34 <HEAD>
35 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
36 <meta name="generator" content="Manpage converted by man2html - see http://invisible-island.net/scripts/readme.html#others_scripts">
37 <TITLE>curs_getch 3x</TITLE>
38 <link rev=made href="mailto:bug-ncurses@gnu.org">
39 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
40 </HEAD>
41 <BODY>
42 <H1 class="no-header">curs_getch 3x</H1>
43 <PRE>
44 <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG>                                           <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG>
45
46
47
48
49 </PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
50        <STRONG>getch</STRONG>, <STRONG>wgetch</STRONG>, <STRONG>mvgetch</STRONG>, <STRONG>mvwgetch</STRONG>, <STRONG>ungetch</STRONG>, <STRONG>has_key</STRONG> - get
51        (or push back) characters from <STRONG>curses</STRONG> terminal keyboard
52
53
54 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
55        <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>
56
57        <STRONG>int</STRONG> <STRONG>getch(void);</STRONG>
58        <STRONG>int</STRONG> <STRONG>wgetch(WINDOW</STRONG> <STRONG>*</STRONG><EM>win);</EM>
59        <STRONG>int</STRONG> <STRONG>mvgetch(int</STRONG> <EM>y</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>x</EM><STRONG>);</STRONG>
60        <STRONG>int</STRONG> <STRONG>mvwgetch(WINDOW</STRONG> <STRONG>*</STRONG><EM>win</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>y</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>x</EM><STRONG>);</STRONG>
61        <STRONG>int</STRONG> <STRONG>ungetch(int</STRONG> <EM>ch</EM><STRONG>);</STRONG>
62        <STRONG>int</STRONG> <STRONG>has_key(int</STRONG> <EM>ch</EM><STRONG>);</STRONG>
63
64
65 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
66
67 </PRE><H3><a name="h3-Reading-characters">Reading characters</a></H3><PRE>
68        The <STRONG>getch</STRONG>, <STRONG>wgetch</STRONG>, <STRONG>mvgetch</STRONG> and <STRONG>mvwgetch</STRONG>, routines  read  a
69        character  from the window.  In no-delay mode, if no input
70        is waiting, the value <STRONG>ERR</STRONG> is returned.  In delay mode, the
71        program  waits until the system passes text through to the
72        program.  Depending on the setting of <STRONG>cbreak</STRONG>, this is  af-
73        ter  one  character (cbreak mode), or after the first new-
74        line (nocbreak mode).  In  half-delay  mode,  the  program
75        waits  until a character is typed or the specified timeout
76        has been reached.
77
78        If <STRONG>echo</STRONG> is enabled, and the window is not a pad, then  the
79        character  will  also be echoed into the designated window
80        according to the following rules:
81
82        <STRONG>o</STRONG>   If the character is the current erase character,  left
83            arrow,  or backspace, the cursor is moved one space to
84            the left and that screen  position  is  erased  as  if
85            <STRONG>delch</STRONG> had been called.
86
87        <STRONG>o</STRONG>   If  the  character value is any other <STRONG>KEY_</STRONG> define, the
88            user is alerted with a <STRONG>beep</STRONG> call.
89
90        <STRONG>o</STRONG>   If the character is a carriage-return, and  if  <STRONG>nl</STRONG>  is
91            enabled,  it  is translated to a line-feed after echo-
92            ing.
93
94        <STRONG>o</STRONG>   Otherwise  the  character  is  simply  output  to  the
95            screen.
96
97        If the window is not a pad, and it has been moved or modi-
98        fied since the last call to  <STRONG>wrefresh</STRONG>,  <STRONG>wrefresh</STRONG>  will  be
99        called before another character is read.
100
101
102 </PRE><H3><a name="h3-Keypad-mode">Keypad mode</a></H3><PRE>
103        If  <STRONG>keypad</STRONG> is <STRONG>TRUE</STRONG>, and a function key is pressed, the to-
104        ken for that function key is returned instead of  the  raw
105        characters.   Possible function keys are defined in <STRONG>&lt;curs-</STRONG>
106        <STRONG>es.h&gt;</STRONG> as macros with values outside  the  range  of  8-bit
107        characters  whose names begin with <STRONG>KEY_</STRONG>.  Thus, a variable
108        intended to hold the return value of a function  key  must
109        be of short size or larger.
110
111        When a character that could be the beginning of a function
112        key is received (which, on modern terminals, means an  es-
113        cape character), <STRONG>curses</STRONG> sets a timer.  If the remainder of
114        the sequence does not come in within the designated  time,
115        the  character  is passed through; otherwise, the function
116        key value is returned.  For this  reason,  many  terminals
117        experience a delay between the time a user presses the es-
118        cape key and the escape is returned to the program.
119
120
121 </PRE><H3><a name="h3-Ungetting-characters">Ungetting characters</a></H3><PRE>
122        The <STRONG>ungetch</STRONG> routine places <EM>ch</EM> back onto the input queue to
123        be returned by the next call to <STRONG>wgetch</STRONG>.  There is just one
124        input queue for all windows.
125
126
127 </PRE><H3><a name="h3-Predefined-key-codes">Predefined key-codes</a></H3><PRE>
128        The following special keys are defined in <STRONG>&lt;curses.h&gt;</STRONG>.
129
130        <STRONG>o</STRONG>   Except for the special case <STRONG>KEY_RESIZE</STRONG>, it  is  neces-
131            sary to enable <STRONG>keypad</STRONG> for <STRONG>getch</STRONG> to return these codes.
132
133        <STRONG>o</STRONG>   Not all of these are necessarily supported on any par-
134            ticular terminal.
135
136        <STRONG>o</STRONG>   The naming convention may seem obscure, with some  ap-
137            parent  misspellings  (such  as "RSUME" for "resume").
138            The names correspond to the long  terminfo  capability
139            names  for the keys, and were defined long ago, in the
140            1980s.
141
142             <EM>Name</EM>            <EM>Key</EM> <EM>name</EM>
143             -------------------------------------------------
144             KEY_BREAK       Break key
145             KEY_DOWN        The four arrow keys ...
146             KEY_UP
147             KEY_LEFT
148             KEY_RIGHT
149             KEY_HOME        Home key (upward+left arrow)
150             KEY_BACKSPACE   Backspace
151             KEY_F0          Function keys; space for 64 keys
152                             is reserved.
153             KEY_F(<EM>n</EM>)        For 0 &lt;= <EM>n</EM> &lt;= 63
154             KEY_DL          Delete line
155             KEY_IL          Insert line
156             KEY_DC          Delete character
157             KEY_IC          Insert char or enter insert mode
158             KEY_EIC         Exit insert char mode
159             KEY_CLEAR       Clear screen
160             KEY_EOS         Clear to end of screen
161             KEY_EOL         Clear to end of line
162             KEY_SF          Scroll 1 line forward
163             KEY_SR          Scroll 1 line backward (reverse)
164             KEY_NPAGE       Next page
165             KEY_PPAGE       Previous page
166             KEY_STAB        Set tab
167             KEY_CTAB        Clear tab
168             KEY_CATAB       Clear all tabs
169             KEY_ENTER       Enter or send
170             KEY_SRESET      Soft (partial) reset
171             KEY_RESET       Reset or hard reset
172             KEY_PRINT       Print or copy
173             KEY_LL          Home down or bottom (lower left)
174             KEY_A1          Upper left of keypad
175             KEY_A3          Upper right of keypad
176             KEY_B2          Center of keypad
177             KEY_C1          Lower left of keypad
178             KEY_C3          Lower right of keypad
179             KEY_BTAB        Back tab key
180             KEY_BEG         Beg(inning) key
181             KEY_CANCEL      Cancel key
182
183             KEY_CLOSE       Close key
184             KEY_COMMAND     Cmd (command) key
185             KEY_COPY        Copy key
186             KEY_CREATE      Create key
187             KEY_END         End key
188             KEY_EXIT        Exit key
189             KEY_FIND        Find key
190             KEY_HELP        Help key
191             KEY_MARK        Mark key
192             KEY_MESSAGE     Message key
193             KEY_MOUSE       Mouse event read
194             KEY_MOVE        Move key
195             KEY_NEXT        Next object key
196             KEY_OPEN        Open key
197             KEY_OPTIONS     Options key
198             KEY_PREVIOUS    Previous object key
199             KEY_REDO        Redo key
200             KEY_REFERENCE   Ref(erence) key
201             KEY_REFRESH     Refresh key
202             KEY_REPLACE     Replace key
203             KEY_RESIZE      Screen resized
204             KEY_RESTART     Restart key
205             KEY_RESUME      Resume key
206             KEY_SAVE        Save key
207             KEY_SBEG        Shifted beginning key
208             KEY_SCANCEL     Shifted cancel key
209             KEY_SCOMMAND    Shifted command key
210             KEY_SCOPY       Shifted copy key
211             KEY_SCREATE     Shifted create key
212             KEY_SDC         Shifted delete char key
213             KEY_SDL         Shifted delete line key
214             KEY_SELECT      Select key
215             KEY_SEND        Shifted end key
216             KEY_SEOL        Shifted clear line key
217             KEY_SEXIT       Shifted exit key
218             KEY_SFIND       Shifted find key
219             KEY_SHELP       Shifted help key
220             KEY_SHOME       Shifted home key
221             KEY_SIC         Shifted input key
222             KEY_SLEFT       Shifted left arrow key
223             KEY_SMESSAGE    Shifted message key
224             KEY_SMOVE       Shifted move key
225             KEY_SNEXT       Shifted next key
226             KEY_SOPTIONS    Shifted options key
227             KEY_SPREVIOUS   Shifted prev key
228             KEY_SPRINT      Shifted print key
229             KEY_SREDO       Shifted redo key
230             KEY_SREPLACE    Shifted replace key
231             KEY_SRIGHT      Shifted right arrow
232             KEY_SRSUME      Shifted resume key
233             KEY_SSAVE       Shifted save key
234             KEY_SSUSPEND    Shifted suspend key
235             KEY_SUNDO       Shifted undo key
236             KEY_SUSPEND     Suspend key
237             KEY_UNDO        Undo key
238
239        Keypad is arranged like this:
240
241                          +-----+------+-------+
242                          | <STRONG>A1</STRONG>  |  <STRONG>up</STRONG>  |  <STRONG>A3</STRONG>   |
243                          +-----+------+-------+
244                          |<STRONG>left</STRONG> |  <STRONG>B2</STRONG>  | <STRONG>right</STRONG> |
245                          +-----+------+-------+
246                          | <STRONG>C1</STRONG>  | <STRONG>down</STRONG> |  <STRONG>C3</STRONG>   |
247                          +-----+------+-------+
248        A  few  of  these predefined values do <EM>not</EM> correspond to a
249        real key:
250
251        <STRONG>o</STRONG>   <STRONG>KEY_RESIZE</STRONG> is returned when the  <STRONG>SIGWINCH</STRONG>  signal  has
252            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>).
253            This code is returned whether or not <STRONG>keypad</STRONG>  has  been
254            enabled.
255
256        <STRONG>o</STRONG>   <STRONG>KEY_MOUSE</STRONG>    is   returned   for   mouse-events   (see
257            <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3x)</A></STRONG>).  This code relies upon whether or not
258            <STRONG><A HREF="keypad.3x.html">keypad(3x)</A></STRONG> has been enabled, because (e.g., with <EM>xterm</EM>
259            mouse prototocol) ncurses must read escape  sequences,
260            just like a function key.
261
262
263 </PRE><H3><a name="h3-Testing-key-codes">Testing key-codes</a></H3><PRE>
264        The  <STRONG>has_key</STRONG> routine takes a key-code value from the above
265        list, and returns <STRONG>TRUE</STRONG> or <STRONG>FALSE</STRONG> according to  whether  the
266        current terminal type recognizes a key with that value.
267
268        The library also supports these extensions:
269
270           <STRONG>define_key</STRONG>
271                defines  a  key-code  for  a given string (see <STRONG>de-</STRONG>
272                <STRONG><A HREF="define_key.3x.html">fine_key(3x)</A></STRONG>).
273
274           <STRONG>key_defined</STRONG>
275                checks if there is a key-code defined for a  given
276                string (see <STRONG><A HREF="key_defined.3x.html">key_defined(3x)</A></STRONG>).
277
278
279 </PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
280        All  routines  return  the integer <STRONG>ERR</STRONG> upon failure and an
281        integer value other than <STRONG>ERR</STRONG> (<STRONG>OK</STRONG> in the case of ungetch())
282        upon successful completion.
283
284           <STRONG>ungetch</STRONG>
285                returns ERR if there is no more room in the FIFO.
286
287           <STRONG>wgetch</STRONG>
288                returns  ERR  if the window pointer is null, or if
289                its timeout expires without having any data.
290
291        Functions with a "mv" prefix first perform a cursor  move-
292        ment  using  <STRONG>wmove</STRONG>, and return an error if the position is
293        outside the window, or if the window pointer is null.
294
295
296 </PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
297        Use of the escape key by a programmer for a single charac-
298        ter  function  is discouraged, as it will cause a delay of
299        up to one second while the keypad code looks for a follow-
300        ing function-key sequence.
301
302        Some  keys  may be the same as commonly used control keys,
303        e.g., <STRONG>KEY_ENTER</STRONG>  versus  control/M,  <STRONG>KEY_BACKSPACE</STRONG>  versus
304        control/H.  Some curses implementations may differ accord-
305        ing to whether they treat  these  control  keys  specially
306        (and  ignore  the  terminfo),  or use the terminfo defini-
307        tions.  <STRONG>Ncurses</STRONG> uses the terminfo definition.  If it  says
308        that  <STRONG>KEY_ENTER</STRONG>  is control/M, <STRONG>getch</STRONG> will return <STRONG>KEY_ENTER</STRONG>
309        when you press control/M.
310
311        Generally, <STRONG>KEY_ENTER</STRONG> denotes the character(s) sent by  the
312        <EM>Enter</EM> key on the numeric keypad:
313
314        <STRONG>o</STRONG>   the terminal description lists the most useful keys,
315
316        <STRONG>o</STRONG>   the  <EM>Enter</EM> key on the regular keyboard is already han-
317            dled by the standard ASCII characters for carriage-re-
318            turn and line-feed,
319
320        <STRONG>o</STRONG>   depending  on  whether <STRONG>nl</STRONG> or <STRONG>nonl</STRONG> was called, pressing
321            "Enter" on the regular keyboard may  return  either  a
322            carriage-return or line-feed, and finally
323
324        <STRONG>o</STRONG>   "Enter  or  send" is the standard description for this
325            key.
326
327        When using <STRONG>getch</STRONG>, <STRONG>wgetch</STRONG>, <STRONG>mvgetch</STRONG>, or  <STRONG>mvwgetch</STRONG>,  nocbreak
328        mode (<STRONG>nocbreak</STRONG>) and echo mode (<STRONG>echo</STRONG>) should not be used at
329        the same time.  Depending on the state of the  tty  driver
330        when  each character is typed, the program may produce un-
331        desirable results.
332
333        Note that <STRONG>getch</STRONG>, <STRONG>mvgetch</STRONG>, and <STRONG>mvwgetch</STRONG> may be macros.
334
335        Historically, the set of keypad macros was largely defined
336        by  the  extremely  function-key-rich keyboard of the AT&amp;T
337        7300, aka 3B1, aka Safari 4.   Modern  personal  computers
338        usually  have  only a small subset of these.  IBM PC-style
339        consoles  typically  support  little  more  than   <STRONG>KEY_UP</STRONG>,
340        <STRONG>KEY_DOWN</STRONG>,    <STRONG>KEY_LEFT</STRONG>,   <STRONG>KEY_RIGHT</STRONG>,   <STRONG>KEY_HOME</STRONG>,   <STRONG>KEY_END</STRONG>,
341        <STRONG>KEY_NPAGE</STRONG>, <STRONG>KEY_PPAGE</STRONG>, and function keys 1 through 12.  The
342        Ins key is usually mapped to <STRONG>KEY_IC</STRONG>.
343
344
345 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
346        The  *get* functions are described in the XSI Curses stan-
347        dard, Issue 4.  They  read  single-byte  characters  only.
348        The  standard  specifies  that they return <STRONG>ERR</STRONG> on failure,
349        but specifies no error conditions.
350
351        The echo behavior of these functions on input of  <STRONG>KEY_</STRONG>  or
352        backspace  characters  was not specified in the SVr4 docu-
353        mentation.  This description is adopted from the XSI Curs-
354        es standard.
355
356        The  behavior of <STRONG>getch</STRONG> and friends in the presence of han-
357        dled signals is unspecified in the  SVr4  and  XSI  Curses
358        documentation.   Under  historical curses implementations,
359        it varied depending on whether the operating system's  im-
360        plementation   of  handled  signal  receipt  interrupts  a
361        <STRONG>read(2)</STRONG> call in progress or not, and also (in some  imple-
362        mentations)  depending on whether an input timeout or non-
363        blocking mode has been set.
364
365        <STRONG>KEY_MOUSE</STRONG> is mentioned in XSI Curses, along with a few re-
366        lated terminfo capabilities, but no higher-level functions
367        use the feature.  The implementation in ncurses is an  ex-
368        tension.
369
370        <STRONG>KEY_RESIZE</STRONG>  is an extension first implemented for ncurses.
371        NetBSD curses later added this extension.
372
373        Programmers concerned about portability should be prepared
374        for  either  of two cases: (a) signal receipt does not in-
375        terrupt <STRONG>getch</STRONG>; (b) signal  receipt  interrupts  <STRONG>getch</STRONG>  and
376        causes  it  to  return ERR with <STRONG>errno</STRONG> set to <STRONG>EINTR</STRONG>.  Under
377        the <STRONG>ncurses</STRONG> implementation, handled signals  never  inter-
378        rupt <STRONG>getch</STRONG>.
379
380        The  <STRONG>has_key</STRONG>  function is unique to <STRONG>ncurses</STRONG>.  We recommend
381        that any code using it be conditionalized  on  the  <STRONG>NCURS-</STRONG>
382        <STRONG>ES_VERSION</STRONG> feature macro.
383
384
385 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
386        <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>,
387        <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>
388        <STRONG><A HREF="resizeterm.3x.html">sizeterm(3x)</A></STRONG>.
389
390        Comparable  functions in the wide-character (ncursesw) li-
391        brary are described in <STRONG><A HREF="curs_get_wch.3x.html">curs_get_wch(3x)</A></STRONG>.
392
393
394
395                                                          <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG>
396 </PRE>
397 <div class="nav">
398 <ul>
399 <li><a href="#h2-NAME">NAME</a></li>
400 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
401 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
402 <ul>
403 <li><a href="#h3-Reading-characters">Reading characters</a></li>
404 <li><a href="#h3-Keypad-mode">Keypad mode</a></li>
405 <li><a href="#h3-Ungetting-characters">Ungetting characters</a></li>
406 <li><a href="#h3-Predefined-key-codes">Predefined key-codes</a></li>
407 <li><a href="#h3-Testing-key-codes">Testing key-codes</a></li>
408 </ul>
409 </li>
410 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
411 <li><a href="#h2-NOTES">NOTES</a></li>
412 <li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
413 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
414 </ul>
415 </div>
416 </BODY>
417 </HTML>