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