curs_inopts(3x) curs_inopts(3x)
cbreak, nocbreak, echo, noecho, halfdelay, intrflush, keypad, meta, nodelay, notimeout, raw, noraw, noqiflush, qiflush, timeout, wtimeout, typeahead - curses input options - 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);
The ncurses library provides several functions which let an application change the way input from the terminal is handled. Some are global, applying to all windows. Oth- ers apply only to a specific window. Window-specific set- tings are not automatically applied to new or derived win- dows. An application must apply these to each window, if the same behavior is needed. アプリケーションが端末からの入力を扱う方法を変更するような いくつかの関数を ncurses ライブラリは用意しています。 いくつかは包括的で、すべてのウインドウに適用され、 その他は特定のウインドウにのみ適用されます。 特定のウインドウ用の設定は、新しいウインドウや 派生したウインドウには自動的に適用されません。 もし同じ挙動が必要ならば、各ウインドウにこれらを 適用しなければなりません。
Normally, the tty driver buffers typed characters until a newline or carriage return is typed. The cbreak routine disables line buffering and erase/kill character-process- ing (interrupt and flow control characters are unaffect- ed), making characters typed by the user immediately available to the program. The nocbreak routine returns the terminal to normal (cooked) mode. 通常、 tty ドライバは改行か復帰が押されるまで、打たれた 文字をバッファリングします。 cbreak ルーチンは行のバッファリングと erase/kill 文字処理 (割り込みとフロー制御文字は影響されません) を無効にし、 打った文字をプログラムがすぐに使えるようにします。 nocbreak ルーチンは端末を通常 (=cooked) モードに戻します。 Initially the terminal may or may not be in cbreak mode, as the mode is inherited; therefore, a program should call cbreak or nocbreak explicitly. Most interactive programs using curses set the cbreak mode. Note that cbreak over- rides raw. [See curs_getch(3x) for a discussion of how these routines interact with echo and noecho.] モードが継承されるため、端末は、初め cbreak モードかも しれませんし、そうでないかもしれません。そのため、明示的に cbreak または nocbreak を呼び出す必要があります。 curses を使う最も対話的なプログラムは cbreak モードに 設定します。 cbreak は raw を無効にすることに注意してください。 [これらのルーチンが echo や noecho とどう相互作用するかに ついては curs_getch(3x) を参照してください。]
The echo and noecho routines control whether characters typed by the user are echoed by getch as they are typed. Echoing by the tty driver is always disabled, but initial- ly getch is in echo mode, so characters typed are echoed. Authors of most interactive programs prefer to do their own echoing in a controlled area of the screen, or not to echo at all, so they disable echoing by calling noecho. [See curs_getch(3x) for a discussion of how these routines interact with cbreak and nocbreak.] echo と noecho ルーチンは、打った文字をそのまま getch で エコーするかどうかを制御します。 tty ドライバによるエコーは常に無効ですが、初めは getch が エコーモードなので、打った文字はエコーされます。 最も対話的なプログラムは、画面上の制限された領域に自分で エコーするか、全くエコーしないため、 noecho を呼び出して エコーを無効にします。 [これらのルーチンが cbreak や nocbreak とどう 相互作用するかについては curs_getch(3x) を参照してください。]
The halfdelay routine is used for half-delay mode, which is similar to cbreak mode in that characters typed by the user are immediately available to the program. However, after blocking for tenths tenths of seconds, ERR is re- turned if nothing has been typed. The value of tenths must be a number between 1 and 255. Use nocbreak to leave half-delay mode. halfdelay ルーチンは半遅延モードに使います。これは cbreak モードと同じように、打った文字をすぐにプログラムが 使えるようにします。 しかし 0.1 * tenths 秒間の入力待ちをした後、 何も打たれなかった場合、 ERR が返ります。 tenths の値は 1 から 255 の間でなければなりません。 半遅延モードから抜けるには nocbreak を使ってください。
If the intrflush option is enabled (bf is TRUE), and an interrupt key is pressed on the keyboard (interrupt, break, quit), all output in the tty driver queue will be flushed, giving the effect of faster response to the in- terrupt, but causing curses to have the wrong idea of what is on the screen. Disabling the option (bf is FALSE) pre- vents the flush. The default for the option is inherited from the tty driver settings. The window argument is ig- nored. intrflush オプションが有効 ( bf が TRUE ) でキーボードの 割り込みキー ( interrupt, break, quit ) が押されたとき、 tty ドライバの待ち行列 (キュー) 内のすべての出力は一掃され、 割り込みに対する応答が速くなる効果をもたらしますが、 画面上に何があるかという、 curses の持つ情報が狂います。 このオプションを無効 ( bf が FALSE ) にすると、一掃を 防ぎます。 このオプションのデフォルト値は tty ドライバの設定から 引き継ぎます。 ウインドウ引数は無視されます。
The keypad option enables the keypad of the user's termi- nal. If enabled (bf is TRUE), the user can press a func- tion key (such as an arrow key) and wgetch returns a sin- gle value representing the function key, as in KEY_LEFT. If disabled (bf is FALSE), curses does not treat function keys specially and the program has to interpret the escape sequences itself. If the keypad in the terminal can be turned on (made to transmit) and off (made to work local- ly), turning on this option causes the terminal keypad to be turned on when wgetch is called. The default value for keypad is FALSE. keypad オプションは端末のキーパッドを有効にします。 有効な場合 ( bf が TRUE ) 、ファンクションキー類 (矢印キーなど) を押すと、 wgetch はファンクションキー類を 表す KEY_LEFT のような単一の値を返します。 無効な場合 ( bf が FALSE ) 、 curses は ファンクションキー類を特別扱いせず、プログラムは エスケープ・シーケンスそのものを解釈しなければなりません。 端末のキーパッドをオン (送信可能) にしたり オフ (ローカル用) にしたりできるならば、 このオプションをオンにすると、 wgetch が呼び出された時に 端末のキーパッドがオンになります。 keypad のデフォルト値は FALSE です。
Initially, whether the terminal returns 7 or 8 significant bits on input depends on the control mode of the tty driv- er [see termio(7)]. To force 8 bits to be returned, in- voke meta(win, TRUE); this is equivalent, under POSIX, to setting the CS8 flag on the terminal. To force 7 bits to be returned, invoke meta(win, FALSE); this is equivalent, under POSIX, to setting the CS7 flag on the terminal. The window argument, win, is always ignored. If the terminfo capabilities smm (meta_on) and rmm (meta_off) are defined for the terminal, smm is sent to the terminal when meta(win, TRUE) is called and rmm is sent when meta(win, FALSE) is called. 初期状態では、 tty ドライバの制御モードによって端末が返す 有効ビット数が 7 ビットになるか 8 ビットになるかが決まります [ termio(7) を参照]。 強制的に 8 ビットを返すようにするには、 meta(win, TRUE); を 実行します。これは POSIX では端末の CS8 フラグを セットすることと同等です。 強制的に 7 ビットを返すようにするには、 meta(win, FALSE); を 実行します。これは POSIX では端末の CS7 フラグを セットすることと同等です。 ウインドウ引数 win は常に無視されます。 terminfo の機能項目 smm (meta_on) と rmm (meta_off) が 定義されている端末では、 meta(win, TRUE) が呼び出された時に smm が、 meta(win, FALSE) が呼び出された時に rmmが 端末に送られます。
The nodelay option causes getch to be a non-blocking call. If no input is ready, getch returns ERR. If disabled (bf is FALSE), getch waits until a key is pressed. nodelay オプションは getch 呼び出しを入力待ちなしとします。 入力の準備ができていなければ、 getch は ERR を返します。 無効な場合 ( bf が FALSE ) 、 getch はキーが押されるまで 待ちます。
While interpreting an input escape sequence, wgetch sets a timer while waiting for the next character. If notime- out(win, TRUE) is called, then wgetch does not set a timer. The purpose of the timeout is to differentiate be- tween sequences received from a function key and those typed by a user. 入力されたエスケープ・シーケンスを変換する間、 wgetch は 次の文字を待つタイマをセットします。 notimeout(win, TRUE) が呼び出されると、 wgetch はタイマを セットしません。 タイムアウトの目的は、ファンクションキーから受け取った シーケンスとユーザが打ったものとを区別することです。
The raw and noraw routines place the terminal into or out of raw mode. Raw mode is similar to cbreak mode, in that characters typed are immediately passed through to the us- er program. The differences are that in raw mode, the in- terrupt, quit, suspend, and flow control characters are all passed through uninterpreted, instead of generating a signal. The behavior of the BREAK key depends on other bits in the tty driver that are not set by curses. raw と noraw ルーチンによって端末が raw モードに入ったり 抜けたりします。 raw モードは打った文字がすぐにそのままプログラムに 渡される点で cbreak モードと同じです。 違いは、 raw モードでは interrupt, quit, suspend, および フロー制御文字がシグナルを発生させる代わりに、すべて 変換されずに渡されることです。 BREAK キーの挙動は curses が設定しない tty ドライバの 他のビットに依存します。
When the noqiflush routine is used, normal flush of input and output queues associated with the INTR, QUIT and SUSP characters will not be done [see termio(7)]. When qiflush is called, the queues will be flushed when these control characters are read. You may want to call noqiflush() in a signal handler if you want output to continue as though the interrupt had not occurred, after the handler exits. noqiflush ルーチンを使うと、 INTR, QUIT, SUSP 文字に伴う 入力キューと出力キューの通常の一掃をしません。 [ termio(7) を参照] qiflush を呼び出すと、両キューはこれらの制御キーを読んだ時に 一掃されます。 シグナルハンドラを抜けた後、割り込みが起きなかったかのように 出力を続けたい場合、シグナルハンドラの中で noqiflush() を 呼び出したくなることもあるでしょう。
The timeout and wtimeout routines set blocking or non- blocking read for a given window. If delay is negative, blocking read is used (i.e., waits indefinitely for in- put). If delay is zero, then non-blocking read is used (i.e., read returns ERR if no input is waiting). If delay is positive, then read blocks for delay milliseconds, and returns ERR if there is still no input. Hence, these rou- tines provide the same functionality as nodelay, plus the additional capability of being able to block for only de- lay milliseconds (where delay is positive). timeout と wtimeout ルーチンは、指定のウインドウが 読み込み時に入力待ちをするかしないかを設定します。 delay が負ならば入力待ちをし、入力があるまで待ち続けます。 delay がゼロならば入力待ちをしません。読み込みを待っている 入力がなければ、読み込みルーチンは ERR を返します。 delay が正ならば delay ミリ秒待って、まだ入力がなければ、 ERR を返します。 したがって、これらのルーチンは nodelay と同じ機能に加え、 delay ミリ秒だけ待つことができるという機能を追加しています ( delay が正のとき) 。
The curses library does "line-breakout optimization" by looking for typeahead periodically while updating the screen. If input is found, and it is coming from a tty, the current update is postponed until refresh or doupdate is called again. This allows faster response to commands typed in advance. Normally, the input FILE pointer passed to newterm, or stdin in the case that initscr was used, will be used to do this typeahead checking. The typeahead routine specifies that the file descriptor fd is to be used to check for typeahead instead. If fd is -1, then no typeahead checking is done. curses ライブラリは画面を更新している間、周期的に 入力先読みをして "行の内容変更の最適化" をしています。 入力を検出し、それが tty から来たものならば、現在の更新は 再び refresh か doupdate が呼び出されるまで先延ばしにします。 これにより、あらかじめ入力されたコマンドに対する応答を より速くできます。 通常、 newterm に渡された入力 FILE ポインタか、 initscr が 使われたならば stdin が、この入力先読みに使われます。 typeahead ルーチンはこれらに代えて、入力先読みに使う ファイルディスクリプタ fd を指定します。 fd が -1 ならば入力先読みをしません。
All routines that return an integer return ERR upon fail- ure and OK (SVr4 specifies only "an integer value other than ERR") upon successful completion, unless otherwise noted in the preceding routine descriptions. 整数を返すすべてのルーチンは、上のルーチン説明で特記して いないかぎり、失敗した場合に整数値 ERR を、正常終了の場合に OK ( SVr4 は「 ERR 以外の整数値」としか指定していません) を 返します。 X/Open does not define any error conditions. In this im- plementation, functions with a window parameter will re- turn an error if it is null. Any function will also re- turn an error if the terminal was not initialized. Also, X/Open はエラーの条件を何も定義していません。この実装では、 ウインドウ引数を取る関数は、それがヌルのときにエラーを 返します。 端末が初期化されていなかったとき、すべての関数はやはり エラーを返します。 さらにまた、 halfdelay returns an error if its parameter is outside the range 1..255. 引数が 1 から 255 の範囲の外だったときに エラーを返します。
These functions are described in the XSI Curses standard, Issue 4. これらの関数は、 XSI Curses standard, Issue 4 に記載されて います。 The ncurses library obeys the XPG4 standard and the his- torical practice of the AT&T curses implementations, in that the echo bit is cleared when curses initializes the terminal state. BSD curses differed from this slightly; it left the echo bit on at initialization, but the BSD raw call turned it off as a side-effect. For best portabili- ty, set echo or noecho explicitly just after initializa- tion, even if your program remains in cooked mode. ncurses ライブラリは XPG4 standard と AT&T curses の 実装における歴史的な習慣に従って、 curses が端末の状態を 初期化するときに echo ビットをクリアします。 BSD curses は少し異なり、初期化時には echo ビットを 放置しますが、 BSD の raw 呼び出しは副作用としてこれをオフに します。 移植性のために最善なのは、プログラムが通常モード (cooked) であっても初期化の直後に echo か noecho を明示的に設定する ことです。 When keypad is first enabled, ncurses loads the key-defi- nitions for the current terminal description. If the ter- minal description includes extended string capabilities, e.g., from using the -x option of tic, then ncurses also defines keys for the capabilities whose names begin with "k". The corresponding keycodes are generated and (de- pending on previous loads of terminal descriptions) may differ from one execution of a program to the next. The generated keycodes are recognized by the keyname function (which will then return a name beginning with "k" denoting the terminfo capability name rather than "K", used for curses key-names). On the other hand, an application can use define_key to establish a specific keycode for a given string. This makes it possible for an application to check for an extended capability's presence with tigetstr, and reassign the keycode to match its own needs. 初めて keypad が有効になった時、 ncurses は現在の端末記述に 対するキーの定義を読み込みます。 もし端末記述が拡張文字列機能項目を含むならば、 たとえば tic の -x オプションを使って (から) ncurses はまた、 "k" で始まる名前の機能項目に対応するキーを定義します。 対応するキーコードが生成され、そして (以前の端末記述の 読み込みに依存して) プログラムを実行するごとに異なる値と なるかもしれません。 生成されたキーコードは keyname 関数で認識されます (そして curses の key-names に使われている "K" でなく、 terminfo の機能項目名を示す "k" で始まる名前を返します) 。 他方、アプリケーションは与えられた文字列に対して特定の キーコードを確立するために define_key を使うことができます。 アプリケーションはこれにより、 tigetstr を使って 拡張機能項目の存在を検査することと、必要に応じてキーコードを 割り当て直すことができます。 Low-level applications can use tigetstr to obtain the def- inition of any particular string capability. Higher-level applications which use the curses wgetch and similar func- tions to return keycodes rely upon the order in which the strings are loaded. If more than one key definition has the same string value, then wgetch can return only one keycode. Most curses implementations (including ncurses) load key definitions in the order defined by the array of string capability names. The last key to be loaded deter- mines the keycode which will be returned. In ncurses, you may also have extended capabilities interpreted as key definitions. These are loaded after the predefined keys, and if a capability's value is the same as a previously- loaded key definition, the later definition is the one used. 低レベルのアプリケーションは tigetstr を使って どのような特定の文字列機能項目の定義でも得ることができます。 キーコードを返すために curses の wgetch や同様の関数を使う、 より高レベルのアプリケーションは、文字列が読み込まれる順序を 当てにすることができます。 もし 2 つ以上のキー定義が同じ文字列値を持つならば、 wgetch は 1 つのキーコードのみを返します。 ( ncurses を含む) ほとんどの curses の実装は、 文字列機能項目名の配列によって定義された順序でキー定義を 読み込みます。 最後に読み込まれるキーが、返されるキーコードを決めます。 ncurses では、キー定義として変換された拡張機能項目を 持つこともできます。 これらは定義済みのキーの後に読み込まれ、もし機能項目の値が 以前に読み込まれたキー定義と同じならば、後のほうの定義が 使われます。
Note that echo, noecho, halfdelay, intrflush, meta, node- lay, notimeout, noqiflush, qiflush, timeout, and wtimeout may be macros. echo, noecho, halfdelay, intrflush, meta, nodelay, notimeout, noqiflush, qiflush, timeout, wtimeout は マクロであるかもしれないことに注意してください。 The noraw and nocbreak calls follow historical practice in that they attempt to restore to normal (`cooked') mode from raw and cbreak modes respectively. Mixing raw/noraw and cbreak/nocbreak calls leads to tty driver control states that are hard to predict or understand; it is not recommended. noraw と nocbreak 呼び出しは歴史的な習慣にしたがって、 それぞれ raw モードと cbreak モードから 通常 ('cooked') モードへ戻ろうとします。 raw/noraw と cbreak/nocbreak 呼び出しを混用すると、 tty ドライバの制御状態を予測あるいは理解することが 困難になるので推奨しません。
curses(3x), curs_getch(3x), curs_initscr(3x), curs_util(3x), define_key(3x), termio(7) curs_inopts(3x)