【发布时间】:2011-09-29 01:48:07
【问题描述】:
我有一个基于诅咒的应用程序 (WordGrinder)。我刚刚收到一个用户的错误报告,说他的键盘上的某些键不能正常工作。经过调查,他是对的。
有问题的键是 SHIFT+光标键和一些小键盘导航键,例如 END。调查发生了什么,似乎 curses 没有向我发送这些键的事件。在 SHIFT+光标键的情况下,我什么也得不到,而对于 END,我得到一个原始的转义序列。
这让我很吃惊。所有其他键都被正确解释并翻译成键符。我希望得到KEY_SLEFT 和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 范围内...
至少现在一切正常,但这些奇怪的新键码是如何工作的?它们在任何地方都有定义吗?它们肯定不在标题中。
【问题讨论】:
-
您可以尝试在不同的终端中运行它(例如,使用 osx ssh 或 windows putty ssh 到盒子并运行应用程序)?你看到同样的问题吗?
标签: c unix terminal ncurses curses