ConEmu 扩展 (OSC 9;n)

由 ConEmu 首创的各种扩展。

ConEmu 是一款较老的 Windows 终端模拟器,它使用 OSC 9 首创了若干[自定义协议]。遗憾的是,这与 iTerm2 的 显示桌面通知 协议冲突,后者同样使用 OSC 9。 Ghostty 试图通过查找每个 ConEmu 序列都有的 子 ID 来区分二者,该子 ID 决定其实际功能。 若未找到,则改为按显示桌面通知序列处理。

由于以下协议大多充其量规范不足,最坏情况下安全性也备受质疑,Ghostty 仅实现 下面列出的扩展。Ghostty 还会解析许多其他扩展,但出于安全原因或因为 Ghostty 并不试图成为 ConEmu 的克隆,它们要么被忽略,要么被转换为 OSC 9 序列。

更改进度状态 (OSC 9;4)

  1. 0x1B
    ESC
  2. 0x5D
    ]
  3. 0x39
    9
  4. 0x3B
    ;
  5. 0x34
    4
  6. 0x3B
    ;
  7. ____
    s
  8. 0x1B
    ESC
  9. 0x5C
    \

  1. 0x1B
    ESC
  2. 0x5D
    ]
  3. 0x39
    9
  4. 0x3B
    ;
  5. 0x34
    4
  6. 0x3B
    ;
  7. ____
    s
  8. 0x3B
    ;
  9. ____
    v
  10. 0x1B
    ESC
  11. 0x5C
    \

根据 s 与 v 的值更改当前进度状态。

当前进度可以处于多种状态:未激活(默认)、进行中、 错误或不确定;在 Ghostty 中,这会以每个分屏顶部的进度条进行可视化表示。 其值表示为 0 到 100(含端点)之间的整数,对应该进度条的百分比。

新状态与取值主要取决于 s 的值:

s新状态新取值
0未激活0
1进行中v
2错误指定时为 v,否则不变
3不确定不变
4已暂停指定时为 v,否则不变

Note

请注意,该协议无法让终端判断进度状态何时变得过期,例如当程序终止却未清理其进度状态时。 这正是 Ghostty 设有约 15 秒硬编码超时的原因,超时后会重置当前进度状态。

如果你正在编写使用该协议的程序,必须确保定期更新进度状态作为保活信号。遗憾的是,这方面没有标准化, 但我们建议至少每秒更新一次。