gpt4 book ai didi

linux - Linux 实用程序如何避免在标准输入流中意外拆分 ANSI 键序列?

转载 作者:太空宇宙 更新时间:2023-11-04 10:06:41 24 4
gpt4 key购买 nike

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

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

用户按下 Delete 键和键序列“Escape”、“[”、“3”、“~”之间有什么区别?

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

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

最佳答案

时机。

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

在 vim 中,选项 esckeysttimeoutttimeoutlen 决定是否等待转义序列完成以及等待多长时间。这些不是传统的 vi 选项;在传统的 vi 中,转义只是转义,方向键没有用。

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

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

curses 库在解释终端输入时也使用超时。这是一个相关的问题:How can I know that the user hit the ESC key in a console with ncurses (Linux)?

关于linux - Linux 实用程序如何避免在标准输入流中意外拆分 ANSI 键序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52100729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com