org-mode - (require' org-publish)导致org-version中的降级

时间:2014-06-08 23:21:13

标签: emacs org-mode

我刚刚将org-mode升级到ELPA中的最新版本。根据官方文档,安装必须在新的emacs会话中完成,其中没有加载与组织相关的脚本/文件。安装成功,org-version报告我已更新到8.2.6(从7.9.3f开始)。但是,只要我放回旧的与org相关的脚本并重新加载emacs,我就会在运行org-version时得到7.9.3f。为了跟踪导致它的原因,我通过逐个添加与组织相关的脚本来回溯我的步骤。我发现当我添加(require 'org-publish)时,版本会降级为内置版本。我不知道为什么会这样。

1 个答案:

答案 0 :(得分:2)

问题主要是由于我的emacs初始化方式(初始化脚本)。

  • 在org的最新版本(撰写本文时为8.2.6),org-publish现在为ox-publish,因此我需要调用(require 'ox-publish')。我认为调用org-publish或任何旧版本模块会导致设置混乱。
  • 但是,在更改引用后,我收到了有关ox-publish未找到的错误。
  • 为了进一步跟踪问题,我从init.el删除了所有与组织相关的脚本(这就是我命名初始化脚本的方式),然后再次运行emacs。当那时我跑org-version时,我看到它是8.2.6。
  • 要检查是否加载ox-publish,我使用暂存缓冲区,并手动执行(require 'ox-publish');它返回正常,确认模块实际上已加载。这意味着ox-publish仅在初始化后加载。
  • 我的第一个工作是使用after-init-hook初始化后加载我的组织发布脚本:

    (add-hook 'after-init-hook (lambda() (load-file "/path/to/org-publish-project.el")))
    
  • 解决了这个问题,我可以看到我的org安装正确升级了。但是,我对通过after-init-hook加载脚本感觉不太好。官方orgmode邮件列表中的某些人建议我检查我是否在(package-initialize)中呼叫init.el。我没有。该操作加载通过包管理器安装的包。如果未在init脚本中指定,则默认情况下将在初始化后调用它。了解到这一点,我在(package-initialize)开头的某个地方添加了对init.el的电话。之后,我直接给我的组织发布脚本打了load-file

    (load-file "/path/to/org-publish-project.el")