Next: Adding Export Backends, Previous: Adding Hyperlink Types, Up: Hacking   [Contents][Index]


A.4 Adding Hyperlink preview ¶

默认情况下,Org 支持对指向图片文件的 ‘file’ 和 ‘attachment’ 类型外部链接进行预览(见 Images)。

可通过以下方式为 Org 添加其他链接类型的行内预览支持:

  1. 使用 org-link-set-parameters 为链接类型添加 ‘:preview’ 链接参数。下面以给 ‘docview’ 链接类型添加预览为例:
    (org-link-set-parameters
     "docview" :preview #'org-link-docview-preview)
    
  2. ‘: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))))))
    
  3. 此后调用 org-link-preview 时,会为支持的文档类型(PDF、djvu)生成 docview 链接预览(同时生成图片文件预览)。

Next: Adding Export Backends, Previous: Adding Hyperlink Types, Up: Hacking   [Contents][Index]