背景
Spacemacs 文档推荐 http://spacemacs.org/layers/+emacs/org/README.html#important-note您将其他组织模式配置包装在其中(with-eval-after-load 'org [...config...])
:
(defun dotspacemacs/user-config ()
(with-eval-after-load 'org
;; here goes your Org config
))
这是因为:
从版本 0.104 开始,spacemacs 使用来自 org ELPA 的 org 版本
存储库而不是 emacs 附带的存储库。 [...] 由于自动加载,调用 org 函数将触发 emacs 附带的 org 的加载,这将引发冲突。
但假设你想使用some-package
配置org-mode以各种方式。里面的org相关功能some-package.el
文件是not包装成with-eval-after-load
。对于大多数与组织相关的软件包来说都是如此,它们只有一个require org
声明在顶部。
那你怎么加载some-package
这样它就不会与 spacemacs 的组织实现发生冲突?我的第一个想法是这样做[A]:
(defun dotspacemacs/user-config ()
(with-eval-after-load 'org
(require 'some-package)
;;configure 'some-package and 'org-mode
))
这是正确的方法吗?此外,如果您按照此路线获取 Melpa 软件包,Spacemacs 将在您每次评估您的应用程序时删除并重新安装该软件包dotfile
。为了避免这种情况,必须首先将 Melpa 包添加到[B]
(defun dotspacemacs/layers ()
(setq-default
dotspacemacs-additional-packages '(some-package)
))
Question
一般来说,这段代码([A][B])确保我的some-package
(为 org 提供定制)不会与 spacemacs 的 org 实现混淆吗?或者我实际上必须编辑some-package.el
直接文件并将其与组织相关的函数包装在with-eval-after-load
(希望不是)?或者其他方式?
update
我在 gitter chat 上被告知这样做是安全的dotspacemacs-additonal-packages
and with-eval-after-load
如上所述。这就是解决方案。
Note
作为参考, somepackage 是here https://github.com/jkitchin/scimax/blob/master/scimax-org.el(这不是 Melpa 包,所以[B]不适用于这种特殊情况),但我的问题更具有普遍性。