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[#RESC [
ESC [ Pm # P / ESC [ Pm # Q / ESC [ # Rhex
1b 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 | 可选快照标识(压栈)或选择子(弹出)。省略时压栈不打标识,弹出取栈顶。 |
示例
printf '\033[#P' # push current palette\nprintf '\033]4;1;#ff0000\007' # mutate color 1 to red\nprintf '\033[#Q' # restore the saved paletteimport sys\nsys.stdout.write('\x1b[2#P') # push, tagged 2\nsys.stdout.write('\x1b[#R') # query stack depthfmt.Print("\x1b[#P") // push current palette\n// ... mutate ...\nfmt.Print("\x1b[#Q") // pop restoreprocess.stdout.write('\x1b[#R') // ask xterm for stack depth + tag listprintf("\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
- 不支持
| xterm | Linux console (fbcon) | macOS Terminal.app | iTerm2 | Windows Terminal | cmd.exe / ConPTY | kitty | alacritty | WezTerm | Ghostty | GNOME Terminal | Konsole | tmux | GNU screen |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |