ghostty-org/ghostty
GitHub: ghostty-org/ghostty
一款用 Zig 编写的快速、功能丰富且跨平台的终端模拟器,通过 GPU 加速和原生 UI 同时兼顾性能与用户体验,并可作为库嵌入其他应用。
Stars: 53260 | Forks: 2596
Ghostty
Fast, native, feature-rich terminal emulator pushing modern features.
A native GUI or embeddable library via libghostty.
About
·
Download
·
Documentation
·
Contributing
·
Developing
## 关于
Ghostty 是一款终端模拟器,它的独特之处在于
快速、功能丰富且原生。虽然市面上有许多优秀的终端
模拟器,但它们都迫使你
在速度、功能或原生 UI 之间做出选择。而 Ghostty 能够同时提供这三者。
**`libghostty`** 是一个跨平台、零依赖的 C 和 Zig 库,
用于构建终端模拟器或利用终端功能
(例如样式解析)。任何人都可以使用 `libghostty` 来构建终端
模拟器,或者将终端嵌入到自己的应用程序中。请参阅
[Ghostling](https://github.com/ghostty-org/ghostling) 获取一个最小化的完整项目
示例,或者查看 [`examples` 目录](https://github.com/ghostty-org/ghostty/tree/main/example)
获取在 C 和 Zig 中使用 `libghostty` 的更小示例。
有关更多详细信息,请参阅 [关于 Ghostty](https://ghostty.org/docs/about)。
## 下载
请访问 Ghostty 网站上的[下载页面](https://ghostty.org/download)。
## 文档
请访问 Ghostty 网站上的[文档](https://ghostty.org/docs)。
## 贡献与开发
如果您对 Ghostty 有任何想法、问题等,或者希望通过
Pull Request 为 Ghostty 做出贡献,请查看我们的
[“为 Ghostty 贡献”](CONTRIBUTING.md)文档。那些希望
参与 Ghostty 开发的人员,也应阅读
[“开发 Ghostty”](HACKING.md)文档以了解更多技术细节。
## 路线图与状态
Ghostty 目前已经稳定,每天有数百万的用户和机器在使用。
项目的高级别宏伟计划,按顺序如下:
| # | 步骤 | 状态 |
| :-: | ------------------------------------------------------- | :----: |
| 1 | 符合标准的终端模拟 | ✅ |
| 2 | 具备竞争力的性能 | ✅ |
| 3 | 丰富的窗口功能 —— 多窗口、标签页、窗格 | ✅ |
| 4 | 原生平台体验 | ✅ |
| 5 | 用于可嵌入终端的跨平台 `libghostty` | ✅ |
| 6 | Ghostty 专属终端控制序列 | ❌ |
以下宏大路线图中各个步骤的更多细节:
#### 符合标准的终端模拟
Ghostty 实现了所有常用的控制序列,并且
能够毫无问题地运行所有主流的终端程序。对于遗留序列,
我们进行了一项[全面的 xterm 审计](https://github.com/ghostty-org/ghostty/issues/632),
将 Ghostty 的行为与 xterm 进行了比较,并建立了一组合规性
测试用例。
除了遗留序列(即你所说的真正“终端”模拟)之外,
Ghostty 支持的现代序列几乎比任何其他终端
模拟器都要多。这些功能包括 Kitty 图形协议、
Kitty 图像协议、剪贴板序列、同步渲染、
浅色/深色模式通知以及许多其他功能。
我们相信 Ghostty 是目前可用终端模拟器中兼容性最高、功能最丰富的
之一。
终端行为部分属于成文标准
(即 [ECMA-48](https://ecma-international.org/publications-and-standards/standards/ecma-48/)),
但主要还是事实标准,由全球流行的终端模拟器
定义。Ghostty 采用的方法是,我们的行为由
(1) 标准(如果有),(2) xterm(如果该功能存在),(3)
其他流行的终端,按此顺序定义。这定义了 Ghostty 项目
所认为的“标准”。
#### 具备竞争力的性能
总体而言,Ghostty 与其他最高性能的终端模拟器
属于同一性能级别。
“同一性能级别”意味着 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 进行字体发现。
- macOS 支持 AppleScript、Apple Shortcuts (AppIntents) 等。
- Linux 应用是使用 GTK 构建的。
- Linux 应用与 systemd 深度集成(如果可用),用于实现
常驻后台、单实例中的新窗口、cgroup 隔离等功能。
我们对 Ghostty 的目标是,让无论在哪个平台上运行 Ghostty 的
用户,都会觉得 Ghostty 是专门为他们的平台构建的,甚至可能是
专为该平台构建的。我们希望 Ghostty 在每个平台上都感觉像是一个原生应用,
对每个平台上的“原生”作出最好的诠释。
#### 用于可嵌入终端的跨平台 `libghostty`
除了作为独立的终端模拟器之外,Ghostty 还是一个
C 兼容的库,用于在任何第三方项目中嵌入快速、功能丰富的终端
模拟器。这个库被称为 `libghostty`。
由于该项目的范围庞大,我们将 libghostty 拆分成了
独立的库,从 `libghostty-vt` 开始。该项目的目标
是专注于解析终端序列和维护
终端状态。这在
[博客文章](https://mitchellh.com/writing/libghostty-is-coming)中有更详细的介绍。
`libghostty-vt` 目前已经可用,支持 Zig 和 C,并且
兼容 macOS、Linux、Windows 和 WebAssembly。该功能
极其稳定(因为它已经在 Ghostty GUI 中得到了长期的验证),
但其 API 签名仍处于不断变化中。
`libghostty` 已经得到了广泛的使用。请参阅 [`examples`](https://github.com/ghostty-org/ghostty/tree/main/example)
获取在 C 和 Zig 中使用 `libghostty` 的小示例,或查看
[Ghostling](https://github.com/ghostty-org/ghostling) 项目获取一个
完整的示例。请参阅 [awesome-libghostty](https://github.com/Uzaaft/awesome-libghostty)
获取与 `libghostty` 相关的项目和资源列表。
我们尚未为 libghostty 标记版本,也仍在
致力于提供更好的文档体验,但我们的 [Doxygen 网站](https://libghostty.tip.ghostty.org/)
是学习 C API 的一个好资源。
#### Ghostty 专属终端控制序列
我们希望并相信终端应用程序能够、也应该能够
做更多的事情。为了实现这一目标,我们努力支持由其他终端模拟器创建的
各种现代序列,但我们也
希望通过创建我们自己的序列来填补空白。
到目前为止,我们对此一直犹豫不决,因为我们不想
创建仅在 Ghostty 中有效的序列,从而在终端生态系统中造成更多的
碎片化。但是,在停滞的终端标准以及
终端生态系统缓慢的变革步伐下,我们确实想在这种意愿与推动终端发展的渴望之间取得平衡。
我们目前还没有开展任何这方面的工作。
## 崩溃报告
Ghostty 内置了崩溃报告器,它将生成崩溃
报告并保存到磁盘。崩溃报告保存在 `$XDG_STATE_HOME/ghostty/crash`
目录中。如果未设置 `$XDG_STATE_HOME`,默认路径为 `~/.local/state`。
**崩溃报告_不会_自动发送到你机器以外的任何地方。**
崩溃报告仅在崩溃后下一次启动 Ghostty 时生成。
如果 Ghostty 崩溃并且你想生成崩溃报告,你必须
至少重启一次 Ghostty。你应该能在日志中看到
已生成崩溃报告的消息。
崩溃报告以 `.ghosttycrash` 扩展名结尾。崩溃报告采用
[Sentry envelope 格式](https://develop.sentry.dev/sdk/envelopes/)。你可以
将它们上传到你自己的 Sentry 帐户以查看其内容,并且该格式
也是公开文档化的,因此也可以使用任何其他可用的工具。
`ghostty +crash-report` CLI 命令可用于列出任何崩溃报告。
Ghostty 的未来版本将直接在终端中向你显示崩溃报告的
内容。
要将崩溃报告发送给 Ghostty 项目,你可以使用以下
CLI 命令并配合 [Sentry CLI](https://docs.sentry.io/cli/installation/):
```
SENTRY_DSN=https://e914ee84fd895c4fe324afa3e53dac76@o4507352570920960.ingest.us.sentry.io/4507850923638784 sentry-cli send-envelope --raw
```
标签:AI工具, Ghostty, GUI应用, libghostty, SOC Prime, Zig语言, 功能丰富, 原生UI, 开发工具, 开源, 系统工具, 终端模拟器, 高效