1

在按下和不按下 SHIFT 和 CTRL 修饰符的情况下,我无法检测到箭头键按下。

我有以下测试代码:

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

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

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

4

1 回答 1

3

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

在真正的 xterm 或足够兼容的克隆(现在大多数都是)上,您可以检测到它,但它是一种足够新的能力,ncurses无法理解它并被生成的扩展转义序列混淆。

对于这种情况,我编写了一个专门设计用于处理现代终端功能的键盘输入处理库;其中包括扩展重点支持。

您可以尝试使用它而不是curses's getch()

于 2012-04-05T13:10:15.963 回答