我有一个基于诅咒的应用程序(WordGrinder)。我刚刚收到一个用户的错误报告,说他的键盘上的某些键不能正常工作。经过调查,他是对的。
有问题的键是 SHIFT+光标键和一些小键盘导航键,例如 END。调查发生了什么,似乎 curses 没有向我发送这些键的事件。在 SHIFT+光标键的情况下,我什么都没有得到,而对于 END,我得到了一个原始的转义序列。
这让我很惊讶。所有其他键都被正确解释并翻译成键符。我希望得到KEY_SLEFT
and 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 范围内...
所以至少现在一切正常,但是这些奇怪的新键码是如何工作的呢?它们在任何地方都有定义吗?他们当然不在标题中。