DECRSPS — 恢复呈现状态(DCS $ t ... ST)
DECRQSS 的反向操作 —— 把先前保存的光标 / SGR / 边距快照回灌,恢复终端精确状态。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\x1bP1$t<saved-state>\x1b\\ (cursor) \x1bP2$t<saved-state>\x1b\\ (tab stops)\033P<Ps>$t<state>\033\\\eP<Ps>$t<state>\e\\ESC P Ps $ t <state> ESC \1b 50 ... 24 74 ... 1b 5c说明
Restore Presentation State。中间字节 $(0x24)、末字节 t(0x74)的 DCS 帧 —— DECRQPSR 的反向(DECRQSS 派发的 \x1bP$qm\x1b\\ 族在 DCS 侧的请求形态)。开头 Ps 选择要恢复的状态种类:
- Ps = 1 —— 光标信息:行、列、页、字符保护(DECSCA)、原点模式(DECOM)、DECSC 保存栈状态、字符集 GL / GR 选择(SCS)、SGR 渲染属性。
- Ps = 2 —— 制表位:HTS 设置的完整列列表。
<saved-state> 体是终端先前响应对应 DECRQPSR(\x1bP$w...\x1b\\)时回复的原始字节 —— 应用在启动时缓存这份回复,退出时通过 DECRSPS 回灌,撤销所有状态变更。这就是 tmux passthrough 已存终端状态以及 screen :source .screenrc 默认值的标准机制。现代相关性:仅 xterm 与少数忠实 VT 模拟器(mlterm、qodem)以这种精度实现 DECRSPS;多数现代模拟器(alacritty / kitty / wezterm / ghostty)对对应的 DECRQPSR 以 0$w(拒绝 / 不支持)回应,整套保存 - 恢复回路成为 no-op —— 这些程序用 DECSC / DECRC(\x1b7 / \x1b8)做光标保存恢复、用 alt-screen \x1b[?1049h/l 对做高层快照。DECRSPS 仍对模拟器测试套件快照与 VT510 忠实主机软件有用;可移植应用不应依赖它被尊重。
规范出处: DEC VT510 RM (DECRSPS) / xterm-ctlseqs
参数
| Ps | 类别选择子:1 = 光标 / SGR / 字符集 / 原点 / 保存栈;2 = 制表位。 |
| saved-state | 先前 DECRQPSR 回复的体内字节(终端自身格式;应用不应自行构造,只做来回拷贝)。 |
示例
# Round-trip pattern: ask, stash, later restore.\nstty -echo raw min 0 time 5\nprintf '\033P1$w\033\\\\' # DECRQPSR cursor info\nIFS= read -r -t 1 -d '\\' REPLY; stty sane\n# … much later, restore exactly: …\nprintf '\033P1$t%s\033\\\\' "$REPLY"import sys\nsaved = read_decrqpsr() # opaque body bytes\nsys.stdout.write(f'\x1bP1$t{saved}\x1b\\\\')// Pseudo: restore previously-stashed cursor + SGR state\nfmt.Printf("\x1bP1$t%s\x1b\\\\", savedBody)// On exit, replay the snapshot we captured at startup:\nprocess.stdout.write(`\x1bP2$t${savedTabStops}\x1b\\\\`) // restore tab stops/* Replay the cursor / SGR snapshot captured at program start: */\nprintf("\x1bP1$t%s\x1b\\\\", saved_state_buf);终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 支持 | 支持 |