Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 1 | .\"*************************************************************************** |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 2 | .\" Copyright 2018-2023,2024 Thomas E. Dickey * |
| 3 | .\" Copyright 2002-2016,2017 Free Software Foundation, Inc. * |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 4 | .\" * |
| 5 | .\" Permission is hereby granted, free of charge, to any person obtaining a * |
| 6 | .\" copy of this software and associated documentation files (the * |
| 7 | .\" "Software"), to deal in the Software without restriction, including * |
| 8 | .\" without limitation the rights to use, copy, modify, merge, publish, * |
| 9 | .\" distribute, distribute with modifications, sublicense, and/or sell * |
| 10 | .\" copies of the Software, and to permit persons to whom the Software is * |
| 11 | .\" furnished to do so, subject to the following conditions: * |
| 12 | .\" * |
| 13 | .\" The above copyright notice and this permission notice shall be included * |
| 14 | .\" in all copies or substantial portions of the Software. * |
| 15 | .\" * |
| 16 | .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| 17 | .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| 18 | .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| 19 | .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| 20 | .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| 21 | .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| 22 | .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| 23 | .\" * |
| 24 | .\" Except as contained in this notice, the name(s) of the above copyright * |
| 25 | .\" holders shall not be used in advertising or otherwise to promote the * |
| 26 | .\" sale, use or other dealings in this Software without prior written * |
| 27 | .\" authorization. * |
| 28 | .\"*************************************************************************** |
| 29 | .\" |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 30 | .\" $Id: curs_get_wch.3x,v 1.40 2024/04/20 19:23:03 tom Exp $ |
| 31 | .TH curs_get_wch 3X 2024-04-20 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls" |
| 32 | .ie \n(.g \{\ |
| 33 | .ds `` \(lq |
| 34 | .ds '' \(rq |
| 35 | .\} |
| 36 | .el \{\ |
| 37 | .ie t .ds `` `` |
| 38 | .el .ds `` "" |
| 39 | .ie t .ds '' '' |
| 40 | .el .ds '' "" |
| 41 | .\} |
| 42 | . |
| 43 | .de bP |
| 44 | .ie n .IP \(bu 4 |
| 45 | .el .IP \(bu 2 |
| 46 | .. |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 47 | .SH NAME |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 48 | \fB\%get_wch\fP, |
| 49 | \fB\%wget_wch\fP, |
| 50 | \fB\%mvget_wch\fP, |
| 51 | \fB\%mvwget_wch\fP, |
| 52 | \fB\%unget_wch\fP \- |
| 53 | get (or push back) a wide character from \fIcurses\fR terminal keyboard |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 54 | .SH SYNOPSIS |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 55 | .nf |
| 56 | \fB#include <curses.h> |
| 57 | .PP |
| 58 | \fBint get_wch(wint_t *\fIwch\fP); |
| 59 | \fBint wget_wch(WINDOW *\fIwin\fP, wint_t *\fIwch\fP); |
| 60 | \fBint mvget_wch(int \fIy\fP, int \fIx\fP, wint_t *\fIwch\fP); |
| 61 | \fBint mvwget_wch(WINDOW *\fIwin\fP, int \fIy\fP, int \fIx\fP, wint_t *\fIwch\fP); |
| 62 | .PP |
| 63 | \fBint unget_wch(const wchar_t \fIwc\fP); |
| 64 | .fi |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 65 | .SH DESCRIPTION |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 66 | .SS "Reading Characters" |
| 67 | .B \%wget_wch |
| 68 | gathers a key stroke |
| 69 | .I wch |
| 70 | from the terminal keyboard associated with a |
| 71 | .I curses |
| 72 | window |
| 73 | .IR win , |
| 74 | returning |
| 75 | .B OK |
| 76 | if a wide character is read, |
| 77 | .B \%KEY_CODE_YES |
| 78 | if a function key is read, |
| 79 | and |
| 80 | .B ERR |
| 81 | if no key event is available. |
| 82 | \fB\%ncurses\fP(3X) describes the variants of this function. |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 83 | .PP |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 84 | When input is pending, |
| 85 | .B \%wget_wch |
| 86 | stores an integer |
| 87 | identifying the key stroke in |
| 88 | .IR wch ; |
| 89 | for alphanumeric and punctuation keys, |
| 90 | this value corresponds to the character encoding used by the terminal. |
| 91 | Use of the control key as a modifier often results in a distinct code. |
| 92 | The behavior of other keys depends on whether |
| 93 | .I win |
| 94 | is in keypad mode; |
| 95 | see subsections \*(``Keypad Mode\*('' and \*(``Predefined Key Codes\*('' |
| 96 | in \fB\%getch\fP(3X). |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 97 | .PP |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 98 | If no input is pending, |
| 99 | then if the no-delay flag is set in the window |
| 100 | (see \fB\%nodelay\fP(3X)), |
| 101 | the function returns |
| 102 | .BR ERR ; |
| 103 | otherwise, |
| 104 | .I curses |
| 105 | waits until the terminal has input. |
| 106 | If \fB\%cbreak\fP(3X) |
| 107 | has been called, |
| 108 | this happens after one character is read. |
| 109 | If \fB\%nocbreak\fP(3X) |
| 110 | has been called, |
| 111 | it occurs when the next newline is read. |
| 112 | If \fB\%halfdelay\fP(3X) |
| 113 | has been called, |
| 114 | .I curses |
| 115 | waits until a character is typed or the specified delay elapses. |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 116 | .PP |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 117 | If \fB\%echo\fP(3X) has been called, |
| 118 | and the window is not a pad, |
| 119 | .I curses |
| 120 | writes |
| 121 | .I wch |
| 122 | to the window |
| 123 | (at the cursor position) |
| 124 | per the following rules. |
| 125 | .bP |
| 126 | If |
| 127 | .I wch |
| 128 | matches the terminal's erase character, |
| 129 | the cursor moves leftward one position |
| 130 | and the new position is erased |
| 131 | as if \fB\%wmove\fP(3X) and then \fB\%wdelch\fP(3X) were called. |
| 132 | When the window's keypad mode is enabled |
| 133 | (see below), |
| 134 | .B \%KEY_LEFT |
| 135 | and |
| 136 | .B \%KEY_BACKSPACE |
| 137 | are handled the same way. |
| 138 | .bP |
| 139 | .I curses |
| 140 | writes any other |
| 141 | .I wch |
| 142 | to the window, |
| 143 | as with \fB\%wecho_wchar\fP(3X). |
| 144 | .bP |
| 145 | If the window has been moved or modified since the last call to |
| 146 | \fB\%wrefresh\fP(3X), |
| 147 | .I curses |
| 148 | calls |
| 149 | .BR \%wrefresh . |
| 150 | .PP |
| 151 | If |
| 152 | .I wch |
| 153 | is a carriage return and \fBnl\fP(3X) has been called, |
| 154 | .B \%wgetch |
| 155 | stores the the character code for newline |
| 156 | (line feed) |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 157 | in |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 158 | .I wch |
| 159 | instead. |
| 160 | .SS "Ungetting Characters" |
| 161 | .B \%unget_wch |
| 162 | places |
| 163 | .I wch |
| 164 | into the input queue to be returned by the next call to |
| 165 | .BR \%wget_wch . |
| 166 | A single input queue serves all windows. |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 167 | .SH RETURN VALUE |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 168 | .B \%wget_wch |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 169 | returns |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 170 | .B OK |
| 171 | when it reads a wide character and |
| 172 | .B \%KEY_CODE_YES |
| 173 | when it reads a function key code. |
| 174 | It returns |
| 175 | .B ERR |
| 176 | if |
| 177 | .bP |
| 178 | the |
| 179 | .I \%WINDOW |
| 180 | pointer is |
| 181 | .BR NULL , |
| 182 | or |
| 183 | .bP |
| 184 | its timeout expires without any data arriving, |
| 185 | or |
| 186 | .bP |
| 187 | execution was interrupted by a signal, |
| 188 | in which case |
| 189 | .B \%errno |
| 190 | is set to |
| 191 | .BR \%EINTR . |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 192 | .PP |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 193 | Functions prefixed with \*(``mv\*('' first perform cursor movement and |
| 194 | fail if the position |
| 195 | .RI ( y , |
| 196 | .IR x ) |
| 197 | is outside the window boundaries. |
| 198 | .PP |
| 199 | .B \%unget_wch |
| 200 | returns |
| 201 | .B OK |
| 202 | on success and |
| 203 | .B ERR |
| 204 | if there is no more room in the input queue. |
| 205 | .SH NOTES |
| 206 | See the \*(``NOTES\*('' section of \fB\%wgetch\fP(3X). |
| 207 | .PP |
| 208 | All of these functions except |
| 209 | .B \%wget_wch |
| 210 | and |
| 211 | .B \%unget_wch |
| 212 | may be implemented as macros. |
| 213 | .PP |
| 214 | Unlike \fB\%wgetch\fP(3X), |
| 215 | .B \%wget_wch |
| 216 | and its variants store the value of the input character in an additional |
| 217 | .I wch |
| 218 | parameter instead of the return value. |
| 219 | .PP |
| 220 | Unlike |
| 221 | .BR \%ungetch , |
| 222 | .B \%unget_wch |
| 223 | cannot distinguish function key codes |
| 224 | .B \%wget_wch |
| 225 | from conventional character codes. |
| 226 | An application can overcome this limitation by pushing function key |
| 227 | codes with |
| 228 | .B \%ungetch |
| 229 | and subsequently checking the return value of |
| 230 | .B \%wget_wch |
| 231 | for a match with |
| 232 | .BR \%KEY_CODE_YES . |
| 233 | .SH EXTENSIONS |
| 234 | See the \*(``EXTENSIONS\*('' section of \fB\%wgetch\fP(3X). |
| 235 | .SH PORTABILITY |
| 236 | Applications employing |
| 237 | .I \%ncurses |
| 238 | extensions should condition their use on the visibility of the |
| 239 | .B \%NCURSES_VERSION |
| 240 | preprocessor macro. |
| 241 | .PP |
| 242 | X/Open Curses, |
| 243 | Issue 4 describes these functions. |
| 244 | It specifies no error conditions for them. |
| 245 | .PP |
| 246 | See the \*(``PORTABILITY\*('' section of \fB\%wgetch\fP(3X) regarding |
| 247 | the interaction of |
| 248 | .B \%wget_wch |
| 249 | with signal handlers. |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 250 | .SH SEE ALSO |
micky387 | 9b9f5e7 | 2025-07-08 18:04:53 -0400 | [diff] [blame] | 251 | \fB\%curs_getch\fP(3X) describes comparable functions of the |
| 252 | .I \%ncurses |
| 253 | library in its non-wide-character configuration. |
| 254 | .PP |
| 255 | \fB\%curses\fP(3X), |
| 256 | \fB\%curs_add_wch\fP(3X), |
| 257 | \fB\%curs_inopts\fP(3X), |
| 258 | \fB\%curs_move\fP(3X), |
| 259 | \fB\%curs_refresh\fP(3X) |