带有箭头键和修饰符的 NCurses

Nic*_*las 2 linux ncurses modifier arrow-keys

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

我有以下测试代码:

WINDOW * mainwin = initscr();
keypad(mainwin, TRUE);
int c = wgetch(mainwin);
Run Code Online (Sandbox Code Playgroud)

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

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

Leo*_*erd 5

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

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

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

您可以尝试使用 that 而不是cursess getch()