我在curses.h中有一个带有功能键的Probclem。 我在不同的网站/教程上看到了这个小小的程序
#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一次):
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。因此我尝试将TERM更改为vt 220和xterm,但没有任何改变。当我把它改成vt100时,F6-F12也不起作用。
如果用户按下F1-F5,有人可以帮助我吗?输入,退格,上,下等键都可以识别。
最好的问候
答案 0 :(得分:5)
在你的终端发送的terminfo
与实际发送的内容之间存在分歧。可能是目标计算机上的terminfo
文件不正确,或$TERM
设置错误或任意数量的结果。
我首先要比较一下
$ infocmp -L
在目标计算机上说,比较终端在运行时实际发送的内容,比如cat
。
如果您正在运行 xterm ,也许您有一个~/.Xresources
文件来翻译您的功能键。 VMS用户通常会以这种方式重新映射F1-F5键。此外,许多终端仿真器(如Putty)都可以重新映射这些密钥。