emacs 内的 svg 动画如何显示?

SVG 可以制作一些动画,我在emacs 的 org 文件内内插入 svg-anim01 并以 org-display-inline-images 方式显示这张图片,显示正常,但是并没有动画效果,请问如何才能在 emacs 里查看这个 svg 动画?

参考链接:SVG/animate

Emacs 和 librsvg 都不支持 SVG 动画。SVG animate 元素还是草案就不提了,CSS 动画和 DOM 操作这个一般只有浏览器引擎才有支持。

建议问问 @manateelazycat 他的 EAF 生态有没有图片查看器支持这功能。

我查阅了 librsvg 的仓库,确实目前没有计划开发动画功能,issuse/307 ,目前确实只有 firefox 这样的浏览器有支持。

不过,SVG2 规范于 2018-10-04 正式发布,但目前也确实没有普及。

EAF没法支持org文件嵌入渲染,我最近开发的holo-layer倒是有戏

1 个赞

如果按照 holo-layer 的架构来实现, 下面是伪代码的方式:

  1. org-mode 本身获取 svg block 的坐标和大小, 发给 holo-layer
  2. holo-layer 根据坐标和大小, 创建对应的浏览器控件, 盖在 org-mode svg block 上, 因为浏览器天生就会支持所有功能, 所以动画本身没有问题
  3. org-mode 滚动的时候检测 svg block 的坐标, 如果超出窗口可视区域 holo-layer 就隐藏控件, 如果只是一部分显示, 就实时给 holo-layer 发送消息, 这样 holo-layer 可以根据 svg block 的大小来隐藏窗口区域外的部分

理论上来说, 上面的步骤可以实现对 org-mode 里面所有多媒体的内容进行实时渲染, 包括 video, latex, svg, image 等等。

2 个赞

org inline image 是以 overlay-put ‘display 的方式插入图片显示的,只能通过自己换算才能得到坐标和大小区域。 或许有直接可以转换 overlay 坐标的库?