curses ベースのアプリケーション ( WordGrinder ) があります。あるユーザーから、キーボードで一部のキーが正しく機能しないというバグ レポートがありました。調査の結果、彼は正しい。
問題のキーは、SHIFT + カーソル キーと、END などのキーパッド ナビゲーション キーの一部です。何が起こっているのかを調査したところ、curses がこれらのキーのイベントを送信していないようです。SHIFT + カーソル キーの場合、何も得られず、END の場合は生のエスケープ シーケンスが得られます。
これは私を驚かせます。他のすべてのキーは解釈され、キーシムに正しく変換されます。とになると思います。なぜ私はそうではないのですか?KEY_SLEFT
KEY_END
これらのキーが機能する他のアプリケーションをいくつか調べましたが、間違っていることを示す明らかなものは見つかりませんでした。また、nano のようなアプリケーションは、独自のエスケープ キーの解析を処理するなど、非常に悪いことを行うため、ソース コードの候補として適しているかどうかはわかりません。
次のように ncurses を初期化しています。
initscr();
raw();
noecho();
meta(NULL, TRUE);
nonl();
idlok(stdscr, TRUE);
idcok(stdscr, TRUE);
scrollok(stdscr, FALSE);
intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
端末エミュレーターとして gnome-terminal を使用し、端末タイプとして xterm を使用しています。ロケールは UTF-8 で、ライブラリの ncursesw バリアントがあります。
何か案は?
アップデート:
数か月後、Gnome 3 の gnome-terminal で Wordgrinder を試してみたところ、これらすべての風変わりなキーが有効な ncurses キーコードを生成することがわかりました。たとえば、SHIFT+LEFT はキーコード 393 を生成するようになりました。xterm はまったく同じ結果を生成します。残念ながら、CTRL + LEFT はキーコード 539 を生成し、Curses のドキュメントでは、有効なキーコードは KEY_MIN から KEY_MAX の範囲 (257 から 511...) であると明確に述べています。
少なくとも現在は機能していますが、これらの奇妙な新しいキーコードはどのように機能するのでしょうか? それらはどこかで定義されていますか?それらは確かにヘッダーにはありません。