Dav*_*ven 5 c unix curses terminal ncurses
我有一个基于curses的应用程序(WordGrinder).我刚刚收到用户的错误报告,说某些键在键盘上无法正常工作.在调查中,他是对的.
有问题的键是SHIFT +光标键和一些键盘导航键,例如END.调查正在发生的事情,似乎诅咒并没有向我发送这些密钥的事件.在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);
Run Code Online (Sandbox Code Playgroud)
我使用gnome-terminal作为终端模拟器,xterm作为终端类型.Locale是UTF-8,我有这个库的ncursesw变体.
有任何想法吗?
更新:
好吧,几个月后,我尝试使用Gnome 3的gnome-terminal的Wordgrinder,并发现所有这些古怪的密钥生成有效的ncurses密钥代码.例如,SHIFT + LEFT现在生成键码393.xterm产生完全相同的结果.不幸的是,CTRL + LEFT生成密钥代码539,并且Curses文档明确指出有效密钥代码在KEY_MIN到KEY_MAX --- 257到511的范围内......
所以至少事情现在起作用,但这些奇怪的新密钥代码如何工作?他们在任何地方定义?他们肯定不在标题中.