学生プロジェクト用にIrssi インターフェイスを複製しています。テキスト インターフェイスにはNCursesを使用し、 readlineを使用して、メッセージを作成する際により優れたテキスト編集機能を提供したいと考えています。
この質問、回答、およびプロジェクトは、私に素晴らしい出発点を提供してくれました。
私の問題は、次のような入力/イベントループが必要なことです:
int ch;
while (exit_condition) {
ch = wgetch(window);
switch (ch) {
case ERR: continue;
case KEY_F(1): /* do something */ break;
case KEY_UP: /* do something else */ break;
default: forward_to_readline(ch); break;
}
}
しかし、一致させるには、KEY_F(n)
またはKEY_UP
有効にする必要がありkeypad(window, TRUE)
ます。これにより、入力が変更され、readline で使用できなくなります。
マニュアルから:
キーパッドが TRUE で、ファンクション キーが押された場合、生の文字の代わりにそのファンクション キーのトークンが返されます。
ファンクション キーの先頭となる可能性のある文字 (最新の端末ではエスケープ文字を意味します) を受信すると、curses はタイマーを設定します。シーケンスの残りが指定された時間内に到着しない場合、文字は通過します。それ以外の場合は、ファンクション キーの値が返されます。このため、多くの端末では、ユーザーがエスケープ キーを押してからプログラムにエスケープが返されるまでに遅延が発生します。
ここに私の考えがあります:
- の効果を逆にする機能はあり
keypad
ますか? - の動作を自分で実装する必要があり
keypad
ますか? Shift + Up などのイベントをキャッチしたい場合は、これも行う必要があると思います。このような例があれば幸いです。 - NCurses からキーの組み合わせを取得できない場合、readline でキーの組み合わせを取得できますか? 多分キーバインディングコールバックで(関連?)?
お時間をいただきありがとうございます!