ゴーストリング
45日前原文(github.com)
概要
Ghostlingは、libghostty C APIを用いた最小限の機能を持つターミナルのデモプロジェクト。
Raylibによるウィンドウ管理と描画を採用し、シングルスレッドで動作。
libghosttyの柔軟性を示すため、2Dレンダラーを利用。
本プロジェクトは日常利用を想定せず、最小動作例に特化。
高機能なターミナルエミュレーションコアであるlibghosttyの特徴や制限も解説。
Ghostlingとは
- libghostty C APIを使った、最小限のターミナルデモ実装
- Raylibによるウィンドウ管理・レンダリング
- シングルスレッド動作(libghostty-vt自体はマルチスレッド対応)
- 2Dグラフィックスレンダラー利用(Ghostty GUIはGPU直接描画)
- libghosttyの多様な利用シーンへの適用例
- デモ用につき、日常利用や完全な正確性は保証しない
- C言語での実装例、セキュリティやバグチェックは限定的
libghostty とは
- Ghosttyのコアから抽出された埋め込み用ライブラリ
- C/Zig APIを提供、各種アプリケーションで高速・正確なターミナルエミュレーション実現可能
- libghostty-vtはゼロ依存(libc不要)、VTシーケンス解析やターミナル状態管理を担当
- レンダリングやウィンドウ処理は含まず、利用側で実装
- Ghosttyの実績あるコアロジックを継承
- 高精度・完全なエミュレーション
- SIMD最適化されたパーサ
- 最先端のUnicode対応
- メモリ効率の最適化
- 何百万ものデイリーアクティブユーザーによる実績
Ghostlingで利用可能な機能
- テキストリフロー対応のリサイズ
- 24bitカラー・256色パレット
- 太字・イタリック・反転スタイル
- Unicode・複数コードポイントのグラフェム処理(字形合成やレイアウトは非対応)
- Shift/Ctrl/Alt/Super対応キーボード入力
- Kittyキーボードプロトコル対応
- マウストラッキング(X10, normal, button, any-event)
- マウスレポート形式(SGR, URxvt, UTF8, X10)
- スクロールホイール(ビュー/アプリケーション転送)
- マウスドラッグ対応のスクロールバー
- フォーカスレポート(CSI I / CSI O)
- Ghosttyが持つほぼ全てのエミュレーション機能
今後追加予定の機能
- Kitty Graphics Protocol
- OSCクリップボードサポート
- OSCタイトル設定
現状未対応または未実装の事項
- Windowsサポート(libghostty-vt自体は対応)
- その他未検証・未実装機能(随時追加予定)
libghosttyで今後も提供しない機能
- タブ
- 複数ウィンドウ
- 分割表示
- セッション管理
- 設定ファイルやGUI
- 検索UI(libghostty-vtは内部検索機能のみ提供)
- これらはlibghostty利用者が独自実装する想定
- Ghostlingは最小実装例のため非対応
ビルド方法
- 必要要件:CMake 3.19+, Cコンパイラ, Zig 0.15.x(PATHに追加)
- RaylibはCMakeのFetchContentで自動取得
- ビルド手順(Ninja利用例):
cmake -B build -G Ninjacmake --build build./build/ghostling
- デバッグビルドは非常に遅い(安全性・正確性チェック多数のため)
- ベンチマーク時はリリースビルド利用推奨
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Releasecmake --build build- 2回目以降は
cmake --build buildのみでOK
FAQ
-
なぜCではなくZigを使わないのか?
- libghostty-vtはZig APIも提供、Ghostty GUIがその代表例
- 本デモはCの方が幅広い開発者・エコシステムに馴染みやすいためC APIを採用
-
Rustや他の言語で使えるか?
- libghostty-vtはC APIを持ち、ゼロ依存のため、ほぼ全ての言語で薄いバインディング経由で利用可能
- 公式バインディングはC/Zigのみだが、コミュニティによる他言語対応を期待
-
libghosttyはRaylib必須か?
- いいえ。レンダラーやGUIフレームワークには依存しない
- WASM対応も含め、どんな環境でも利用可能
- レンダラーステートAPIのみ提供し、描画部分は利用者が自由に実装可能
- Ghostty GUIのMetal/OpenGL、Raylib 2D APIなど多様な実装例
-
CMakeやRaylibを選んだ理由は?
- 単なる選択例。どんなビルドシステム・ライブラリでもOK
- CMakeは広く使われており、Raylibはシンプルでセットアップ容易な2D描画ライブラリ
- ビルドやライブラリ選定にこだわらず、libghostty自体の柔軟性に注目