VT100 终端协议中的奇怪列号“:0”

Strange column number " :0 " in VT100 terminal protocol

我正在解释串行端口的一些输出。输出在 VT100 protocol 中。 VT100 终端协议使用一些控制字符序列来设置光标在屏幕上的位置。控制序列如下所示:

ESC[row;columnH

例如,

ESC[01;01H means set cursor to row 1, column 1.

但是当列号超过 2 位数时,我看到以下序列。

ESC[10;:0H

注意分号后的额外“:”。此控制序列位于 ESC[10;99H 之后,即第 10 行第 99 列。

我的理解是:0 = 100。但是如果列号是 200 呢?

我不认为这实际上是有效的,或者,如果是这样,那完全是偶然的。传递给 CUP(光标位置)命令(以及许多其他涉及屏幕坐标的参数)的参数仅限于一位或两位数字。

在 ASCII table 中,数字 9 后跟 : 所以,其中 99 表示 9 * 10 + 9:0 可能代表10 * 10 + 0100:

假设该错误适用于更高的数字(我对此没有信心),您正在寻找 200,这将是 20 * 10 + 0 或可能 D0D 是 ASCII 中比 : 大十的字符 table).

没有,相关标准没有规定位数限制为两位,比如因为VT100s可以寻址24行132列

忽略参数中的前导零。 OP 可能报告了一个仅使用两位数字的问题(来自某些未提及的程序)。这与终端本身无关(除非是在针对终端仿真器开发人员的错误报告的上下文中)。

resize程序假设一个人的终端不大于 999 x 999 以将光标定位到 "past" 的右下角屏幕。对于那些不依赖多个像素来辨别字符的人,xterm 确实使用了一种名为 "Unreadable" 的字体,这可能会导致更大的屏幕。

顺便说一句,问题中给出的来源不是很好,虽然不是最差的——参考vt100.net and ECMA-48