【问题标题】:What is the ANSI escape code sequence "ESC[>c"?什么是 ANSI 转义码序列“ESC[>c”?
【发布时间】:2015-07-08 11:04:00
【问题描述】:

在 bash 中输入“vi [FILENAME]”后,我得到以下结果:

....\r\"gu1.txt\" 16L, 87CESC[>cESC[1;1H111\r\n1112.....

此行中第一个标记的文本是vi结果的行数和列数后面的文件名。

第二个文本包含两个转义序列,我不明白它们的含义:ESC[>cESC[1;1H

最后一个文本包括作为 vi 结果显示的文本,即文件的内容。

您能否解释一下 ANSI 转义码序列ESC[>c 以及它与紧随其后的转义码序列ESC[1;1H 有何关系?

提前致谢

【问题讨论】:

    标签: bash terminal ansi-escape


    【解决方案1】:

    “发送设备属性(二级DA)”,根据XTerm Control Sequences

    CSI > Ps c

    发送设备属性(辅助 DA)。 Ps = 0 或省略 -> 请求终端的标识 代码。响应取决于 decTerminalID 资源设置。它应该仅适用于 VT220 及更高版本,但 xterm 扩展 这个到 VT100。

    控制(适用于 VT220 等)记录在 DEC 手册中vt100.net

    Send 设备属性 的意义在于程序正在询问 终端一些东西。终端发回信息,响应。这恰好是一个看起来像请求的字符串(如果终端没有真正连接到主机,这很有帮助)。发送请求的程序必须读取响应,否则你会在终端上看到奇怪的字符——响应的未读部分。

    在您关于 vi 的问题的上下文中,vim 使用它来确定它可能使用的 xterm 版本。答案在终端的响应中提供:

    Pv 是固件版本(对于 xterm,这原本是 XFree86 补丁号,以 95 开头)。在 DEC 终端中,Pc 表示 ROM 盒注册号,是 总是零。

    vim 中使用它的特殊功能称为“termresponse”。如果您在伪装成 xterm 但实际上不是 xterm 的终端上使用它,那么您将在终端上看到杂散字符,如 Why is vim starting in delete mode? 的答案中所述。但是,任何“VT100 兼容”的终端仿真器都必须处理这个问题。

    以下 ESC[1;1HSecondary DA 无关,而是为初始化完成的标准 (ISO-6429 / ECMA-48) 光标定位(您会看到类似这样的内容在终端中运行的任何文本编辑器中)。通常它以较短的形式发送,ESC[H,因为数字默认为1

    ESC[>c 是一个私有模式 序列,如> 字符所示。这(以及许多其他细节)在 ECMA-48 中进行了描述。 DEC 的终端与扩展一起遵循标准。终端控制的“ANSI”标准很久以前就被纳入了 ISO 标准,而且(仍然)很久以前相应的 ANSI 标准就被撤销了。

    在与硬件终端通信时,您不太可能遇到此序列,因为(在 xterm 在 1990 年代开始使用它之前)主要由 DEC 的(开放式)VMS 系统用于确定连接的终端类型它。

    【讨论】:

    • 虽然我认为这两个答案都值得拥有,但这一个应该是公认的答案。最重要的是,因为它解释了如何准确地找出 DA 的实际含义以及如果它很重要该怎么做,而我的不重要。
    【解决方案2】:

    我相信 ANSI 标准并未公开提供,但 Google 很快找到了 a third-party summary based on the DEC PDP-10 docs

    对于第一个:'c' 命令意味着“设备属性”的“DA”。您向终端发送一个不带参数的 CSI 'c',它会返回一个带有私有模式字符的 CSI 'c',这意味着终端特定的东西。私有模式字符必须以"<=>?" 之一开头,并且最多可以是数字、尾随字符或字母。因此,ESC[>c 是一个最小响应,它以某种方式编码 2 位终端特定信息(通过选择 > 而不是其他 3 个选项之一)。请注意,ESC[>c 等同于 ESC[>0c,这是 DEC VT240 终端与 VT220 的区别所在,因此这可能意味着您的文本文件是从用于 VT240 仿真器的输出中捕获的。但这可能意味着其他各种事情。无论如何,将其发送回终端应该没有任何效果。

    第二个要容易得多。 'H' 命令表示“CUP”,对于“CUrsor Position”:给定参数nm,它将光标从左上角移动到基于1 的行n 和列m。所以,ESC[1;1H 将光标移动到屏幕的左上角。

    【讨论】:

    • 链接很有意思(之前看过content),但不是“DEC PDP-10 docs”,而是Joe Smith做的总结,总结说他当时在Colorado School of Mines 工作(使用 PDP-10)。
    猜你喜欢
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多