怎样在 emacs --batch 时加载最新的 orgmode,而不是自带的?

怎样在 emacs --batch 时加载最新的 orgmode,而不是 emacs 自带的?我试了多次,都只能得到 org 8.2,不能得到 org 9.1.

诚心求教,Google 搜不到相关问题,这问题解决不了没法畅快地用 org 写 nikola 博客了

已经解决了,比较粗暴,把系统的 org 直接 sudo rm -rf

仍然寻求优雅的方案。

(defun eh-hack-load-path ()
  ;; Delete buildin org's PATH
  (setq load-path
        (cl-remove-if
         #'(lambda (path)
             (string-match "lisp/org$" path))
         load-path))
  ;; Demove property lists to defeat cus-load and remove autoloads
  (mapatoms
   #'(lambda (sym)
       (let ((sym-name (symbol-name sym)))
         (when (string-match "^\\(org\\|ob\\|ox\\)-?" sym-name)
           (setplist sym nil)
           (when (autoloadp sym)
             (unintern sym)))))))

1 个赞

大致就是确保在 load-path 中新版的 Org mode 比旧版的靠前:

~ $ emacs --batch --eval '(org-version nil t t)'
Org-mode version 8.2.10 (release_8.2.10 @ /usr/local/Cellar/emacs/25.3/share/emacs/25.3/lisp/org/)
~ $ emacs --batch -L ~/.emacs.d/elpa/org-20170906 --eval '(org-version nil t t)'
Org mode version 9.1 (9.1-elpa @ /Users/xcy/.emacs.d/elpa/org-20170906/)
1 个赞

感谢两位大神的回复,可惜我没法测试了,已经把自带 org 删除了 :joy:

@xuchunyang 的方案更简单些,原来一个 -L 就搞定了,我喜欢