Ghostty 1.1.0
Ghostty 1.1.0 的發行說明,發佈於 2025 年 1 月 30 日。
Ghostty 1.1.0 由 84 位貢獻者 在 564 個提交 中完成,歷時1 個月。本次發行的重點仍然是基於對 1.0 初次發行的回饋,修復關鍵 bug 與提升日常體驗。
- GHSA-98wc-794w-gjx3。修復了 Ghostty 會向執行中的 shell 或命令洩漏某些檔案描述符的問題。
尤其在 Linux 上,視窗裝飾有各式各樣的樣式與行為。Ghostty 之前的行為是總是使用用戶端裝飾(CSD),這讓 Ghostty 看起來太像一個 "GNOME" 應用程式。特別是 Ghostty 在 KDE Plasma 等流行桌面環境下顯得格格不入。
Ghostty 1.1 在 Linux 上現在為支援 SSD 的合成器提供伺服器端裝飾(SSD)支援。這使 Ghostty 在更多種桌面環境上的觀感與體驗更接近原生應用程式。如果你偏好 CSD 或完全不要裝飾,可以停用它。
(左/上:舊的用戶端裝飾;右/下:新的伺服器端裝飾)
window-decoration 設定選項現在有了新值 auto:當合成器支援且偏好 SSD 時會使用 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 支援,這個變通辦法不再必要。詳見獻詞一節。
PR:#3567、#4332、#4539、#4854、#4933、#4999
對 macOS 與 Linux,我們用以下範式測試了 IME:CJK(中日韓)、死鍵(如重音字元)、emoji、Unicode 十六進制輸入等,並大幅提升了 IME 輸入的可靠性與一致性。
在 Linux 上,我們在 X11 與 Wayland 下都測試了 fcitx 和 ibus。我們還測試了多個版本(尤其是在 LTS 發行版中常見的版本)。我們發現了 ibus 1.5.29 中一個導致死鍵輸入「卡住」的 bug,並做了規避。
在 macOS 上,我們特別確保 AquaSKK 與 macSKK 日語輸入法開箱即用,儘管我們也測試了其他 IME 並發現它們同樣運作良好。
PR:#4328
Keybinds 支援新的 performable: 前綴。該前綴表示只有在動作被執行時該鍵位綁定才消耗輸入。
例如,下面的鍵位綁定只會在有可複製文字時消耗 ctrl+c。否則,ctrl+c 會傳給 shell(通常產生中斷訊號)。
keybind = performable:ctrl+c=copy_to_clipboard
Note
並非所有動作都支援
performable:。具體而言,許多動作總是被執行(如text、new_tab等)。performable 前綴只適用於有意義的「執行」狀態的動作。
Alpha 混合是確定半透明前景色置於背景色前時的結果的過程。它影響文字邊緣以及含透明度(帶 Kitty Graphic Protocol 顯示)的任何影像。
此前,這是在 sRGB 色彩空間中混合顏色來執行的,當前景色與背景色是不同的高飽和度顏色時,會導致文字邊緣變暗。macOS 上的 Ghostty 1.1 現在預設在 P3 色彩空間中執行 alpha 混合,得益於更寬的色域,削弱了變暗問題,並匹配 Terminal.app 與 TextEdit 等原生 macOS 應用程式的外觀。
另外,新增了一個設定 alpha-blending 來控制這一點。預設是 native(如上所述),但還有兩個選項可用:
linear在線性色彩空間中執行混合,這在技術上更正確,但缺點數值化明顯,如深色文字顯得太細、淺色文字顯得太粗。linear-corrected類似linear但對文字套用一個校正步驟,使其觀感極其接近native,卻沒有任何變暗問題。
下面你可以(從左到右)對比舊混合、新的 native 混合、linear 混合與 linear-corrected 混合。你可能需要放大才能正確看到差異。




這目前只在 macOS 上可用,但相關的工作正在進行,將來也會帶到 Linux。
quick terminal 現在可以在原生全螢幕視窗下運作,支援 quick terminal 開啟時的 space 切換、IME 小工具、左/右停靠等。
新增了設定 quick-terminal-space-behavior 來控制 quick terminal 開啟時如何回應 macOS space 的切換。預設行為是跟隨活動 space(move)。你也可以設為 remain 來停留在它被開啟的 space 上。
在各節中,我們盡量把改進排在 bug 修復之前。
- 為鍵位綁定新增
performable:前綴,只在動作被執行時才消耗輸入。見"Performable" 鍵位綁定。#4328 shell-integration-features現在即使停用了shell-integration也會設定正確的環境變數。這對手動 source shell 整合的環境很有用。#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設定選項現在允許二進位、八進位與十六進位鍵。#4298goto_splitkeybind 參數top與bottom分別更名為up與down。舊名稱為保證向後相容仍被支援。#3427- bash:用
\w代替$PWD來產生縮寫標題。#4656 - bash:去掉對
sed的依賴,顯著降低了每個提示符的開銷。#5141、#5142 - fish:修復 sudo 整合。#5276
- 修復
wait-after-command啟用時 CPU 空轉 100% 的場景。#4884 - 修復渲染器網格大小與終端機網格大小不匹配時可能發生的記憶體損毀競態條件。#5265
- 三擊並拖曳現在可以在空行上開始時運作。#5068
- 當命令列換行時,
super+triple-click能正確選取命令輸出。#5373 - vt:修復 Kitty 影像協定不正確的 alpha 混合。#5189
- vt:對 SGR 序列中混合使用分號與冒號更穩健、更正確的處理。實際上修復了 Kakoune 編輯器中的一些樣式問題。#5022
cursor-invert-fg-bg選項現在與反轉 VT 序列配合良好。#4777- 在執行 shell 前從環境移除
VTE_VERSION。這修復了 VTE 的 shell 整合誤以為 Ghostty 基於 libvte 的問題。#4710 - 修復不允許初始視窗尺寸小於
640x480的問題。#4688 - vt:ConEmu OSC
9;4解析更貼合 ConEmu 邏輯,修復了某些 systemd 版本的問題。#4727 unbindkeybind 動作現在也會解綁任何匹配的物理映射。#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 中間位元組現在對所有支援的 CSI 序列進行驗證。#3122
clear_screen鍵位綁定後選取文字不再殘留。#3414- 檔案路徑中的波浪號(
~)現在在路徑類型設定值中會展開為使用者主目錄。#3328 - 快取資料現在尊重
XDG_CACHE_HOME。#3458 - 即使父目錄不存在,預設設定檔現在也會建立。#4295
- Inspector:字型大小現在顯示小數值。#4371
- macOS:一致且正確的 alpha 混合以獲得正確色彩。包含匹配 Apple 風格 alpha 混合的選項,以及我們認為在某些前景/背景色組合下效果更好的實驗性“線性”混合模式。見macOS Alpha 混合改進。#4913
- macOS:新設定選項
quick-terminal-space-behavior用於設定 quick terminal 開啟時如何回應 macOS space 的切換。預設行為是跟隨活動 space(保持開啟)。#4049 - macOS:現在支援選區剪貼簿。
copy-on-select選項在 macOS 上現在預設為 true。macOS 上新增了“Paste Selection”選單項目。此行為與 Terminal.app 一致。#4733 - macOS:為預設視窗標題引入一個非常短的延遲,以避免新表面出現 FOUC(“unknown content 的閃爍”)。#4799
- macOS:
font-thicken現在接受可選的數值來調整加粗因子。#4531 - macOS:顯式的 Ghostty 鍵位綁定現在優先於系統鍵位綁定(例如
cmd+h現在可以綁定)。#4591 - macOS:非布林
font-feature值(如cv02 = 2)現在受支援。#3128 - macOS:快取資料現在使用 macOS 系統 API 儲存到系統設定的快取目錄(通常是
~/Library/Caches)。#3458 - macOS:如果 quick terminal 會與 Dock 重疊,則自動隱藏 Dock。#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:quick terminal 不再覆蓋 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:quick terminal 現在能正確覆蓋原生全螢幕視窗。#4049
- macOS:新增了更多可由子行程觸發的 macOS 系統權限請求的字串(如藍牙存取)。#4668
- macOS:沒有任何視窗時,
new_tab鍵位綁定會建立一個新視窗。#4691 - macOS:修復阻止
NSWindow在關閉時被釋放的引用循環。#4689 - macOS:預先編輯文字在按下修飾鍵時不再消失。#4634
- macOS:AquaSKK/macSKK 日語輸入法現在可以運作。#4539
- macOS:quick terminal 現在在特定多顯示器設定下出現在正確位置。#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
-
GTK:新增伺服器端裝飾(SSD)支援。它使用現有的
window-decoration設定選項。新值auto在合成器支援且偏好 SSD 時使用 SSD。值server會強制 SSD(如果可用)。值client會強制用戶端裝飾。而值none會完全停用裝飾。見Linux 上的伺服器端裝飾(SSD)。#4630 -
GTK(X11):對任何尊重
_KDE_NET_WM_BLUR_BEHIND_REGIONatom 的視窗管理器,background-blur現在受支援。#4403 -
GTK(Wayland):對任何支援
org_kde_kwin_blur_manager協定(即 KDE)的合成器,background-blur現在受支援。#4403 -
GTK:新設定
app-notifications用於控制在何時顯示 toast。#4460 -
GTK:現在支援多個
custom-shader值(與 macOS 一致)。#5037 -
GTK:新增設定選項
gtk-titlebar-hide-when-maximized(預設 false),用於在視窗最大化(非全螢幕)時隱藏標題欄。#3381 -
GTK:Ghostty 現在可以在支援的桌面環境上的 Dock 或工作管理員中被釘選。#4930
-
GTK:拖放檔案與選取文字現在可用,並與 macOS 一致。#4211
-
Nautilus 的「Open in Ghostty」捷徑現在可用。#4816
-
GTK:修復某些舊版 libadwaita 中 adwaita 分頁列出現在標題欄上方的問題。#5410
-
GTK:修復 XDG desktop portal 不可用時的啟動緩慢問題。#5064
-
GTK:
fcitx與ibus在 X11 與 Wayland 下都能運作。#4332 -
GTK:規避
ibus1.5.29 中導致死鍵輸入「卡住」的 bug。#3567 -
GTK(X11):當新視窗初始即最大化時,正確設定
_NET_WM_STATEatom,使標題欄正確反映最大化狀態。#4646 -
GTK:
last_tabkeybind 動作可用。#5004 -
GTK:視窗全螢幕時標題欄自動隱藏(視窗退出全螢幕時恢復)。#5008
-
GTK:設定了
mouse-hide-while-typing時,標題變更不再使滑鼠出現。#3345 -
GTK:修復舊版 libadwaita 下使用
ctrl+d退出視窗時的段錯誤。#4971 -
GTK:確保關閉確認在更多場景中出現,如點按分頁列中的「X」。#4234
-
GTK:OpenGL 除錯日誌在 release 建置中預設停用,但可以設定重新開啟。#4662
-
GTK:啟用 libadwaita 的視窗現在可以比 482x322 更小。#4836
-
GTK:修復了若干把編譯期版本檢查當作執行時檢查的情況,避免在我們不希望時停用行為。#4783
-
GTK:
window-title-font-family現在可用(此前為 macOS 獨有)。#4560 -
GTK:選單分隔線顏色現在匹配系統主題。#4421
-
GTK:修復小數縮放的問題。終端機現在在帶小數縮放的 GTK 顯示器上應顯得清晰。#4255
-
GTK:新設定
gtk-custom-css允許載入自訂 CSS 來定制 GTK 元素的主題。#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可用於控制二進位剝離。此前我們自動剝離 release 二進位。現在可設定。#3945 - Build:
-Dsentry可用於顯式啟用或停用 Sentry。Linux 建置預設停用 Sentry,macOS 建置預設啟用。Sentry 只在本機收集當機日誌,不會透過網路傳輸。#3934 - Build:Terminfo/Termcap 原始碼不再預設安裝。注意 編譯後的 版本仍被正確安裝,所以 terminfo 仍可用。建置旗標
-Demit-terminfo與-Demit-termcap可用於輸出原始碼檔案。#5311 - Build:修復錯誤的 libadwaita pkg-config 名稱。#4818
我們計劃發行 1.1.1 版本以解決一些沒趕上 1.1.0 發行的 bug。我們不指望該發行很快發生,除非有重大問題或回退被提出。因此,我們建議所有套件管理者盡快升級到 1.1.0。
下一個發行的重點將是繼續解決某些鍵盤布局的問題,以及 macOS 上 window-step-resize 的一些根本性問題。如果出現意外的貢獻者(謝謝!),也可能會加入計劃外的功能。
自從我們初次 1.0 發行以來,我們正在達到普遍的大規模穩定性。我預計很快我們將轉向更長的發行週期(數月長度),讓開發團隊專注於更大、更有影響的功能。
從 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-custom-css 選項,可輕鬆注入自訂 CSS 來定制 GTK 元素的主題。我們還為各 GTK 小工具引入了更容易定位的類名。你始終可以用系統層級 CSS 來定制 Ghostty 的主題,但這個新選項使測試與套用 Ghostty 專屬的自訂 CSS 更容易。
對於 Ghostty 維護者,同時維護「經典 GTK」與「libadwaita」兩條程式碼路徑是很大的負擔,尤其還要承受 GTK 與 Adwaita 不同版本間的行為差異以及各種 Ghostty 設定(所有 gtk- 與 adw- 前綴的選項)之間的複雜互動。這導致了許多 bug 與回退,沒有昂貴而複雜的 CI 設定很難修復與測試。
隨著 Ghostty 1.1 的 SSD 支援與 gtk-adwaita = false 的主要用例不再必要,我們相信現在是做出這一改變的好時機。我們相信這將帶來一個更穩定、更易維護、特性更豐富的 Ghostty(最後一點是因為我們可以全力擁抱 libadwaita 特性)。
為了更有把握,我們還直接聯絡了 Ghostty 的非 GNOME 使用者,以及抱怨過 Ghostty 觀感的非 Ghostty 使用者(即:部落客、實況主、YouTuber)。回饋一致支持這項改變,理解其中的理由與帶來的好處,並確認顯式的 SSD 支援解決了主要的顧慮。
如果你對這一變更有強烈意見,請在 Discord 或 GitHub 上聯絡我們。請用具體的用例與場景來論證這一變更會對哪些地方造成負面影響。請不要只說「我不喜歡它」而給不出理由;那樣沒有幫助。我們樂於接受回饋並會認真考慮。謝謝!

