跳到主要内容
ansicode

XTVERSION — 上报终端名称与版本(CSI > Pp q)

向终端询问可读的名称 + 版本字符串 —— 替代 DECDA 用于功能检测的现代方案,已被 Helix、Zellij、Neovim 等采用。

字节形式

涵盖所有常见的字符串字面量写法,方便正反查找。

\\x1b[\x1b[>0q (query) reply: \x1bP>|<name> <version>\x1b\\
\\033[\033[>0q
\\e[\e[>0q
ESC [ESC [ > Pp q → DCS > | <text> ST
hex1b 5b 3e ... 71

说明

以 xterm 扩展形式发送 Tertiary Device Attribute(TDA)查询。`>` 前缀把末字节 `q` 从 DECSCA(字符保护)切换为 XTVERSION;`Pp` 保留(恒发 `0`),仅供前向兼容。终端以 DCS 包裹的字符串回复,标识自身:`DCS > | <名称> <空格> <版本> ST` —— 例如 `\x1bP>|XTerm(370)\x1b\\`、`\x1bP>|kitty 0.32.2\x1b\\`、`\x1bP>|WezTerm 20240203\x1b\\`、`\x1bP>|ghostty 1.0.0\x1b\\`。终止符是 ST(`\x1b\\`),偶有遗留实现用 BEL(`\x07`)。此序列实际上已取代 DECDA(`\x1b[c`)作为功能检测手段 —— DECDA 的终端 ID 编号(61 / 62 / 63 = VT100 / 220 / 320)早在 1990 年代就耗尽,与现代特性已脱钩。所有依据 `kitty` / `WezTerm` / `iTerm2` 分支启用 kitty graphics、OSC 1337 或 sixel 的 TUI 都把 XTVERSION 作为承重查询。往返很快(Unix 终端同步;ConPTY 上轮询非阻塞也可)。若约 200 ms 内未收到回复,可视为原始终端不支持 XTVERSION。

规范出处: xterm-ctlseqs (Tertiary DA / XTVERSION)

参数

Pp保留。恒发 `0`。任意值的存在把 XTVERSION 与同样合法的 CSI > q(无参)区分开。

示例

bash
# Print whichever terminal name comes back, then disambiguate:\nprintf '\033[>0q'\nread -rd '\\' reply\necho "$reply"   # e.g. \x1bP>|kitty 0.32.2
python
import sys, termios, tty, select\nsys.stdout.write('\x1b[>0q'); sys.stdout.flush()\n# Read DCS-framed reply: starts with \x1bP and ends with \x1b\\
go
fmt.Print("\x1b[>0q")\n// scan stdin for DCS > | ... ST framing\n// branch: strings.HasPrefix(name, "kitty") → enable kitty graphics
javascript
process.stdout.write('\x1b[>0q')\n// process.stdin gets back a DCS-framed text like \x1bP>|WezTerm 20240203\x1b\\
c
fputs("\x1b[>0q", stdout); fflush(stdout);\n/* read DCS payload, switch on substring 'kitty' / 'xterm' / 'WezTerm' */

终端支持

xterm
支持
Linux console (fbcon)
不支持
macOS Terminal.app
不支持
iTerm2
支持
Windows Terminal
支持
cmd.exe / ConPTY
不支持
kitty
支持
alacritty
不支持
WezTerm
支持
Ghostty
支持
GNOME Terminal
部分
Konsole
支持
tmux
不支持
GNU screen
不支持

相关序列