默认情况下,Org 支持对指向图片文件的 ‘file’ 和 ‘attachment’ 类型外部链接进行预览(见 Images)。
可通过以下方式为 Org 添加其他链接类型的行内预览支持:
org-link-set-parameters 为链接类型添加 ‘:preview’ 链接参数。下面以给 ‘docview’ 链接类型添加预览为例:
(org-link-set-parameters "docview" :preview #'org-link-docview-preview)
函数需返回非空值表示预览成功,返回 ‘nil’ 表示预览失败,放置在链接上的覆盖层会被移除。
本示例中使用 ‘convert’ 程序( ‘imagemagick’ 工具集组件)生成行内显示的缩略图。
(defun org-link-docview-preview (ov path _elem)
"在覆盖层 OV 中预览 PATH 对应的文件。
_ELEM 为链接元素的语法节点。"
(when (executable-find "convert")
(let* ((path (expand-file-name (substitute-in-file-name path)))
(output-file (expand-file-name (concat "org-docview-preview-"
(substring (sha1 path) 0 10)
".png")
temporary-file-directory)))
;; 创建或查找对应路径的预览图
(when (or (file-readable-p output-file)
(= 0 (call-process
"convert"
nil (get-buffer-create "*Org Docview Preview Output*") nil
"-thumbnail" "x320" "-colorspace" "rgb"
"-background" "white" "-alpha" "remove" "-strip"
(concat path "[0]") output-file)))
;; 若预览图片可用,通过覆盖层显示
(overlay-put ov 'display (create-image output-file))))))
org-link-preview 时,会为支持的文档类型(PDF、djvu)生成 docview 链接预览(同时生成图片文件预览)。