使用箭头键加修饰符的NCurses

时间:2012-01-30 08:22:46

标签: linux ncurses arrow-keys modifier

无论是否按下SHIFT和CTRL修改器,我都无法检测箭头按键。

我有以下测试代码:

WINDOW * mainwin = initscr();
keypad(mainwin, TRUE);
int c = wgetch(mainwin);

当按下箭头键 - 带修饰符 - 并且终端的TERM设置设置为'xterm'时,这会成功返回'c'的不同值。当终端的TERM设置设置为'linux'时,它不起作用。我得到的'c'都是27,无论是移位还是按住ctrl。

我希望它能够使用linux终端类型。有什么建议?

1 个答案:

答案 0 :(得分:3)

Linux控制台根本无法表示修改过的光标键。您无法在此控制台上检测到 Shift Ctrl Alt 状态,因为它未被传输。

在一个真正的xterm或足够兼容的克隆上(现在大多数都是这样),你可以检测到它,但它是一种足够新的能力,ncurses不理解它,并且被生成的扩展转义序列搞糊涂了

对于那个案例,我写了keyboard input handling library专门用来处理现代终端能力;其中包括扩展关键支持。

您可以尝试使用该代替curses的{​​{1}}。