cashmere

cashmere

kitty-graphics.el v0.4.0:Sixel、文字缩放和 agent-shell 支持

发布之后我沉寂了一段时间。不是因为失去了兴趣,而是因为我在做迄今为止最大的一次更新。v0.4.0 带来了三个主要功能:Sixel 图形支持、org 标题的文字缩放协议,以及 agent-shell 集成。

这篇文章介绍 v0.4.0 中的所有新功能。

more

** Sixel 支持

这个库不再需要 Kitty 终端。我对图形后端做了抽象,使其可以同时支持 Kitty 图像协议和 Sixel。自动检测通过 DA1 查询完成。如果你的终端支持 Sixel,kitty-graphics 会自动使用它。不需要额外配置。

已在 foot=、=xterm=、=Konsole=、=mltermmintty 中测试确认可用。

img

有一点需要注意: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 里。

img

实现方式是使用 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 修复和改进

** 下一步计划

* 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

img img