terminal - 转义码 VT102 和 ANSI

标签 terminal ansi xfce vt100

我使用 minicom 通过串行线与一个转储以十六进制接收的字符的设备进行通信。我这样做是为了查看某些键的转义码。我用 VT102 终端仿真试过一次 minicom,一次用 ANSI。

对于VT102和ANSI,方向键对应

Up:    Esc [ A
Down:  Esc [ B
Right: Esc [ C
Left:  Esc [ D

这与我在几个网站上找到的匹配,例如 VT102 User Guide

我尝试了其他键,但在整个网络上找不到任何引用:

            VT102         ANSI
Home:     Esc [ 1 ~      Esc [ H
End:      Esc O F        Esc O F
Insert:   Esc [ 2 ~      Esc [ @

这些代码是标准的吗?什么标准?我在哪里可以找到匹配项?

如果我尝试通过命令行 (xfce-terminal),按 Home、End 和 Insert 的顺序:

$ cat | hexdump -C
^[[H^[[F^[[2~00000000  1b 5b 48 1b 5b 46 1b 5b  32 7e                    |.[H.[F.[2~|

好像Home等于Minicom ANSI序列,End把'O'改成'[',Insert等于Minicom VT102转义序列。
相同的运行 GtkTerm。

我也尝试过在 Windows 上使用 TeraTerm,结果仍然不同。

总结

           Minicom VT102        Minicom ANSI    xfce-terminal & GtkTerm    TeraTerm VT100/VT102
Home:         Esc [ 1 ~           Esc [ H              Esc [ H                   Esc [ 1 ~
End:          Esc O F             Esc O F              Esc [ F                   Esc [ 4 ~
Insert:       Esc [ 2 ~           Esc [ @              Esc [ 2 ~                 Esc [ 2 ~

最佳答案

特殊键没有标准。现有标准(最近,ECMA-48 最后修订于 1991 年)只处理应用程序可以发送到终端的控制序列(只有极少数控制序列会引起 响应终端)。

特殊键(和最常用的控制序列)记录在 terminal databases 中比如 ncurses 的。但是在阅读终端描述时,您必须记住,许多终端可以发送不同的转义序列(或根本不发送转义序列),具体取决于它们设置的模式。这将由那些终端仿真器的开发人员记录,但对于给定的示例,开发人员不提供该信息。

ncurses 中的是唯一的文档:xfce 终端和 gtkterm 是 "skins"使用 VTE 实现所有相关功能。如果你查看它们的依赖关系,你会看到一些版本信息,这些信息可能与 ncurses 中的描述相关(开始 here )。

关于terminal - 转义码 VT102 和 ANSI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54465316/

相关文章:

vim - 将 VIM 设置为 256 色

c - 长字符串上的段错误 11,在访问字符串之前,仅当字符串 > 14 时

linux - 如何在 Linux 上从压缩源代码构建 ManDVD 软件包?

linux - Xfces 用户定义的操作在控制台中工作时不起作用

terminal - --递归错误: Insufficient Permission: Request had insufficient authentication scopes

mysql - 如何解决在 mysql 客户端使用 -e 时出现反引号错误?

python - 如何在终端中动态打印字符串表?

windows - 是否可以在 Windows 中为每个应用程序设置 ANSI 编码

c++ - 在 C++ 中读取包含 é 等特殊字符的 ISO-8859 类型文件

linux - 如何使用 cron 设置壁纸