OSC 9 ; 4 — ConEmu 进度指示器(Windows Terminal / Ghostty)
把实时进度百分比 / 暂停 / 错误状态推送到任务栏或标签图标 —— ConEmu 协议,被 Windows Terminal 1.18+ 标准化。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\x1b]9;4;<state>;<percent>\x07\033]9;4;<state>;<percent>\007\e]9;4;<state>;<percent>\aESC ] 9 ; 4 ; STATE ; N BEL1b 5d 39 3b 34 3b ... 3b ... 07说明
ConEmu 把 OSC 9 重用为进度条 —— 与 iTerm2 的 `OSC 9 ; <消息>` 通知(slug `osc-notification`)不同;第二个 token `;4` 是消歧符。终端将进度状态转发给所在的环境 UI:Windows Terminal 更新任务栏图标(Windows 11 统一进度 UX);Ghostty / WezTerm 给标签指示器上色;ConEmu 在标题栏画一条水平进度条。四种状态(`;4;` 后第一个数字): - **`0`** —— 移除 / 清除进度(显式复位)。 - **`1`** —— 正常进度,`<percent>` 0–100 —— 默认线性进度条。 - **`2`** —— 错误状态,`<percent>` 0–100 —— 进度条转红,用于带进度的构建失败。 - **`3`** —— 不确定 —— `<percent>` 忽略;渲染不定形旋转 / 流条。 - **`4`** —— 警告 / 暂停,`<percent>` 0–100 —— 黄色。 用法:长时间 CLI 命令(`docker pull`、`cargo build`、`ffmpeg` 转码、`apt` 类安装器)在每个有意义步骤后发 `OSC 9 ; 4 ; 1 ; <pct>`,成功时发 `OSC 9 ; 4 ; 0`。失败时:`OSC 9 ; 4 ; 2 ; <最后 pct>`,用户确认后可选再发 `0`。不支持的终端静默丢弃 —— 可无条件发送。关键细节:`\x1b]9;` 前缀与 iTerm2 通知 OSC 9 撞名;几乎所有同时实现两者的模拟器以是否带 `;4` 作判别,所以**完整**发送 `\x1b]9;4;<state>;<pct>\x07`,不要缩写。
规范出处: ConEmu OSC 9;4 / Windows Terminal 1.18+ / Ghostty
参数
| state | 0 移除、1 正常、2 错误、3 不确定、4 警告 / 暂停。 |
| percent | 0–100 整数(state=3 不确定时忽略;1/2/4 必需)。 |
示例
# Build-progress wrapper:\nfor pct in 10 30 60 90; do\n make step-$pct\n printf '\033]9;4;1;%d\007' "$pct"\ndone\nprintf '\033]9;4;0\007' # clear on successimport sys, time\nfor pct in range(0, 101, 5):\n sys.stdout.write(f'\x1b]9;4;1;{pct}\x07'); sys.stdout.flush()\n time.sleep(0.05)\nsys.stdout.write('\x1b]9;4;0\x07')// Indeterminate while waiting on the network:\nfmt.Print("\x1b]9;4;3\x07")\ndoSlowFetch()\nfmt.Print("\x1b]9;4;0\x07")// Error red-bar at 50%:\nprocess.stdout.write('\x1b]9;4;2;50\x07')/* Warning / paused state at 75%: */\nprintf("\x1b]9;4;4;75\x07"); fflush(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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 不支持 | 不支持 | 不支持 | 不支持 | 支持 | 不支持 | 部分 | 不支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |