发布之后我沉寂了一段时间。不是因为失去了兴趣,而是因为我在做迄今为止最大的一次更新。v0.4.0 带来了三个主要功能:Sixel 图形支持、org 标题的文字缩放协议,以及 agent-shell 集成。
这篇文章介绍 v0.4.0 中的所有新功能。
more
** Sixel 支持
这个库不再需要 Kitty 终端。我对图形后端做了抽象,使其可以同时支持 Kitty 图像协议和 Sixel。自动检测通过 DA1 查询完成。如果你的终端支持 Sixel,kitty-graphics 会自动使用它。不需要额外配置。
已在 foot=、=xterm=、=Konsole=、=mlterm 和 mintty 中测试确认可用。

有一点需要注意:Kitty 图像协议在速度和图片质量上仍然更优。Kitty 提供真彩色渲染和有状态的图片管理。Sixel 最多支持 256 色,并且每次重绘都需要重新传输图片数据。如果你的终端同时支持两者,建议使用 Kitty。
Sixel 后端复用了与 Kitty 后端相同的 overlay 系统、缓存和刷新周期。所有现有功能(org 内联图片、LaTeX 预览、doc-view、image-mode、dirvish)在两种协议下都能正常工作。
** 文字缩放协议 (OSC 66)
这是一个全新的领域。我们现在可以按不同大小渲染 org 标题。=* Heading= 以 2x 渲染,=** Sub= 以 1.5x,=*** Deep= 以 1.2x。看起来就像真正的排版层级,直接在终端 Emacs 里。

实现方式是使用 OSC 66 转义序列告诉终端以不同的缩放比例渲染文本。Overlay 被放置在标题行上方并发出缩放后的文本。标题的折叠和展开能正确工作。滚动也能正确工作。刷新周期会跟踪 overlay 位置并清理过期的渲染。
预览模式会临时禁用与 overlay 冲突的包(org-modern、org-appear、olivetti 等)以获得干净的渲染效果。你可以在文字缩放激活时切换图片,不过目前还不能同时使用两者。
这个功能还需要打磨。OSC 66 非常新,目前还没有多少实现。现在需要 Kitty >= 0.40.0,这是目前唯一实现了带缩放支持的 OSC 66 的终端。
我会继续改进这个功能。我觉得这真的是很好的视觉效果,而且是我以前在终端里从未见过的东西。有人在我 Reddit 帖子下面提到了这个协议,当时我完全不知道它的存在。如果你就是那个人,谢谢你。
** agent-shell 支持
感谢 Lenbok,kitty-graphics 现在可以在 agent-shell 会话中工作。图片可以在 agent-shell buffer 中正常显示。这是通过 PR #3 贡献的。
** Bug 修复和改进
- 文字缩放的列边界保护,防止越界渲染
- CPU 优化:减少文字缩放路径中的冗余重绘
- 预览模式稳定性改进
- Sixel 后端兼容性:与 Kitty 协议路径更好地互操作
- 折叠到同一视觉行的标题不再发出 overlay(防止幽灵字形)
- 切换到 ECH 擦除 + 预擦除模式(感谢 mdfried)以获得更干净的列清除
- 在位置查询前强制 redisplay,修复初始图片定位问题
** 下一步计划
* tmux 支持
tmux 已经支持 Sixel,所以 Sixel 后端可以直接在 tmux 中工作。还有一个开发中的分支正在为 tmux 添加 Kitty 图像协议支持。如果你已经直接使用 Kitty,我建议继续用它。Kitty 协议提供有状态的图片管理、真彩色渲染和更流畅的体验。
* 项目重命名?
我在考虑把项目重命名为 terminal-gfx 之类的名字。我们现在支持不止一种协议,也开始稳定文字协议的支持。这是我第一个有人真正 在用的项目,所以如果你有建议或反馈,我很乐意听到。
如果我真的重命名,我会确保你现有的配置不会被破坏。向 neovim 和它稳定的生态系统致敬,/咳咳/。
** 安装
将 kitty-graphics.el 放到你的 load path 中并启用该模式:
(require 'kitty-graphics)
(kitty-graphics-mode 1)
或者使用 use-package 和 =straight.el=:
(use-package kitty-graphics
:straight (:host github :repo "cashmeredev/kitty-graphics.el")
:if (not (display-graphic-p))
:config
(kitty-graphics-mode 1))
注意 :if 条件不再检查 =KITTYPID=,因为现在也支持 Sixel 终端了。
如果你遇到问题或有功能建议,请在 GitHub 上提 issue。
发布版本:GitHub 上的 v0.4.0
