DEC ANSI 命令序列问题;光标移动

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 不是很先进,我可以两种方式都尝试一下,看看哪一种让一切变得完美,但我已经足够了,这样的小问题开始变得重要了。

Ada*_*ach 4

我联系了维护 xterm 和 vttest 的 Thomas Dickey (invisible-island.net) - 他解释说这与 xterm 中的或CSI 0 C相同。CSI 1 CCSI C

对于任何寻找有关终端编程的更多信息的人,我强烈建议您查看他托管的 xterm 源代码 - 特别是 xterm 内的 ctlseqs.txt,它看起来非常像我一直在寻找的真正的终端控制序列参考。