跳到主要内容
ansicode

XTPUSHCOLORS / XTPOPCOLORS / XTREPORTCOLORS — 调色板栈(CSI # P / # Q / # R)

通过进程级栈保存 / 恢复 / 查询 xterm 的 ANSI 调色板 —— 适合需要临时修改调色板的 TUI。

字节形式

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

\\x1b[\x1b[#P (push) \x1b[#Q (pop) \x1b[#R (report)
\\033[\033[#P / \033[#Q / \033[#R
\\e[\e[#P / \e[#Q / \e[#R
ESC [ESC [ Pm # P / ESC [ Pm # Q / ESC [ # R
hex1b 5b ... 23 50 / 1b 5b ... 23 51 / 1b 5b 23 52

说明

三个共享中间字节 `#`(0x23)的 xterm 专属操作,按末字节分派。**XTPUSHCOLORS**(`\x1b[#P`)把当前 88 / 256 项 ANSI 调色板以及前景 / 背景 / 光标颜色压入内部栈;带参数 `\x1b[Pm#P` 可给快照打上标识 `Pm` 以便精准取回。**XTPOPCOLORS**(`\x1b[#Q`)将最近一次快照恢复生效;`\x1b[Pm#Q` 弹出标识为 `Pm` 的快照(其后压入的快照会被一并丢弃)。**XTREPORTCOLORS**(`\x1b[#R`)以 CSI ? Pm # R 形式回复当前栈深与标识列表,库代码可借此判断用户是否已自行压栈再决定是否通过 OSC 4 / OSC 10 / OSC 11 改色。栈容量取决于 xterm 实现(通常为 10)。除 xterm 本体外支持稀薄 —— 大多数现代模拟器(kitty、alacritty、wezterm、ghostty)会静默忽略,使用前最好用 DECRQSS / XTREPORTCOLORS 试探。

规范出处: xterm-ctlseqs (XTPUSHCOLORS / XTPOPCOLORS / XTREPORTCOLORS)

参数

Pm可选快照标识(压栈)或选择子(弹出)。省略时压栈不打标识,弹出取栈顶。

示例

bash
printf '\033[#P'              # push current palette\nprintf '\033]4;1;#ff0000\007'  # mutate color 1 to red\nprintf '\033[#Q'              # restore the saved palette
python
import sys\nsys.stdout.write('\x1b[2#P')   # push, tagged 2\nsys.stdout.write('\x1b[#R')   # query stack depth
go
fmt.Print("\x1b[#P")   // push current palette\n// ... mutate ...\nfmt.Print("\x1b[#Q")   // pop restore
javascript
process.stdout.write('\x1b[#R')   // ask xterm for stack depth + tag list
c
printf("\x1b[#P");  /* push */\nprintf("\x1b[#Q");  /* pop  */

终端支持

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

相关序列