0

私のアプリは、rawモードでターミナルからエスケープシーケンスを読み取ります。そして、xtermで実行しているとき、「\eOQ」のようなF2を取得しました。しかし、Linux ttyターミナルで実行している場合(Ctrl-Alt-F1で切り替える)、「\e[[[B」」が表示されます。
実行中の端末タイプのアプリケーションからF2を独立させたと判断する正しい方法は何ですか?

4

2 に答える 2

1

ターミナルのキー押下を読みたい場合は、一般的な問題を抽象化するlibtermkeyのようなものを見たいと思うでしょう。terminfo内部的には、ルックアップの組み合わせ、または変更されたキー押下の拡張のようなモデルのハードコードされた知識を使用するため、通常の呪いなどでxtermは理解できないようなことを理解できます。Ctrl-Up

while((ret = termkey_waitkey(tk, &key)) != TERMKEY_RES_EOF) {
  termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_VIM);
  printf("You pressed key %s\n", buffer);

  if(key.type == TERMKEY_TYPE_FUNCTION &&
     !key.modifiers &&
     key.code.number = 2)
    printf("Got F2\n");
}
于 2012-08-20T10:40:10.813 に答える
0

[n]cursesライブラリを使用する最良の方法がわかったのでわかりました。これはterminfo(termcap)データベースを読み取り、端末の種類に応じて取得した平均エスケープシーケンスを判別します。ターミナルグラフィックス機能を使用する必要はありません。cursesを使用して正しいエスケープシーケンスを取得するには、次のようにします。 また、アプリでterminfoデータベースを読み取ることにより、手動で取得することもできます。 newterm(NULL, stdout, stdin);
raw();
noecho();
keypad();
ch = getch();
if (ch == KEY_F(2)) printf("Got F2");
endwin();

于 2012-08-19T22:56:24.767 に答える