我正在为学生项目复制Irssi 界面。我想将NCurses用于文本界面,并使用 readline在编写消息时提供更好的文本编辑功能。
我的问题是我想要一个像这样的输入/事件循环:
int ch;
while (exit_condition) {
ch = wgetch(window);
switch (ch) {
case ERR: continue;
case KEY_F(1): /* do something */ break;
case KEY_UP: /* do something else */ break;
default: forward_to_readline(ch); break;
}
}
但是为了匹配KEY_F(n)
或者KEY_UP
我需要启用keypad(window, TRUE)
,这将修改输入并使其无法用于 readline。
从手册:
如果 keypad 为 TRUE,并且按下了功能键,则返回该功能键的标记而不是原始字符。
当接收到可能是功能键开头的字符时(在现代终端上,这意味着转义字符),curses 设置一个计时器。如果序列的其余部分没有在指定时间内进入,则字符通过;否则,返回功能键值。由于这个原因,许多终端在用户按下退出键和退出返回到程序之间存在延迟。
以下是我的想法:
- 有没有反转效果的功能
keypad
? - 我应该实现自己的行为
keypad
吗?我想如果我想捕捉像 Shift + Up 这样的事件,我也必须这样做。我很高兴有这样的例子。 - 如果我无法从 NCurses 获得它,readline 可以给我组合键吗?也许与键绑定callbacs(相关?)?
感谢您的时间 !