5

この ncurses アプリケーションは、一時的に ncurses からドロップアウトし、外部エディター/シェル/その他を実行し、完了したら ncurses にドロップするための標準的なレシピを実行しています。

ncurses が後で取得する最初の数回のキー押下が明らかに偽物であることを除いて、これはほとんど機能します。上矢印を 2 回押すと、ncurses は ^[ と A がそれぞれ表示されると考えます。

以前にこの動作を見たことがあり、これを修正する魔法の呪文が何であるかを知っている人はいますか? それが少しでも役立つとすれば、これは Ruby ncurses ライブラリーです。

4

2 に答える 2

1

少し歩き回った後、私は貨物培養の解決策を見つけました:stdscrでシェルを取り出した後、明示的にkeypad(1)を呼び出します。なぜこれが機能するのかわかりませんが、機能します。他の人が理由を説明できる場合は、他の人の回答に「はい」のマークを付けます。 現在の動作理論では、キーパッドはある種の内部バッファに接触してクリアします。

それをスクラッチします:

NCURSES_EXPORT(int)
キーパッド(WINDOW * win、boolフラグ)
{{
    T((T_CALLED( "keypad(%p、%d)")、win、flag));

    if(win){
        win-> _use_keypad=フラグ;
        returnCode(_nc_keypad(SP、flag));
    } そうしないと
        returnCode(ERR);
}
于 2009-07-27T19:18:56.310 に答える
0

うん。キーパッドがないと、ncurses はエスケープ コードを処理しません。キーパッドのマニュアルページから:

   The keypad option enables the keypad of the user's  terminal.   If  en-
   abled (bf is TRUE), the user can press a function key (such as an arrow
   key) and wgetch returns a single value representing the  function  key,
   as in KEY_LEFT.  If disabled (bf is FALSE), curses does not treat func-
   tion keys specially and the program has to  interpret  the  escape  se-
   quences  itself.   If the keypad in the terminal can be turned on (made
   to transmit) and off (made to work locally),  turning  on  this  option
   causes  the terminal keypad to be turned on when wgetch is called.  The
   default value for keypad is false.

多くの場合、ncurses プログラムで最初に行うことは、適切なキーボード マッピングを有効にするために keypad(stdscr, true) を呼び出すことです。

それが役立つことを願っています。

于 2009-07-28T14:18:17.107 に答える