Spacemacs中的组织模式:with-eval-after-load和附加包

时间:2017-05-11 14:15:22

标签: emacs org-mode spacemacs

背景

Spacemacs documentation recommends您在(with-eval-after-load 'org [...config...])中包含其他组织模式配置:

(defun dotspacemacs/user-config ()
  (with-eval-after-load 'org
   ;; here goes your Org config
   ))

这是因为:

  

自版本0.104起,spacemacs使用组织ELPA中的组织版本   存储库而不是emacs附带的存储库。 [...]由于自动加载,调用组织函数将触发加载emacs附带的组织,这将导致冲突。

但是,让我们假设您希望以各种方式使用some-package配置 org-mode some-package.el文件中与org相关的功能 包含在with-eval-after-load中。大多数与org相关的包都是如此,它们在顶部只有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)
   ))

问题

一般情况下,此代码( [A] [B] )是否会确保我的some-package(为org提供自定义)不会混淆spacemacs'组织实施?或者我是否真的必须直接编辑some-package.el文件并将其与组织相关的函数包装在with-eval-after-load中(希望不是)?或者其他一些方式?

更新

我在gitter聊天时被告知,如上所述,可以安全地执行dotspacemacs-additonal-packageswith-eval-after-load。这就是解决方案。

注意

作为参考,那个包是here(它不是Melpa包,所以 [B] 不适用于此partuclar案例),但我的问题更多的是一般的。

1 个答案:

答案 0 :(得分:1)

我没有找到如何从github加载文件,这就是我现在正在做的事情。

  (with-eval-after-load 'org
    (load-file "~/.emacs.d/private/scimax-org-babel-ipython.el"))

我也试过下面的代码,但每次下载并延迟启动,可能还有一些其他问题

(scimax-org-babel-ipython :location (recipe :fetcher github :repo "jkitchin/scimax") :files ("scimax-org-babel-ipython.el"))

scimax库非常可靠,我希望作者将来会把它放在melpa上。

警告:在加载正确的组织之前更改任何组织设置将触发加载错误的组织版本。这将彻底弄乱安装。解决此问题的唯一方法是删除elpa文件夹中的所有.elc文件。我在尝试加载上面的文件时犯了错误,因为他们更改组织设置会触发加载。这个问题表现在奇怪的警告中,如变量void或类似的。