在终端仿真器中键入擦除字符时,显示如何更新?

在终端仿真器中键入擦除字符时,显示如何更新?

据我了解,当在终端模拟器中键入字符时,它们会出现,因为它们被“回显”。我们想象终端是一个单独的设备,通过双向通道与计算机进行通信,输入的每个键不会立即更新屏幕,而是在从计算机发送回时出现。

我的问题是退格键或任何设置为“擦除”的键如何stty能够看起来擦除屏幕上的字符。如果xterm我做

$ stty erase x
$ cat -
aaaaaaaaaax

我最后x输入的内容似乎会删除最后一个a.然而,如果这是一个真正的终端,与计算机分离,它就无法知道该stty erase字符是什么。我期望得到这种行为的唯一方法是如果擦除字符是^H并且它被回显,并且终端将其解释为特殊控制字符,告诉它擦除光标之前的字符。

这是终端仿真器的一个特性吗?它们会“作弊”并查找stty erase字符是什么?

答案1

终端仿真器发送该x字符,终端驱动程序发现该字符已被配置为擦除字符。因此,它不是将其回显给模拟器,而是发送适当的序列来擦除前一个字符(例如退格-空格-退格)。

即使擦除字符设置为Backspace,简单地回显也不会真正擦除键入的内容。当一个BS字符被发送到终端时,它只是将光标向左移动一个字符,并不会清除它。因此,终端驱动程序仍然需要发送一个额外的空格-退格键来清除它并将光标保留在该位置。

相关内容