curses.h のファンクション キーに問題があります。私はこの小さなプログラムをさまざまなウェブサイト/チュートリアルで見ています
#include <ncurses.h>
int main()
{ int ch;
initscr(); /* Start curses mode */
raw(); /* Line buffering disabled */
keypad(stdscr, TRUE); /* We get F1, F2 etc.. */
noecho(); /* Don't echo() while we do getch */
printw("Type any character to see it in bold\n");
ch = getch();
while (ch != KEY_F(1))
{
if(ch == KEY_F(1))
printw("F1 Key pressed: Ending program.\n");
else
{ printw("The pressed key is ");
attron(A_BOLD);
printw("%c\n", ch);
attroff(A_BOLD);
}
refresh();
ch = getch();
}
printw("end\n");
endwin(); /* End curses mode */
return 0;
}
キー F6-F12 は問題なく動作し、返されるコードも問題ありません (たとえば、F6 が押された場合は 270)。しかし、F5 を押すと 269 が返されず、本来のように返されず、代わりに次のことが起こっています (F5 を 1 回押すだけです)。
Type any character to see it in bold
The pressed key is ^[
27
The pressed key is [
91
The pressed key is 1
49
The pressed key is 5
53
The pressed key is ~
126
したがって、エスケープ シーケンス全体が返されると思います。この問題についてインターネットで読んだところ、TERM 変数を xterm または vt100 に変更する方法を説明するヒントが 2 回ありました。そこで、TERM を vt 220 と xterm に変更しようとしましたが、何も変わりません。vt100に変えたらF6-F12も効かなくなった。
ユーザーが F1-F5 を押したかどうかを認識する方法を教えてもらえますか? Enter、Backspace、上、下などのキーは正常に認識されます。
よろしくお願いします