SCOSC / SCORC — 保存 / 恢复光标(CSI s / u)
CSI 风格的光标位置保存(s)与恢复(u)—— 与 ESC 7 / ESC 8(DECSC / DECRC)有别。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x1b[s (save) \x1b[u (restore)\\033[
\033[s / \033[u\\e[
\e[s / \e[uESC [
ESC [ s / uhex
1b 5b 73 / 75说明
Save Cursor Position(SCOSC,末字节 `s`,0x73)与 Restore Cursor Position(SCORC,末字节 `u`,0x75)。源自 SCO ANSI 终端;xterm、VTE、ConPTY、Windows Terminal 现今均支持。它们与较早的 DEC 对 DECSC(`\x1b7`)/ DECRC(`\x1b8`)不同:SCOSC/SCORC 只保存位置(行 + 列),而 DECSC 还会保存 SGR 属性、字符集状态与起点模式。只有一个保存槽 —— 再次调用 SCOSC 会覆盖之前的保存。注意:当启用 LRMM 模式(`?69h`)时 `\x1b[s` 会与 DECSLRM(设置左右边距)冲突;xterm 默认 LRMM 关闭,`s` 含义明确。
规范出处: xterm-ctlseqs (SCOSC / SCORC, CSI s / u)
示例
printf 'a\033[sBCD\033[u_' # save after 'a', write BCD, restore, write _ -> 'a_CD'import sys; sys.stdout.write('\x1b[s'); ...; sys.stdout.write('\x1b[u')fmt.Print("\x1b[s"); /* ... */ fmt.Print("\x1b[u")process.stdout.write('\x1b[s'); /* ... */ process.stdout.write('\x1b[u')printf("\x1b[s"); /* ... */ printf("\x1b[u");终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 |