Ada*_*ach 8 terminal escape-characters cursor
所以我正在编写一个终端仿真(我知道,我应该只编译 putty 等)并且我正处于通过 vttest 进行调试以确保它正确的阶段。我现在基于 VT102,但会在基本功能正常时添加以后的终端功能,例如颜色。
命令集主要是 ANSI。DEC 有自己的命令集,但从 1973 年左右开始支持 ANSI 命令。这些 ANSI 标准现在显然不可用,但 ECMA 等效标准是,我有它们(ECMA-48 似乎最相关)但就我而言并没有回答这个问题可以看到。大多数 ANSI 命令序列以 ESC 开头。许多命令以此处显示为 CSI 的命令序列标识符开头,并在数据中表示为 0x1c 0x5b (ESC [
),如果 8 位通信是可能的,则表示为 0xdb 。然后按照识别命令的顺序进行。有些命令会影响光标位置,有些会影响屏幕,有些会引起对主机的响应等等。
一些终端命令包括一个数字参数。示例CSI 10 ; 5 H
表示将光标位置设置为第 10 行第 5 列。当缺少数字参数时,可以使用默认值:CSI 10 ; H
表示将光标位置设置为第 10 行第 1 列,因为未指定参数时默认值是 1。
我有来自 vt100.net 的 vt102 手册(很好的资源)和大约十多页提供了有关这些命令序列的部分信息。显然,完整的福音 DEC 终端规范从未脱离 DEC。
很清楚的是,CSI C
向右移动光标,默认值为 1。
不清楚的是什么意思CSI 0 C
。
为什么那里有一个零,它似乎使命令什么都不做?如果它的意思是“使用默认值”,那么它可以作为 1 发送,但较短的字符串将没有参数,并且依赖于被解释为 1 的默认值。这些实际的物理 VT 终端通常用于 300 波特及以下,因此一个字符确实很重要!
我对 vttest 不是很先进,我可以两种方式都尝试一下,看看哪一种让一切变得完美,但我已经足够了,这样的小问题开始变得重要了。
我联系了维护 xterm 和 vttest 的 Thomas Dickey (invisible-island.net) - 他解释说这与 xterm 中的或CSI 0 C
相同。CSI 1 C
CSI C
对于任何寻找有关终端编程的更多信息的人,我强烈建议您查看他托管的 xterm 源代码 - 特别是 xterm 内的 ctlseqs.txt,它看起来非常像我一直在寻找的真正的终端控制序列参考。