Ghostty 1.2.0

Ghostty 1.2.0 的發行說明,發佈於 2025 年 9 月 15 日。

Ghostty 1.2.0 由 149 位貢獻者 在 2,676 個提交 中完成,歷時6 個月。感謝所有為本次發行做出貢獻的貢獻者、維護者、社群管理員、翻譯者、打包者與使用者。本發行版對 Ghostty 的每個部分都做了重大改進,包括數百個 bug 修復。

安全

  • macOS:GHSA-q9fg-cpmh-c78x。修復了 Ghostty 可被用作來自其他易受攻擊或惡意來源的提權跳板的問題。這需要 Ghostty 之外的一個易受攻擊的應用程式發起這一連串事件。因此,這被視為低風險通告。

亮點

新應用程式圖示

PR:#7638 #8038

在 macOS 上,Ghostty 1.2 附帶了一個新的 macOS Tahoe 相容圖示,如下所示。該圖示用新的 Icon Composer 應用程式建置,允許圖示配合所有新的 macOS 淺色、深色、半透明與自訂著色樣式。

在 GTK(Linux 與 FreeBSD)上,Ghostty 1.2 附帶了一個新的圖示,更好地匹配 許多 桌面環境。我們選擇與 GNOME 風格保持一致,因為它常見且在大多數環境下不會顯得格格不入。

Note

由於桌面環境多種多樣,為 Linux 與 BSD 生態做一個完美的、全域一致的圖示是不可能的。我們相信這個圖示在更多環境下比之前的圖示更好看,並且避免了之前那個圖示暴露出的「以 macOS 為中心」的負面反應。

命令面板

PR:#7153 #7156

Ghostty 現在有一個命令面板,可以調用大多數 keybind 動作,如新建終端機、移動焦點、更改文字選區、複製貼上等。

命令面板預設綁定 GTK 上的 ctrl+shift+p 與 macOS 上的 cmd+shift+p。可以用 toggle_command_palette keybind 動作重新綁定到任何鍵位綁定。命令面板在 macOS 與 GTK 上也都可以透過選單列使用。

命令面板暴露幾乎每一個可用的鍵位綁定。當 Ghostty 新增新的 keybind 動作時,它們也會自動出現在命令面板中。這帶來一些立即可見的好處,即你可以存取未綁定到 keybind 的 keybind 動作。這對不常使用的動作很有用。

例如,我自己就經常透過命令面板使用 move_tab 動作,但頻率低到不值得專門綁定。

在 Ghostty 的未來版本中,我們會繼續擴充命令面板中的可用特性。例如,我們正在開發一個新的終端序列規範,允許終端機程式把它們的動作直接暴露在命令面板中(想象一下 Neovim 命令完全可用在命令面板中)。

Quick Terminal 大小

PR:#2384

新設定 quick-terminal-size 現在可以設定 quick terminal 的預設大小。這是呼聲最高的特性之一。

quick-terminal-size 設定同時支援百分比與像素大小。如果你只指定一個值,它指定主軸的大小(取決於位置)。如果指定兩個值,則第二個值是次軸。下面的例子說明這一點:

# Percentage, primary axis only
quick-terminal-size = 25%

# Pixels work too, primary axis only
quick-terminal-size = 600px

# Two values specify primary and secondary axis
quick-terminal-size = 25%,75%

# You can also mix units
quick-terminal-size = 300px,80%

主軸 由 quick-terminal-position 設定定義。對 top 與 bottom 值,主軸是高度。對 left 與 right 值,主軸是寬度。對 center,取決於你的顯示器方向:橫向為高度,縱向為寬度。

不只是指定大小,quick terminal 現在可以在執行時調整大小,並會在 Ghostty 執行期間記住該尺寸。在之前的版本中大小是固定的,這在不同顯示器大小與解析度下造成了真實問題。

帶兩個示例的 GTK 截圖如下:

SSH 改進(進行中)

Ghostty 現在提供可選的 shell 整合特性,使 Ghostty 對尚未更新以支援 Ghostty 的 terminfo 的遠端 SSH 機器更具相容性。

新的 ssh-env 可選特性會自動把 TERM 變數設為 xterm-256color(並轉發一些其他環境變數,使會話運作更好)。雖然並不嚴格正確,但這種創可貼方案在大多數情況下利大於弊。

新的 ssh-terminfo 可選特性會自動把 Ghostty terminfo 複製到遠端機器,以便可以使用恰當的 xterm-ghostty TERM 設定,遠端程式可以充分利用 Ghostty 的所有特性(並避免我們不支援的 xterm 特性)。

這兩個特性都是可選的,因為它們要求在你的 shell 中覆蓋 ssh 命令。這個操作並非沒有風險,所以我們希望使用者明白自己在做什麼。我們盡力使其穩定可靠,但總有我們無法顧及的邊緣情況。因此,這仍然在進行中,歡迎回饋。

渲染器重構

PR:#7620

渲染器後端被重構成共享同一套核心邏輯,無論是用 OpenGL 還是 Metal 渲染。這一變更將允許未來對該領域程式碼的更快改進,也有助於確保兩個後端間的特性對等,這在許多特性為 Metal 實現卻沒有為 OpenGL 實現時,已經快要變成一個問題。

在重構過程中,OpenGL 後端獲得了多項改進,現在應當更高效,並接近與 Metal 後端的特性對等。

這意味著 Linux 使用者現在會看到正確的線性 alpha 混合,消除了某些背景下與前景色組合下文字邊緣出現的偽影。Linux 上預設的 alpha-blending 設定值現在是 linear-corrected,它執行線性混合並對文字套用校正步驟,使文字的視覺粗細符合人們習慣的非線性混合。

這次重構還使自訂 shader 支援熱重載。

自訂游標 Shader

PR:#7648

自訂 shader 現在會獲得關於終端機游標的資訊,因此可以對其套用自訂效果與動畫,比如拖尾或塗抹。

下面的例子展示了一個「游標拖著火花的 shader」,在游標移動時在其身後留下拖尾:

游標 shader 與自訂 shader 不適合所有人,但社群的 shader 創意令人驚嘆。很多人玩得很開心,而且除了單純的好看,它們也可能非常實用,例如讓移動的游標更容易追蹤(不過別太吵)。

我們最終還是計畫加入一個第一方動畫游標,以讓使用者不需要為擁有一個更易追蹤的游標而承擔自訂 shader 的效能開銷,但把它做進自訂 shader 是一個簡單的權宜之計。此外,即使加入第一方動畫游標之後,這仍然有用,因為有些使用者可能仍想要內建選項無法做到的非常特定的自訂效果。

終端機背景影像

PR:#3645

你現在可以用 background-image 設定為終端機指定背景影像。此外還有一組其他設定,讓影像呈現成你喜歡的樣子: background-image-opacity、background-image-position、 background-image-fit 與 background-image-repeat。

Warning

在 Ghostty 1.2.0 中,背景影像會在 VRAM 中為每個終端機複製一份。對足夠大的影像和很多的終端機,這可能導致記憶體用量(具體說是 VRAM)大幅增加。未來版本的 Ghostty 將讓影像紋理在終端機間共享,以迴避該問題。

圖形進度條

PR:#7975 、#8477

Ghostty 現在能識別 ConEmu OSC 9;4 序列並渲染一個 GUI 原生進度條。

據我們所知,Ghostty 是 macOS 上第一個支援該特性的終端模擬器。Linux 與 Windows 上除 Ghostty 外的多個終端已經支援該特性。

進度條可以顯示成功/錯誤狀態、向完成的進度數字、不確定進度(脈衝),等等。Amp 這類程式已經在使用進度條來展示活動,如下所示:

圖形進度條現在被 Windows、Linux 與 macOS 上的多個終端支援,還被 systemd 與 Zig CLI 等主流終端程式支援。我們希望透過這些逐漸成長的終端支援,能讓更多程式開始使用該特性。

今天,Ghostty 在終端機頂部顯示一個簡單、基礎的進度條。在未來版本中,我們會把進度擴充到分頁標題、工作列、Dock 圖示等處。

Note

進度報告 OSC 9;4 序列與 iTerm2 通知序列衝突。Ghostty 是唯一同時支援這兩種序列的模擬器。為了處理這一點,OSC 9;4 總是解析成進度報告,也就是說你不能發送以 ;4 開頭當作通知的任何通知。我們認為這是一個合理的權衡——考慮到極其特定的文字,以及被更廣泛推薦使用的 OSC 777 通知序列。

回退字型大小調整

PR:#7840 、#7953

當為 Ghostty 設定的字型沒有我們需要渲染的字元的字形時,我們會在系統上尋找有該字形的字型。這些字型現在會在尺寸上被調整以更好地匹配主字型。這類似(但不等於)CSS 中的 font-size-adjust。

這有助於補償字型尺寸的差異,營造整體更一致的外觀。這對使用多種書寫系統的使用者特別有幫助——例如,CJK(中日韓)文字現在避免了字元之間出現大的縱向「裂縫」。

Ghostty 1.1.3(舊)Ghostty 1.2.0(新)

上面的例子差異微妙。當一行裡用上多種不同字型時差異更明顯。為確保走的是正路,我們還在社群調查了多位中文讀者的回饋,回饋強烈偏向新的行為。

未來,我們計畫重做字型設定,讓你能按字型各指定尺寸,或讓被設定的字型像回退字型一樣被自動調整。

新增大量內建字形

PR:#7732 、#7755 、#7761

很多新字元現在由 Ghostty 直接繪製,而不是依賴字型提供。我們直接繪製字形,以確保它們與儲存格相互對齊。

下面是新版支援字形的一小部分示例。注意字形沿儲存格邊緣完美對齊,中間沒有空隙。這種像素對齊的渲染對使用此類字形的 TUI 應用程式很重要。

Ghostty 1.1.3(舊)Ghostty 1.2.0(新)

內建 Nerd Font 改進

PR:#7809 及若干修復次要問題的 PR

內建的 Nerd Font 符號現在由一個獨立的 symbols-only 字型提供,而不再是 Regular、Bold、Italic 與 Bold Italic 四種樣式的打過補丁的 JetBrains Mono;內建的 JetBrains Mono 現在使用可變字型而不是 4 個靜態字型。這使 Ghostty 內嵌字型佔用的空間比過去顯著減少。

這也意味著我們現在使用的部分是更新版本的 Nerd Fonts symbols 拷貝,因此較新的符號也能正確渲染。

然而更大的變化是:Ghostty 現在會自動縮放 Nerd Fonts 符號以匹配儲存格大小,與官方 Nerd Fonts patcher 的做法相同——這意味著在 Ghostty 中使用普通未打補丁字型的體驗,應當與之前使用打過補丁字型的體驗幾乎或完全一致。

這意味著在 Ghostty 中現在 沒有理由 使用打過補丁的字型,因為無論哪種方式,powerline 字形都會為儲存格大小正確縮放。

鍵位綁定重構

PR:#7320

基於 W3C key event code 規範,我們重構了鍵位綁定使其更一致。這項工作應當讓鍵位綁定跨作業系統與鍵盤布局更穩定可預測,同時伴隨 可能破壞現有鍵位綁定的重大行為變更。

所有單碼點字元現在匹配鍵盤布局產生的字元(即隨布局變化)。因此 ctrl+c 匹配美式標準鍵盤布局上實體的 "c" 鍵,但在 Dvorak 布局上匹配 "i" 鍵。對國際字元同樣如此。碼點的大小寫不敏感,透過 Unicode 大小寫摺疊匹配(Windows 與 macOS 處理鍵盤快速鍵就是這樣做的)。

所有其他鍵名匹配實體鍵,鍵名按 W3C key codes 命名。例如:ctrl+KeyA 總是匹配美式實體布局上的 "a" 鍵(該 KeyA 鍵名與美式鍵盤對應是規範強制要求的,不是我們定的)。注意這裡的「實體」指 OS 或 GUI 框架傳送的 keycode;「硬體」層級的重映射程式可以覆蓋它,但軟體布局不這樣做。

因此,**physical: 前綴已被移除。**實體 keybinds 現在透過上述多碼點鍵名顯式表示。之前的 physical: keybinds 繼續有效,但應更新為新格式。

為了保證向後相容,Ghostty 中所有不匹配 W3C 的既有鍵名都映射到其 W3C 等價物。例如,grave_accent 映射到 backquote。

終端機鈴聲

PR:#7099 、#5326 、#7087 、#7101 、#7118 、#7148 、#7842 、#7533

macOS 與 GTK 上的 Ghostty 都支援終端機鈴聲(ASCII BEL 或 0x07)。鈴聲響起時 Ghostty 的行為可以用 bell-features 設定定制。我們預設的設定是最不打擾人但仍有效的,可選的更吵設定可以透過 bell-features 開啟。

在 macOS 上,鈴聲預設會把鈴鐺 emoji(🔔)放到終端機的標題裡,Dock 圖示會彈跳一次,並在 Dock 與應用程式切換器裡的 Ghostty 圖示上加上一個徽標。不播放任何聲音。

在 GTK 上,鈴聲預設會把鈴鐺 emoji(🔔)放到終端機的標題裡,並標記視窗為請求關注。「請求關注」的確切行為由視窗管理器或桌面環境決定。不播放任何聲音。

GTK 還支援預設關閉的音訊鈴聲特性,可以用 bell-features=audio 啟用。你甚至可以用 bell-audio-path 設定指定自訂音訊來播放。bell-features=system 特性(預設關閉)會使用「系統提示音」,它通常也可以發聲,透過中央系統設定配置。

GTK 還支援一個邊框閃爍動畫,可以用 bell-features=border 啟用。這類似其他終端模擬器提供的「visual bell」特性。

未來版本的 Ghostty 將把 macOS 帶到所有鈴聲特性上的對等位。

終端模擬相容性

Ghostty 1.2 包含數十項核心終端模擬的改進,以使終端程式在 Ghostty 中的運作方式與在其他終端模擬器中一致且正確。相關變更的完整列表見terminal capabilities一節。

這些改進的範圍從非常小(#7443 ,任何野外已知程式都不使用的序列)到非常重要(#8590 ,破壞了一些真實程式)。無論如何,Ghostty 非常認真地對待終端模擬相容性,我們努力確保 Ghostty 可以支援現存的廣泛的終端特性。

把這件事做對非常說難也難:終端模擬功能中只有極小的子集有正式規範,絕大多數由基於終端模擬器實際行為的事實標準定義。此外,由於不存在單一的標準組織,協定之間經常互相衝突,而我們只能判定哪個協定更重要或如何折中同時支援兩者。

例如,進度條序列與 iTerm2 桌面通知序列衝突。作為折中,任何無歧義的進度條序列優先於通知,因此如果你想發送一條內容恰好是該進度條序列的通知,是不會運作的。這是 Ghostty 為能成為幾乎唯一同時支援進度條與 iTerm2 桌面通知的終端而做出的折中。1

macOS:Tahoe 支援

Ghostty 1.2 增加了對 macOS 26 (Tahoe) 的支援。

在 macOS 26 上執行時,Ghostty 會使用新的 Liquid Glass 風格。應用程式圖示已更新以支援 macOS 26 特性,如淺色、深色、著色等。許多 UI 細節被更新以更好地匹配新的 macOS 風格,例如選單列中的圖示。除視覺支援外,還修復了許多相容性問題。

Ghostty 1.2 與之前的 macOS 版本保持完全相容,向下一直支援到 macOS 13 (Ventura)。

Note

Ghostty 1.1.x 在 macOS 26 上可以執行。由於 macOS SDK 的運作方式,Ghostty 1.1.x 會使用舊的 Tahoe 之前的 UI 樣式。仍存在一些相容性問題,但如果你近期無法升級到 Ghostty 1.2,大體上是可用的。

macOS:復原/重做關閉

PR:#7535

所有關閉終端機的操作現在都支援復原與重做,使用標準的 macOS 鍵位綁定(Cmd+Z 與 Cmd+Shift+Z,可以重新綁定)。這包括關閉分屏、關閉分頁、關閉視窗、關閉所有視窗、關閉其他分頁等。

復原/重做的實現方式是讓最近關閉的終端機繼續保持執行但隱藏,持續一段可設定的時間(預設 5 秒)。在這段時間內,你可以復原關閉,終端機會在與之前相同的位置重新開啟。由於終端機一直在執行,你確切的終端機狀態被恢復。

終端機可以被復原的時長可以用 undo-timeout 設定。

在 Ghostty 的未來版本中,我們計畫支援復原和重做的 GUI 更多互動,包括調整分屏大小、移動分頁等。

macOS:Apple 快捷指令

PR:#7634

macOS 上的 Ghostty 現在與 Apple 快捷指令整合。這使 Ghostty 可以在 macOS 上腳本化,尤其是與非 Ghostty 專屬的快捷指令動作(如截屏、移動視窗等)組合使用時。

Apple Shortcuts 可以綁定到全域快捷鍵、跨裝置同步,等等。這是一個非常強大的工具!

該特性不取代我們未來的完整跨平台 Ghostty API 計畫。這個 macOS 專屬特性確實覆蓋了 macOS 使用者這些用例,但我們仍計畫在未來的版本中建置更多的腳本化選擇。

GTK:Quick Terminal

PR:#4624

quick terminal 現在支援在 Linux 上執行於 Wayland 並可存取廣泛支援的 wlr-layer-shell 協定。quick terminal 已作為特性在 macOS 上自 Ghostty 1.0 起可用。

提醒一下,「quick terminal」是 Ghostty 的特性:一個單例的終端機視窗可以用單個快速鍵顯示與隱藏,快速鍵綁定到 toggle_quick_terminal(通常是一個全域快速鍵,即使 Ghostty 未取得焦點也有效)。這有時也稱為「下拉終端機」或「DOOM 風格終端機」。

Linux 上的 quick terminal 完全支援分頁與分屏。

GTK:全域鍵位綁定

PR:#6051

GTK 應用程式現在支援全域 keybinds——即使 Ghostty 不是聚焦應用程式也能生效的鍵位綁定。這些鍵位綁定在 Ghostty 設定中用 global: 前綴定義。

全域 keybinds 需要系統安裝了功能正常的 XDG desktop portal。Ghostty 的其他部分已經依賴 XDG desktop portal,所以它很可能已經存在。如果沒有,通常只需要安裝一個支援良好的套件(加一次重新啟動)。

全域 keybinds 支援任何鍵位綁定動作,但特別適合與 toggle_quick_terminal 這樣的特性配合後者現在 也在 GTK 上受支援。

GTK:本地化(進行中)

PR:#6004 加上多到難以逐一列舉的各語言貢獻。

初步添加了 GTK 應用程式的本地化支援。目前只有 GTK GUI 元素被翻譯。macOS 與 Ghostty 其他部分的本地化支援將在未來版本中提供。

Ghostty 1.2 對以下語言的 GUI 元素擁有完整的本地化:

  • bg_BG
  • ca_ES
  • de_DE
  • es_AR
  • es_BO
  • fr_FR
  • ga_IE
  • he_IL
  • hu_HU
  • id_ID
  • it_IT
  • ja_JP
  • ko_KR
  • mk_MK
  • nb_NO
  • nl_NL
  • pl_PL
  • pt_BR
  • ru_RU
  • tr_TR
  • uk_UA
  • zh_CN

本地化是各語言的志工完成的。Ghostty 專案極其感謝貢獻時間本地化 Ghostty 的志工們。如果你想為你的語言本地化 Ghostty,請看 CONTRIBUTING.md 文件中的說明。

GTK:FreeBSD 支援

PR:#7606

Ghostty GTK 應用程式現在支援 FreeBSD。這項工作幾乎完全由一位社群成員推動,他做了向我們的所有相依套件提交補丁以支援 FreeBSD、更新建置指令稿、以及協助自動化測試以確保 Ghostty 在 FreeBSD 上持續可用的辛勤工作。

除了 FreeBSD 上正確建置與執行外,社群還在開發一個 FreeBSD port 方便安裝。當那個 port 可用時,我們會更新安裝文件。

GTK:完整且無洩漏的重寫

PR:#7961 、gtk-ng PRs

我們把整個 GTK 應用程式從零開始用完整的 GObject 類型系統重寫了一遍。在這個過程中,我們用 Valgrind 測試了每一個特性,檢查記憶體洩漏、未定義記憶體存取、use-after-free 等問題。

關鍵決策與成果見原始 PR,但結果是一個更穩定、更現代的 GTK 應用程式,對貢獻者來說也更容易維護。

1.1.3 的 GTK 應用程式有一些已知的記憶體洩漏,要求在非常長的執行時間後重新啟動 Ghostty。終端機通常對許多開發者從不會被關閉,且不應有任何應用程式需要重新啟動。GTK 應用程式現在完全穩定,tip 使用者報告連續執行數週沒有問題。

這並不只惠及 GTK 使用者:作為這項工作的成果,我們現在為每次提交在 Valgrind 下執行所有 Ghostty 單元測試(#8309 )。我們超過 90% 的單元測試覆蓋跨平台程式碼,所以這有助於確保整個 Ghostty 更穩定可靠。

Note

Valgrind 只能偵測被實際執行的程式碼路徑中的記憶體問題。我們測試了每一個可能的 GUI 互動,但沒有測試 Ghostty 中每一個可能的程式碼路徑。

系統需求

macOS: Ghostty 1.2 所需的最低 macOS 版本不變(macOS 13 Ventura)。Ghostty 現在與 macOS 26 (Tahoe) 相容。

GTK: Ghostty 1.2 要求 GTK 4.14 與 libadwaita 1.5。這與我們的 GTK/Adwaita 版本政策一致。使用較舊 GTK 或 Adwaita 版本的系統可以透過使用舊版 Ghostty 或社群維護的 snap 或 flatpak 套件繞過該要求。

破壞性變更

  • GTK:現在必須使用 libadwaita。我們自 1.1.0 發行說明起就警告過該變更的到來,動機在前連結中已有充分說明。在做出反應之前請仔細閱讀!我們向社群徵求了回饋並深入討論了這一決定。我們交付了回應這些顧慮的特性,如 SSD 支援、一等 CSS 樣式等。
  • GTK:最低 OpenGL 版本現在是 4.3。這是為提升效能、更容易修復一些渲染 bug 並使 OpenGL 後端更易維護所需。OpenGL 4.3 於 2012 年發行,仍然超過十年前。#7620
  • 附帶主題已更新到 release-20250915-154825-b4500fc。由於主題在上游管理,這可能包括主題重新命名與顏色變更。如果你在 1.1.3 中運作的主題在更新到 1.2 後失效,請檢查關聯的發行驗證主題名。
  • dlig 字型特性現在預設關閉。這可能導致之前運作正常的連字不再運作。該特性一直被正式規定為「discretionary ligature」(選用連字)特性,意味著應當自願啟用。更常見的 calt(上下文連字)特性保持預設開啟。可以用 font-features 設定重新啟用該特性。#8164

棄用

以下列表中的棄用目前透過相容層仍然相容,但如果一直被忽視,未來發行可能被破壞:

  • adw-toolbar-style 重新命名為 gtk-toolbar-style。
  • gtk-tabs-location=hidden 被 window-show-tab-bar=never 取代。
  • selection-invert-fg-bg 被 selection-foreground=cell-background 與 selection-background=cell-foreground 取代。#5219
  • cursor-invert-fg-bg 被 cursor-color=cell-foreground 與 cursor-text=cell-background 取代。#5219

這些棄用沒有固定的移除時間表,但我們建議盡早遷移到新設定,避免未來任何可能的干擾。

Note

上述棄用將在沒有可見警告的情況下繼續運作。我們計畫在未來的發行中擴充 GUI,使其對設定的棄用顯示警告。

完整變更日誌

GitHub 上已關閉議題的完整列表。

在各節中,我們盡量把改進排在 bug 修復之前。

  • -e 的命令不再用 /bin/sh 包裝執行,而是直接執行。#7032

  • 為 macOS 與 GTK 新增命令面板特性,允許執行大多數 keybind 動作即使它們未綁定。#7153 #7156

  • 方向性的 goto_split 在 macOS 與 GTK 上從目前分屏的左上角出發,向該方向導航到最近的分屏。我們稱之為「空間導航」,它帶來更直觀的分屏導航。#574

  • 當多個分屏朝向相同方向時,equalize_splits keybind 動作現在產生更符合預期的較好效果。#7710

  • 新的可選 shell 整合特性 ssh-terminfo 與 ssh-env 改善了在 SSH 上使用 Ghostty 的體驗。#7608

  • 游標資訊現在可用於 custom shaders,使 custom shaders 能做如游標移動的炫酷動畫。#7648

  • 新的 CLI 命令 +edit-config 會在你設定的終端機 $EDITOR 中開啟 Ghostty 設定。#7668

  • 新的 keybind prompt_surface_title 可用來手動更改終端機標題。#2509 #5769

  • 新的 keybind scroll_to_selection 把視口捲動到目前選區的左上角(如果有選區)。#7265

  • 新的 keybind set_font_size 用來設定字型大小。#7795

  • 新的 keybind copy_title_to_clipboard 把目前終端機標題複製到剪貼簿。#7829

  • 新的 keybind close_tabs:other 關閉除目前分頁以外的所有分頁。#8363

  • keybinds write_screen_file、write_scrollback_file 與 write_selection_file 現在支援 copy 作為值,把檔案路徑複製到剪貼簿。#7721

  • config app-notifications 新增值 config-reload(預設開啟),用於控制重新載入設定時是否顯示通知。#8366

  • config:command 值可用 shell: 或 direct: 作前綴,透過 shell(預設)或直接透過 exec 執行命令。#7032

  • config:用 right-click-action = copy 右鍵複製。#4404

  • config:background-image 可用於為終端機設定背景影像。這目前套用於每個終端機,而不是視窗。#3645

  • config:env 可用於指定要在終端機環境中設定的環境變數。#5257

  • config:quick-terminal-size 可用於自訂 quick terminal 的大小。#2384

  • config:font-shaping-break 設定連字應在何時被打破(分裂)。#4515

  • config:新值 cell-foreground 與 cell-background 可與 selection-foreground、selection-background、cursor-color 一起使用,把它們的顏色值設為動態儲存格色。#5219

  • config:新選項 bold-color 用於為粗體指定自訂顏色,使其更易讀。#7168

  • config:新選項 selection-clear-on-typing 用於在輸入時清除選區。#7394

  • config:新選項 link-previews 決定視窗底部的 URL 預覽何時出現。#7831

  • config:新選項 background-opacity-cells 把 background-opacity 設定套用到顯式儲存格背景(例如來自正在執行的程式)。#7913

  • config:新選項 faint-opacity 設定被終端機程式標記為 faint 的儲存格所用的不透明度。#8472

  • config:新選項 right-click-action 可設定點選滑鼠右鍵時的行為。#8254

  • cli:在 +list-themes 中按 enter 現在會顯示關於如何設定主題的說明文字。#4731

  • cli:+list-themes 現在有旗標可以過濾淺色與深色主題。#7235

  • cli:向 +list-themes 新增主題過濾。#8082

  • cli:+list-colors 在十六進制碼之外還顯示顏色。#8393

  • custom shaders 現在可以在執行時重新載入。#7620

  • custom shaders 與背景色正確混合。#7620

  • 在點選時把滑鼠懸停在視窗上方或下方,現在會捲動視口,而無需抖動滑鼠。#4422

  • shell-integration:現在用單個 GHOSTTY_SHELL_INTEGRATION_FEATURES 環境變數來指定啟用的特性,而不是多個環境變數。#6871

  • shell-integration/elvish:OSC 7 報告改用 kitty-shell-cwd:// 方案,因此我們不必編碼它。#7033

  • 分屏與分頁導航的 keybinds,如 goto_split 與 next_tab,支援 performable。#7680

  • font:改進用於快取的字形雜湊效能,在合成壓力測試中加快約 5%。#7677

  • 修復特定 font-family 旗標傳給 CLI 時可能發生的當機。#7481

  • 設定 adjust-cursor-thickness 現在與 cursor-style=underline 一起運作。#7732

  • 解決在輸入 preedit 文字(例如使用輸入法時)時按 backspace 的問題。#5728

  • config:keybind=(空值)還原預設鍵位綁定,行為類似其他 <key>= 空值。#5936

  • config:palette 設定現在支援調色板編號與顏色之間的空白。#5921

  • config:所有接受顏色列表的設定(如 macos-icon-ghost-color)支援逗號後有空格。#5918

  • copy_url_to_clipboard keybind 動作與 OSC 8 超連結配合正確。#7499

  • font:回退字型大小被自動調整,使視覺上更接近主字型大小。#7840

  • font:支援新 sprite:U+1CC00 到 U+1CCFF、U+1CE00 到 U+1CEFF、U+2500 到 U+25FF、U+1CE00 到 U+1CEFF、U+1FB00 到 U+1FBFF。#7755 #7761

  • font:U+25E4 與 U+25E2(幾何形狀)現在用內建 sprite 字型點陣化。#3344

  • font:幾何形狀的角部現在用內建 sprite 字型點陣化。#7562

  • font:字形約束邏輯大幅改進,使 Nerd Font 圖示等顯示更正確。#7809

  • input:對支援的鍵盤,copy 與 paste 實體鍵現在分別預設綁定到 copy_to_clipboard 與 paste_from_clipboard。#8586

  • input:預設的 copy_to_clipboard 綁定被標記為 performable,意味著如果沒有可複製的文字,按鍵會被編碼到 pty。這允許 TUI 捕獲它。#8504

  • input:滑鼠滾輪到滑鼠事件的映射被修改為更好地匹配其他終端模擬器。#6052

  • input:ctrl+<ASCII> 在更廣泛的鍵盤布局上有效。#7309

  • input:點選時拖動滑鼠會取消任何滑鼠連結動作。#7080

  • input:goto_tab 綁定現在預設綁定到實體與邏輯數字鍵兩者,以適配更多鍵盤布局。#8486

  • renderer:改善快取字形查找效能的微最佳化。#8536

  • 優雅處理啟動終端機命令時 exec 系統呼叫失敗的情況。#7793

  • 「無法啟動行程」的錯誤訊息現在不能透過按下修飾鍵解除。#7794

  • 修復矩形選取左上角或右下角在視口外時的渲染問題。#7692

  • 修復 octant 渲染的一些捨入錯誤,它們曾導致在某些場景中 octant 不能對齊。#7479

  • 修復一些滑鼠選區邏輯,它們有時導致 Ghostty 錯誤地多選一行或一個字元。#7444

  • 修復檔案路徑正規表示式,要求至少有一個斜線。#7355

  • 修復在特定位置回字形帶有間隔符時可能發生的當機。#7537

  • 使用 Kitty 影像協定渲染的影像現在使用正確的 gamma 混合。#7368

  • 修復視口指標越界時縮小可能當機的場景。#7899

  • 修復記憶體頁面的超連結空間被耗盡時可能發生的當機。#8009

  • 修復首幀渲染的未定義記憶體存取。#7982

  • 修復按住修飾鍵搜尋連結時發生的記憶體洩漏。#7998

  • 修復點陣分配器正好分配了 64 個區塊時的當機。#8276

  • 修復字型圖集錯誤路徑中可能的 use-after-free。沒有已知野外會觸發的案例。#8249

  • 修復一些內部 OOM 情況下可能的當機,這些情況下後備緩衝區的擴充未被正確實現。#8277

  • 修復 OSC 解析器中可能導致當機的未定義記憶體存取。#8307

  • 修復 Kitty 影像 z-index 的問題。#7671

  • shell-integration/bash:不再依賴有效的 GHOSTTY_RESOURCES_DIR 環境變數。#7611

  • shell-integration/bash:修復可能列印出垃圾字元的場景。#7802

  • shell-integration/bash:更可靠地保留已有環境。#7908

  • 不在 OSC 7 路徑報告中解析符號連結。#7773

  • 附帶主題更新到 release-20250915-154825-b4500fc。這可能重新命名已有主題。如果你的主題失效,請檢查主題是否被重新命名。重新命名在上游完成,我們無法規避。

  • inspector:修復小數像素尺寸的顯示。#8179

  • contrib/vim:修復 scratch 緩衝區中設定的語法高亮。#7119

終端機能力

本節涵蓋終端模擬的變化與暴露給在終端機內執行的應用程式的其他能力。

Ghostty 依舊聚焦於終端模擬器相容性,因此 Ghostty 1.2 中的變更只是增加或改進與其他終端模擬器特性的相容性。在 Ghostty 的未來版本中,我們計畫添加新的 Ghostty 專屬特性,供應用程式開發者利用。

  • vt:新增對 mode 47 的支援。#7443

  • vt:新增對 mode 1048 的支援。#7473

  • vt:解析更多 ConEmu OSC 9 序列。Ghostty 回應的 ConEmu OSC 9 序列只有 9;4 進度條序列。其餘被解析但忽略。#8410

  • vt:色彩操作與 xterm 的特性支援與相容性顯著改進。其中包括 OSC 4、5、10-19、104、105、110-119。除了支援新的序列,對已支援的顏色操作的相容性做了修正。#8590

  • vt:在 primary DA 報告中顯示 OSC 52 的支援。#7725

  • vt:OSC 4/104 允許多個顏色規範。#7402

  • vt:允許 SGR 序列最多包含 24 個參數,修復了一些 Kakoune 主題。#8417

  • vt:OSC 52 可以透過傳送空字串清空目前剪貼簿。#8018

  • vt:XTGETTCAP 對小寫十六進位字元正常運作。#7229

  • vt:Kitty 影像協定支援按範圍刪除。#5957

  • vt:修復某些使用 Kitty 影像協定的影像的高寬比問題。#6673

  • vt:Kitty 影像協定接受無控制資料的命令。#7023

  • vt:不強制 Kitty 影像對齊網格。#7367

  • vt:修復 mode 47、1047、1049 備用螢幕的邊緣情況,以更好地匹配 xterm。我不知道有真實程式觸發這些 bug,但這是好的衛生習慣。#7471

  • vt:在普通屏與 alternate screen 之間切換時清除超連結狀態。#7471

  • vt:ctrl+esc 現在產生恰當的 Kitty 鍵盤編碼。#7000

  • vt:index(\n)操作在特定邊緣情況下清除正確的行。這修復了某些場景中 vim 狀態列的錯亂。#7093

  • vt:點選一個未聚焦的視窗不再編碼為滑鼠事件。#2595

  • vt:修復某些不完整跳脫序列的未定義記憶體存取。#8007

  • vt:OSC 9 通知可以包含單字元訊息。#8396

  • vt:當 VS15 使預設寬字元變窄時,游標向回移動一格。#8538

macOS

  • macOS:支援 macOS 26 (Tahoe)

  • macOS:你現在可以復原與重做關閉任何類型的終端機(視窗、分頁或分屏)。我們把最近關閉的終端機保留在記憶體中一段可設定的時長(預設 10 秒),這樣不小心關掉也能恢復。#7535

  • macOS:唯讀的 Accessibility API 整合允許螢幕閱讀器讀取 Ghostty 的結構與內容。AI 軟體讀取 Ghostty 的內容也受益於這一點。這需要協助工具權限,所以它是選擇採用的。#7601

  • macOS:與 App Intents 的整合使 Ghostty 可以用 Apple Shortcuts 自動化。#7634

  • macOS:響鈴實現。預設情況下,鈴聲會讓 Dock 圖示彈跳並在標題中放置鈴鐺 emoji。終端機被聚焦或有任何輸入時會被清除。鈴聲不發出任何聲音。這些都可以用 bell-features 停用。#7099

  • macOS:從 Finder 執行或拖入 Dock 的腳本現在透過登入 shell 執行並向 stdin 傳送 <filepath>; exit。這類似內建 Terminal 及其他終端載入你的登入腳本的方式。#7647

  • macOS:自訂圖示現在在 Ghostty 未執行時被持久化。#8230

  • macOS:為 OSC 9;4 進度條序列顯示原生 GUI 進度條。#8477

  • macOS:新增 bring_all_to_front keybind 動作,把所有 Ghostty 視窗帶到前景。#4704

  • macOS:新增 reset_window_size keybind 動作,把視窗大小重設為初始尺寸。#6038

  • macOS:新增 check_for_update keybind 動作。#7235

  • macOS:新增「回到預設大小」選單項目。#1328

  • macOS:macos-hidden 設定會把 Ghostty 從 Dock 與分頁選單隱藏。#4538

  • macOS:點選連結現在使用 NSWorkspace API 而非 open 命令。這保留了來源應用程式(Ghostty),使其他程式可以用它來按需調整行為。#5256

  • macOS:新設定 macos-window-buttons 用於隱藏紅綠燈按鈕。#7504

  • macOS:現有 macos-non-native-fullscreen 設定的新選項 padded-notch,把非原生全螢幕視窗放到瀏海下方,同時仍隱藏選單列。#5750

  • macOS:新的 keybind 動作與選單項目 toggle_window_float_on_top,讓特定視窗在非聚焦時也始終懸浮於其他視窗之上。#7237

  • macOS:均分分屏現在在 quick terminal 中有效。#7480

  • macOS:quick-terminal-position=center 現在支援調整大小時保持中心位置。#8398

  • macOS:從 Finder 執行或拖到 Dock 的腳本總是需要手動確認才執行。#8442

  • macOS:分屏的 zoom 按鈕現在在標題列分頁和單一分頁時也可見。#7502

  • macOS:window-save-state 現在儲存終端機標題。#7938

  • macOS:Cmd+h(macOS 隱藏視窗)在嘗試隱藏最後一個可見視窗時不再傳送 h。#5929

  • macOS:maximize 設定現在在 macOS 上運作。#5928

  • macOS:按鍵輸入處理速度提高約 10 倍。#7121

  • macOS:點選紅綠燈時區分關閉分頁與關閉視窗。#7618

  • macOS:設定 macos-titlebar-style=tabs 時標題文字垂直置中。#5777

  • macOS:透過 CLI 啟動的 Ghostty 現在會到前景。#8546

  • macOS:切換非原生全螢幕時,焦點不再跳到第一個分屏。#6999

  • macOS:cmd+. 現在可以綁定。#6909

  • macOS:被約束到終端機儲存格的字型字形現在顯示得更清晰。#6914

  • macOS:close_window keybind 動作現在可用。#7003

  • macOS:quick terminal 在全螢幕 space 上可以更可靠地出現與消失。#7070

  • macOS:從視窗左邊界以外的選取不再向上捲動一行。#7071

  • macOS:用 macos-titlebar-style=hidden 新建的視窗現在像其他視窗一樣級聯位置。#7567

  • macOS: 不帶文字卻清掉 preedit 的按鍵輸入不應編碼到 pty。#7226

  • macOS:鍵盤快速鍵現在與 macOS 的「Dvorak - QWERTY ⌘」布局正確契合。#7315

  • macOS:對小數滑鼠捲動事件向上取整,使帶滾輪滑鼠感覺更實用。#7185

  • macOS:選單列中現在提供了所有分屏方向與內容選單。#5807

  • macOS:用 OSC 7 設定 pwd 現在能在 macOS 的「Private Wi-Fi Address」特性下運作。#7029

  • macOS:重新調整大小懸浮層現在使用與語言無關的 w x h 格式並省略單位。#7142

  • macOS:「Services -> New Ghostty Window/Tab Here」現在支援檔案。#7286

  • macOS:使用非原生全螢幕時可靠地保留焦點。#7279

  • macOS:聽寫現在即時串流待定文字。#8490

  • macOS:聽寫圖示正確顯示語言選擇器。#8490

  • macOS:聽寫圖示隨文字流正確移動。#8490

  • macOS:修復持久保留最近關閉的表面記憶體的記憶體洩漏(每次只有一個)。#7507

  • macOS:修復未能釋放 CoreText 字型特性導致的記憶體洩漏。#7770

  • macOS:修復回退發現 font descriptors 的記憶體洩漏。#7770

  • macOS:修復 ObjC 區塊的記憶體洩漏。#7770

  • macOS:修復同時設定非原生全螢幕與 fullscreen = true 時可能發生的當機。#7277

  • macOS:如果設定 title,標題會在載入時立刻設定到視窗上,讓視窗管理器更早看到標題。#6056

  • macOS:按下 cmd 的按鍵不被傳統鍵編碼(legacy key encoding)。#6057

  • macOS:在 quick terminal 中任何方式調用 new_tab 都會顯示友好的錯誤,而不是新建視窗。quick terminal 中的分頁將在未來版本中支援。#5939

  • macOS:關閉非原生全螢幕視窗時會正確恢復選單列。#7525

  • macOS:視窗取得焦點時自動清除任何通知。#7531

  • macOS:視窗關閉時自動清除任何通知。#7531

  • macOS:已聚焦視窗的通知幾秒後會自動清除。#7531

  • font/coretext:改進字型搜尋排序使其更一致。#7483

  • man pages 現在提及 macOS 特有的設定路徑。#5938

GTK(Linux、FreeBSD)

  • GTK:支援 FreeBSD。這項工作全部由一位社群成員推動,我們非常感謝他們的貢獻。#7606

  • GTK:風格上能匹配更廣泛桌面環境的新圖示。由於 Linux/BSD 生態的多樣性,這永遠不會完美,但新圖示是很大的進步,使應用程式不那麼 macOS 中心。#8038

  • GTK:透過向 Ghostty 傳送 SIGUSR2 可以重新載入設定。#7759

  • GTK:新的 gtk-titlebar-style=tabs 把分頁放到視窗的標題列中。#8166

  • GTK:quick terminal 現在可以在 Linux 上以 Wayland 與 wlr-layer-shell 協定運作。#4624

  • GTK:global: keybinds 現在只要 XDG desktop portal 可用(幾乎所有桌面環境)就能運作。#6051

  • GTK:為 OSC 9;4 進度條序列(如 systemd 發出的那些)顯示原生 GUI 進度條。#7975

  • GTK:音訊鈴聲支援(預設關閉)可以用 bell-features=audio 並設定 bell-audio-path 與 bell-audio-volume 來啟用。#5326

  • GTK:安裝 DBus 與 systemd 啟動服務以加快啟動。#7433

  • GTK:OpenGL 渲染器現在支援線性混合,顏色混合更正確。#7620

  • GTK:註冊 X-KDE-Shortcut 鍵,使 KDE 上可以註冊快速鍵開啟 Ghostty。#7673

  • GTK:在 Linux 上對 async API 在 io_uring 與 epoll 之間動態選擇。此前硬編碼為 io_uring,只有 epoll 的系統必須從原始碼建置。#5916

  • GTK:新設定 async-backend 可設為 epoll,在 Linux 上強制使用 epoll 而不是 io_uring。這在 iowait 報告有問題的核心上很有用。#5916

  • GTK:新設定 window-show-tab-bar 自訂分頁列何時可見。#5590

  • GTK:新設定 quick-terminal-keyboard-interactivity 專門為 Wayland 自訂鍵盤互動設定。#7477

  • GTK:新 keybind 動作 show_gtk_inspector 顯示 GTK inspector,因為終端 keybinds 通常會蓋掉 GTK 的預設綁定。#7468

  • GTK:新分頁按鈕現在有了可以新建分屏的下拉選單。#7127

  • GTK:剪貼簿確認對話框中加入「記住選擇」開關。#6783

  • GTK:當命令異常退出或設定 wait-after-command 時,顯示新的原生 GUI 元素。#7836

  • GTK:支援螢幕鍵盤。#7987

  • GTK:如果 title 被設定,視窗在初始化時立即具有標題,而不是在表面初始化之後。這讓視窗管理器能夠讀取並使用它。#8535

  • GTK:OpenGL 渲染器初始化失敗時顯示原生 GUI 元素,而不是空白視窗。#8390

  • GTK:把檔案路徑拖到終端機時跳脫 ( 與 )。#6922

  • GTK:copy-on-select=clipboard 在選取時不再造成 toast 刷屏。只有當滑鼠釋放時才複製。#4800

  • GTK:所有分屏方向現在都可從選單列和內容選單中使用。#5779

  • GTK:對 wait-after-command 不請求關閉確認。#7500

  • GTK:使用 server-side decorations 時,移除導致視窗有可見邊框的 solid-csd CSS 類別。#8127

  • GTK:修復最後一個分頁關閉後視窗有時變空且不關閉的問題。#5837

  • GTK:resize 懸浮層現在使用與語言無關的 w x h 格式並省略單位。#6013

  • GTK:關閉時正確清理表面 cgroup。#6766

  • GTK:降低 OpenGL 調整大小時的閃爍/拉伸。#7155

  • GTK:在更多安裝環境中偵測 GHOSTTY_RESOURCES_DIR。#6814

  • GTK:修復 xdg-open 呼叫會留下 defunct 行程的情況。#7657

  • GTK/X11:修復使用 > 200% 縮放時的模糊區域。#6978

  • font/freetype: 現在支援真正的點陣字型。#8512

  • font/freetype: 修復使用沒有 SFNT 表的字型時可能發生的當機。#8483

  • font/freetype: 載入 SVG 字形時報錯,因為反正不支援它們。#6824

  • font/freetype: 修復罕見場景中資料競態可能造成的當機。#7238

  • font/freetype: 把更多非 UTF-8 編碼的字型名轉換為 UTF-8。#8204

  • packaging: 實驗性 snap 打包現在在 CI 中被測試。發佈的 snap 影像目前由外部維護者維護。#3931

面向套件維護者的變更

  • 我們現在產生帶一些預先處理檔案的原始碼 tarball,這是許多原始碼 tarball 的常見做法(例如把 parser .y 轉換為 .c)。對 Ghostty,我們把 Blueprint ui 轉換為 xml 檔案,還有翻譯與 GTK 資源檔案。這使 Ghostty 可以在舊平台上、沒有較新建置工具的情況下建置。打包者應當使用原始碼 tarball,而不是 Git checkout。PACKAGING.md 文件已更新加入該資訊。 #6800

  • GLFW apprt 已被刪除。它從來不是受支援的 apprt,只用於開發與測試。我們在 PACKAGING.md 文件中警告過不要打包 GLFW。現在我們不再需要它做開發或測試,因此被刪除。#7815

  • 「tip」發行不會以相同的 commit 覆蓋之前已發佈的 tip。這保證了 checksum 在發行被剪出後保持穩定。對提供 tip 套件的打包者,這應改善安全性與工具鏈相容性。tip 發行一直都有簽署。#8549

Flatpak/Snap 更新

Ghostty 1.2 現在自帶建置 Flatpak 與 Snap 的設定。我們為每次提交在 CI 中測試,並努力保持 Ghostty 可透過這些散布方式運作。不過,我們還未官方提供或維護 Flatpak 或 Snap 套件。

這是重大進展:Ghostty 1.1.x 不打補丁時完全無法作為 Flatpak 或 Snap 套件運作,官方專案也從未承諾維護這些套件。現在,我們至少在這些平台上建置並測試,雖然仍未達到官方散布。

官方散布的兩大阻力是維護者的興趣與散布自動化。Ghostty 目前的維護者沒有任何人是 Snap 或 Flatpak 建置的主力維護者,我們對長期維護這些套件的能力沒有信心。如果你有興趣幫助維護 Ghostty 的 Flatpak 或 Snap 套件,請加入 Discord 並在 #packaging 給我們傳訊息。

路線圖

Ghostty 1.3 將繼續聚焦於透過交付其他流行終端模擬器對等所需的最後幾個主要缺失特性,使 Ghostty 成為 "best existing terminal emulator"。也就是說,我們計畫至少為 1.3 交付回捲搜尋與捲軸。2

Ghostty 1.3 的主要焦點將是桌面應用程式特性(回捲搜尋與捲軸屬於其中)。Ghostty 的核心終端模擬特性已經證明非常豐富與穩定。不過,我們計畫繼續擴充 VT 特性支援,例如採用其他人在近期發佈到生態中的新實驗協定。

回應常見的請求:Windows 與 作為獨立函式庫的 libghostty 沒有列入 Ghostty 1.3 的計畫。它們仍是長期路線圖的一部分,但我們想先聚焦現有平台與桌面應用程式。

遷移到三月/九月的發行週期

Ghostty 將轉向 major/minor 發行每 6 個月一次的節奏,下一個 minor 發行(1.3.0)計畫在 2026 年 3 月。三月/九月的發行週期能很好地與許多主流 Linux 發行版及 macOS 對齊。修補發行(如 1.2.1)將按需要無定期地發佈。

這對現代應用程式是相對較長的發行週期,但它讓開發團隊聚焦於大型、有影響的功能,並有足夠時間在 tip 發行中穩定。對打包者,這避免了頻繁打包新發行的折騰。與主流 OS 發行對齊也讓我們能確保重大發行在新 OS 版本上良好運作。

對想要更頻繁更新的使用者,我們推薦在 macOS 上使用 tip release 通道,或在 Linux 上頻繁地從原始碼建置。我們有數千名 nightly 使用者(感謝測試!),整個維護團隊都在努力保持 tip 發行穩定。在整個 1.1 到 1.2 的開發週期中,我想不起來 tip 發行因日常使用而損壞的任何一次。

Footnotes

  1. 我沒有做全面調查,但我找不到任何其他支援 OSC 9 通知、OSC 777 通知 並且 OSC 9;4 進度條的終端模擬器。 ↩

  2. 這裡的「對等」是以寬鬆的含義使用的,指其他終端模擬器最流行、最常被使用的特性的一種對等。有一些長尾特性我們可能永遠不會完全實現(我們的特性對它們來說亦然)。 ↩