curs_inopts(3X) | curs_inopts(3X) |
名称
cbreak, nocbreak, echo, noecho, halfdelay, intrflush, keypad, meta, nodelay, notimeout, raw, noraw, noqiflush, qiflush, timeout, wtimeout, typeahead - curses 入力オプション書式
#include <curses.h>int cbreak(void);
int nocbreak(void);
int echo(void);
int noecho(void);
int halfdelay(int tenths);
int intrflush(WINDOW *win, bool bf);
int keypad(WINDOW *win, bool bf);
int meta(WINDOW *win, bool bf);
int nodelay(WINDOW *win, bool bf);
int raw(void);
int noraw(void);
void noqiflush(void);
void qiflush(void);
int notimeout(WINDOW *win, bool bf);
void timeout(int delay);
void wtimeout(WINDOW *win, int delay);
int typeahead(int fd);
解説
通常、改行かキャリッジリターンがタイプされるまで、tty ドライバはタイプされた文字をバッファします。 cbreak ルーチンはラインバッファと erase/kill 文字処理を無効にし、 (中断とフロー制御文字は影響されません) ユーザによってタイプされた文字をプログラムで直ちに利用可能にします。 nocbreak ルーチンは通常 (cooked (クックド)) モードに端末を戻します。最初は、モードが継承されるので、端末は cbreak モードであるかもしれないし、ないかもしれません。したがって、プログラムは cbreak または nocbreak を明白に呼び出すべきです。 curses を使用する最も対話型のプログラムは cbreak モードを設定します。 cbreak は raw をオーバライド (無効に) するのでに注意すること。 [これらのルーチンがどのように echo と noecho と相互に作用するかの議論については curs_getch(3X) を参照してください。]
echo と noecho ルーチンは、それらがタイプされる時にユーザによってタイプされた文字が getch によってエコーされるかどうかを制御します。 tty ドライバによってエコーすることは常に無効になります。しかし、最初は getch は echo (エコー) モードです。したがって、タイプされた文字はエコーされます。最も対話型のプログラムの作者は、画面の制御された領域でそれら自身でエコーするか全くエコーしないことを好みます。したがって、彼らは、 noecho を呼び出すことでエコーを無効にします。 [これらのルーチンがどのように cbreak と nocbreak と相互に作用するかの議論については curs_getch(3X) を参照してください。]
halfdelay ルーチンは、半遅延モードのために使用されます。それは、ユーザによってタイプされた文字が直ちにプログラムで利用可能になる cbreak モードに似ています。しかしながら、 tenths 10 分の 1 秒ブロックされた後、何もタイプされていない場合、ERR が返されます。 tenths の値は 1 と 255 の間の数でなければなりません。半遅延モードから出るためには nocbreak を使用します。
intrflush オプションが可能になる場合、( bf は TRUE です) 割り込みキーがキーボード (interrupt、break、quit) で押される場合、 tty ドライバキュー中のすべての出力はフラッシュされるでしょう。割り込みのためにより速いレスポンスの影響を与えるますが、 curses に画面上にあるものについての間違った考えを持たせます。無効にします ( bf は FALSE です) オプションはフラッシュを防ぎます。オプションのためのデフォルトは tty ドライバ設定から継承されます。ウィンドウ引数は無視されます。
keypad オプションは、ユーザの端末のキーパッドを利用可能にします。利用可能になった場合、( bf は TRUE です) ユーザは (矢印キーのような) ファンクションキーを押すことができます。また、 KEY_LEFT のように、 wgetch はファンクションキーを表わす単一の値を返します。無効になる場合、( bf は FALSE です)、 curses はファンクションキーを特別に扱いません。そして、プログラムはエスケープシーケンスを自分で解釈しなければなりません。端末のキーパッドがオン (送信するようにする) またはオフ (ローカルに働くようにする) にすることができる場合、このオプションは端末のキーパッドを、 wgetch が呼ばれた時オンにします。キーパッドのためのデフォルト価値は偽 (false) です。
最初に、端末が入力の有効ビット 7 か 8 を返すかどうかは tty ドライバ [termio(7) を参照] の制御モードに依存します。 8 ビットを強制的に返すためには、 meta( win, TRUE);を呼び出します。これは、POSIX で端末の CS8 フラグを設定することと等価です。 7 ビットを強制的に返すためには、 meta( win, FALSE);を呼び出します。これは、POSIX で端末の CS7 フラグを設定することと等価です。ウィンドウの引数 win は常に無視されます。 terminfo ケーパビリティ smm (meta_on) と rmm (meta_off) は端末に対して定義される場合、 smm は meta( win, TRUE) が呼ばれた時に端末に送られます。 rmm は meta( win, FALSE) が呼ばれた時に送られます。
nodelay オプションは getch が非ブロッキング呼び出しするようにします。入力の準備ができていない場合、 getch は ERR を返します。もし無効になれば、 ( bf は FALSE です) getch はキーが押されるまで待ちます。
入力エスケープシーケンスを解釈している間、 wgetch は次の文字を待つ間にタイマをセットします。 notimeout(win, TRUE) が呼ばれる場合、 wgetch はタイマをセットしません。タイムアウトの目的は、ファンクションキーから受け取られたシーケンスとユーザによってタイプされたものを区別することです。
raw と noraw ルーチンは、端末を raw (生) モードにするか、 raw モードを抜けるようにします。 raw モードは、タイプされた文字がユーザプログラムに直ちに渡されるという点で cbreak モードに似ています。 raw モードにおける違いは、シグナルを生成する代わりに、 interrupt (割り込み), quit, suspend, フロー制御文字が解釈されずにすべて渡されることです。 BREAK キーの振る舞いは、 curses によって設定されない tty ドライバの他のビットに依存します。
noqiflush ルーチンが使用される時、 INTR、 QUIT および SUSP 文字に関連した入力と出力のキューの正常なフラッシュは行われないでしょう [termio(7) を参照]。 qiflush が呼ばれる時、これらの制御文字が読まれる時、キューはフラッシュされるでしょう。あたかも割り込みが生じなかったかのように出力を継続することを望むならば、シグナルハンドラの中で noqiflush() を呼び出すことができます。
timeout と wtimeout ルーチンは、与えられたウィンドウのためにブロック読み込みあるいは非ブロック読み込みを設定します。 delay が負の場合、ブロック読み込みが使用されます (すなわち、入力を無期限に待ちます)。 delay が 0 の場合、非ブロック読み込みが使用されます (すなわち、入力を待っていない場合、読み込みは ERR を返します)。 delay が正の場合、読み込みは delay ミリ秒でブロックします、入力がまだない場合、 ERR を返します。従って、これらのルーチンは、( delay が正のところで) delay ミリ秒だけブロックすることができる追加ケーパビリティを加えて、 nodelay と同じ機能性を提供します。
curses ライブラリは、スクリーンを更新する間に typeahead (先タイプ) を周期的に捜すことにより、 ``ラインブレークアウト最適化'' を行ないます。入力が見つかり、それが tty から来る場合、 refresh または doupdate が再び呼ばれるまで、現在の更新が延期されます。これは、あらかじめタイプされたコマンドの速い応答を許します。通常は、 initscr が使われる場合 newterm または stdin に渡された入力 FILE ポインタは typeahead チェックを行うために使用されるでしょう。 typeahead ルーチンは、typeahead を代わりにチェックするためにファイル記述子 fd が使用されることを明記します。 fd が -1 である場合、typeahead チェックは行なわれません。
戻り値
整数を返すすべてのルーチンは、失敗すると ERR を返します。前のルーチンの記述で他の注意がない場合、成功して終了すれば、OK (SVr4 は " ERR 以外の整数値"とだけ明記されています) を返します。X/Open は、エラー条件を何も定義していません。この実装では、ウィンドウのポインタがある関数は、それが null であるなら、エラーを返します。また、端末が初期化されていなかったなら、どんな関数もエラーを返します。また、
- halfdelay
- halfdelay は、そのパラメータが 1 から 255 の範囲外であるなら、エラーを返します。
移植性
これらの関数は XSI Curses standard, Issue 4 に記述されています。curses が端末の状態を初期化したとき、エコービットがクリアされる点で、 ncurses ライブラリは、XPG4 規格および AT&T curses 実装の慣習に従います。 BSD curses は、これとわずかに異なりました。それは、初期化でエコービットを残します。しかし、BSD の raw 呼び出しは副作用としてそれをオフにします。最良の移植性については、利用者のプログラムが cooked モードに残っても、初期化直後に echo か noecho を明白に設定してください。
注
echo、 noecho、 halfdelay、 intrflush、 meta、 nodelay、 notimeout、 noqiflush、 qiflush、 timeout および wtimeout はマクロであるかもしれないことに注意してください。noraw と nocbreak の呼び出しは、raw と cbreak モードから正常な (`cooked') モードにそれぞれ復旧することを試みる点で歴史的な慣習に追随します。混合の raw/noraw および cbreak/nocbreak 呼び出しは、予測するか理解することが困難な tty ドライバ制御状態を先導します。それは推奨されません。