![在终端仿真器中键入擦除字符时,显示如何更新?](https://linux22.com/image/59702/%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%BB%BF%E7%9C%9F%E5%99%A8%E4%B8%AD%E9%94%AE%E5%85%A5%E6%93%A6%E9%99%A4%E5%AD%97%E7%AC%A6%E6%97%B6%EF%BC%8C%E6%98%BE%E7%A4%BA%E5%A6%82%E4%BD%95%E6%9B%B4%E6%96%B0%EF%BC%9F.png)
据我了解,当在终端模拟器中键入字符时,它们会出现,因为它们被“回显”。我们想象终端是一个单独的设备,通过双向通道与计算机进行通信,输入的每个键不会立即更新屏幕,而是在从计算机发送回时出现。
我的问题是退格键或任何设置为“擦除”的键如何stty
能够看起来擦除屏幕上的字符。如果xterm
我做
$ stty erase x
$ cat -
aaaaaaaaaax
我最后x
输入的内容似乎会删除最后一个a
.然而,如果这是一个真正的终端,与计算机分离,它就无法知道该stty erase
字符是什么。我期望得到这种行为的唯一方法是如果擦除字符是^H
并且它被回显,并且终端将其解释为特殊控制字符,告诉它擦除光标之前的字符。
这是终端仿真器的一个特性吗?它们会“作弊”并查找stty erase
字符是什么?
答案1
终端仿真器发送该x
字符,终端驱动程序发现该字符已被配置为擦除字符。因此,它不是将其回显给模拟器,而是发送适当的序列来擦除前一个字符(例如退格-空格-退格)。
即使擦除字符设置为Backspace,简单地回显也不会真正擦除键入的内容。当一个BS
字符被发送到终端时,它只是将光标向左移动一个字符,并不会清除它。因此,终端驱动程序仍然需要发送一个额外的空格-退格键来清除它并将光标保留在该位置。