我在检测是否只是得到一个普通的ESC键(仅代码27)时遇到问题,或者它是否是另一个特殊键(例如向我发送三个字节的Arrow Up):ESC [A(27 91 65)。
现在,我了解了转义序列,我不了解的是我怎么可能知道用户实际上键入了ESC而不是特殊键,因为两者都以27开头并且ESC仅为27?
请注意,我使用ncurses的wgetch()
函数,如下所示:
// initialization not shown initscr() should be enough for this test
while(!f_should_exit)
{
int c(wgetch(f_win_input));
// show codes of what the user types
//
printf("got [%d] ", c);
// prints 27 when I hit ESC
// prints 27 91 65 when I hit Arrow Up
}
我一直在vim中一直使用ESC和箭头键,因此我可以想象有一种简单的方法来专门检测按下了哪个键?
最佳答案
这是X/Open Curses的标准功能。 wgetch
的手册页在 keypad
mode中进行了讨论:
默认情况下,给定窗口的keypad
未设置为true,即库不执行此操作(如果需要功能键,您的程序必须这样做):
keypad(win, TRUE);
超时在ncurses的输入选项手册页中进行了描述。要将转义字符与功能(或光标或键盘键)区分开,可以使用
notimeout
,如 nodelay
讨论中所述:关于linux - 我怎么知道用户在带有ncurses的控制台(Linux)中按了ESC键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48274895/