我在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;
}
Run Code Online (Sandbox Code Playgroud)
键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
Run Code Online (Sandbox Code Playgroud)
所以我认为整个逃生序列都归还了.我在互联网上阅读了这个问题,有两次提示将TERM变量更改为xterm或vt100.因此我尝试将TERM更改为vt 220和xterm,但没有任何改变.当我把它改成vt100时,F6-F12也不起作用.
如果用户按下F1-F5,有人可以帮助我吗?输入,退格键,向上,向下等键都可以识别.
最好的祝福
听起来像terminfo你的终端发送的内容和它实际发生的内容之间存在分歧.可能是terminfo目标计算机上的文件不正确,$TERM设置错误或任何数量的结果.
我首先要比较一下
$ infocmp -L
Run Code Online (Sandbox Code Playgroud)
在目标机器上说,比较终端在运行时实际发送的内容,比如说cat.
如果你正在运行xterm,也许你有一个~/.Xresources文件翻译你的功能键.VMS用户通常会以这种方式重新映射F1-F5键.此外,许多终端仿真器(如Putty)都可以重新映射这些密钥.