ConEmu 扩展 (OSC 9;n)
由 ConEmu 首创的各种扩展。
ConEmu 是一款较老的 Windows 终端模拟器,它使用 OSC 9 首创了若干[自定义协议]。遗憾的是,这与 iTerm2 的 显示桌面通知 协议冲突,后者同样使用 OSC 9。 Ghostty 试图通过查找每个 ConEmu 序列都有的 子 ID 来区分二者,该子 ID 决定其实际功能。 若未找到,则改为按显示桌面通知序列处理。
由于以下协议大多充其量规范不足,最坏情况下安全性也备受质疑,Ghostty 仅实现 下面列出的扩展。Ghostty 还会解析许多其他扩展,但出于安全原因或因为 Ghostty 并不试图成为 ConEmu 的克隆,它们要么被忽略,要么被转换为 OSC 9 序列。
- 0x1B
- ESC
- 0x5D
- ]
- 0x39
- 9
- 0x3B
- ;
- 0x34
- 4
- 0x3B
- ;
- ____
- s
- 0x1B
- ESC
- 0x5C
- \
- 0x1B
- ESC
- 0x5D
- ]
- 0x39
- 9
- 0x3B
- ;
- 0x34
- 4
- 0x3B
- ;
- ____
- s
- 0x3B
- ;
- ____
- v
- 0x1B
- ESC
- 0x5C
- \
根据 s 与 v 的值更改当前进度状态。
当前进度可以处于多种状态:未激活(默认)、进行中、 错误或不确定;在 Ghostty 中,这会以每个分屏顶部的进度条进行可视化表示。 其值表示为 0 到 100(含端点)之间的整数,对应该进度条的百分比。
新状态与取值主要取决于 s 的值:
s | 新状态 | 新取值 |
|---|---|---|
0 | 未激活 | 0 |
1 | 进行中 | v |
2 | 错误 | 指定时为 v,否则不变 |
3 | 不确定 | 不变 |
4 | 已暂停 | 指定时为 v,否则不变 |
Note
请注意,该协议无法让终端判断进度状态何时变得过期,例如当程序终止却未清理其进度状态时。 这正是 Ghostty 设有约 15 秒硬编码超时的原因,超时后会重置当前进度状态。
如果你正在编写使用该协议的程序,必须确保定期更新进度状态作为保活信号。遗憾的是,这方面没有标准化, 但我们建议至少每秒更新一次。