我可以拍摄Emacs的矢量(SVG)屏幕​​截图吗?


15

gtk-vector-screenshot程序可用于拍摄Gtk-3应用程序的矢量屏幕截图。似乎可以通过要求应用程序将自身重绘到SVG画布上来工作。

可以使用Gtk +构建GNU / Linux上的Emacs,但是尝试在Emacs窗口上使用上述应用程序会导致屏幕截图仅包含GUI元素(如菜单栏);不渲染缓冲区(我尝试使用开罗和不使用开罗)。鉴于Emacs的缓冲区渲染发生在相当低的水平,这并不奇怪。

仍然有办法拍摄Emacs的可伸缩矢量屏幕截图吗?

Answers:


2

根据文档,Emacs中的Gtk +小部件为:

  • 菜单
  • 对话
  • 工具栏和
  • 滚动条

缓冲区由Emacs本身呈现。缓冲区或缓冲区中的行都不是Gtk +小部件。这意味着他们对Gtk +小部件的导出功能一无所知。

最好的办法是使用htmlfontify-buffer以便将生成的HTML嵌入到包含小部件的SVG中。但这将需要一些额外的工作来合并HTML和SVG。但是请注意,这htmlfontify-buffer有一些限制,并且不适用于每个缓冲区。


我不确定这是否能回答问题。我确实提到take-vector-screenshot了一个例子,但是我也提到它不起作用也就不足为奇了。htmlfontify-buffer有太多的局限性,真正有资格(也不会呈现叠加,显示字符串的换行,字体回退等)
克莱门特

1
@Clément简短的答案是:没办法。
ceving 2013年

这是个人观点,还是您有证据支持该主张?鉴于Emacs拥有大量渲染后端(开罗,直接通过X,Gtk等),人们可以想象对其中一个进行稍微的调整就足够了。
克莱门特

2
@ClémentGtk +可以渲染为SVG,因为Gtk +使用Cairo,而Cairo具有SVG 的后端。Emacs不使用Cairo进行缓冲区渲染。但是开罗有一个实验性分支。也许在不久的将来有可能。
ceving 2013年

1

在开罗构建中可能!

(x-export-frames FRAMES TYPE)

Return image data of FRAMES in TYPE format.
FRAMES should be nil (the selected frame), a frame, or a list of
frames (each of which corresponds to one page).  Each frame should be
visible.  Optional arg TYPE should be either `pdf' (default), `png',
`postscript', or `svg'.  Supported types are determined by the
compile-time configuration of cairo.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.