Linux实用程序如何避免在stdin流中意外拆分ANSI键序列?

问题描述 投票:0回答:1

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

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

按下Delete键的用户与按键序列“Escape”,“[”,“3”,“〜”的区别是什么?

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

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

linux ansi tty
1个回答
1
投票

timing.

如果角色在足够短的时间内到达,则不太可能单独输入。

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

你可以通过键入Esc O A或Esc来测试这个[在vim中非常快。如果你足够快,并且你的终端设置不是太奇特了,其中一个就像向上箭头键一样。慢慢输入相同的东西,它会做一些不同的事情。做:set noesckeys并且它永远不会像箭头键那样(即使你实际按下箭头键) - 如果你想要对转义键的响应是即时的,你必须支付的价格。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.