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)