DEC ANSI命令序列问题;光标移动


8

因此,我正在编写一个终端仿真程序(我知道,我应该编译腻子等),并且处于通过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并不了解,我只能尝试两种方法,看看哪种方法可以使一切完美,但我已经足够了,这样的小问题开始变得重要了。


2
术语注释:CSI是escape- [,可以将其编码为两个字符的序列ESC [,也可以编码为[第8位。(某些型号可能仅支持ESC [)我不知道CSI 0 Cvt102 做了什么。在xterm上等效于CSI 1 C。我怀疑,但不确定,在某个时候(认为atoi)相同地解析了0和值的缺失。您是否在xterm源中寻找评论?
吉尔(Gilles)“所以,别再邪恶了”,

绝对正确,感谢您的编辑,并希望我需要查看一些资料来获得更多线索。
亚当·埃伯巴赫

Answers:


4

我与维护xterm和vttest的Thomas Dickey(invisible-island.net)联系-他解释说CSI 0 C这与xterm 相同CSI 1 C或相同CSI C

对于任何需要有关终端编程的更多信息的人,我强烈建议您查看他托管的xterm源-特别是xterm中的ctlseqs.txt,它看起来很像我一直在寻找的一个真正的终端控制序列参考。


这个源文件对我找到什么CSI代码很有用。提到的ctlseqs.txt中关于CSI表示为0x9b字节的信息似乎是错误的,实际上是0x1b
Hi-Angel

1

当您已经有了一个将功能映射到许多不同终端的特定代码序列的数据库时,为什么对特定终端类型具有硬编码兼容性?(terminfo数据库通常位于/ usr / share中,并且包含在大多数ncurses发行版中)。关于诅咒的任何资源都应说明这些功能的标记方式。

请注意,terminfo文件通常是使用tic编译的,因此您可能需要花一点时间才能找到terminfo源文件。

另请参见http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16(它们中有一个指向terminfo.src文件存储库的链接)


我正在放置终端的设备没有terminfo或ncurses,并且编写特定的终端仿真似乎是让netback在其上运行的最佳方法。iPad已经有nethacks了,但是我只想能够以DECgraphics模式的键盘来播放它,而不是像所有的具有触摸控制方案的GUI一样。我不希望这会引起世界的关注,但这是我要玩nethack的方式。
亚当·埃伯巴赫

1
否-我并不是说terminfo中应该为您的硬件添加一个条目-VT102将有一个条目,尽管描述了nethack或任何其他基于curses的应用程序将使用的所有命令序列。
symcbean 2011年

嗯,谢谢-这将是一个很好的紧凑参考。
亚当·埃伯巴赫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.