XTPUSHSGR / XTPOPSGR / XTREPORTSGR — SGR 栈(CSI Ps + p / + q / + r)
通过栈保存 / 恢复 / 查询当前 SGR 属性 —— XTPUSHCOLORS 在调色板栈外,对 SGR 属性的对应方案。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x1b[#{ (XTPUSHSGR, alt: CSI Pm + p) \x1b[#} (XTPOPSGR, alt: CSI + q) \x1b[+r (XTREPORTSGR)\\033[
\033[#{ / \033[#}\\e[
\e[#{ / \e[#}ESC [
ESC [ Pm + p / ESC [ + q / ESC [ + rhex
1b 5b ... 2b 70 / 2b 71 / 2b 72说明
三个 xterm 扩展,用于堆叠 SGR(Select Graphic Rendition)状态 —— 加粗 / 斜体 / 下划线 / 前景色 / 背景色 / 闪烁 / 删除线 / 反相,即 sgr-reset 跟踪的全集。XTPUSHSGR 有两种等价形式:短形 \x1b[#{ 保存当前 SGR 全量快照;长形 \x1b[<Pm>+p 仅保存 Pm 列出的属性(1 加粗、3 斜体、4 下划线、5 闪烁、7 反相、9 删除线、30-37 / 40-47 / 38 / 48 颜色)。XTPOPSGR(短 \x1b[#},长 \x1b[+q)恢复栈顶 —— 实际发出的 SGR 属性为当前与保存状态之差,自动应用。XTREPORTSGR(\x1b[+r)以 \x1b[<depth>+r 形式回复栈深度。#{ 与 #} 的双字节中间序列存在是因为它们比长形短且对解析器更友好(无参数)。适合在不丢失父上下文的前提下临时局部修改 SGR 的库 / TUI 原语(例如「焦点行外全部减淡」):压入 → 修改 → 渲染 → 弹出。注意 xterm 的 SGR 栈与调色板栈(xtpushcolors-popcolors)是分离的 —— 压入一个不压入另一个。仅 xterm 支持;kitty / wezterm / ghostty 静默忽略(kitty 的 CSI u 键盘协议碰巧也用 + 作中间字节但语义不同)。
规范出处: xterm-ctlseqs (XTPUSHSGR / XTPOPSGR / XTREPORTSGR)
参数
| Pm | 可选的 SGR 属性编码列表(仅长形压入)。省略 = 保存当前全部 SGR 状态。 |
示例
printf '\033[1;31m' # bold red\nprintf '\033[#{' # push current SGR\nprintf '\033[0;34mlinkified word\033[#}' # mutate, render, pop → bold red restored\necho ' continues bold red'import sys\nsys.stdout.write('\x1b[#{') # save all SGR\nsys.stdout.write('\x1b[2;33mdim yellow status')\nsys.stdout.write('\x1b[#}') # restore parent SGR// Save only foreground color (long form):\nfmt.Print("\x1b[38+p") // push fg\nfmt.Print("\x1b[31malert\x1b[+q") // pop restores fgprocess.stdout.write('\x1b[+r') // query stack depth — reply: \x1b[<n>+rprintf("\x1b[#{"); /* push */\nprintf("\x1b[7m local highlight \x1b[#}"); /* pop restores */终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 支持 | 支持 |