2012-01-30 45 views
1

我无法在按住SHIFT和CTRL修改器的情况下检测箭头按键。使用箭头键加上修饰符的NCurses

我有以下测试代码:

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

当箭头键这成功地返回“c”的不同的值 - 与改性剂 - 被按下,并且终端的TERM设置被设置为“的xterm”。当终端的TERM设置设置为'linux'时,它不起作用。我所得到的'c'是27或者按下shift或ctrl。

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

+0

TERM设置必须与您正在运行的终端匹配。“linux”不能在xterm上在Linux控制台上运行。 – Craig 2012-01-30 16:18:51

回答

3

Linux控制台根本无法表示修改的光标键。您无法检测到ShiftCtrlAlt在此控制台上的状态,因为它没有传输。

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

对于这种情况,我写了一个专门用于处理现代终端能力的keyboard input handling library;其中正在扩大重点支持。

您可以尝试使用它来代替cursesgetch()