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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 部分 | 部分 | 支持 | 部分 | 不支持 | 支持 | 部分 | 支持 | 支持 | 部分 | 支持 | 支持 | 支持 |