curs_inopts 3x

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);


説明

        アプリケーションが端末からの入力を扱う方法を変更するような
       いくつかの関数を ncurses ライブラリは用意しています。
        いくつかは包括的で、すべてのウインドウに適用され、
       その他は特定のウインドウにのみ適用されます。
        特定のウインドウ用の設定は、新しいウインドウや
       派生したウインドウには自動的に適用されません。
        もし同じ挙動が必要ならば、各ウインドウにこれらを
       適用しなければなりません。


cbreak/nocbreak

        通常、 tty ドライバは改行か復帰が押されるまで、打たれた
       文字をバッファリングします。
        cbreak ルーチンは行のバッファリングと erase/kill 文字処理 
       (割り込みとフロー制御文字は影響されません) を無効にし、
       打った文字をプログラムがすぐに使えるようにします。
        nocbreak ルーチンは端末を通常 (=cooked) モードに戻します。

        モードが継承されるため、端末は、初め cbreak モードかも
       しれませんし、そうでないかもしれません。そのため、明示的に 
       cbreak または nocbreak を呼び出す必要があります。
        curses を使う最も対話的なプログラムは cbreak モードに
       設定します。
        cbreakraw を無効にすることに注意してください。
        [これらのルーチンが echonoecho とどう相互作用するかに
       ついては curs_getch(3x) を参照してください。]


echo/noecho

        echonoecho ルーチンは、打った文字をそのまま getch で
       エコーするかどうかを制御します。
        tty ドライバによるエコーは常に無効ですが、初めは getch が
       エコーモードなので、打った文字はエコーされます。
        最も対話的なプログラムは、画面上の制限された領域に自分で
       エコーするか、全くエコーしないため、 noecho を呼び出して
       エコーを無効にします。
        [これらのルーチンが cbreaknocbreak とどう
       相互作用するかについては curs_getch(3x) を参照してください。]


halfdelay

        halfdelay ルーチンは半遅延モードに使います。これは 
       cbreak モードと同じように、打った文字をすぐにプログラムが
       使えるようにします。
        しかし 0.1 * tenths 秒間の入力待ちをした後、
       何も打たれなかった場合、 ERR が返ります。
        tenths の値は 1 から 255 の間でなければなりません。
        半遅延モードから抜けるには nocbreak を使ってください。


intrflush

        intrflush オプションが有効 ( bfTRUE ) でキーボードの
       割り込みキー ( interrupt, break, quit ) が押されたとき、 
       tty ドライバの待ち行列 (キュー) 内のすべての出力は一掃され、
       割り込みに対する応答が速くなる効果をもたらしますが、
       画面上に何があるかという、 curses の持つ情報が狂います。
        このオプションを無効 ( bfFALSE ) にすると、一掃を
       防ぎます。
        このオプションのデフォルト値は tty ドライバの設定から
       引き継ぎます。
        ウインドウ引数は無視されます。


keypad

        keypad オプションは端末のキーパッドを有効にします。
        有効な場合 ( bfTRUE ) 、ファンクションキー類 
       (矢印キーなど) を押すと、 wgetch はファンクションキー類を
       表す KEY_LEFT のような単一の値を返します。
        無効な場合 ( bfFALSE ) 、 curses は
       ファンクションキー類を特別扱いせず、プログラムは
       エスケープ・シーケンスそのものを解釈しなければなりません。
        端末のキーパッドをオン (送信可能) にしたり
       オフ (ローカル用) にしたりできるならば、
       このオプションをオンにすると、 wgetch が呼び出された時に
       端末のキーパッドがオンになります。
        keypad のデフォルト値は FALSE です。


meta

        初期状態では、 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が
       端末に送られます。


nodelay

        nodelay オプションは getch 呼び出しを入力待ちなしとします。
        入力の準備ができていなければ、 getchERR を返します。
        無効な場合 ( bfFALSE ) 、 getch はキーが押されるまで
        待ちます。


notimeout

        入力されたエスケープ・シーケンスを変換する間、 wgetch は
       次の文字を待つタイマをセットします。
        notimeout(win, TRUE) が呼び出されると、 wgetch はタイマを
       セットしません。
        タイムアウトの目的は、ファンクションキーから受け取った
       シーケンスとユーザが打ったものとを区別することです。


raw/noraw

        rawnoraw ルーチンによって端末が raw モードに入ったり
       抜けたりします。
        raw モードは打った文字がすぐにそのままプログラムに
       渡される点で cbreak モードと同じです。
        違いは、 raw モードでは interrupt, quit, suspend, および
       フロー制御文字がシグナルを発生させる代わりに、すべて
       変換されずに渡されることです。
        BREAK キーの挙動は curses が設定しない tty ドライバの
       他のビットに依存します。


noqiflush/qiflush

        noqiflush ルーチンを使うと、 INTR, QUIT, SUSP 文字に伴う
       入力キューと出力キューの通常の一掃をしません。
       [ termio(7) を参照]
        qiflush を呼び出すと、両キューはこれらの制御キーを読んだ時に
       一掃されます。
        シグナルハンドラを抜けた後、割り込みが起きなかったかのように
       出力を続けたい場合、シグナルハンドラの中で noqiflush() を
       呼び出したくなることもあるでしょう。


timeout/wtimeout

        timeoutwtimeout ルーチンは、指定のウインドウが
       読み込み時に入力待ちをするかしないかを設定します。
        delay が負ならば入力待ちをし、入力があるまで待ち続けます。
        delay がゼロならば入力待ちをしません。読み込みを待っている
       入力がなければ、読み込みルーチンは ERR を返します。
        delay が正ならば delay ミリ秒待って、まだ入力がなければ、 
       ERR を返します。
        したがって、これらのルーチンは nodelay と同じ機能に加え、 
       delay ミリ秒だけ待つことができるという機能を追加しています 
       ( delay が正のとき) 。


typeahead

        curses ライブラリは画面を更新している間、周期的に
       入力先読みをして "行の内容変更の最適化" をしています。
        入力を検出し、それが tty から来たものならば、現在の更新は
       再び refreshdoupdate が呼び出されるまで先延ばしにします。
        これにより、あらかじめ入力されたコマンドに対する応答を
       より速くできます。
        通常、 newterm に渡された入力 FILE ポインタか、 initscr が
       使われたならば stdin が、この入力先読みに使われます。
        typeahead ルーチンはこれらに代えて、入力先読みに使う
       ファイルディスクリプタ fd を指定します。
        fd が -1 ならば入力先読みをしません。


戻り値

        整数を返すすべてのルーチンは、上のルーチン説明で特記して
       いないかぎり、失敗した場合に整数値 ERR を、正常終了の場合に 
       OK ( SVr4 は「 ERR 以外の整数値」としか指定していません) を
       返します。

        X/Open はエラーの条件を何も定義していません。この実装では、
       ウインドウ引数を取る関数は、それがヌルのときにエラーを
       返します。
        端末が初期化されていなかったとき、すべての関数はやはり
       エラーを返します。
        さらにまた、

              halfdelay
                   引数が 1 から 255 の範囲の外だったときに
                   エラーを返します。


移植性

        これらの関数は、 XSI Curses standard, Issue 4 に記載されて
       います。

        ncurses ライブラリは XPG4 standard と AT&T curses の
       実装における歴史的な習慣に従って、 curses が端末の状態を
       初期化するときに echo ビットをクリアします。
        BSD curses は少し異なり、初期化時には echo ビットを
       放置しますが、 BSD の raw 呼び出しは副作用としてこれをオフに
       します。
        移植性のために最善なのは、プログラムが通常モード (cooked) 
       であっても初期化の直後に echo か noecho を明示的に設定する
       ことです。

        初めて keypad が有効になった時、 ncurses は現在の端末記述に
       対するキーの定義を読み込みます。
        もし端末記述が拡張文字列機能項目を含むならば、
       たとえば tic の -x オプションを使って (から) ncurses はまた、 
       "k" で始まる名前の機能項目に対応するキーを定義します。
        対応するキーコードが生成され、そして (以前の端末記述の
       読み込みに依存して) プログラムを実行するごとに異なる値と
       なるかもしれません。
        生成されたキーコードは keyname 関数で認識されます 
       (そして curses の key-names に使われている "K" でなく、 
       terminfo の機能項目名を示す "k" で始まる名前を返します) 。
        他方、アプリケーションは与えられた文字列に対して特定の
       キーコードを確立するために define_key を使うことができます。
        アプリケーションはこれにより、 tigetstr を使って
       拡張機能項目の存在を検査することと、必要に応じてキーコードを
       割り当て直すことができます。

        低レベルのアプリケーションは tigetstr を使って
       どのような特定の文字列機能項目の定義でも得ることができます。
        キーコードを返すために curses の wgetch や同様の関数を使う、
       より高レベルのアプリケーションは、文字列が読み込まれる順序を
       当てにすることができます。
        もし 2 つ以上のキー定義が同じ文字列値を持つならば、 
       wgetch は 1 つのキーコードのみを返します。
        ( ncurses を含む) ほとんどの curses の実装は、
       文字列機能項目名の配列によって定義された順序でキー定義を
       読み込みます。
        最後に読み込まれるキーが、返されるキーコードを決めます。
        ncurses では、キー定義として変換された拡張機能項目を
       持つこともできます。
        これらは定義済みのキーの後に読み込まれ、もし機能項目の値が
       以前に読み込まれたキー定義と同じならば、後のほうの定義が
       使われます。


注意

        echo, noecho, halfdelay, intrflush, meta, nodelay, 
       notimeout, noqiflush, qiflush, timeout, wtimeout は
       マクロであるかもしれないことに注意してください。

        norawnocbreak 呼び出しは歴史的な習慣にしたがって、
       それぞれ 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)