【发布时间】:2016-12-13 18:07:47
【问题描述】:
我正在为一个学生项目复制 Irssi interface。我想将NCurses 用于文本界面,readline 在编写消息时提供更好的文本编辑功能。
question、answer 和 project 为我提供了一个很好的起点。
我的问题是我想要这样的输入/事件循环:
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 (relevant ?)?
感谢您的宝贵时间!
【问题讨论】:
标签: c readline ncurses keypad libreadline