有效数据位置和有效演示位置之间的区别

时间:2019-02-05 10:00:56

标签: c console escaping cursor-position ansi-escape

在ECMA-48中分别在4.2.5和4.2.6中定义的活动数据位置和活动演示位置之间的关键输出区别是什么?

我尝试使用ECMA-48中定义的转义序列在控制台中将光标移动到其他坐标。

我遇到了两个实现相同功能的实现,但实际上却在定义中有所不同。

根据定义:

  

银联

     

CUP使活动的演示位置在演示组件中移动...

     

HVP

     

HVP导致活动数据位置在数据组件中移动...

使用C代码进行测试时:

杯:

printf("Hello");
printf("\x1b" "[" "%d" ";" "%d" "H", 5, 5);
printf("World");

HVP:

printf("Hello");
printf("\x1b" "[" "%d" ";" "%d" "f", 5, 5);
printf("World");

它们产生相同的结果。

那么,标准试图通过定义这两个术语来产生什么区别?

  

编辑:

     

根据6.1.5,

     

在单向设备中,它仅具有演示组件还是具有演示组件   和数据组件,活动数据位置和活动演示之间没有区别   位置。

     

在第16页(6.1.5)中,第一个参数:

     

由于字符之间可能存在差异   进度和字符路径,例如在某些双向环境中,活动数据的坐标   数据组件中的位置以及演示组件中活动演示位置的位置   可能有所不同。

     

以实际示例说明双向环境中的活动演示位置和活动数据位置。

然后,我应该使用哪一个在控制台上移动?

  

[注意:在您的建议中不要提及使用ncurses。但是欢迎对实施ECMA-48提出任何建议]

1 个答案:

答案 0 :(得分:0)

如前所述:对于单向设备,没有区别。您必须研究双向设备(并启用相应的模式)。

这是指在终端以从左至右以外的其他方式打印字符并包裹后,可以将光标移至 advance 的设备>从上到下。您可以在GUI Web浏览器中访问阿拉伯语网页时看到类似的内容:文本从右到左,但是您可以嵌入其中的文本组件,这些组件从左到右书写。数据位置和显示位置用于使混合物保持笔直。 (如果没有混合,这是一个琐碎的问题,但是兴趣不大。)

VT100从未做到过。 VT520是DEC终端的最后一个,在1990年代初/中期(没有广泛使用终端支持的双向控制)。尽管ECMA-48 2nd edition中有一个 HVP (1979年8月),但是在第4版(1986年12月)中增加了关于方向的文字。对于5th edition(1991年6月)进行了一些修订。

一些终端仿真器可以做到这一点,但是缺少硬件终端(可以证明编写文档的委员会成员所想到的功能),在解释方面存在分歧和分歧。