Linux 实用程序如何避免意外拆分标准码流中的 ANSI 键序列?



终端仿真器将键盘输入编码为 ANSI 转义序列。

转义键是单个字节:\x1b 删除键是 4 个字节:\x1b
'[

' '3' '~'用户按下 Delete 键和"转义"、"["、"3"、"~"键序列有什么区别?

像 vim 这样的交互式程序如何区分?

终端仿真器和实用程序(如 SSH(如何确保接收程序做出正确解释的方式发送键序列?

时间。

如果字符在足够短的时间跨度内到达,则不太可能单独键入它们。

在 vim 中,选项esckeysttimeoutttimeoutlen确定是否等待转义序列完成以及等待多长时间。这些不是传统的 vi 选项;在传统的VI中,逃生只是逃生,箭头键是无用的。

你可以通过在 vim 中键入 EscOA 或Esc[A非常快来测试这一点。如果你的速度足够快,并且你的终端设置不是太奇特,其中一个将像向上箭头键一样。慢慢地键入相同的东西,它会做一些不同的事情。:set noesckeys,它永远不会像箭头键一样起作用(即使您实际按下箭头键( - 如果您希望对转义键的响应是即时的,这是您必须付出的代价。

实验可以用其他序列(如您的^[[3~(完成,但 3 个字符的序列更容易输入。

curses 库在解释终端输入时也使用超时。这里有一个相关的问题:我怎么知道用户在使用 ncurses (Linux( 的控制台中点击了 ESC 键?

相关内容

  • 没有找到相关文章

最新更新