因此,我正在编写一个终端仿真程序(我知道,我应该编译腻子等),并且处于通过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并不了解,我只能尝试两种方法,看看哪种方法可以使一切完美,但我已经足够了,这样的小问题开始变得重要了。
[
,可以将其编码为两个字符的序列ESC [
,也可以编码为[
第8位。(某些型号可能仅支持ESC [
)我不知道CSI 0 C
vt102 做了什么。在xterm上等效于CSI 1 C
。我怀疑,但不确定,在某个时候(认为atoi
)相同地解析了0和值的缺失。您是否在xterm源中寻找评论?