DECSCL — 选择一致性级别(`CSI Pl ; Pc " p`)
选择 VT100 / VT200 / VT300 / VT400 / VT500 兼容级别 —— 控制终端识别哪个子集的转义序列,并决定 C1 以 7 位还是 8 位发送。隐式先执行硬重置(RIS)。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\x1b[<Pl>;<Pc>" p\033[62;1" p\e[62;1" pESC [ Pl ; Pc " p1b 5b ... 22 70说明
DECSCL —— 一致性级别选择 —— 设置终端将识别的最高 VT 型号转义序列集合,**并**决定 C1 仅以 7 位(`Pc=1`)还是允许 8 位发送(`Pc=0` 或省略)。中间字节为 `"`(0x22),末字节为 `p`(0x70)。 **`Pl` 取值**:`61` = VT100、`62` = VT200 / VT220、`63` = VT300 / VT320、`64` = VT400 / VT420、`65` = VT500 / VT510 / VT520。 **`Pc` 取值**(仅当 `Pl ≥ 62` 时有效):`0` 或省略 = 允许 8 位控制(终端可发出 0x80–0x9F 单字节 C1 —— IND、NEL、HTS、RI、SS2、SS3、DCS、CSI、ST、OSC、PM、APC);`1` = 仅 7 位控制(同样的 C1 改为两字节 `ESC` 等价形式:IND 写作 `ESC D`、NEL 写作 `ESC E`、ST 写作 `ESC \`,详见 `c1-controls`);`2` = 允许 8 位(部分模拟器视作 0 的别名)。 **关键副作用**:DECSCL 在应用新级别前会隐式执行一次**硬重置(等同于 RIS)**。设 `\x1b[62;1" p` 锁定 VT220-7bit 同时会清屏 + 清回滚、重置 SGR、重置边距、恢复自动换行 —— 除非你正想要 RIS 效果,否则**别**在会话中随便调用。 **硬件终端**会把请求级别截断至本机型号 —— 真 VT220 收到 `\x1b[65" p` 仍回到 VT220 级别。**软件模拟器**(xterm、kitty、iTerm2、WezTerm、Ghostty、Alacritty、Konsole、Windows Terminal)一律接受 `61`–`65`,默认按 VT520 工作。多数完全忽略 `Pc` —— 仍默认 7 位发送,仅在 `S8C1T` / `\x1b G` / `\x1b F` 等单独开关启用后才发 8 位。 **查询**:`DCS $ q " p ST`(DECRQSS 查询 DECSCL,见 `dcs-decrqss`)—— 回复 `DCS 1 $ r Pl ; Pc " p ST`。Ghostty 上测得 `\x1bP1$r65;1" p\x1b\\`(VT520 + 7-bit)。常用模式:探测 → 切换 → 退出时恢复。当 TUI 确需切到 VT220 词汇表(如抑制终端对 `?2026` 同步更新括号的解释)时使用 —— 但要预期屏幕内容会消失。 如只想*限制使用某些特性*又不愿付出 RIS 代价,请改用 DECRQM(`decrqm`)逐模式探测,再用 DECRST(`\x1b[?...l`)选择性关闭 —— 这才是大多数人误用 DECSCL 的真实意图。
规范出处: DEC VT510 RM (DECSCL) / xterm-ctlseqs
参数
| Pl | 一致性级别:61 = VT100、62 = VT200/VT220、63 = VT300/VT320、64 = VT400/VT420、65 = VT500/VT510/VT520。硬件终端会截断到本机型号。 |
| Pc | 控制位(仅 Pl ≥ 62 有效):0 / 2 = 允许 8 位 C1;1 = 仅 7 位(C1 改为两字节 ESC 等价形式)。多数模拟器忽略此参数。 |
示例
# Lock terminal to VT220 7-bit conformance.\n# WARNING: this also performs an RIS (clears screen + scrollback).\nprintf '\\033[62;1\" p'import sys\n# VT520 with 8-bit C1 allowed (modern default).\nsys.stdout.write('\\x1b[65;0\" p')\nsys.stdout.flush()// VT320 conformance — useful when targeting Sixel-era apps.\nfmt.Print(\"\\x1b[63;0\\\" p\")// Most portable target: VT220 7-bit. Survives any modern emulator.\nprocess.stdout.write('\\x1b[62;1\" p')/* DECSCL — implicit RIS first, then apply new level. */\nprintf(\"\\x1b[%d;%d\\\" p\", 62, 1);\nfflush(stdout);终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 部分 | 部分 | 支持 | 部分 | 不支持 | 支持 | 部分 | 支持 | 支持 | 部分 | 支持 | 不支持 | 不支持 |