---
name: "curs_get_wch"
section: "3x"
platform: "macos"
package: "ncurses"
version: "79"
release: "macOS 26.5"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/curs_get_wch/3x"
---

# curs\_get\_wch(3x)

get (or push back) a wide character from curses terminal keyboard

## NAME

**get\_wch**, **wget\_wch**, **mvget\_wch**, **mvwget\_wch**, **unget\_wch** - get (or push back) a wide character from curses terminal keyboard

## SYNOPSIS

**#include \<curses.h\>**

**int get\_wch(wint\_t \****wch***);**\
 **int wget\_wch(WINDOW \****win***, wint\_t \****wch***);**\
 **int mvget\_wch(int** *y***, int** *x***, wint\_t \****wch***);**\
 **int mvwget\_wch(WINDOW \****win***, int** *y***, int** *x***, wint\_t \****wch***);**\
 **int unget\_wch(const wchar\_t** *wch***);**

## DESCRIPTION

The **get\_wch**, **wget\_wch**, **mvget\_wch**, and **mvwget\_wch** functions read a character from the terminal associated with the current or specified window. In no-delay mode, if no input is waiting, the value **ERR** is returned. In delay mode, the program waits until the system passes text through to the program. Depending on the setting of **cbreak**, this is after one character (cbreak mode), or after the first newline (nocbreak mode). In half-delay mode, the program waits until the user types a character or the specified timeout interval has elapsed.

Unless **noecho** has been set, these routines echo the character into the designated window.

If the window is not a pad and has been moved or modified since the last call to **wrefresh**, **wrefresh** will be called before another character is read.

If **keypad** is enabled, these functions respond to the pressing of a function key by setting the object pointed to by *wch* to the corresponding **KEY\_** value defined in **\<curses.h\>** and returning **KEY\_CODE\_YES**. If a character (such as escape) that could be the beginning of a function key is received, curses sets a timer. If the remainder of the sequence does arrive within the designated time, curses passes through the character; otherwise, curses returns the function key value. For this reason, many terminals experience a delay between the time a user presses the escape key and the time the escape is returned to the program.

The **unget\_wch** function pushes the wide character *wch* back onto the head of the input queue, so the wide character is returned by the next call to **get\_wch**. The pushback of one character is guaranteed. If the program calls **unget\_wch** too many times without an intervening call to **get\_wch**, the operation may fail.

## NOTES

The header file **\<curses.h\>** automatically includes the header file **\<stdio.h\>**.

Applications should not define the escape key by itself as a single-character function.

When using **get\_wch**, **wget\_wch**, **mvget\_wch**, or **mvwget\_wch**, applications should not use **nocbreak** mode and **echo** mode at the same time. Depending on the state of the tty driver when each character is typed, the program may produce undesirable results.

All functions except **wget\_wch** and **unget\_wch** may be macros.

## RETURN VALUE

When **get\_wch**, **wget\_wch**, **mvget\_wch**, and **mvwget\_wch** functions successfully report the pressing of a function key, they return **KEY\_CODE\_YES**. When they successfully report a wide character, they return **OK**. Otherwise, they return **ERR**.

Upon successful completion, **unget\_wch** returns **OK**. Otherwise, the function returns **ERR**.

Functions with a "mv" prefix first perform a cursor movement using **wmove**, and return an error if the position is outside the window, or if the window pointer is null.

## SEE ALSO

**curses**(3X), **curs\_getch**(3X), **curs\_ins\_wch**(3X), **curs\_inopts**(3X), **curs\_move**(3X), **curs\_refresh**(3X)
