5

我有一个基于诅咒的应用程序(WordGrinder)。我刚刚收到一个用户的错误报告,说他的键盘上的某些键不能正常工作。经过调查,他是对的。

有问题的键是 SHIFT+光标键和一些小键盘导航键,例如 END。调查发生了什么,似乎 curses 没有向我发送这些键的事件。在 SHIFT+光标键的情况下,我什么都没有得到,而对于 END,我得到了一个原始的转义序列。

这让我很惊讶。所有其他键都被正确解释并翻译成键符。我希望得到KEY_SLEFTand KEY_END。为什么我不是?

我已经查看了这些键可以工作的其他一些应用程序,但没有发现任何明显我做错的事情;而像 nano 这样的应用程序确实会做一些非常邪恶的事情,比如处理自己的转义键解析,所以我不知道它们是否适合源代码。

我正在初始化ncurses,如下所示:

initscr();
raw();
noecho();
meta(NULL, TRUE);
nonl();
idlok(stdscr, TRUE);
idcok(stdscr, TRUE);
scrollok(stdscr, FALSE);
intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);

我使用 gnome-terminal 作为终端仿真器,使用 xterm 作为终端类型。语言环境是 UTF-8,我有库的 ncursesw 变体。

有任何想法吗?

更新:

好几个月后,我用 Gnome 3 的 gnome-terminal 尝试了 Wordgrinder,发现所有这些古怪的键都会生成有效的 ncurses 键码。例如,SHIFT+LEFT 现在生成键码 393。xterm 生成完全相同的结果。不幸的是,CTRL+LEFT 生成键码 539,并且 Curses 文档明确指出有效键码在 KEY_MIN 到 KEY_MAX --- 257 到 511 范围内...

所以至少现在一切正常,但是这些奇怪的新键码是如何工作的呢?它们在任何地方都有定义吗?他们当然不在标题中。

4

3 回答 3

1

gnome-terminal 不是 xterm。它为 shift-arrow 和 control-arrow 发送不同的组合。使用 ncurses 5.5 版将 TERM 设置为 gnome 可能会起作用。

以下是一些信息:http: //invisible-island.net/xterm/xterm.faq.html#bug_gnometerm

于 2011-09-27T21:36:09.617 回答
0

gnome-terminal 很有可能会出于自己的目的拦截您的 SHIFT 箭头键。我建议在 xterm 中或从控制台运行您的应用程序。

于 2011-07-12T11:58:23.593 回答
0

我使用 EPOLL 完成了原始的 [cfmakeraw] STDIN 扫描。我可以确认 SHIFT+LEFT;Shift+右;未被“扫描”。那么 XLib 客户端是如何读取这些密钥的呢?

XLib 客户端/驱动程序使用直接键盘驱动程序(使用良好的旧 BIOS 的多路复用硬件中断挂钩)...没有其他方法可以“扫描”[ ForgottenRAW] 键盘状态):-)

出于明显的网络原因,NCurses 是串行 /dev/TTY* 的客户端 - 不是硬件挂钩。

于 2015-05-15T16:18:01.110 回答