【问题标题】:org-mode - (require 'org-publish) causes downgrade in org-versionorg-mode - (require 'org-publish) 导致 org-version 降级
【发布时间】:2014-06-08 23:21:13
【问题描述】:

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

【问题讨论】:

  • Org 版本 8 中的导出后端被重构为更加模块化。如果你改成(require 'ox-publish),能解决问题吗?
  • 我已经尝试过了,但是 emacs 说找不到ox-publish
  • 我在使用 ELPA 的 org-mode 时遇到了很多问题,然后我直接从 .zip 文件进行安装,它就可以工作,你试过了吗?
  • 我已经为这个问题提供了我自己的答案,看看你是否能从中发现一些东西。

标签: emacs org-mode


【解决方案1】:

问题主要是由于我的 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 邮件列表中的一些人建议我应该检查我是否在我的 init.el 中调用 (package-initialize)。我没有。该操作加载通过包管理器安装的包。如果在init脚本中没有指定,默认在初始化后调用。得知这一点后,我在init.el 的开头某处添加了对(package-initialize) 的调用。之后,我直接调用了load-file 到我的组织发布脚本。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多