Ghostty 1.3.0

Ghostty 1.3.0 的发行说明,发布于 2026 年 3 月 9 日。

Ghostty 1.3.0 是一个意义重大的发行版,包含许多呼声最高的特性,如回滚搜索、原生滚动条、在 shell 提示符内点击移动光标等。它还包含数百项改进、bug 修复与性能优化,覆盖所有平台。

本次发行由 180 位贡献者 在 2,858 个提交 中完成,历时6 个月。感谢所有为本次发行做出贡献的贡献者、维护者、社区管理员、翻译者、打包者与用户。

这些发行说明由人类 Ghostty 维护者精心而满怀爱意地手工撰写,包括完整的变更日志。合计花了 16+ 小时来写作,请尽情享用。🥰

Ghostty is non-profit! Please support development.Almost all donations go directly to paying contributors. Learn more about how you can help.
Learn more →

安全

  • CVE-2026-26982。修复了粘贴或拖放的文本中的控制字符(如 0x03(Ctrl+C))在某些 shell 环境中可用于执行任意命令的问题。需要用户交互(复制粘贴或拖放)来触发。

亮点

PR:#9585 #9602 #9687 #9702 #9709 #9756

你现在可以用 macOS 上的 cmd+f 或 GTK 上的 ctrl+shift+f 搜索终端回滚。搜索会在视口中高亮所有匹配项,并允许你用方向按钮或 cmd+g / shift+cmd+g(macOS)或 enter / shift+enter(GTK)在它们之间导航。当然,所有这些 keybind 都是可配置的。

在 macOS 上,搜索栏会挡路时可以拖到终端的任意一角。搜索还集成了标准 macOS 惯例:菜单栏、Find Next / Find Previous 快捷键与系统 find pasteboard 都按预期工作。

在 GTK 上,搜索栏也出现在某个角落,并可拖到任意角落。

搜索通过一个专用的搜索线程实现,与终端 I/O 并发运行。该线程以小时间片获取终端锁,在推进搜索的同时尽量减小对 I/O 吞吐或渲染的影响。如果你不使用搜索,或关闭了搜索栏,搜索线程退出且不消耗任何资源。

滚动条

PR:#9225 #9232

Ghostty 现在有原生滚动条。新配置 scrollbar 控制滚动条是否可见,默认 system 让操作系统决定。

macOS 与 GTK 上的滚动条使用原生小部件与样式,并支持你期望的所有标准交互,如拖动旋钮、点击轨道、滚动手势等。

在两个平台上,我们都使用极简的覆盖式滚动条,使终端网格不必为滚动条预留一个美感不佳的间隙或垄沟。滚动条以最小的样式覆盖在终端内容之上,避免影响选择。

在 Shell 提示符内点击移动光标

PR:#10455

Ghostty 现在支持 OSC 133 语义提示符规范 的click-events与cl=line扩展。这让你可以在活动的 shell 提示符内点击鼠标移动光标,就像普通文本框一样。

Fish(4.1+)与 Nushell(0.111+)原生支持该特性。对其他 shell,支持程度取决于 Ghostty 注入的 shell 集成。如果使用受支持的 shell,这会自动生效。

此外,Ghostty 现在拥有一个更完整、更准确的 OSC 133 实现,使我们长期支持的跳转提示符或复制命令输出特性的行为更准确。这还让处于活动提示符时的窗口大小调整行为更好。

一个有趣的细节是,我们还添加了一个超酷的调试覆盖层,显示 OSC 133 区域,这对努力更好地支持它的 shell 开发者是重大助力。任何人都可以在终端检查器中启用。

命令完成通知

PR:#8992 #10934

Ghostty 现在可以在长时间运行的命令完成时通知你。当你启动一个构建或测试套件并切到另一个窗口,希望在完成时收到通知时,这很有用。

三个新配置选项控制该特性:

notify-on-command-finish = unfocused
notify-on-command-finish-action = no-bell,notify
notify-on-command-finish-after = 30s

notify-on-command-finish 控制何时发送通知:never(默认)、unfocused(仅当终端未获得焦点时)或 always。notify-on-command-finish-action 控制如何通知,支持 bell(默认)与 notify(桌面通知),可以组合或取反(如 no-bell,notify)。notify-on-command-finish-after 设置发送通知前命令的最短时长,默认 5 秒。

该特性用 OSC 133 转义序列来跟踪命令执行,因此要求启用 shell 集成,或 shell 本身发送 OSC 133 序列(如 Fish 或 Nushell)。

键表、链式键位绑定与 catch_all

PR:#9984 #9961 #9977 #10098

Ghostty 1.3 为键位绑定系统新增了许多特性,面向重度用户:键表(key tables)、链式键位绑定(chained keybinds),以及 catch_all 特殊键。

键表支持类似 tmux 的模态键位绑定工作流。键表是一组命名的键位绑定,可按需激活或停用。当一个表处于活动状态时,按键会先在该表内查找,让你创建完全独立的键位绑定模式。

表用现有 keybind 配置上的 <name>/<binding> 语法定义。例如:

keybind = resize/arrow_up=resize_split:up,10
keybind = resize/arrow_down=resize_split:down,10
keybind = resize/arrow_left=resize_split:left,10
keybind = resize/arrow_right=resize_split:right,10
keybind = resize/escape=deactivate_key_table
keybind = resize/catch_all=ignore

keybind = ctrl+a=activate_key_table:resize

在此例中,按下 ctrl+a 激活 resize 表。表处于活动状态时,方向键用于调整分屏大小,其余键被忽略。按下 escape 停用该表并回到正常键位绑定行为。

macOS 与 GTK 上都有一个专用 UI 指示器显示键表何时处于活动状态,类似现有的按键序列指示器。

链式键位绑定允许你把多个动作绑定到同一个键。使用 chain 键,动作会附加到最近定义的绑定:

keybind = ctrl+shift+f=toggle_fullscreen
keybind = chain=toggle_window_decorations

按下 ctrl+shift+f 时会同时触发两个动作。链在键表内与键序列中都可以使用。

catch_all 是一个新的特殊键,匹配任何未显式绑定的键。它可以与修饰键组合(ctrl+catch_all=ignore),并可用于按键序列中(ctrl+a>catch_all=end_key_sequence),非常容易构建不向终端泄漏非预期输入的自包含模态键位绑定集。

细粒度的工作目录继承控制

PR:#9158

新配置 tab-inherit-working-directory 与 split-inherit-working-directory 允许你对新窗口、分屏、独立控制工作目录继承。这是呼声最高的配置特性之一。

window-inherit-working-directory = false
tab-inherit-working-directory = true
split-inherit-working-directory = true

更长期来看,我们计划以更通用的方式支持更好的条件配置,但这个具体用例呼声太高,所以我们先加入这些特定选项以便更早交付。

富剪贴板复制

PR:#9418 #9431

剪贴板复制现在会在剪贴板上设置多种内容格式(text/plain 与 text/html),支持带格式的富文本粘贴:当你粘贴到富文本编辑器时,得到保留颜色与其他样式的格式化文本。

copy_to_clipboard 绑定现在支持指定要复制的格式的参数。除混合、纯文本与 HTML 格式外,绑定还支持 vt,它复制带终端转义序列的文本,粘贴进另一个终端时保留格式。

Unicode 与国际化文本渲染

PR:#8757 #10895 #9680 #10465 #9883 #10179 #10295 #10332

天城文、孟加拉文、藏文、爪哇文、老傣文与查克玛文等婆罗米系文字现在能正确渲染。这些文字依赖字体 shaping 来形成连字、放置组合记号、连接字符,这些现在都显著改进。

对 Unicode 17 的更新完全符合 grapheme clustering 规范,使多码点字符在选择、光影移动与列宽计算中被正确当作单一单元。

第一行显示旧版本的渲染,第二行显示 1.3.0 对同一文本的渲染。注意改进的连字形成、组合记号放置与字素聚群——在第一列中,选区高亮现在正确地覆盖整个字符作为单一单元。

性能改进

PR:#9662 #9645

感谢 asciinema,我们收到了约 4GB 的公开终端录制数据来分析与优化 Ghostty 的性能。这令人兴奋,因为它基于真实世界的终端使用情况,而不仅是合成工作负载。

利用这些数据,我们大幅改进了 I/O 处理,把 Ghostty 回放数据集中全部内容的时间从数分钟降到几十秒(当然,asciinema 配置为忽略所有暂停)。这些改进在合成基准测试(如 Alacritty 的 vtebench)中同样可见。

除 I/O 更新外,渲染器被重新架构,渲染器持有终端锁的时间降低了 2 到 5 倍。而且在大多数帧中,得益于改进的脏区/损伤追踪,渲染器根本不持有锁。这适用于 Metal 与 OpenGL。

稳定性改进

PR:#10337 #10401 #11089 #11109 #9594

Ghostty 1.3 对稳定性与健壮性做了重大投入。

本发行版修复了之前版本中 Claude Code 经常触发的一个重大内存泄漏。该泄漏自 Ghostty 1.0 就存在,但在 Claude Code 开始以大规模展示出触发该问题的完美条件(尤其考虑到他们庞大的用户基数)之前,很难触发或很少触发。泄漏的细节与修复见这篇专门的博客文章。

我们还对 Ghostty 的终端转义序列解析器(#11089 )与完整 VT 流处理器(#11109 )进行了广泛的 AFL++模糊测试。通过这一过程,我们发现并修复了约 10 个崩溃与潜在内存安全问题。这些都不是已知的会造成现实问题的问题,但可能就有!作为长期目标,我们希望搭建基础设施来持续地模糊测试 Ghostty。

我们构建了一个名为 Tripwire 的新测试工具(#10401 ),通过在每个 try 站点注入故障来系统性地测试 errdefer 清理路径。这发现并修复了多个 bug,包括字体子系统中的内存泄漏、状态损坏与字形缓存损坏。这只解决错误恢复路径中的 bug,因此有助于 Ghostty 在面对意外错误(如 OOM、GPU 驱动问题等)时更加健壮。

在内存方面,我们在一些地方优化了内存。备用屏幕内存改为按需分配,为从不使用它的会话在每个终端节省数 MB(#9594 )。当然各子系统还有各种小幅改进。

AppleScript(macOS)

PR:#11208 #11251

Ghostty 现在在 macOS 上内建 AppleScript 支持,带来强大的自动化与集成能力。通过 AppleScript,你可以检查与控制窗口、标签页、分屏乃至单个终端。除了简单的创建与导航动作外,你还可以发送文本、按键与鼠标输入。

通过脚本可以实现的一些示例工作流包括:自动化的终端布局、命令广播、按工作目录跳转到终端等。

下面是一个简短示例,目标是位于最前面 Ghostty 窗口中当前聚焦的终端:

tell application "Ghostty"
    set term to focused terminal of selected tab of front window
    input text "pwd\n" to term
end tell

AppleScript 默认启用,由 macOS 自动化权限(TCC)保护,因此在另一个应用可以控制 Ghostty 之前 macOS 会先提示。如果你完全不需要 AppleScript 支持,设置 macos-applescript = false 即可。

Important

我们把它当作 1.3 中的预览特性。AppleScript 功能在发布前版本中得到的测试时间不如其他特性多,因此我们预计会基于用户反馈在 1.4 中做出破坏性 API 变更并加入重要的新特性。

分屏拖放(macOS)

PR:#10090

你现在可以在 macOS 上通过拖拽来重新排列分屏。当鼠标悬停在分屏顶部附近时,会出现一个抓握把手,可用于把分屏拖到任何其他分屏位置。只需要抓住把手并把分屏放到想要的位置;终端内容、工作目录与运行中的进程都会跟着移动。

你还可以把分屏拖出窗口或拖入新标签页,所有这些都与撤销/重做系统集成,因此如果你不小心把分屏放错了地方,可以轻松恢复原状。

这是一个用于重排终端布局的鼠标驱动方案,不必关闭再重建分屏。该实现也为将来的增强(如把分屏拖入新标签页或窗口)奠定了基础。

计划在未来发行版中提供该特性的 GTK 实现。

不打扰的更新通知(macOS)

PR:#9116

macOS 上的更新通知现在不打扰人。如果有一个终端窗口开着,更新通知会显示为标题栏或窗口下角的一个小胶囊,而不是一个打断人的弹出窗口。胶囊本身可以右键点击彻底隐藏。

你还可以通过命令面板中的 "Update and Restart"(#9131 )直接触发完整的更新与重启,使整个更新过程都可以由键盘驱动。

系统需求

系统需求相比 Ghostty 1.2 没有变更。

macOS: Ghostty 1.3 所需的最低 macOS 版本不变(macOS 13 Ventura)。

GTK: Ghostty 1.3 要求 GTK 4.14 与 libadwaita 1.5。这与我们的 GTK/Adwaita 版本策略一致。GTK 或 Adwaita 版本较旧的系统可以通过使用旧版 Ghostty 或社区维护的 snap 或 flatpak 软件包来绕过这一要求。

Important

**这是支持 macOS 13 的最后一个版本。**从 Ghostty 1.4(以及 1.4 之前的 tip releases)开始,所需的最低 macOS 版本将是 macOS 14。Apple 在 2025 年秋季结束了 macOS 13 的安全支持,因此这个变更与 Apple 的一般支持节奏一致。

破坏性变更

以下默认行为在 1.3.0 中被修改:

  • 默认剪贴板复制格式从 text 改为 mixed。mixed 格式会在剪贴板上同时设置纯文本与 HTML。如果这造成问题,你必须用一个特定格式重新绑定 copy_to_clipboard。#9418
  • GTK:FreeType 现在默认轻度 hinting 而不是完全 hinting,与大多数其他 GTK 应用的行为一致。旧行为可以通过 freetype-load-flags 配置恢复。#9253

完整变更日志

  • 回滚搜索现在可用于搜索终端回滚。在 macOS 上以 cmd+f、在 GTK 上以 ctrl+shift+f 触发,并带来许多新的可绑定动作。#189
  • 原生滚动条现在可用于浏览回滚。可以用新的 scrollbar 配置来控制。#111
  • 继承工作目录的配置现在可以按窗口 vs 标签页 vs 分屏分别指定。#1392
  • 键位绑定现在支持用 chain 键串联多个动作,允许单个键位绑定触发多个动作(如同时切换全屏与窗口装饰)。#9961
  • 键位绑定现在支持键表:可以激活与停用的命名键位绑定集,实现模态键位绑定工作流。表支持一次性模式、全捕兜底、堆叠,与键序列及链式动作组合。#9963
  • 新的 catch_all 特殊键,用于匹配任何未显式绑定的键的键位绑定。支持修饰键(ctrl+catch_all=...)与触发序列(ctrl+a>catch_all=...)。#9977
  • 复制到剪贴板的数据现在支持富文本,并可通过 copy_to_clipboard 绑定动作参数进行配置。#9396
  • 窗口与标签页标题现在可以通过菜单、命令面板或新的键位绑定动作与分屏标题分开设置。#9879
  • 命令面板的会话搜索允许你通过标题或工作目录搜索跳转到任何运行中的终端,带标签页色彩指示器(macOS)。#9945
  • 支持 Kitty 的 click_events 扩展,在受支持的 shell 中点击提示符即可移动光标,如 Fish 4.1+ 与 Nushell 0.111+。#10536
  • 支持 OSC133 cl=line,从而使 bash 与 zsh 也得到可点击提示符。#10542
  • Ghostty 配置现在可以使用 .ghostty 扩展。#8689
  • Ghostty 现在可以在命令完成时通过 notify-on-command-finish 配置显示通知。可以配置在多种条件下触发,如慢命令、未聚焦的窗口等。#8991
  • 表面现在可以标记为 "readonly",它不再向 pty 发送任何输入事件,且在关闭前总是警告。可以通过新的键盘绑定、命令面板等触发。#8432
  • 新配置 key-remap 可用于在 Ghostty 范围内把按键从一个重新映射到另一个。示例:key-remap = ctrl=super。#5160
  • 新配置 clipboard-codepoint-map 接受一个映射,用于在复制到剪贴板(确切说是写入剪贴板)时替换某些码点。这可以允许复制如 computing symbols、分支绘图字符等。#8383
  • 新配置 selection-word-chars 可用于配置决定双击选择词边界的字符。#9335
  • 新配置 mouse-reporting = false 可用于禁用全部 TUI 鼠标报告特性。#8430
  • 新配置值 scroll-to-bottom = output,在任何输出时自动把窗口滚动到底部(默认关闭)。#9938
  • 新配置选项 split-preserve-zoom,初始只含一个选项 navigation(默认 false)。设置 navigation 后,split navigation(goto_split)执行时放大的分屏保持放大。#8458 #9089
  • 新绑定动作 goto_window:next 与 goto_window:previous,用于确定性地在窗口间导航。#8387
  • 新绑定动作 toggle_mouse_reporting 切换向 TUI 的鼠标报告。#9282
  • 新的 end_key_sequence 绑定动作,用于显式结束活动按键序列,把先前的按键冲刷给终端而不编码触发键(如 ctrl+w>escape=end_key_sequence)。#10098
  • close_tab 绑定动作新增参数 right,关闭其右侧的所有标签页。#9783
  • 当只有一个窗格时,resize_split 与 toggle_split_zoom 动作现在返回 false,允许 performable: keybind 把按键传给终端应用。#10376
  • quick terminal 现在设置 GHOSTTY_QUICK_TERMINAL 环境变量,可以任意使用,比如用于自定义 shell 提示符。#9673
  • cursor shell 集成特性现在尊重 cursor-style-blink,当闪烁被禁用时使用稳固的条而不是总是使用闪烁的条。#10643
  • 右键点击 URL 现在会高亮整个 URL。#9298
  • 升级到 Unicode 17。#8757
  • +list-themes 命令现在有一个写出配置文件的键位绑定。#8930
  • 以 -e 启动的命令现在把终端标题设为 argv[0]。#9121
  • 自定义 shader 新增许多 uniforms,如光标形状、位置、先前位置、变更后经过的时间、配色方案等,以支持更高级的 shader。#9416 #9417
  • OSC7 URI 解析现在能更好地处理更多的边缘情况,如 MAC 地址。#9193
  • 粘贴文本中的不安全控制字符现在被替换为空格,以防止恶意粘贴诱骗用户执行意外命令,与 xterm 的行为一致。#10746
  • IME 预编辑文本现在以下划线渲染而不是反色渲染,跨程序的可读性与一致性更好。#10368
  • 改进某些低 DPI 显示器上的字体渲染。#9432
  • 对字体度量,行高取整单元格高度用四舍五入而不是向上取整。该变更应使高 DPI 与低 DPI 显示器之间的结果更一致。#9648
  • 把平衡的上与左窗口内边距解耦,避免对角线调整大小时的窗口抖动。#9518
  • 更新许多默认键位绑定以适配其他键盘布局。这不应影响标准美式布局。#9469
  • 忽略配置文件中的 Unicode 字节序标记(BOM)字符。#9490
  • 键盘扩展序列尊重 Unicode VS16。#9502
  • VS15/16 检查现在正确考虑 emoji 基字符。#9679
  • 更新字素断点算法以完全匹配 Unicode 规范。#9680
  • 修复天城文等文字中宽字素簇的渲染问题:多个非零宽度码点合并为一个本应占两格的簇。#10465
  • 修复查找超链接时数据竞态条件可能的崩溃。#9813
  • 修复选区与复制之间数据竞态可能的崩溃。#9818
  • 修复绘制 Kitty 图像放置与放置列表更新之间的竞态条件导致的崩溃,在运行如 Yazi 这样的应用中快速循环图片时触发。#10680
  • 修复在以非标准大小页面修剪回滚时的重大内存泄漏。非标准页面(由大量 emoji、大量超链接或 Claude Code 输出引起)此前被错误地放回内存池而没有取消映射。#10251
  • 修复某些边缘情况下插入行或删除行(IL/DL)VT 操作可能造成的渲染伪影。#10290

终端能力

  • vt:更完整、更准确的对 OSC 133 的解析与实现。#10427
  • vt:ConEmu OSC9 现在被完整解析(子命令 1 到 12)。Ghostty GUI 只实现其中一部分,但 libghostty 可以解析全部。#3125
  • vt:配色方案变更事件现在同步上报。#5922
  • vt:modify other keys state 2 在 macOS 上不再把 option 编码为 alt。#9406
  • vt:shift+backspace 为 Kitty Keyboard Protocol 正确编码。#9896
  • vt:CSI 上滚(\e[nS)现在把滚出的行保留在回滚缓冲区中而不是抹除,与其他终端模拟器的行为一致。这修复了 Fish shell 的 Ctrl-L(scrollback-push)丢失历史的问题。#9905
  • vt:重置(RIS)现在也重置进度条。#10168
  • vt:对焦点移交式点击抑制鼠标报告,使分屏焦点变化不会向终端应用发出非预期的鼠标输入。#11167
  • vt:解析 Kitty text sizing 协议(OSC 66),GUI 尚未实现。#10315
  • vt:解析(但不实现)iTerm2 OSC 1337 扩展。#10417
  • vt:解析(但不实现)Kitty 剪贴板协议(OSC 5522)。#10560
  • vt:多出多得多的 tmux control mode 解析,但尚未接入 GUI。#9803 #9860
  • vt:修复 Kitty Graphics 中特制的超大图像导致的崩溃。#9579
  • vt:修复狂发 BEL (0x07) 导致的崩溃。#9800
  • vt:Ghostty terminfo 现在声明支持 SGR dim。#11144

Shell 集成

  • nu:现在支持 SSH shell 集成。#7877
  • fish:为 Ghostty 的 fish shell 补全添加描述。#9531
  • zsh:在 zsh 中运行命令时,通过剥离控制字符而不是把它们转换成可见表示,修复窗口标题中出现字面 \n 的问题。#10341
  • bash:Bash 4.4+ 的 shell 集成不再依赖 bash-preexec,改用原生 PS0 与 PROMPT_COMMAND 实现更快、更简单的钩子。较旧的 Bash 版本(如 macOS 的 3.2)继续使用 bash-preexec。#10609
  • elvish:总是报告工作目录变更,把此能力从标题报告特性中解耦出来。#10533
  • sudo shell 集成特性现在在所有 shell 中更稳定。#9891
  • 修复 SSH 缓存:当 $TMPDIR 与 $XDG_STATE_HOME 位于不同文件系统时失败的问题。#10364
  • 如果手动设置了 cursor-style,让默认的 shell-integration-features 包含 no-cursor。#8681

macOS

  • macOS:每个终端顶部现在出现一个拖动把手,用于重排分屏、把终端移动到新标签页或窗口等。#1525 #10090
  • macOS:新增"将 Ghostty 设为默认终端应用"选项,方便地让 Ghostty成为打开目录、shell 脚本等的默认处理程序。#10810
  • macOS:双击分页现在允许内联编辑分页标题。按 Enter 确认,按 Escape 取消。#10963
  • macOS:自带 command-palette-entry 的自定义命令面板条目。GTK 已从 1.2.0 起支持。#7158
  • macOS:更新通知现在显示为终端窗口里一个不打扰人的胶囊,而不是弹出对话框。#9116
  • macOS:鼠标按钮 8/9(后退/前进)现在在终端内正确编码。#10381 #2425
  • macOS:新增可由 Apple Shortcuts 使用的聚焦特定终端的 app intent。#8961
  • macOS:右键点击分页设置分页颜色。#9784
  • macOS:background-blur 现在支持使用 macOS 26 原生液态玻璃模糊的新选项。#8801
  • macOS:bell-features = audio 现在可以在 macOS 上工作。可以指定一个自定义音频文件在终端铃声事件时播放。#11154
  • macOS:fullscreen 配置现在可用于使 Ghostty 以非原生全屏启动,此外也可以原生全屏。#9876
  • macOS:实现 close_all_windows 绑定动作。#9552
  • macOS:新增键盘绑定 toggle_background_opacity。#9117
  • macOS:支持原生的 Cmd+Home/Cmd+End 快捷键滚动到终端回滚的顶/底部。#10003
  • macOS:双击分屏分隔线时均分分屏。#9524
  • macOS:所有活动的终端铃被清除时,通知徽标也随之清除。#8487
  • macOS:system 铃设置(默认关闭)现在使用系统提示音。#9339
  • macOS:听写图标现在出现在更正确的位置。#8493
  • macOS:window-width 与 window-height 现在正确考虑窗口 chrome,如标签栏。#2660
  • macOS:恢复的非原生全屏窗口现在能正确恢复。#8435
  • macOS:quick terminal 的状态被正确恢复。#9588
  • macOS:toggle_quick_terminal 不再把隐藏的窗口变为可见。#8414
  • macOS:不安全粘贴确认中的文本框不再可编辑。#9400
  • macOS:关闭确认单附着到相关窗口。#9509
  • macOS:Metal 为光标单元格加载线性化的前景色,使光标文本显示正确。#9695
  • macOS:修复在某些系统上"撤销新标签页"崩溃的问题。#9512
  • macOS:修复设置了 focus-follows-mouse 时命令面板不在鼠标点击时关闭的问题。#9533
  • macOS:修复 quick-terminal-size 对人们使用不一致的问题。#9837
  • macOS:自定义应用图标现在用 NSDockTilePlugIn 更可靠地更新,修复了旧 macOS 版本上的圆角问题。#9983
  • macOS:当使用带有菜单等价项的键盘快捷键(如 Cmd+V、Cmd+N、Cmd+T)时,菜单栏现在会短暂闪烁,匹配标准的 macOS 行为。#10122
  • macOS:当单元格宽度小于 advance 时也应用子像素水平对齐,渲染更平滑。#9646
  • macOS:字体 shaping 现在使用字形位置来正确定位,修复了某些文字的字形在视觉上其逻辑顺序被重排的渲染(如老傣文的元音显示在相关辅音之前)。#9883
  • macOS:修复 window-width/window-height 正确限制到可见屏幕大小、并与 window-position 正确配合。#9975
  • macOS:按下 Escape 正确隐藏分页概览。#9971
  • macOS:修复 Cmd-点击包含 ~ 的文件路径(如 ~/Documents/file.txt),在打开之前把波浪号展开为用户主目录。#10863
  • macOS:修复当终端窗口纹理超过 GPU 允许的最大大小时崩溃的问题:把纹理尺寸限制到设备上限。#9972
  • macOS:优化 Secure Keyboard Input 覆盖层动画,CPU 占用降低约 35%,并修复了之前 innerShadow() 实现造成的卡顿与冻结帧。#10903
  • macOS:修复 Vim 文件类型检测,把 macOS 特有的 Ghostty 配置路径识别为 Ghostty 配置文件。#10101
  • macOS:macos-titlebar-style = tabs 的各种窗口化修复。#9596 #9597
  • macOS:深色/浅色主题重新加载的各种修复。#9360
  • macOS:各种修复,确保鼠标光标根据状态更准确。#9580 #8409

GTK(Linux、FreeBSD)

  • GTK:双指左右滑动切换分页页面。#10575
  • GTK:键表与按键序列现在有专用 UI 显示挂起的键盘输入状态,与 macOS 一致。#2127
  • GTK:空间式分屏导航现在在边缘处回绕,因此向一个方向越过最后一个分屏会回绕到对侧第一个分屏。#10811
  • GTK:+new-window CLI 命令现在接受 -e 与 --working-directory。#10809
  • GTK:cgroup 被改造,cgroup 现在按表面正确划分。#10611 #2084
  • GTK:分屏变更类动作(创建、调整大小或关闭分屏等)不再让整个窗口闪烁。#8208
  • GTK:带自定义 window-height 或 window-width 的窗口现在正确居中。#7937
  • GTK:当剪贴板不含文本(如图像)时,paste_from_clipboard 现在返回 false,允许 performable: keybind 把按键传给终端应用。#10089
  • GTK:修复 i3 窗口边框在全屏来回切换后消失的问题。#8075
  • GTK:修复 Kitty 键盘协议不为组合键(如国际键盘布局上 Compose 键输入的重音字符)报告文本事件的问题。#10049
  • GTK:尊重 gtk-enable-primary-paste GSettings 选项,允许用户通过 GNOME 桌面设置禁用中键粘贴。#10328
  • GTK:当 OpenGL 版本太旧时记录警告,而不是无提示地崩溃。#9586
  • GTK:FreeType 旗标默认轻度 hinting 而非完全 hinting,以匹配大多数其他 GTK 应用的行为。#9253
  • GTK:XKB 映射在 Linux 上正常工作。#9454
  • GTK:如果 4.2 可用,在 CSS 中使用媒体查询与 prefers-color-scheme。#9520

本地化

Ghostty 1.3 新增对 6 门新语言的支持:

  • 克罗地亚语
  • 哈萨克语
  • 拉脱维亚语
  • 立陶宛语
  • 西班牙语(西班牙口语)
  • 越南语

本地化由志愿者贡献者维护。如果你想帮助把 Ghostty 本地化为你的语言,请在 GitHub 仓库上发起讨论。感谢所有为 Ghostty 本地化做出贡献的志愿者!

面向软件包维护者的变更

  • Ghostty 现在需要 Zig 0.15 来构建。#8372

Libghostty

虽然与 Ghostty 1.3 发行不是直接相关,1.3 开发周期的目标之一就是开始认真地聚焦 libghostty,所以我想在这里做个进展更新。

在 1.3 开发周期中,libghostty 被成功抽离出来,现在作为一个独立的 Zig 模块可用。该 Zig 模块功能齐全,与 Ghostty 共享几乎所有代码。与此同时,还有一个进行中的 C API。Ghostty 仓库内有一组 Zig 与 C 的示例。

我们还没有准备好为这两个模块打版本号发行,但数十个免费与商业项目已经在使用 libghostty,我很兴奋!如果你有兴趣,我们的 Discord 有一个 libghostty 频道。

Ghostty 开发团队决定把 Ghostty GUI 与 libghostty 的发行周期分开:libghostty 将拥有自己的版本号与发行计划,独立于 Ghostty 桌面应用。这允许我们为库与桌面应用保持不同的开发节奏,它们有着不同的用户群与稳定性要求。

我们还不确定何时会打出首个 libghostty 发行,但 Zig 模块与 C API 的工作都在继续,我们希望很快有发行!

财务更新

在 1.3 开发周期中,Ghostty 正式成为非营利项目。

这很重要,因为它提供了可执行的保证:Ghostty 不能被出售、转向或为牟取商业利益而被改造。非营利结构保护采纳并贡献 Ghostty 的人与社区,确保项目由一个使命驱动、把公共利益置于私人利润之上的实体来管理。关于该决定动机的更多信息见最初的公告。

我们现在已正式签署 5 份贡献者合同,补偿那些参与项目并持续展示高质量工作的个人。这些合同涵盖社区管理、图形工作、Unicode 兼容性、GTK 以及 Discord/GitHub 集成。这些合同合计承诺近 300 小时的计费工作,我们很高兴为贡献者提供付费机会来继续他们在 Ghostty 上的工作。

如果你愿意支持 Ghostty,请访问我们的赞助页。

路线图

由于回滚搜索与原生滚动条等呼声最高的特性得以实现,我认为 Ghostty 1.3 是一个出色的发行版,兑现了让 Ghostty 成为“现有最佳终端模拟器”的长期目标。

当然,"最佳"始终是主观的,但重点是:Ghostty 1.3 具备用户期望任何成熟的终端模拟器具备的所有主流特性,并以高度打磨与性能交付它们。我们当然会继续改进 Ghostty,但这是项目发展的一个重要里程碑。

短期重点将放在稳定化并打出 libghostty 发行上。数十个项目已经在使用 libghostty,我相信 libghostty 最终会比 Ghostty 桌面应用本身被更广泛地使用并更具影响力,所以这是项目重要的下一步。

还有许多非营利开发工作要做,比如建立企业赞助计划、为赞助项目提供更切实的回报、更好地宣传 Ghostty 如何使用资金等。

Ghostty 1.4 将继续迭代并改进桌面应用。我不想承诺任何具体特性,但我们正努力使 Ghostty 可脚本化、启用真正的 Tmux control mode、图形化设置等。

回应一个常见的请求:对 Microsoft Windows 的支持仍然没有计划。这仍在长期路线图中,但我认为聚焦一个有能力且强大的 libghostty,从长期看反而能带来更好的 Windows 支持。libghostty 本身已经支持 Windows。

Ghostty 1.4 将继续 6 个月的发行周期,计划在 9 月。对想要更频繁更新的用户,我们推荐在 macOS 使用 tip 发行通道,或在 Linux 上频繁地从源码构建。