curs_get_wch(3x) curs_get_wch(3x)
get_wch, wget_wch, mvget_wch, mvwget_wch, unget_wch - curses 端末キーボードからワイド文字を取得 (または返却) する
#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);
get_wch, wget_wch, mvget_wch, mvwget_wch 関数は、 現在のウインドウまたは指定のウインドウに対応する端末から 文字を読み込みます。 遅延なしモードでは、待っている入力がない場合、ERR 値 を 返します。 遅延モードでは、プログラムはシステムから文字を渡されるまで 待ちます。 これは cbreakの設定により、cbreak モードでは 1 文字の後、 nocbreak モードでは最初の改行の後になります。 半遅延モードでは、プログラムは文字がタイプされるか、指定 されたタイムアウトに達するまで待ちます。 noecho が設定されていないかぎり、これらのルーチンは 指定されたウインドウに文字をエコーします。 ウィンドウがパッドでなく、かつ、最後に wrefresh が 呼び出されて以降に移動または修正された場合、他の文字が読み 込まれる前に wrefresh が呼び出されます。 keypad が有効な場合、ファンクションキーが押されると これらの関数は応答として、<curses.h> で定義され、押されたキーに 対応する KEY_ の値を wch の指すオブジェクトにセットして KEY_CODE_YES を返します。 ファンクションキーの始まりとなりうる文字 (エスケープなど) を 受け取ると、curses はタイマをセットします。 シーケンスの残りが指定された時間内に来ない場合、文字は そのまま渡されます (訳注: not を補って訳した)。そうでなければ、 ファンクションキーの値が渡されます。 この理由により、大半の端末では、エスケープキーを押してから プログラムにエスケープが渡されるまでに遅れが発生します。 unget_wch 関数はワイド文字 wch を入力キューの先頭に戻し、 次の get_wch 呼び出しでこのワイド文字が返されるようにします。 1 文字の返却は保証されます。 get_wch 呼び出しをはさむことなく unget_wch を何度も 呼び出すと、操作は失敗することがあります。
ヘッダファイル <curses.h> はヘッダファイル <stdio.h> を 自動的に取り込みます (include)。 アプリケーション自身でエスケープキーを 1 文字の機能として 定義してはいけません。 get_wch、wget_wch、mvget_wch あるいは mvwget_wch を 使うとき、nocbreak モードと echo モードを同時に使っては いけません。 各文字がタイプされた時の tty ドライバの状態によっては、 プログラムは望ましくない結果を出す可能性があります。 wget_wch と unget_wch を除くすべての関数は、 マクロであるかもしれないことに注意してください。
get_wch, wget_wch, mvget_wch, mvwget_wch 関数は ファンクションキーが押されたことを正常に報告するとき KEY_CODE_YES を返します。 正常にワイド文字を報告するとき OK を、その他のときに ERR を 返します。 unget_wch は正常終了のとき OK を返します。 その他のときに ERR を返します。 mv で始まる関数は、最初に wmove を使用してカーソルを移動し、 位置がウィンドウの外だった場合、またはウィンドウポインタが ヌルの場合にエラーを返します。
curses(3x), curs_getch(3x), curs_ins_wch(3x), curs_inopts(3x), curs_move(3x), curs_refresh(3x) curs_get_wch(3x)