Ghostty 1.1.0

2025 年 1 月 30 日にリリースされた Ghostty 1.1.0 のリリースノート。

Ghostty 1.1.0 は、564 コミットにわたる 84 人のコントリビューターによる1 か月の作業です。このリリースで初の 1.0 リリース、このリリースの焦点は引き続き、重大バグ修正と、1.0 リリースへのフィードバックに基づく品質向上です。

セキュリティ

  • GHSA-98wc-794w-gjx3。Ghostty が実行中の shell やコマンドにファイルディスクリプターを漏らしていた問題を修正しました。

ハイライト

Linux でのサーバーサイド装飾(SSD)

PR:#4630、#4723、#5124

特に Linux では、ウィンドウ装飾は多種多様なスタイルとふるまいを持ちます。Ghostty の以前のふるまいは常に CSD で、「GNOME」アプリのように見え・感じられるものになっていました。特に KDE Plasma などの人気のデスクトップ環境では不自然でした。

Ghostty 1.1 は Linux で、対応するコンポジタに対するサーバーサイド装飾(SSD)をサポートします。より多くのデスクトップ環境で、よりネイティブなアプリのように見え・感じられます。CSD や装飾なしが好みなら無効化できます。

(左/上:従来のクライアントサイド装飾。右/下:新しいサーバーサイド装飾)

window-decoration 設定オプションに新しい値 auto が追加されました。コンポジタが対応しており望む場合は SSD を使用します。server は SSD を強制し(利用可能なら)、client はクライアントサイド装飾を強制し、none は装飾を完全に無効化します。

SSD は Wayland でのみサポートされます。Ghostty は KDE Server Decoration プロトコルを使用します。名前に反して、ほぼすべての主要 Wayland コンポジタがこのプロトコルをサポートしており、KDE に限りません。X11 については十分にサポートされた SSD プロトコルが見つからなかったため、引き続き CSD を使用します。

将来の Ghostty バージョンでは、能力とプロトコルの可用性の範囲で、Linux の各デスクトップ環境でのネイティブな見た目と操作感の向上を続けます。たとえば現在、ネイティブメニューバーを検討しています。

Important

Ghostty の将来のバージョンは gtk-adwaita オプションを削除し、libadwaita への依存を強制します。これは、SSD を望むユーザーの大半が gtk-adwaita = false を使って実現していた(一部のケースでしか機能しなかった)との発見と関連があります。新しい SSD サポートにより、この回避策は不要になりました。詳細は献辞のセクション を参照してください。

インプットメソッドエディタ(IME)の改善

PR:#3567、#4332、#4539、#4854、#4933、#4999

macOS と Linux の両方で、CJK、デッドキー(アクセント付き文字)、絵文字、Unicode 16 進入力などのパラダイムで IME をテストし、IME 入力の信頼性と一貫性を大幅に向上させました。

Linux では、fcitx と ibus を X11 と Wayland の両方でテストしました。それぞれ複数のバージョン(LTS ディストリビューションで一般的なバージョンを含む)もテストしています。ibus 1.5.29 にデッドキー入力が「固まる」バグを見つけ、回避策を講じました。

macOS では、AquaSKK と macSKK の日本語インプットメソッドがすぐに使えることを特に確認しました。他の IME もテストし、いずれも良好に動作しました。

「Performable」キーバインド

PR:#4328

キーバインドは新しい performable: プレフィックスをサポートします。このプレフィックスは、アクションが実行された場合にのみキーバインドが入力を消費することを示します。

たとえば、次のキーバインドは、コピーできるテキストがある場合にのみ ctrl+c を消費します。それ以外の場合、ctrl+c は shell へ渡され(通常は割り込みシグナルが起きます)。

keybind = performable:ctrl+c=copy_to_clipboard

Note

すべてのアクションが performable: に対応するわけではありません。多くのアクションは常に実行され(text、new_tab など)、performable プレフィックスは意味のある「実行」状態を持つアクションにのみ適用されます。

macOS:アルファブレンディングの改善

PR:#4913、#5401

アルファブレンディングは、半透明の前景色を背景色の前面に置いたときの結果を決定するプロセスです。これはテキストの端、および(Kitty Graphic Protocol で表示される)透過を含むあらゆる画像に影響します。

以前は、これは sRGB 色彩空間でのブレンドで行われていました。前景色と背景色が異なる彩度の高い色である場合、テキストの縁が暗くなる原因となっていました。macOS の Ghostty 1.1 では、デフォルトで P3 色彩空間でアルファブレンディングが行われるようになり、より広い色域のおかげで暗くなる問題が軽減され、Terminal.app や TextEdit などネイティブの macOS アプリの見た目と一致します。

さらに、これを制御する alpha-blending の設定が追加されました。デフォルトは上述の native ですが、2 つの選択肢が追加されています:

  • linear はリニアカラースペースでブレンドします。技術的には正しいのですが、暗い文字が細く見えすぎたり、明るい文字が太く見えすぎたりする欠点があります。
  • linear-corrected は linear に似ていますが、テキストに補正ステップを適用して、native に限りなく近い見た目を達成しつつ、_いかなる_暗化の問題もありません。

以下で、(左から右へ)従来のブレンド、新しい native ブレンド、linear ブレンド、linear-corrected ブレンドを比較できます。違いを正しく見るには拡大が必要かもしれません。

これは現時点で macOS 限定ですが、将来 Linux にももたらすための作業が進行中です。

macOS:クイックターミナルの改善

PR:#4049、#4501、#4999、#5361

クイックターミナルは、ネイティブ全画面ウィンドウ、クイックターミナル表示中のスペース切替、IME ウィジェット、左右のドックなどに対応しました。

qクイックターミナルが開いている間の macOS のスペース切替への反応を制御する新しい設定 quick-terminal-space-behavior が追加されました。既定のふるまいはアクティブなスペースに従う(move)です。remain を設定すると、開いたときのスペースに留まります。

完全な一覧

GitHub でクローズされた issue の一覧。

各セクションでは、バグ修正の前に改善を並べるよう心がけています。

  • キーバインドに新しい performable: プレフィックスを追加し、アクションが実行された場合にのみ入力を消費するようにしました。「Performable」キーバインド を参照。#4328
  • shell-integration-features が shell-integration が無効な場合でも適切な環境変数を設定するようになりました。シェル統合を手動で source する環境にとって有用です。#5046
  • 新しいキーバインドアクション copy_url_to_clipboard で、カーソル下の URL(あれば)をクリップボードへコピーできるようになりました。#4633
  • 新しいキーバインドアクション close_tab で、タブとその中のすべての分割を閉じられます。macOS と GTK ビルドの両方で機能します。#4331
  • 既定の ctrl+shift+j/ctrl+shift+alt+j キーバインドを全画面コンテンツを捉えるよう更新。#5285
  • IPv6 URL が自動的にハイパーリンクに変換されるようになりました。#4743
  • 明示的な file:// プロトコルのないファイルパスが、他のハイパーリンクと同様にクリックできるようになりました。#4713
  • 分割の区切り線色を明示的に設定する新しい設定 split-divider-color を追加。未設定のときは、ターミナルの背景色に基づく自動決定という従来の既定ふるまいになります。#4236
  • palette 設定オプションが 2 進、8 進、16 進のキーを受け付けるようになりました。#4298
  • goto_split キーバインドパラメータの top と bottom は、それぞれ up と down に改名されました。後方互換のため旧名も引き続きサポートされます。#3427
  • bash:短縮タイトルに $PWD ではなく \w を使用。#4656
  • bash:sed への依存を廃止し、プロンプトあたりのオーバーヘッドを大幅に削減。#5141、#5142
  • fish:sudo 統合を修正。#5276
  • wait-after-command が有効なときに CPU が 100% を振り回すシナリオを修正。#4884
  • レンダラーグリッドサイズとターミナルグリッドサイズが不一致のときに起こりうるメモリ破壊の競合状態を修正。#5265
  • 空行から始まるトリプルクリック+ドラッグが機能するようになりました。#5068
  • コマンドラインが折り返されたとき、super+triple-click がコマンド出力を正しく選択します。#5373
  • vt:Kitty 画像プロトコルの不正なアルファブレンディングを修正。#5189
  • vt:SGR シーケンス内のセミコロンとコロンの混在に対する、より堅牢で正しい処理。実際には Kakoune エディタ内のいくつかのスタイリングを修正します。#5022
  • cursor-invert-fg-bg オプションが反転 VT シーケンスと良好に協調するようになりました。#4777
  • shell 実行前に環境から VTE_VERSION を削除。これは、VTE のシェル統合が Ghostty を libvte ベースと誤認する問題を修正します。#4710
  • 初期ウィンドウサイズが 640x480 より小さくなかった問題を修正。#4688
  • vt:ConEmu OSC 9;4 の解析を ConEmu のロジックにさらに合致させ、いくつかの systemd バージョンの問題を修正。#4727
  • unbind キーバインドアクションが、一致する物理マッピングも解除するようになりました。#4703
  • 存在しない config-file が、theme も同時に設定されているときに正しくエラーを表示するようになりました。#4509
  • vt:ConEmu OSC 9;1、9;2、9;3、9;5 は解析して無視するようになり、OSC 9 デスクトップ通知と衝突しなくなりました。#4644、#4327、#4948、#4447
  • Inspector:メモリの値が生バイトではなく単位付きで表示されるように。#4549
  • ロシア語などのさまざまなキーボードレイアウトで、制御シーケンス(ctrl+c など)をレガシーモードでエンコードする問題を修正。#4518
  • vt:Kitty graphics プロトコルの一時ファイルは仕様に従って命名される必要があります。#4451
  • 実行された shell やコマンドに既定のファイル上限(RLIMIT_NOFILE)が復元されるように。#4241
  • 複数の font-feature 値がコンマで区切られるようになりました。以前は font-feature を複数回繰り返す必要がありました。その方法も引き続きサポートされます。#3128
  • vt:対応するすべての CSI シーケンスで中間バイトを検証するように。#3122
  • clear_screen キーバインドの後、選択されたテキストが残らなくなりました。#3414
  • パス型の設定値では、ファイルパスのチルダ(~)がユーザーのホームディレクトリに展開されるようになりました。#3328
  • キャッシュデータが XDG_CACHE_HOME を尊重するように。#3458
  • 親ディレクトリが存在しなくても、既定の設定ファイルが作成されるように。#4295
  • Inspector:フォントサイズが小数値を表示するように。#4371

macOS

  • macOS:正しい色のための一貫した正しいアルファブレンディング。Apple 風のアルファブレンディングに合わせるオプションと、特定の前景/背景色の組み合わせでより良い結果を生むと考える実験的な「linear」ブレンドモードを含みます。macOS のアルファブレンディング改善 を参照。#4913
  • macOS:クイックターミナルが開いている間の macOS スペース切替への反応を設定する新しい設定オプション quick-terminal-space-behavior。既定のふるまいはアクティブなスペースに従う(開いたまま)。#4049
  • macOS:選択クリップボードがサポートされるようになりました。macOS では copy-on-select オプションが既定で true になりました。macOS に新しい「Paste Selection」メニュー項目があります。このふるまいは Terminal.app と一致します。#4733
  • macOS:新しいサーフェスの FOUC(「unknown content のちらつき」)を防ぐため、既定のウィンドウタイトルに非常に短い遅延を導入。#4799
  • macOS:font-thicken が、太文字化の係数を調整する省略可能な数値を受け付けるようになりました。#4531
  • macOS:明示的な Ghostty キーバインドがシステムキーバインドより優先されるようになりました(たとえば cmd+h をバインドできる)。#4591
  • macOS:cv02 = 2 などの非ブールな font-feature 値がサポートされるようになりました。#3128
  • macOS:キャッシュデータは macOS のシステム API を使い、OS が設定したキャッシュディレクトリ(通常 ~/Library/Caches)へ保存するようになりました。#3458
  • macOS:クイックターミナルがドックと重なる場合、ドックを自動的に隠します。#5361
  • macOS:shell やコマンドが、それを含む UI が閉じる前に終了する場合のゾンビプロセスのリークを修正。#4554
  • macOS:ウィンドウの外のどこかで command キーを押していても、左上のハイパーリンクがホバー状態のままにならないように。#5252
  • macOS:macos-titlebar-style = hidden のとき、タイトルバー領域をもってウィンドウをドラッグできなくなります。リサイズ領域で option+ドラッグ(標準の macOS バインド)を使う必要があります。#2523
  • macOS:Stage Manager を有効にしてタブを閉じても、Ghostty がフォーカスを失わなくなりました。#5108
  • macOS:新規およびリサイズされたターミナルの「背景のちらつき」を修正。#5083
  • macOS:ファイルや URL を貼り付ける際に、ファイルパスに対し shell エスケープを行います。#5036
  • macOS:クイックターミナルが IME ウィジェットを覆わなくなりました。#4999
  • macOS:テキストをターミナルにドラッグできるようになりました。#4932
  • macOS:window-padding が設定されているときの IME ウィンドウ位置が正しくなりました。#4933
  • macOS:複数のファイルの貼り付けで、パスの区切りが改行ではなくスペースになりました。#4956
  • macOS:toggle_visibility がタブを親ウィンドウから切り離さなくなりました。#4329
  • macOS:ctrl+h などの制御文字が、IME に対して期待どおりに機能するようになりました。#4854
  • macOS:過大な初期ウィンドウサイズと window-step-resize を併用したときのクラッシュを修正。#4801
  • macOS:クイックターミナルがネイティブ全画面ウィンドウ上に正しく重ねられるようになりました。#4049
  • macOS:子プロセスがトリガーしうる macOS システム権限要求(Bluetooth アクセスなど)の文字列を追加。#4668
  • macOS:ウィンドウがない状態での new_tab キーバインドは新しいウィンドウを作成します。#4691
  • macOS:閉じても NSWindow が解放されない原因となっていた retain cycle を修正。#4689
  • macOS:修飾キーを押したときに確定前文字列が消えなくなりました。#4634
  • macOS:AquaSKK/macSKK の日本語インプットメソッドが機能するように。#4539
  • macOS:特定のマルチモニター設定でクイックターミナルが正しい位置に現れるようになりました。#4501
  • macOS:command+<key> の release イベントが Kitty キーボードプロトコルに対して正しくエンコードされるように。#4591
  • macOS:cmd+period 他のキーバインドがバインド可能になりました。#4591
  • macOS:ダークモードでのウィンドウ境界が macOS のスタイルと一致するように。#4308
  • macOS:自動更新は既定でオンになりました。初回実行時に、Ghostty はアップデート確認の許可を求めます。auto-update オプションで引き続き設定できます。#4433
  • macOS:初期ウィンドウ位置を設定する新しい設定 window-position-x と window-position-y。#3929
  • macOS:ネイティブ全画面を解除した後、macos-titlebar-style = hidden が正しく復元されるように。#3535

Linux(GTK)

  • GTK:サーバーサイド装飾(SSD)のサポートを追加。既存の window-decoration 設定オプションを利用します。新しい値 auto は、コンポジタが対応していて望む場合に SSD を使用します。server は SSD を強制(利用可能なら)、client はクライアントサイド装飾を強制、none は装飾を完全に無効化します。Linux でのサーバーサイド装飾(SSD) を参照。#4630

  • GTK(X11):_KDE_NET_WM_BLUR_BEHIND_REGION atom を尊重する任意のウィンドウマネージャー向けに background-blur がサポートされるように。#4403

  • GTK(Wayland):org_kde_kwin_blur_manager プロトコル(すなわち KDE)をサポートする任意のコンポジタ向けに background-blur がサポートされるように。#4403

  • GTK:どのトーストを表示するかを制御する新設定 app-notifications を追加。#4460

  • GTK:複数の custom-shader 値がサポートされるように(macOS と一致)。#5037

  • GTK:ウィンドウを最大化(全画面ではなく)したときにタイトルバーを隠すための新しい設定オプション gtk-titlebar-hide-when-maximized(既定 false)。#3381

  • GTK:対応するデスクトップ環境で、Ghostty をドックやタスクマネージャーへピン留めできるように。#4930

  • GTK:ファイルと選択テキストのドロップが機能し、macOS と一致するように。#4211

  • Nautilus 向け「Open in Ghostty」ショートカットが利用可能に。#4816

  • GTK:古いバージョンの libadwaita で adwaita タブバーがタイトルバーの上に現れる問題を修正。#5410

  • GTK:XDG desktop portal が利用できないときの起動が遅い問題を修正。#5064

  • GTK:X11 と Wayland の両方で fcitx と ibus が機能するように。#4332

  • GTK:ibus 1.5.29 でデッドキー入力が「固まる」バグを回避。#3567

  • GTK(X11):新しいウィンドウが最初から最大化されている場合に _NET_WM_STATE atom を正しく設定し、タイトルバーが最大化状態を正しく反映するように。#4646

  • GTK:last_tab キーバインドアクションが機能します。#5004

  • GTK:ウィンドウが全画面のときにタイトルバーを自動的に隠す(全画面を解除したときに復元する)ように。#5008

  • GTK:mouse-hide-while-typing が設定されているときに、タイトル変更でマウスが現れなくなりました。#3345

  • GTK:古い libadwaita バージョンで、ctrl+d でウィンドウを閉じたときに起こりうるセグフォルトを修正。#4971

  • GTK:タブバーの「X」を押すなど、より多くのシナリオで終了確認が表示されるように。#4234

  • GTK:リリースビルドで OpenGL デバッグログを既定で無効化(re-enable の設定は可能に)。#4662

  • GTK:libadwaita を有効にしたウィンドウが 482x322 より小さくなるように。#4836

  • GTK:コンパイル時バージョンチェックをランタイムにしているべきだったいくつかのケースを修正し、望まないときに機能が無効にならないように。#4783

  • GTK:window-title-font-family が機能するように(以前は macOS 専用)。#4560

  • GTK:メニューのセパレーター色がシステムテーマと一致するように。#4421

  • GTK:fractional scaling の問題を修正。fractional scaling を備えた GTK ディスプレイ上でターミナルはくっきり表示されるはずです。#4255

  • GTK:GTK 要素をテーマするためのカスタム CSS を読み込める新しい設定 gtk-custom-css を追加。#4200

  • GTK:focus-follows-mouse が goto_split キーバインドと正しく機能します。#3229

  • GTK:Wayland 向けのフォントスケーリングに gtk-xft-dpi を使用(以前は X11 向けのみ)。これにより GNOME の「Large Text」設定が正しく機能します。#4424

  • GTK:ctrl+insert と shift+insert のバインドを、それぞれ copy と paste の代わりの既定として追加。#2870

  • GTK:貼り付けプレビューテキストが等幅に。#4227

パッケージメンテナー向けの変更

Note

ビルドの変更はすべて軽微で、これまで機能していたビルドに影響を与えるものではありません。純粋に興味がない限り無視してかまいません。

  • Build:バイナリのストリップを制御する -Dstrip を追加。以前はリリースバイナリを自動でストリップしていました。現在は設定可能です。#3945
  • Build:Sentry を明示的に有効または無効にする -Dsentry を追加。Linux ビルドは既定で Sentry 無効。macOS ビルドは既定で有効。Sentry はローカルでのみクラッシュログを収集し、ネットワーク経由では送信しません。#3934
  • Build:Terminfo/Termcap のソースは既定でインストールされなくなりました。_コンパイル済み_版は引き続き正しくインストールされ、terminfo は利用可能です。ソースファイルを出力するには、ビルド旗標 -Demit-terminfo と -Demit-termcap を使用します。#5311
  • Build:間違った libadwaita pkg-config 名を修正。#4818

ロードマップ

1.1.0 リリースに間に合わなかった追加のバグを対処するため、1.1.1 をリリースする計画です。重大な問題やリグレッションが提起されない限り、このリリースがすぐに起こることは期待していません。したがって、すべてのパッケージマネージャーに可能な限り早く 1.1.0 へアップグレードすることを勧めます。

次のリリースの焦点は、特定のキーボードレイアウトの問題の解決と、macOS での window-step-resize のいくつかの根本的な問題の解決を続けることです。予期しないコントリビューターが現れれば(ありがとう!)、予定外の機能が加わるかもしれません。

当初の 1.0 リリース以来、一般的な広範な安定性に達しつつあります。このまま時間が経てば、開発チームがより大きく影響力のある機能に集中できるよう、さらに長いリリースサイクル(数か月)へ移ると考えています。

GTK:libadwaita への依存の強制

Ghostty 1.2 から、gtk-adwaita オプションを削除し、libadwaita への依存を強制する計画です。libadwaita はすでに既定でオンなので、明示的に無効化していなければ、この変更は影響しないはずです。

Important

一部の人にとってこれは物議を醸す決定になるでしょう。ですから、私たちの動機と、この決定を下すための考慮を理解してもらうため、このセクションを注意深くお読みください。それでも懸念がある場合は、GitHub または Discord でご連絡ください。

以前のバージョンでの gtk-adwaita = false の主な用例は、window-decoration = none と組み合わせて、一部のコンポジタにサーバーサイド装飾(SSD)を使わせることでした。すべてのケースで機能したわけでも、明示的な設定目標でもありませんでしたが、一部のケースでたまたま機能していました。Ghostty 1.1 で 明示的な SSD サポート が導入されたため、この回避策は不要になりました。

gtk-adwaita = false のもう一つの用例はテーマでした。Ghostty 1.1 は、GTK 要素をテーマするカスタム CSS を簡単に注入できる gtk-custom-css オプション を導入しました。また、GTK ウィジェット全体に、より対象を絞りやすいクラス名も導入しました。システム全体の CSS で Ghostty のテーマを変えることは常にできましたが、この新しいオプションにより、Ghostty に固有のカスタム CSS をテストして適用しやすくなります。

Ghostty メンテナーにとって、「classic GTK」と「libadwaita」両方のコードパスを維持することは大きな負担です。GTK と Adwaita のバージョン間のふるまいの差、Ghostty の種々の設定(gtk- と adw- を接頭辞とするすべてのオプション)の複雑な相互作用が、それに拍車をかけます。これが、安価で複雑な CI なしには修正・テスト困難な、多くのバグとリグレッションを招いてきました。

Ghostty 1.1 の SSD サポートにより gtk-adwaita = false の主な用例が不要となったことから、この変更を行う絶好のタイミングだと考えています。これにより将来の Ghostty は、より安定し、メンテナンスしやすく、より機能豊富なものになると考えています(最後の点は、libadwaita の機能に全力で取り組めるようになるためです)。

この決定への確信を強めるため、GNOME を使っていない Ghostty ユーザー、および Ghostty の見た目に不満を持っていた非 Ghostty ユーザー(すなわちブロガー、ストリーマー、YouTuber)にも直接連絡を取りました。フィードバックは一様にこの変更を支持し、理由と利点を理解し、明示的な SSD サポートが主要な懸念に対処していることを認めていました。

この変更について強い意見があれば、Discord または GitHub までご連絡ください。論じる際には、この変更がどのユースケース・シナリオであなたにどのような悪影響を与えるかを示してください。単に「気に入らない」ではなく、理由を説明してください。理由のない指摘は役に立ちません。フィードバックには真摯に耳を傾け、検討します。よろしくお願いします!