DECSET ?1047 — 仅切换备用屏(不保存光标)
切换备用屏但不保存光标 —— 比 ?1049 更原始的形式。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x1b[?1047h (enter alt) \x1b[?1047l (leave alt)\\033[
\033[?1047h / \033[?1047l\\e[
\e[?1047h / \e[?1047lESC [
ESC [ ? 1 0 4 7 h / lhex
1b 5b 3f 31 30 34 37 68 / 6c说明
alt-screen 共有三种私有模式 —— `?47`、`?1047`、`?1049`。**`?1047`** 仅切换备用屏,不保存/恢复光标;**`?1048`** 仅保存/恢复光标(不切屏);**`?1049`** 是现代复合形式:保存光标 + 进入 alt + 清屏;退出时还原 alt → 主屏 + 恢复光标。完全不关心光标位置的程序(动画玩具、简单状态栏工具)可用 `?1047` 节省字节;既要切屏又要保留光标的程序(vim、less、tmux、htop)应直接发送 `?1049`,而非底层 pair。注意:通过 `?1047l` 离开备用屏时 xterm 还会在翻屏前清掉主屏,会令期待无损翻屏的程序意外。
规范出处: xterm-ctlseqs (Private mode 1047)
示例
printf '\033[?1047h' # switch to alt; cursor position NOT saved\nprintf '\033[?1047l' # back to main; main screen is cleared firstimport sys; sys.stdout.write('\x1b[?1047h')fmt.Print("\x1b[?1047h")process.stdout.write('\x1b[?1047h')printf("\x1b[?1047h");终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 不支持 | 支持 | 支持 | 支持 | 部分 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 |