ncurses 到外壳并返回弄乱密钥
我有这个 ncurses 应用程序正在执行标准配方 暂时退出 ncurses,运行外部 编辑器/shell/无论什么,然后在完成后返回 ncurses。
这几乎可以工作,除了 ncurses 的前几个按键 之后得到的显然是假的; ncurses 认为 ^[ 和 A 被看到 如果我按向上箭头两次。
任何人以前见过这种行为并且知道要修复什么魔法 这是? 如果有帮助的话,这是 Ruby ncurses 库。
I have this ncurses application that is doing the standard recipe for
temporarily dropping out of ncurses, running an external
editor/shell/whatever, and then dropping back to ncurses when it's done.
This ~almost works, except that the first few keypresses that ncurses
gets afterwards are obviously bogus; ncurses thinks ^[ and A are seen
respectively if I press the up arrow twice.
Anyone seen this behavior before and know what the magic incant to fix
this is? If it helps any, this is the Ruby ncurses library.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的。 如果没有键盘,ncurses 将无法为您处理转义码。 来自键盘手册页:
通常,我在 ncurses 程序中做的第一件事是调用 keypad(stdscr, true) 来启用良好的键盘映射。
希望有帮助。
Yeah. Without keypad ncurses won't handle escape codes for you. From the keypad man page:
Often, the first thing I do in an ncurses program is call keypad(stdscr, true) to enable nice keyboard mapping.
Hope that helps.
经过一番研究后,我找到了一个货物崇拜解决方案:在 stdscr 上退出 shell 后显式调用 keypad(1) 。 我不知道为什么会这样,但确实如此。 如果其他人能解释原因,我会将其标记为“是”。
当前的工作原理是键盘接触某种内部缓冲区并将其清除。简单说一下:
After rootling around a bit, I found a cargo culting solution: explicitly call keypad(1) after getting out the shell on stdscr. I have no idea why this works, but it does. I'll mark someone else's answer as yes if they can explain why.
The current working theory is that keypad touches some sort of internal buffer and clears it.Scratch that: