功能

Ghostty 支持的功能与相关文档。

Ghostty 是一款功能极其丰富的终端。

终端功能可以分为两类:面向最终用户的功能 和面向终端应用开发者的功能。

面向最终用户的功能包括多窗口、标签页、分屏、连字、 自动更新等。这些功能让终端的使用更加愉快, 而不需要对正在运行的终端应用(例如你的 shell、 文本编辑器等)做任何改动。

面向终端应用开发者的功能包括 Kitty 图形协议、Kitty 键盘 协议、同步渲染、明暗模式通知等。这些功能让终端应用能够 做到在其他终端模拟器中做不到的事情。虽然这些功能 不会被最终用户直接使用,但最终用户仍能从中 受益,因为他们日常使用的终端应用可以 做更多事情。

功能亮点

以下是 Ghostty 支持的一些较大或更有趣 功能的列表:

  • 跨平台:Ghostty 可运行于 macOS 和 Linux。它在 各平台使用原生 UI 组件来提供地道的体验。 Windows 支持计划在将来提供。

  • 窗口、标签页和分屏:Ghostty 支持多个窗口, 每个窗口都有自己的标签页和分屏。这些都使用 原生 UI 组件渲染。

  • GPU 加速渲染:Ghostty 在 macOS 上使用 Metal、 在 Linux 上使用 OpenGL 来渲染终端屏幕。

  • 主题:Ghostty 自带数百个主题,只需一行配置即可 选择。主题可根据系统的深色/浅色模式 自动切换。你也可 以创作自己的主题。

  • 连字:你可以使用带连字的字体,Ghostty 会 正确渲染它们。你还可以指定启用或禁用特定的 字体特性。

  • 字素聚类(Grapheme Clustering):国旗、 肤色等多码点 emoji 会作为单个字符 正确渲染。阿拉伯语和希伯来语等某些从右到左 书写文字中的字素簇也能被正确 渲染;不过目前只支持 左到右文字。

  • Kitty 图形协议:Ghostty 支持 Kitty Graphics Protocol,使终端应用可以在终端中 直接渲染图像。

平台原生功能

Ghostty 的主要设计目标之一是 在每个平台上看起来、感觉起来和行为上 都像一个专门的原生应用。 下面列出 Ghostty 提供部分平台原生功能。

macOS

  • 快速终端(Quick Terminal):轻量级终端,可从菜单栏下方 以动画方式下切,即时访问,同时 不中断工作。
  • AppleScript 自动化:内置 AppleScript 字典,可 编写脚本控制窗口、标签页、终端、布局和输入事件。见 AppleScript 文档。
  • 原生标签页、分屏等:我们为标签页和 分屏等 UI 元素使用原生 macOS 组件,而不是像其他终端模拟器那样 自行绘制文字。
  • 代理图标(Proxy Icon):在标题栏中拖动代理图标可以 移动或访问终端会话文件,或者 直接定位到文件路径。
  • 快速预览(Quick Look):用三指点按文字或用力按压,即可 在释义、Web 搜索等方面使用 macOS Quick Look 功能。
  • 安全键盘输入:自动检测密码 提示,或手动开启安全键盘输入,以保护密码 不被其他进程窃听。当安全键盘输入开启时 会显示一个动态锁形图标,说明 其处于激活状态,可随时了解。

终端 (VT) 功能

对终端应用开发者来说,我们相信 Ghostty 是目前 最现代、最全面的终端模拟器 之一1。Ghostty 的目标是既能与旧应用 最大程度兼容,同时又能为新应用提供 最现代的功能。

这意味着在实际应用中,Ghostty 支持多种多样的 控制序列、终端功能和终端 协议。为了确定这些特性的行为方式,我们遵循 以下原则:

  1. Xterm 兼容性:xterm 是终端模拟的 事实标准。如果 xterm 做了什么,我们就应该 采用同样的行为2。

  2. 协议起源兼容性:如果定义该协议的终端 有某种表现方式,即使它未被明确规定,我们也应该 遵循该表现方式3。

  3. 事实标准兼容性:若某个行为被广泛 公认为事实标准,我们 就应遵循该行为。什么是“广泛认可”,通常 更多依据主流意见和使用方式,带有一定主观性。

要查看 Ghostty 支持的终端开发者功能 列表,请参见参考 (不过请注意,撰写本文时此功能仍在完善中)。

Footnotes

  1. If not, we want to know! Please 发起一个讨论。 ↩

  2. We may put some xterm behaviors behind a configuration flag if 该行为有争议或者没有被广泛接受。 ↩

  3. If a behavior differs between the specification and the terminal that defined the protocol, we open a discussion to determine the correct behavior. ↩