跳到主要内容
ansicode

DECRQSS — 请求选区或设置(DCS $ q ... ST)

请求终端报告任一 SGR / 模式 / 边距 / 光标形状当前值 —— DCS 通用查询。

字节形式

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

\\x1b[\x1bP$q<P>\x1b\\
\\033[\033P$q<P>\033\\
\\e[\eP$q<P>\e\\
ESC [ESC P $ q <P> ESC \
hex1b 50 24 71 ... 1b 5c

说明

Request Selection or Setting。中间字节 `$`(0x24)、末字节 `q`(0x71)的 DCS 帧;体 `<P>` 指明要查询的设置。常见探测:`\x1bP$qm\x1b\\` 查询当前 SGR 属性(终端以 `\x1bP1$rm\x1b\\` 回报当前颜色/样式栈);`\x1bP$q r\x1b\\`(字面 `$ q SP r`)查询 DECSTBM 滚动区域上下边距;`\x1bP$q" p\x1b\\` 查询 DECSCL 一致性级别;`\x1bP$q" q\x1b\\` 查询 DECSCA 字符保护;`\x1bP$q q\x1b\\`(`SP q`)查询当前 DECSCUSR 光标形状。回复同样是 DCS 帧 —— 首字节 `1`(有效且支持)或 `0`(请求无效),随后 `$r`、所请求的设置字节、ST。现代程序在启动探测时使用 DECRQSS,以便退出时恢复终端的原有状态 —— `vim` 的 `t_RV` 自动检测、`bat` 的语法主题选择、`kitty kitten themes` 都依赖它。

规范出处: xterm-ctlseqs (DECRQSS, DCS $ q Pt ST)

示例

bash
# Ask for the current SGR attributes; reply lands on stdin in raw mode.\nstty -echo raw min 0 time 5\nprintf '\033P$qm\033\\'; IFS= read -r -t 1 -d '\\' REPLY; stty sane\necho "DECRQSS m reply: $REPLY"
python
import sys; sys.stdout.write('\x1bP$qm\x1b\\\\')   # reply arrives on stdin
go
fmt.Print("\x1bP$qm\x1b\\\\")   // request current SGR
javascript
process.stdout.write('\x1bP$qm\x1b\\\\')   // request current SGR; read process.stdin
c
printf("\x1bP$qm\x1b\\\\"); fflush(stdout); /* read DCS reply from stdin */

终端支持

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、光标样式