请教:我想将 Org Mode 写的 Emacs 配置文件加载方式转成Emacs 退出时编译 Org mode 成 Elisp/elc

使用 org-babel-load-file 来加载 Org Mode 写 Emacs的配置文件,我发现它总是要先编译成 el 文件再加载。

所以我想将这个编译这个过程抽出放到 Emacs 退出时执行

hook 是找到了 (add-hook 'kill-emacs-hook (lambda () () ))

但是没有找到 将 Org Mode 编译成 Elisp/elc 的函数 所以来问有没有人知道

只能硬看 org-babel-load-file 源码(还不知道 Doom 中 Debug Elisp 方式)

实现了 Org Mode 编译成 Elisp/elc 的函数

;; Org Mode 编译成 Elisp/elc 的函数
(defun compile-Org-to-elisp (file)
  (let ((tan (concat
             (file-name-sans-extension file) ".el")
            ))
    (org-babel-tangle-file file tan "emacs-lisp\\|elisp")
    (byte-compile-file tan)
    )
)
                
;; Emacs 退出时将 Org Mode 先编译成 Elisp 
;; 再对这个路径下的所有 el 文件编译成 elc 文件
(add-hook 'kill-emacs-hook (lambda ()
                             (compile-Org-to-elisp "e:/emacs26-3/.doom.d/oc/toOrg.org")
                             (compile-Org-to-elisp "e:/emacs26-3/.doom.d/oc/keybinding.org")
                             (compile-Org-to-elisp "e:/emacs26-3/.doom.d/oc/OrgConfig.org")
                             (compile-Org-to-elisp "e:/emacs26-3/.doom.d/oc/Mode.org")
                             (byte-recompile-directory "e:/emacs26-3/.doom.d/oc/")
                             ))

我加载 elc 用的 load,没时间再想其他优化了(到是能降一些启动速度)

;; 不用加文件后缀名
;; 默认优先加载 elc 文件
;; load 只会加载一个文件
;; 有多个 elc 文件需要加载话,依下面重复写
(load "e:/emacs26-3/.doom.d/oc/toOrg")

不是有 tangle 的嘛…

tangle 之后 bytes compile + native compile 就好

tangle 是那个函数

https://orgmode.org/manual/Extracting-Source-Code.html