ANSI 转义 0x1b[0A 和其他 0 值代码应该做什么?

jcu*_*bic 2 bash terminal escape-characters ansi

我正在为 jQuery 终端处理我的 ANSI 格式代码。它几乎可以工作,但我有一个问题,它与应该移动光标的 0A ansi 代码有关(还有其他 0 光标代码:BCDEF)

我已经用ervy 库进行了测试,如果我\x1b\[0[A-D]在输出到终端之前从字符串中删除它会有所不同。

我不确定如果我正确处理 ANSI 转义符,我将输出分成几行,然后在每行之前增加 y 位置并将 x 设置为 0,当有光标 ANSI 转义码时,我移动光标。我使用数组数组来保存屏幕的输出。(不确定,但我认为如果我直到最后都不将线条连接成一个字符串会更快,但我这样做是因为它是第一个想法而不是因为速度)。

如果有 0,我不确定我应该做什么。

这是来自 ervy 库的两个图的输出

在此处输入图片说明

正确的情节

在此处输入图片说明

没有零代码的绘图。

我正在尝试调试我的代码(我认为有一点是第二个屏幕上的情节),但我不知道如何处理 0 ANSI 转义码。

我使用维基百科作为参考。

egm*_*ont 6

这些转义序列将重复计数作为参数,例如\e[5A将光标向上移动 5 行,\e[10C将光标向右移动 10 列等。如果省略,则默认值为 1。

但是如果参数明确指定为 0 会发生什么?

我们来看看标准。ECMA-48 以及 ctlseqs.html(记录 xterm 的行为)对此没有任何说明,也就是说,隐含地暗示它们应该移动零。另一方面,DEC STD 070 表示值 0 应移动 1。

让我们看看实现。对于这些序列中的一些,urxvt 将 0 解释为 0,例如对于垂直光标移动,而不是对于水平光标(那里是 1)。我检查过的所有其他终端都将其解释为 1(包括 xterm,因此其行为和文档不匹配)。

标准不一致。实现是不一致的。

你能做什么?不要使用这些。如果您遇到发出这些信息的库,请提交错误并要求其开发人员停止使用这些有问题的转义序列,因为无论他们期望什么,这都违反了某些标准,并且肯定会在某些终端中中断。