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 上联系我们。请用具体的用例与场景来论证这一变更会对哪些地方造成负面影响。请不要只说"我不喜欢它"而给不出理由;那没有帮助。我们乐于接受反馈并会认真考虑。谢谢!

