无论是否按下SHIFT和CTRL修改器,我都无法检测箭头按键。
我有以下测试代码:
WINDOW * mainwin = initscr();
keypad(mainwin, TRUE);
int c = wgetch(mainwin);
当按下箭头键 - 带修饰符 - 并且终端的TERM设置设置为'xterm'时,这会成功返回'c'的不同值。当终端的TERM设置设置为'linux'时,它不起作用。我得到的'c'都是27,无论是移位还是按住ctrl。
我希望它能够使用linux终端类型。有什么建议?
答案 0 :(得分:3)
Linux控制台根本无法表示修改过的光标键。您无法在此控制台上检测到 Shift , Ctrl 或 Alt 状态,因为它未被传输。
在一个真正的xterm或足够兼容的克隆上(现在大多数都是这样),你可以检测到它,但它是一种足够新的能力,ncurses
不理解它,并且被生成的扩展转义序列搞糊涂了
对于那个案例,我写了keyboard input handling library专门用来处理现代终端能力;其中包括扩展关键支持。
您可以尝试使用该代替curses
的{{1}}。