跳到主要内容
ansicode

XTGETTCAP — 请求 terminfo 能力(DCS + q ... ST)

按名称请求终端报告 terminfo 能力值 —— 运行时探测真彩、RGB、OSC 52 等的标准方法。

字节形式

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

\\x1b[\x1bP+q<HEX-NAME>;<HEX-NAME>...\x1b\\
\\033[\033P+q<HEX-NAME>\033\\
\\e[\eP+q<HEX-NAME>\e\\
ESC [ESC P + q HEX[;HEX...] ESC \
hex1b 50 2b 71 ... 1b 5c

说明

XTGETTCAP —— xterm 的 terminfo 能力查询,中间字节 `+`(0x2b)、末字节 `q`(0x71)的 DCS 帧。体为一个或多个 terminfo 能力名,按 ASCII-hex 编码(名称内无分隔符,名称之间用 `;`)。例如 `RGB` 编码为 `524742`、`setrgbf` 编码为 `73657472676266`、`Smulx`(扩展下划线)编码为 `536d756c78`。终端按请求逐项回复 DCS:成功为 `\x1bP1+r<HEX-NAME>=<HEX-VALUE>\x1b\\`,未识别为 `\x1bP0+r<HEX-NAME>\x1b\\`。这是 `tmux`、`neovim`、`kitty` 的 shell 集成、`wezterm` 的 `mux` 在运行时探测特性支持的标准做法,而不是仅信任 `$TERM` 字符串。xterm 本身、kitty、wezterm、ghostty 与 tmux 支持;其他终端多数对所有请求返回 0+r「未识别」,程序据此回落到 TERM-string 启发式。

规范出处: xterm-ctlseqs (XTGETTCAP, DCS + q Pt ST)

示例

bash
# Ask if the terminal advertises the RGB cap (hex of 'RGB' is 524742):\nstty -echo raw min 0 time 5\nprintf '\033P+q524742\033\\'\nIFS= read -r -t 1 -d '\\' REPLY; stty sane\necho "XTGETTCAP RGB reply: $REPLY"
python
import sys\nname_hex = 'RGB'.encode().hex()   # -> '524742'\nsys.stdout.write(f'\x1bP+q{name_hex}\x1b\\\\')   # reply on stdin
go
name := hex.EncodeToString([]byte("RGB"))\nfmt.Printf("\x1bP+q%s\x1b\\\\", name)
javascript
const name = Buffer.from('RGB').toString('hex')   // 524742\nprocess.stdout.write(`\x1bP+q${name}\x1b\\\\`)
c
/* hex-encode the cap name first, e.g. 'RGB' -> "524742" */\nprintf("\x1bP+q524742\x1b\\\\"); fflush(stdout);

终端支持

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

相关序列

在家族食谱中

DCS 食谱 · 3. 向终端提问 —— DECRQSS、terminfo cap、DECRQTSR、DECRQUPSS、光标样式