【问题标题】:Org-mode in Spacemacs: with-eval-after-load and additional-packagesSpacemacs 中的组织模式:with-eval-after-load 和附加包
【发布时间】:2017-05-11 14:15:21
【问题描述】:

背景

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 使用来自 org ELPA 的 org 版本 存储库而不是 emacs 附带的存储库。 [...] 由于自动加载,调用 org 函数将触发加载带有 emacs 的 org,这将引发冲突。

但是假设您想使用 some-package 以各种方式配置 org-modesome-package.el 文件中的组织相关函数 包含在 with-eval-after-load 中。大多数与组织相关的包都是如此,它们的顶部只有一个require org 声明。

那么你如何加载 some-package 使其不与 spacemacs 的 org 实现冲突?我的第一个想法是这样做 [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 的 org 实现发生冲突?还是我实际上必须直接编辑some-package.el 文件并将其与组织相关的功能包装在with-eval-after-load 中(希望不是)?还是其他方式?

更新

我在 gitter 聊天中被告知,如上所述,dotspacemacs-additonal-packageswith-eval-after-load 是安全的。这就是解决方案。

注意

作为参考,那个 somepackage 是 here(它不是 Melpa 包,所以 [B] 不适用于这个部分案例),但我的问题更笼统。 p>

【问题讨论】:

  • 供参考,这个问题也被提出here
  • ".... 大多数与 org 相关的软件包...假设您使用的是 Emacs 附带的 org 版本”:AFAIK,他们确实假设:他们假设有一个他们可以使用的组织(这可能是真实的,也可能不是真实的)。如果没有加载 org-mode 并且您加载了这样的包并且它调用了自动加载的 org 函数,它将尝试加载 emacs 附带的默认 org(如果您随后以某种方式加载 ELPA-org,这可能会导致“混合安装” )。但是如果你已经加载了 ELPA-org 并且能够满足任何需求,那么应该没有问题:emacs 提供的 org 将永远不会被触及。

标签: emacs org-mode spacemacs


【解决方案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 文件。我在尝试加载上述文件时犯了错误,因为它们更改了组织设置,它们会触发加载。这个问题表现为奇怪的警告,比如 variable void 或类似的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2018-03-05
    • 2013-04-23
    • 1970-01-01
    相关资源
    最近更新 更多