Ohhnews

分类导航

$ cd ..
Jetbrains Blog原文

JetBrains IDE内置终端改用libghostty引擎

#jetbrains#libghostty#终端模拟#ghostty#ide

如今,你越来越多的终端工作都要通过一些工具来完成,而这些工具对终端的要求比 shell 提示符高得多:Claude Code 和 Codex 等 AI 编程代理、Neovim 和 tmux 等全屏应用、系统监视器和仪表盘。这些工具依赖现代终端协议,而当今最好的独立终端正是构建在这些协议之上。

从 2026.3 开始,JetBrains IDE 的内置终端也能使用同一种“语言”。它现在运行在 libghostty 上,这是驱动 Ghostty 本身的终端仿真库。

许多项目已经嵌入 libghostty,它被广泛认为是可靠、高性能的库,因此在我们考虑过的其他选项中,我们更倾向于它。

在我们的 IDE 中,libghostty 取代了 JediTerm——我们多年来一直依赖的终端模拟器。TUI 应用越来越依赖 JediTerm 从未支持的现代协议。这一差距过去更像是一个小不便,因为体验与其他终端并不完全一致,但还不至于严重到需要提交缺陷报告。现在,libghostty 在我们的 IDE 中接管解析和终端状态,而 IDE 仍负责渲染以及更高级的功能和集成。

以下是这些变化的实际影响。

多行提示符和快捷键与文档所述一致

借助对 Kitty 键盘协议的支持,终端应用现在可以区分 Enter、Shift+Enter 和 Ctrl+Enter,并可以请求按键释放和重复事件。Claude Code、Codex 和 Pi 等命令行 AI 代理,以及 fish shell 和 Neovim 等应用,都使用这一协议。该终端还支持 xterm 的 modifyOtherKeys,这是 Vim 使用的一种较旧的键盘协议。

对你来说,这意味着 Shift+Enter 会在提示符中开始新一行,而不是发送一条写了一半的消息;将 Ctrl、Shift 或 Alt 与其他按键组合的快捷键会完整传递给应用。基于终端的编辑器和工具会按预期响应,无需调整 IDE 设置。过去在 Shift+Enter 时发送 Esc+CR 的旧设置已不再需要,并会被忽略。

你的工具会跟随 IDE 主题

过去将 IDE 切换到深色模式时,终端应用只能靠猜,结果往往是在深色背景上显示深色文字,或在深色 IDE 中出现亮色配色方案,除非你手动配置每个工具。

现在,终端会根据当前 IDE 主题回答深色/浅色查询(CSI ? 996 n),并在你切换主题时通过模式 2031 发送通知。Claude Code、OpenCode、Pi、Neovim 和 tmux 会订阅这些主题变更通知,因此其中大多数会随 IDE 自动切换。

除了 JediTerm 原本已处理的 OSC 10/11 查询外,该终端还会回答 OSC 4 调色板查询和 Kitty OSC 21 颜色查询。OpenCode 和 Pi 会读取调色板,Junie CLI 会询问终端是深色还是浅色。程序现在可以通过 OSC 4 设置 16 到 255 的扩展调色板颜色,而颜色 0 到 15 仍由 IDE 主题控制。

输出丰富的终端应用现在渲染得更好

AI 代理、系统监视器、文件管理器和仪表盘的表现,取决于渲染它们的终端。新引擎处理了近 50 个 JediTerm 曾忽略或误读的控制序列。以下是你可能遇到过的几个:

  • REP(CSI Ps b):ncurses 用它处理连续 7 个或更多相同字符的情况,因此以前有些行在渲染时会缺少字符。
  • 冒号分隔的 SGR 颜色(38:2::r:g:b):JediTerm 会打印冒号,并把数字合并到错误的属性中。
  • 未知的 APC、SOS 和 PM 字符串:JediTerm 会把它们当作文本打印。现在它们会被静默丢弃。

同样受支持的还有左右边距(DECSLRM)、保护区域、制表位控制、插入模式、XTSAVE/XTRESTORE、Kitty CSI 22 J 滚动并清除,以及 X10 鼠标报告。光标闪烁模式(?12)现在会得到遵循;以前光标总是闪烁。还有更多内容——要查看受支持转义序列的完整列表,请参阅此表。

总而言之:线条、边框和分隔符不再输出错乱,彩色输出不再出现多余冒号或错误颜色,残留的不可见代码也不再显示为乱码文本。

这仅仅是开始

libghostty 库已经解析了许多 IDE 尚未处理的序列:OSC 52 剪贴板、桌面通知(OSC 9/777)、ConEmu 进度条、Kitty 图形,以及带样式和颜色的下划线。解析不再是瓶颈。只剩 IDE 侧的工作,因此可以期待这些功能比 JediTerm 时代更快到来。

在实践中,这一基础涵盖了你可能在独立终端中了解的功能:从运行在远程服务器上的程序复制内容到剪贴板;终端中的应用完成任务时收到通知(例如 Claude 处理完提示并正在等待你输入);查看长时间任务的进度条;以及直接在终端中显示图像。

立即试用,2026.3 中默认启用

基于 libghostty 的引擎已在各 IDE 的 2026.3 EAP 构建中,在重新设计的终端里默认开启,并将在 Beta 和 Release Candidate 构建以及稳定版中保持默认启用。

如果出现问题,你可以切回 JediTerm:转到 Help | Find Action,打开 Registry...,然后关闭 terminal.use.ghostty.emulator。如果你也能在 IJPL-218849 上发表评论或提交缺陷报告,告诉我们发生了什么,我们将不胜感激。

感谢 Ghostty

这个故事始于 Ghostty 团队:去年,他们在 IntelliJ IDEA Conf 上找到我们,问我们是否考虑使用他们的模拟器。此后,他们参与了后续的每一次讨论。非常感谢 Mitchell Hashimoto、Tim Culverhouse 以及所有 Ghostty 贡献者。你们将 libghostty 构建为可复用库,并在我们集成期间持续改进它。过去几个月里,libghostty 还获得了 JediTerm 用户所依赖的功能,这让切换成为可能。我们很高兴能在你们的工作基础上继续构建,也期待回馈社区。