Ghostty:快速、原生且功能丰富的终端模拟器,兼顾速度、功能与原生 UI!
突发!Ghostty:快速、原生且功能丰富的终端模拟器,引领现代特性
Ghostty 是一款以快速、功能丰富和原生为特色的终端模拟器,在市面上脱颖而出。市面上虽有众多优秀的终端模拟器,但往往让用户在速度、功能或原生 UI 之间做出取舍,而 Ghostty 三者兼得。
关于 Ghostty
它不仅有原生 GUI,还能通过 libghostty 作为可嵌入库使用。libghostty 是一个跨平台、零依赖的 C 和 Zig 库,可用于构建终端模拟器或利用终端功能(如样式解析)。任何人都能使用 libghostty 构建终端模拟器,或将终端嵌入到自己的应用程序中。可参考 Ghostling 这个完整的最小项目示例,或查看示例目录中 C 和 Zig 使用 libghostty 的小示例。更多详情可查看“关于 Ghostty”。
下载与文档
可在 Ghostty 网站的下载页面获取下载资源,也可在该网站查看文档。
贡献与开发
若你对 Ghostty 有任何想法、遇到问题,或想通过拉取请求为其做贡献,请查看“为 Ghostty 做贡献”文档。想要参与 Ghostty 开发的人,也应阅读“开发 Ghostty”文档以了解更多技术细节。
路线图与状态
Ghostty 稳定可靠,每天有数百万用户和设备在使用。该项目的宏伟计划按以下步骤推进:
- 符合标准的终端仿真:✅
- 具备竞争力的性能:✅
- 丰富的窗口功能(多窗口、标签页、窗格):✅
- 原生平台体验:✅
- 用于可嵌入终端的跨平台 libghostty:✅
- 仅适用于 Ghostty 的终端控制序列:❌
以下是每个步骤的详细信息:
符合标准的终端仿真:Ghostty 实现了所有常用的控制序列,能毫无问题地运行所有主流终端程序。对于遗留序列,团队对 Ghostty 的行为与 xterm 进行了全面审核,并构建了一系列一致性测试用例。除了遗留序列(即真正的“终端”仿真),Ghostty 支持的现代序列比其他几乎所有终端模拟器都多,包括 Kitty 图形协议、Kitty 图像协议、剪贴板序列、同步渲染、明暗模式通知等。Ghostty 被认为是最符合标准且功能丰富的终端模拟器之一。终端行为部分遵循法定标准(如 ECMA - 48),但大多是由全球流行的终端模拟器定义的事实标准。Ghostty 的行为定义顺序为:(1)若有标准则遵循标准;(2)若功能存在则参考 xterm;(3)参考其他流行终端。
具备竞争力的性能:Ghostty 与其他高性能终端模拟器处于同一性能级别。这意味着它比传统或“慢速”终端快得多,与知名的“快速”终端性能差距极小。例如,在各种基准测试中,Ghostty 和 Alacritty 的性能通常相差几个百分点,但都比 Terminal.app 和 iTerm 快约 100 倍。不过,Ghostty 比 Alacritty 功能更丰富,且具有更原生的应用体验。这种性能通过高层架构决策和底层优化实现。从高层来看,Ghostty 采用多线程架构,每个终端都有专门的读取线程、写入线程和渲染线程。其渲染器在 Linux 上使用 OpenGL,在 macOS 上使用 Metal。读取线程有一个经过高度优化的终端解析器,利用了 CPU 特定的 SIMD 指令。
丰富的窗口功能:Mac 和 Linux(使用 GTK 构建)应用支持多窗口、标签页和分割功能,还有标签重命名、着色等额外特性。这些功能比单窗口终端提供了更高程度的组织性和定制性。
原生平台体验:Ghostty 是跨平台终端模拟器,但并非追求最低共同标准的体验。它有一个用 Zig 编写的大型共享核心,但也做了很多平台原生的事情。macOS 应用是一个基于 SwiftUI 的真正应用,具备真实窗口、菜单栏、设置 GUI 等。macOS 使用真正的 Metal 渲染器和 CoreText 进行字体发现,还支持 AppleScript、Apple Shortcuts(AppIntents)等。Linux 应用使用 GTK 构建,若系统支持 systemd,它会与之深度集成,实现始终开启、单实例新窗口、cgroup 隔离等功能。Ghostty 的目标是让各平台用户都觉得它是为自己的平台量身打造的,在每个平台上都有原生应用的感觉。
用于可嵌入终端的跨平台 libghostty:除了作为独立的终端模拟器,Ghostty 还是一个与 C 兼容的库,可将快速、功能丰富的终端模拟器嵌入到任何第三方项目中,即 libghostty。由于项目范围较大,团队将 libghostty 拆分为多个独立库,从 libghostty - vt 开始。该项目的目标是专注于解析终端序列和维护终端状态,相关内容在博客文章中有更详细介绍。libghostty - vt 目前已可用于 Zig 和 C,兼容 macOS、Linux、Windows 和 WebAssembly。其功能非常稳定(因为在 Ghostty GUI 中已得到长期验证),但 API 签名仍在变动中。libghostty 已被广泛使用,可查看示例了解 C 和 Zig 使用 libghostty 的小示例,或参考 Ghostling 项目获取完整示例。可查看 awesome - libghostty 获取与 libghostty 相关的项目和资源列表。目前 libghostty 尚未标记版本,团队仍在完善文档体验,但 Doxygen 网站是 C API 的不错参考资源。
仅适用于 Ghostty 的终端控制序列:团队认为终端应用可以且应该有更多功能。为此,他们努力支持其他终端模拟器创建的各种现代序列,同时也想通过创建自己的序列来填补空白。但此前一直有所顾虑,因为不想因创建仅适用于 Ghostty 的序列而导致终端生态系统更加碎片化。不过,团队也希望在推动终端发展与应对停滞的标准和缓慢的变革速度之间取得平衡,目前这方面尚未开展工作。
崩溃报告
Ghostty 内置了崩溃报告器,会生成崩溃报告并保存到磁盘。崩溃报告保存到 $XDG_STATE_HOME/ghostty/crash 目录,若 $XDG_STATE_HOME 未设置,则默认保存到 ~/.local/state。崩溃报告不会自动发送到设备外,仅在 Ghostty 崩溃后下次启动时生成。若 Ghostty 崩溃且你想生成崩溃报告,必须至少重启一次 Ghostty,此时日志中会显示已生成崩溃报告。可使用 ghostty +crash - report CLI 命令获取可用崩溃报告列表。未来版本的 Ghostty 将通过 CLI 和 GUI 更方便地查看崩溃报告内容。崩溃报告以.ghosttycrash 为扩展名,采用 Sentry 信封格式。你可将其上传到自己的 Sentry 账户查看内容,该格式也有公开文档,因此也可使用其他工具。使用 ghostty +crash - report CLI 命令可列出所有崩溃报告,未来版本的 Ghostty 将直接在终端显示崩溃报告内容。若要将崩溃报告发送给 Ghostty 项目,可使用以下 CLI 命令(使用 Sentry CLI):
SENTRY_DSN=https://e914ee84fd895c4fe324afa3e53dac76@o4507352570920960.ingest.us.sentry.io/4507850923638784
sentry - cli send - envelope --raw
警告:崩溃报告可能包含敏感信息。报告本身不会故意包含敏感信息,但包含崩溃时每个线程的完整堆栈内存。这些信息用于重建堆栈跟踪,但根据崩溃发生的时间,也可能包含敏感数据。
