
2026/07/12 17:52
libghostty を搭載したターミナルエミュレーター Ghostel.el
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Ghostel は libghostty-vt を採用した Emacs 端末エミュレータで、レンダリングおよび I/O にネイティブの Zig ダイナミックモジュールを使用し、従来の Emacs Lisp ベースのソリューションに比べて飛躍的に高効率なパフォーマンスを提供します。macOS、Linux、FreeBSD、Windows(ConPTY 対応)を含むクロスプラットフォームでのシームレスな互換性を備え、ソースビルドには Emacs 28.1 以上が必須であり、Zig 0.15.2 はオプションです。インストールは MELPA を介して簡素化されており、
(:ensure t) の指定により初回使用時に各種アーキテクチャ用のバイナリが自動的にダウンロードされます。Ghostel はセミ・チャー(デフォルト)、コピーなど 5 つの異なる入力モードを支持し、OSC 8 ハイパーリンク、複数のカラー照会プロトコル、通知機能、Kitty グラフィクスプロトコルサポートなどの高度な機能を備えています。シェル統合は bash、zsh、fish、nushell などの人気のあるシェルのいずれでも設定なしで自動注入され、ディレクトリ追跡やプロンプトナビゲーションに対応しています。「read-passwd」によりパスワードプロンプトのログ記録リスクを回避し、POSIX ホスト上での TRAMP リモート端末をサポートします。現代ハードウェア(例:Apple M4 Max)でのパフォーマンスベンチマークでは、専用 Zig バックグラウンドスレッドの支援により、ASCII の約 75 MB/s、コンテンツ重視ストリームの約 36 MB/s という高いスループットが達成されています。利用可能な拡張機能には、Evil ユーザー向けの「evil-ghostel」、およびエラーナビゲーション付きでリアル TTY においてビルドコマンドを実行するための「ghostel-compile」があります。本文
Ghostel: Emacs テルミナルエミュレータ
Ghostel は、Emacs テルミナルエミュレーションのための高性能なツールです。このプロジェクトは
libghostty-vt というモダンな VT エンジン(同じ Ghostty ターミナルで使われているもの)を採用しており、以下の機能をネイティブにサポートします:
- 256 色および RGB 真色サポート
- Kitty キーボードおよびグラフィクスプロトコル
- リッチアンダーラインスタイル、OSC 8 ハイパーリンク
- OSC 4/10/11 カラークエリ、同期された出力(DEC 2026)
従来の
emacs-libvterm と比較して大幅な機能向上を提供します。
1. クイックスタート
1.1 シェル統合の概要
- ローカルの bash, zsh, fish セッションに対してデフォルトで ディレクトリ追跡とプロンプトナビゲーションがオンです。
- TRAMP サポートは別途設定が必要です。
- シェルから Emacs 関数を呼び出す場合:
ホワイトリストへ関数を追加する必要があります。ghostel-eval-cmds
に以下を追加:.bashrc
if [[ "$INSIDE_EMACS" = 'ghostel' ]]; then e() { ghostel_cmd find-file-other-window "$@"; } dow() { ghostel_cmd dired-other-window "$@"; } gst() { ghostel_cmd magit-status-setup-buffer "$(pwd)"; } fi
1.2 インプットモードの概要
Ghostel は eat.el スタイルの 5 つのインプットモードを提供します。デフォルトは
semi-char モード です。
- Semi-char モード(デフォルト): 例外キーを除き、入力を端末に転送します。
- Char モード: すべてのキーが端末に渡されます。(
) で退出します。M-RET - Line モード:
のように動作し、入力行全体を一度に送信します。M-x shell - Emacs モード: 読み取り専用の Emacs バッファとして動作(ナビゲーション・閲覧用)。
- Copy モード: 端末を凍結させ、安定した選択とコピーが可能です。
読み取り専用モードの特徴:
- 入力キーを押すと自動的に通常のセッションへ戻ります(
が有効)。ghostel-readonly-fast-exit - マウス選択やハイパーリンク移動時にも自動で active なります。
2. 要件
- Emacs 28.1+ (動的モジュールサポート必須)
- プラットフォーム: macOS, Linux, FreeBSD, Windows
ネイティブモジュール:
- 初回使用時に自動的にダウンロードされます(ツールチェーン不要)。
- 提供されるアーキテクチャ:
,aarch64-macos
(Intel)x86_64-macos
,x86_64-linuxaarch64-linux
,x86_64-freebsdx86_64-windowsaarch64-windows
ソースからのビルド:
- Zig 0.15.2 が必要(異なるプラットフォーム対応時)。
3. インストール方法
3.1 MELPA
(use-package ghostel :ensure t)
3.2 use-package の :vc による利用(Emacs 30+)
(use-package ghostel :vc (:url "https://github.com/dakra/ghostel" :lisp-dir "lisp" :rev :newest))
:lisp-dir "lisp" は Emacs < 31.1 の場合に必須です。
3.3 use-package の :load-path による利用
(use-package ghostel :load-path "/path/to/ghostel/lisp")
3.4 マニュアルインストール
(add-to-list 'load-path "/path/to/ghostel/lisp") (require 'ghostel)
その後
M-x ghostel で開きます。
3.5 ネイティブモジュール
- 見つからない場合、プリビルトかソースからのコンパイルを提案します。
- コントロール:
: プリビルトダウンロード(最新版を使用)。M-x ghostel-download-module
: タグ指定でダウンロード。C-u M-x ghostel-download-module
: ソースからのコンパイル。M-x ghostel-module-compile
3.6 Windows への注意
- ConPTY: ローカル端末は Windows ConPTY を使用します。ネイティブモジュールと並ぶ Microsoft のサポーターuntimeが探索されます。
- TRAMP: Windows からのリモート端末は POSIX 限定です。動的ウィンドウリサイズは未対応。
4. ソースからのビルド
git clone https://github.com/dakra/ghostel.git cd ghostel zig build --prefix . -Doptimize=ReleaseFast
が同梱されているため、ローカル Emacs ヘッダーは不要。vendor/emacs-module.h- Ghostty チェックアウトとの併用:
zig fetch --save=ghostty /path/to/ghostty zig build --prefix . -Doptimize=ReleaseFast
5. シェル統合
- bash, zsh, fish, nushell に対して OSC 7/133/2 を介して自動的に機能します。設定変更不要。
- nushell:
は追加機能のみを注入します。ghostel.nu
が有効な必要があります。shell_integration.osc* - 手動注入無効化 (
= nil):ghostel-shell-integration# fish string match -qr '^ghostel(,|$)' -- "$INSIDE_EMACS"; and source "$EMACS_GHOSTEL_PATH/etc/shell/ghostel.fish" # bash/zsh も同様
6. インプットモード詳細
| モード | 切り替えキー | 特性 |
|---|---|---|
| Semi-char (デフォルト) | | 端末へ入力、エクスプレッション予約。 |
| Char | | すべてのキー(例外なし)が端末に送られる。TUI アプリ対応向け。 |
| Emacs | | 読み取り専用だがライブ出力。ナビゲーション・検索用。 |
| Copy | | 端末凍結。安定した選択・コピー用。 |
| Line | | 入力行をバッファリングし、RET で送信。TUI/REPL 対応。 |
6.1 主要操作の鍵バインド
: Semi-char モードへ(普遍的な退出)。C-c C-j
: Char モードのみで Semi-char へ戻る。M-RET
: 次の/前のプロンプトへ移動(Emacs モード内から)。C-c M-n/p
: スクロールバック全体を Kill Ring にコピー。C-c M-w
6.2 マウス選択とモード遷移
- クリック&ドラッグ時に入力モードが切り替わり、選択内容の保護が確保されます。
- Copy: 再描画停止し選択安定。
- Emacs: 読み取り専用だがライブ出力あり。
- Nil: Semi-char で留まり、選択は可能だがコピー不可(プライマリ選択のみ)。
6.3 Line モードの詳細
で一行全体をシェルへ送信します。RET- TUI アプリ(vim, htop など)との共存的な動作を処理します。
- bash プログラマブル補完:
経由で有効化可能。ghostel-line-mode-use-bash-completion
7. 機能一覧
- ターミナルエミュレーション: 256 色/RGB, OSC8/9/4/10/11 サポート、Kitty グラフィクス、同期出力(DEC 2026)。
- プロセスモデル: ネイティブ PTY(非同期処理)と Emacs PTY の両方をサポート。
- ブックマーク:
でディレクトリ・バッファ名を記録し再利用可能。C-x r m - リンク検出: OSC 8 ハイパーリンク、プレーン URL、ファイルパス(行指定)。
- クリップボード: OSC 52 サポート、括弧付きペースト。
- パスワードプロンプト:
/sudo
のプロンプト自動検出と入力処理。メモリに暗号化される。ssh - 通知・プログレス: OSC 9/777 を認識し、
パッケージなどを経由して表示。alert
7.10 インライン画像表示(Kitty グラフィクス)
- 伝統的配置(timg, kitty icat)とユニコードプレースホルダー配置の両方対応。
- 制限事項: アルファはstripされます。複数同時表示時は最新が優先。
8. TRAMP(リモート端末)
8.1 リモートシェル統合
オプション 1:自動注入(推奨)
(setq ghostel-tramp-shell-integration t)
- リモートホストに一時ファイルを作成してスクリプトを転送します。
オプション 2:マニュアル設定
をコピーし、ローカルシェルからソースします。etc/shell/ghostel.{bash,zsh,fish,nu}
8.2 リモート xterm-ghostty terminfo
- 自動インストール:
がghostel-ssh-install-terminfo
(デフォルト)の場合、必要に応じて自動で設定・キャッシュされます。auto - 手動インストール:
infocmp -x xterm-ghostty | ssh REMOTE 'mkdir -p ~/.terminfo && tic -x -'
9. 主な設定項目(カスタマイズ)
9.1 プロセスと環境
| 変数 | デフォルト | 説明 |
|---|---|---|
| | TERM 値。機能フルバージョンを広告します。 |
| | ローカルバッファでネイティブ PTY 使用。 |
| | プロセス終了時にバッファを kill。 |
9.2 パフォーマンス
| 変数 | デフォルト | 説明 |
|---|---|---|
| | スクロールバック容量。 |
| | 再描画遅延(〜30fps)。 |
9.3 機能制御
| 変数 | デフォルト | 説明 |
|---|---|---|
| | URL リンク化。 |
| | クリップボード設定許可(アプリによる)。 |
| | パスワードプロンプト検出。 |
10. 拡張機能
10.1 Evil-mode
- evil-ghostel パッケージをロードすることで、Evil のナビゲーション(hjkl)と操作をサポートします。
- Insert ステートでは terminal カーソルがポイントと同期されます。
10.2 コンパイルモード (ghostel-compile
)
ghostel-compile
と同じ環境でビルド結果を表示します。M-x ghostel- モード切り替え:
: インタラクティブ入力へ(read-prompt など)。C-c C-j
: 読み取り専用ナビゲーションへ戻ります。C-c C-e/t
で再実行可能。M-x ghostel-recompile
10.3 Eshell 統合
を有効化することで、可視コマンド(vim, htop など)を Ghostel バッファ内で実行できます。ghostel-eshell-visual-command-mode
11. コマンド一覧
| コマンド | 説明 |
|---|---|
| 新しいターミナルを開く |
| スクリーンとスクロールバックをクリア |
| テーマ変更後の色パレット同期 |
| 次のプロンプトへ移動 |
| リストからバッファを選択 |
12. テストの実行
Makefile のターゲットを使用してください:
make test # ERT テスト(ネイティブモジュール不要) make test-native # ネイティブモジュールを含むテスト
13. パフォーマンスの比較
ベンチマーク結果(Apple M4 Max, Emacs 32.0.50):
| エミュレータ | 純粋テキスト | URL/ファイル重み付き |
|---|---|---|
| Ghostel | 75 MB/s | 36 MB/s |
| vterm | 18 MB/s | 15 MB/s |
| eat | 6.2 MB/s | 4.5 MB/s |
- URL/ファイル検出はタイマーベースであり、通常動作へのオーバーヘッドはありません。
14. Ghostel vs vterm と eat
- libvterm 由来:
とは異なり、よりモダンなemacs-libvterm
を採用。libghostty-vt - サポート機能: Kitty プロトコル、真色(24bit)、同期出力などが標準搭載。
- アーキテクチャ: ネイティブ PTY の非同期処理により、スループットとレイテンシが改善されています。