ConEmu 拡張 (OSC 9;n)

ConEmu によって考案された各種拡張。

ConEmu は Windows 向けの古いターミナルエミュレーターで、OSC 9 を使ったいくつかの[独自プロトコル]を先駆けて実装しました。残念ながら、これは同じく OSC 9 を使う iTerm2 の デスクトップ通知の表示 プロトコルと衝突します。 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 秒のハードコードされたタイムアウトがあり、経過後に現在の進捗状態をリセットする理由です。

このプロトコルを使うプログラムを書く場合は、キープアライブ信号として進捗状態を定期的に更新する必要があります。残念ながらこれに関する標準化はありませんが、 少なくとも 1 秒に 1 回の更新を推奨します。