分享:保存时自动导出的一种优雅方案

在之前,如果想让 Org 文件在保存时自动导出,可以在其开头配置本地变量:

# -*- after-save-hook: org-latex-export-to-latex; org-export-in-background: t; -*-

但这还是太长了一点,不便记忆也不便输入。 而且,每次打开文件时还可能弹出警告。 ——不够优雅。

这里提供一种基于 Org 文件自定义属性的方案。 Elisp 配置如下:

(defun my-org-oxauto ()
  "Auto export when saving for Org mode."
    (let ((oxauto (org-collect-keywords '("oxauto"))))
    (when oxauto
      (dolist (keywords oxauto)
        (let ((export-formats (split-string (cadr keywords) "," t " ")))
          (dolist (export-format export-formats)
            (pcase export-format
              ("latex"
               (setq org-export-in-background t)
               (add-hook 'after-save-hook 'org-latex-export-to-latex nil t))
              ("html"
               (setq org-export-in-background t)
               (add-hook 'after-save-hook 'org-html-export-to-html nil t))
              )))))))

(add-hook 'org-mode-hook 'my-org-oxauto)

用法:在 Org 文件中,使用 #+oxauto: 指定要自动导出的格式名称,多个格式名称用逗号分隔。

例如 #+oxauto: html,latex ,这样在每次保存时就会在后台自动导出到 html 和 latex。

以上示例仅支持 html 和 latex,想要使用其他导出格式也较为容易,向 (pcase export-format 这行下面添加对应格式的配置即可。

注意,可能需要 kill buffer 再重进才能生效。

5 个赞