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 秒硬編碼逾時的原因,逾時後會重設目前進度狀態。

如果你正在撰寫使用此協定的程式,必須確保定期更新進度狀態作為保活訊號。遺憾的是,這方面沒有標準化, 但我們建議至少每秒更新一次。