macOS Terminal.app —— ANSI 转义码支持情况
Terminal.app(`/System/Applications/Utilities/Terminal.app`)是每台 macOS 系统预装的终端模拟器。其 VT 引擎由 Apple 于 1990 年代末为 NeXTSTEP / Mac OS X 10.0 编写,此后仅有零星增量更新 —— 过去十年 macOS 终端功能的主要演进都发生在 iTerm2、kitty、WezTerm、alacritty 以及近期的 Ghostty 中,而非 Apple 自带的 Terminal.app。
ANSI 转义码兼容性方面,Terminal.app 是 xterm 的部分子集:完整 SGR 0–9(加粗 / 暗淡 / 斜体 / 下划线 / 闪烁 / 反色 / 隐藏 / 删除线)、基本 8 + 高亮 8 + 256 色,以及自 macOS 10.7(Lion,2011 年)起支持 24 位真彩色(`$TERM_PROGRAM=Apple_Terminal`,`$TERM_PROGRAM_VERSION` 设为 `455` 之类的构建号)。不支持的部分:OSC 8 超链接(URL 以普通文本输出)、DEC Sixel、kitty 图形协议、iTerm2 OSC 1337 内联图像、完整 SGR 4:1–4:5 扩展下划线(仅支持平直的 4:1)、DECSET ?2026 同步输出。Apple 官方文档对此基本沉默 —— 能力检测通过 `$TERM_PROGRAM` 进行。
最近更新
特性支持情况
该终端在站点统一矩阵跟踪的 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)原子化帧更新,避免撕裂。不支持
在此终端可用的序列
该终端能完整处理的转义序列对应的权威参考页。每条均链接到完整页面,含字节形式、规范出处与多语言示例。
细节与版本说明
在生产中使用某序列前应知晓的、该终端特有的注意事项。
- 不支持 OSC 8 超链接 —— URL 以普通文本打印
- Terminal.app 不实现 OSC 8 超链接转义。发送 OSC 8 的程序(`ls --hyperlink=auto`、`eza --hyperlink`、`gh`、`lazygit`)会在 macOS Terminal 上让 URL 以文本形式泄漏。绕行方案:检测 `$TERM_PROGRAM=Apple_Terminal` 并禁用超链接输出,或改用 iTerm2 / Ghostty / WezTerm。Terminal.app 在渲染层确实自带 URL 识别(Cmd+ 点击可见 URL / 文件路径)—— 但这是启发式识别,并非 OSC 8 协议。
- 10.7 起支持真彩色但不设置 $COLORTERM
- Terminal.app 自 macOS Lion(10.7,2011 年)起接受 SGR 38;2;r;g;b 24 位色,但不导出 `$COLORTERM=truecolor`。依赖该环境变量启发式的库(chalk、colorama、click)会在 Terminal.app 上静默降级到 256 色,尽管渲染器实际支持 24 位字节。可在 shell 初始化脚本中手动 `export COLORTERM=truecolor`(Terminal.app 偏好面板没有此开关)。
- 不支持 Sixel、kitty 图形协议、iTerm2 OSC 1337 图像
- Terminal.app 没有任何内联图像协议。发送 Sixel(chafa、timg)、kitty 图形协议(`kitten icat`、neovim 图像插件)或 OSC 1337(iTerm2 的 `imgcat`)的程序在 macOS Terminal 上会让转义字节以乱码打印。Apple 没有路线图 —— 也未参与终端协议委员会。macOS 上的内联图像渲染只能转向 iTerm2(其自有 OSC 1337)、kitty(其 APC G 协议)或 WezTerm / Ghostty(三种协议全支持)。
- $TERM 默认 xterm-256color —— 但功能不与 xterm 对等
- Terminal.app 为兼容性导出 `$TERM=xterm-256color`,导致仅读 $TERM 的库会假设支持 xterm 级别的能力 —— 包括 OSC 8、Smulx 扩展下划线,乃至(偶尔)Sixel。Terminal.app 上述都不支持。解决方案:工具应额外检查 `$TERM_PROGRAM=Apple_Terminal` 并相应降级;`bat`、`delta`、`eza`、`gh`、`kitten icat`、`chafa` 都已这样做。也可手动 `export TERM=apple-terminal`(Apple 内置该 terminfo 条目但默认不启用)。