在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提出任何建议]
答案 0 :(得分:0)
如前所述:对于单向设备,没有区别。您必须研究双向设备(并启用相应的模式)。
这是指在终端以从左至右以外的其他方式打印字符并包裹后,可以将光标移至 advance 的设备>从上到下。您可以在GUI Web浏览器中访问阿拉伯语网页时看到类似的内容:文本从右到左,但是您可以嵌入其中的文本组件,这些组件从左到右书写。数据位置和显示位置用于使混合物保持笔直。 (如果没有混合,这是一个琐碎的问题,但是兴趣不大。)
VT100从未做到过。 VT520是DEC终端的最后一个,在1990年代初/中期(没有广泛使用终端支持的双向控制)。尽管ECMA-48 2nd edition中有一个 HVP
(1979年8月),但是在第4版(1986年12月)中增加了关于方向的文字。对于5th edition(1991年6月)进行了一些修订。
一些终端仿真器可以做到这一点,但是缺少硬件终端(可以证明编写文档的委员会成员所想到的功能),在解释方面存在分歧和分歧。