2 回答

TA贡献1895条经验 获得超7个赞
值得注意的是为什么 Emacs推迟了软件包的初始化:
请参阅C-hig (emacs) Package Installation RET,尤其是:
加载init文件后会自动加载软件包的原因是,用户选项仅在加载init文件后才收到其自定义值,包括影响打包系统的用户选项。在某些情况下,您可能希望在init文件中显式加载程序包(通常是因为init文件中的其他代码取决于程序包)。在这种情况下,您的初始化文件应调用函数package-initialize。您有责任确保package-load-list在package-initialize通话之前设置相关的用户选项,例如(请参见下文)。您还应该设置 package-enable-at-startup为nil,以避免在处理init文件之后再次加载软件包。或者,您可以选择在启动时完全禁止软件包加载,然后调用命令 M-x package-initialize 手动加载软件包。
因此,只要确保在调用之前确保init文件能够处理package定制组1中想要的变量的所有非默认值package-initialize,并且在定制软件包库配置时保持这种方法,就可以了。这个。
另外,由于after-init-hook在标准程序包初始化完成后运行,因此可以使用它来评估依赖于程序包的任何初始化代码。因此package-initialize,与其直接在init.el 中调用,不如编写:
(add-hook 'after-init-hook 'my-after-init-hook)
(defun my-after-init-hook ()
;; do things after package initialization
)
将需要初始化的软件包系统的代码放入该函数中。
YMMV。
(nb我没有测试过初始化后的方法,因为我并未真正使用package.el;但是我确实确认了启动代码中的事件顺序,因此我相信它将按所述方式工作。)
1个 M-x customize-group RET package RET
添加回答
举报