libghostty を搭載したターミナルエミュレーター Ghostel.el

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
      ,
      x86_64-macos
      (Intel)
    • x86_64-linux
      ,
      aarch64-linux
    • x86_64-freebsd
      ,
      x86_64-windows
    • aarch64-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
  • vendor/emacs-module.h
    が同梱されているため、ローカル Emacs ヘッダーは不要。
  • 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*
    が有効な必要があります。
  • 手動注入無効化 (
    ghostel-shell-integration
    = nil):
    # fish
    string match -qr '^ghostel(,|$)' -- "$INSIDE_EMACS"; and source "$EMACS_GHOSTEL_PATH/etc/shell/ghostel.fish"
    # bash/zsh も同様
    

6. インプットモード詳細

モード切り替えキー特性
Semi-char (デフォルト)
C-c C-j
端末へ入力、エクスプレッション予約。
Char
C-c M-d
すべてのキー(例外なし)が端末に送られる。TUI アプリ対応向け。
Emacs
C-c C-e
読み取り専用だがライブ出力。ナビゲーション・検索用。
Copy
C-c C-t
端末凍結。安定した選択・コピー用。
Line
C-c C-l
入力行をバッファリングし、RET で送信。TUI/REPL 対応。

6.1 主要操作の鍵バインド

  • C-c C-j
    : Semi-char モードへ(普遍的な退出)。
  • M-RET
    : Char モードのみで Semi-char へ戻る。
  • C-c M-n/p
    : 次の/前のプロンプトへ移動(Emacs モード内から)。
  • C-c M-w
    : スクロールバック全体を Kill Ring にコピー。

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 プロセスと環境

変数デフォルト説明
ghostel-term
"xterm-ghostty"
TERM 値。機能フルバージョンを広告します。
ghostel-use-native-pty
t
ローカルバッファでネイティブ PTY 使用。
ghostel-kill-buffer-on-exit
t
プロセス終了時にバッファを kill。

9.2 パフォーマンス

変数デフォルト説明
ghostel-max-scrollback
5 MB
スクロールバック容量。
ghostel-timer-delay
0.033
再描画遅延(〜30fps)。

9.3 機能制御

変数デフォルト説明
ghostel-enable-url-detection
t
URL リンク化。
ghostel-enable-osc52
nil
クリップボード設定許可(アプリによる)。
ghostel-detect-password-prompts
t
パスワードプロンプト検出。

10. 拡張機能

10.1 Evil-mode

  • evil-ghostel パッケージをロードすることで、Evil のナビゲーション(hjkl)と操作をサポートします。
  • Insert ステートでは terminal カーソルがポイントと同期されます。

10.2 コンパイルモード (
ghostel-compile
)

  • M-x ghostel
    と同じ環境でビルド結果を表示します。
  • モード切り替え:
    • C-c C-j
      : インタラクティブ入力へ(read-prompt など)。
    • C-c C-e/t
      : 読み取り専用ナビゲーションへ戻ります。
  • M-x ghostel-recompile
    で再実行可能。

10.3 Eshell 統合

  • ghostel-eshell-visual-command-mode
    を有効化することで、可視コマンド(vim, htop など)を Ghostel バッファ内で実行できます。

11. コマンド一覧

コマンド説明
M-x ghostel
新しいターミナルを開く
M-x ghostel-clear
スクリーンとスクロールバックをクリア
M-x ghostel-sync-theme
テーマ変更後の色パレット同期
M-x ghostel-next-prompt
次のプロンプトへ移動
M-x ghostel-list-buffers
リストからバッファを選択

12. テストの実行

Makefile のターゲットを使用してください:

make test         # ERT テスト(ネイティブモジュール不要)
make test-native  # ネイティブモジュールを含むテスト

13. パフォーマンスの比較

ベンチマーク結果(Apple M4 Max, Emacs 32.0.50):

エミュレータ純粋テキストURL/ファイル重み付き
Ghostel75 MB/s36 MB/s
vterm18 MB/s15 MB/s
eat6.2 MB/s4.5 MB/s
  • URL/ファイル検出はタイマーベースであり、通常動作へのオーバーヘッドはありません。

14. Ghostel vs vterm と eat

  • libvterm 由来:
    emacs-libvterm
    とは異なり、よりモダンな
    libghostty-vt
    を採用。
  • サポート機能: Kitty プロトコル、真色(24bit)、同期出力などが標準搭載。
  • アーキテクチャ: ネイティブ PTY の非同期処理により、スループットとレイテンシが改善されています。

同じ日のほかのニュース

一覧に戻る →

2026/07/13 6:12

Chromium 148 より*Math.tanh*は下位の OS を特定するフィンガープリントとして使用可能になった

## 日本語翻訳: Chrome バージョン 148 以降、Chrome や同様のブラウザは特定の数学的な挙動を通じて正確なオペレーティングシステムの詳細を漏らし、高度なデジタルフィンガープリンティングを可能にしています。これはまず `Math.tanh` 関数から始まり、bundled routines からホストライブラリへと切り替わったことで、macOS、Windows、Linux のユーザーが使用しているか否かに基づいて小数点以下最終桁が 1 ユニット異なる独自のプロファイル(OS シグネチャ)が作成され、他の V8 数学関数とは異なりプラットフォーム間で同一ではなくあります。また、すべての CSS 三角関数はホスト libm を直接呼び出すことで OS を漏らします。macOS Apple Silicon では、スカラーおよびベクトルフレームワーク間のアーキテクチャ固有の分断により計算に著しい乖離が生じます。Scrapfly はこれらの問題に対処するため、数学的ビットごとの再現を含め、Linux のなりすまし用の真正な Windows ライブラリのマッピングや特定の ARM/x86 FMA(fused-multiply-add)挙動の処理を含む特別ソリューションを開発しました。彼らの Scrapium ブラウザはこれらの OS シグネチャを真正的なシステムと完全に一致するようになりすまえ、同時に最適な速度のためにハードウェア FMA を能動的に有効化します(ネイティブエミュレーションより最大約 6 倍高速)。高度なマッピング技術および数十万もの入力を対象とした厳格な検証を通じて、ユーザーは微妙な数学的な丸めエラーや将来のアップデートにおけるアーキテクチャの癖に基づく識別を防止する同時期にネイティブレベルのパフォーマンスで完全なステルスを実現します。

2026/07/13 5:23

小さなエミュレータ

## Japanese Translation: このテキストは、収集家のためのプラットフォーム間での即時的な互換性を優先しつつ、コモドール C64、ZX Spectrum(48k/128)、Amstrad CPC(CPC464/6128)、Acorn Atom、Z1013 などのレトロコンピュータシステムおよびそれらの対応ソフトウェアの包括的な目録です。具体的には、『Boulderdash』『Ghost's'n'Goblins』『Rick Dangerous』『Prince of Persia』のようなアクションゲームや、『Tetris』『Pengo』『Sokoban』のようなパズルゲームにわたる特定のタイトルを対象とし、ローディング時の独自の要件(例:BASIC 環境では「Enter」キーを押す、Spectrum タイトル『Cyclone』『Great Escape』では特定のジョイスティック種類[Kempston]を選択する、特定のインターフェースでは「F1」「SPACE」キーを押すなど)を詳述しています。また、本ガイドでは Arkos/Overlanders、Batman Group、Plush、Offence、Oxyron、Proxima、Dekadence などの著名なデベロッパーに帰属する様々なデモとインターフェースを列挙しています。さらに、特定のコントローラーや RAM モジュールなどといったハードウェアの制約を明示することで、今日広く利用可能な膨大なソフトウェアライブラリがどの機械構成で実行可能かをはっきりさせます。これは『Visual 6502 Remix』から『Wunderbar』『Batman Forever』などの特殊なデモにいたるまで、すべてのソフトウェアを網羅しています。最終的には、古いハードウェア上で何が達成可能かについてユーザーが正確に知ることを保証し、余計な詳細を含めない実用的な参考文献として機能します。

2026/07/13 3:25

Claude Code はプロンプトを読み込むまでに約3万トークンを消費し、OpenCodeは7,000 トークンである。

## Japanese Translation: 主要な知見は、セッションの段階と設定の複雑性に 따라 Claude Code と OpenCode の間でのトークン使用ダイナミクスが著しく異なることを示しています。標準的な設定において、Claude Code は非効率的なシステムプロンプト、キャッシュ管理のために数万のトークンを再記述し、堅牢なフレームワークテンプレートにより引き起こされる大規模な初期オーバーヘッド(約 33,000 トークン)を被る一方、OpenCode の床は低い(約 7,000 トークン)ため、大きな差を生じています。ただし、Fable 5 のような新しいモデルではこの隙間が縮小します。特に、複雑な本番環境設定においては、OpenCode 自身のツール呼び出しのシリアライゼーションとスキーマサイズによる影響で、最初のリクエストでより高いトークン負荷(Claude の約 75,000 トークンに対し、約 90,817 トークン)を被り、その後のリクエストで安定化するまで要請されます。新しいモデルは命令セットのサイズを削減しますが(例:27k から 10k クラクターへ)、特定のコストドライバーは残っています:対話履歴と乗算される延長された思考ブロック、「フレームワーク税」として作用する大規模な静的フレームワークテンプレート(例:AGENTS.md)、およびバーストコストを増幅するサブエージェントのファンアウト構造。さらに、本研究では EU AI Act のログ記録要件への準拠を確保し完全性を保証するために、キャッシュの書き込みと課金構造の違い(例:キャッシュされた読み取り対課金されるプレミアム書き込み)を検証できるよう、185 件のレコードを捕捉した SHA-256 ハッシュ連鎖監査軌跡を利用しました。 ## Text to translate: The primary findings indicate that token usage dynamics vary significantly between Claude Code and OpenCode depending on the session stage and configuration complexity. While Claude Code incurs a massive initial overhead (~33,000 tokens) compared to OpenCode's low floor (~7,000 tokens) in standard setups—driven by inefficient system prompts, rewriting tens of thousands of tokens for cache management, and rigid framework templates—this gap narrows with newer models like Fable 5. Notably, in complex production configurations, OpenCode's first request can incur a higher token load (~90,817 tokens vs. ~75,000 for Claude) due to its own serialization of tool calls and schema sizes before stabilizing on subsequent requests. While newer models reduce instruction set sizes (e.g., from 27k to 10k characters), specific cost drivers remain: extended thinking blocks that compound with conversation history, large static framework templates (e.g., AGENTS.md) that act as a "framework tax," and subagent fan-out structures that multiply bootstrap costs. Additionally, the study utilized a SHA-256 hash-chained audit trail capturing 185 records to ensure integrity and support compliance with EU AI Act logging requirements, verifying that both architectures handle cache writes and billing structures differently (e.g., cached reads vs. billed premium writes).