跳到主要内容
ansicode
终端

GNOME Terminal —— ANSI 转义码支持情况

GNOME Terminal 是 GNOME 桌面的旗舰终端模拟器,构建于 libvte(GNOME 自 2002 年起维护、并与 xfce4-terminal、lxterminal、terminator、tilix、guake 等众多终端共享的 VT 引擎)之上。libvte 每发布一项新转义序列功能,所有下游消费者在下次重新编译时即可继承 —— 这使得 libvte 的路线图实际上是整个 GTK 终端生态系统的功能下限。

ANSI 转义码兼容性方面,GNOME Terminal 基本上是 xterm 兼容的:完整 SGR(24 位色、加粗、斜体、删除线)、完整光标 + 擦除 + 滚动、鼠标模式、括号粘贴、备用屏幕对,完整 SGR 4:1–4:5 扩展下划线(含 SGR 58 下划线着色)。OSC 8 超链接早在 libvte 0.50(2017 年)就已落地 —— GNOME 实际上是首批支持的终端。值得注意的缺失:不支持 Sixel、不支持 kitty 图形协议、不支持 iTerm2 OSC 1337 内联图像(libvte issue #253 长期跟踪 Sixel 请求,2024 年 libvte 0.78 开始合并相关补丁)。

最近更新

特性支持情况

该终端在站点统一矩阵跟踪的 15 个特性上的表现。点击任意特性名可查看其在全部终端上的完整支持情况。

  • 8 种基础色(30–37 / 40–47)SGR 30–37 前景,40–47 背景。
    支持
  • 高亮(aixterm)色(90–97 / 100–107)aixterm SGR 扩展。
    支持
  • 256 色调色板(38;5;n / 48;5;n)xterm 256 色扩展。
    支持
  • 24 位真彩色(38;2;r;g;b)1670 万直接 RGB。设置 $COLORTERM=truecolor。
    支持
  • 斜体(SGR 3)斜体文本属性。
    支持
  • 扩展下划线(4:1–4:5)波浪/点/虚下划线样式。
    支持
  • 删除线(SGR 9)文本中央的水平线。
    支持
  • OSC 8 超链接内联可点击 URI。
    支持
  • 备用屏幕(?1049h)全屏应用缓冲区。
    支持
  • 鼠标跟踪(SGR ?1006)鼠标点击/拖拽事件。
    支持
  • 括号粘贴(?2004)粘贴文本被 ESC[200~/ESC[201~ 包裹。
    支持
  • 焦点事件(?1004)获得焦点时 ESC[I,失去时 ESC[O。
    支持
  • Sixel 图形DEC sixel 内联位图。
    不支持
  • Kitty 图形协议PNG/RGB 内联图像和动画。
    不支持
  • 同步输出(?2026)原子化帧更新,避免撕裂。
    支持

在此终端可用的序列

该终端能完整处理的转义序列对应的权威参考页。每条均链接到完整页面,含字节形式、规范出处与多语言示例。

细节与版本说明

在生产中使用某序列前应知晓的、该终端特有的注意事项。

共享 libvte 引擎 —— 众多兄弟终端拥有相同支持集
GNOME Terminal、xfce4-terminal、terminator、tilix、guake、lxterminal 与 Pantheon Terminal 均链接同一个 libvte。诸如 "xfce4-terminal 支持 OSC 8 吗?" 之类的能力查询,实质上是 libvte 版本查询。可通过 DA3(`CSI = c` 应答)或 GNOME 专属的 `$TERM_PROGRAM` 进行识别,但实际能力下限由系统上的 libvte 版本决定 —— `gnome-terminal --version` 具有误导性。
$TERM 默认 xterm-256color 而非 gnome-256color
尽管 libvte 已实现专属扩展(完整 Smulx 扩展下划线支持、自 libvte 0.50 起的 OSC 8 超链接),`$TERM=xterm-256color` 仍是开箱默认。terminfo 中确实存在 `vte` 与 `vte-256color` 条目(ncurses 6.0+),它们声明了 Smulx 能力;可在配置中将 `$TERM=vte-256color`,或编辑 `偏好 › 配置文件 › 兼容性`。大多数用户从不切换 —— 需要这些扩展能力的程序应通过 DA1 探测,而不是读取 $TERM。
不支持 Sixel / kitty 图形协议 / OSC 1337 内联图像
libvte 是终端内联图像渲染的最大长期缺席者 —— Sixel 补丁于 libvte 0.78(2024 年)合并,但仅作为编译期可选项,且 GNOME Terminal 在主流发行版上尚未默认启用。发送 Sixel 的程序(chafa、timg、neofetch-image、IPython 中的 matplotlib 显示)会让转义字节以乱码方式打印出来。绕行方案:发送前通过 DA1(`CSI c` 应答含 `4` 表示 sixel)进行能力检测;像 `chafa` 这样的工具已默认这样做。kitty 图形与 OSC 1337 则没有路线图。
OSC 8 超链接:首批落地的主流终端
libvte 0.50(2017 年 9 月)是首个大规模部署 OSC 8 超链接的终端 —— 早于 iTerm2 一年(2018 年),早于 xterm 359 三年(2020 年)。多数发行版的 shell 默认带有 `ls --hyperlink=auto` 别名以利用该支持。OSC 8 语法中的 `id=foo` 段也被遵循 —— 在同 `id` 的多行链接中任意位置悬停,整条链接会作为一个单元高亮。无需配置开关,始终启用。

参考资料

其他已有专页的终端