λ J*_*kas 45 emacs dot-emacs emacs24
在我看来,内置在Emacs 24上的新Package系统在正确加载和初始化已安装的软件包时存在一些缺陷.
最近,我升级到Emacs 24.1.1,它于2012年10月6日发布,我一直在尝试使用内置的软件包系统,并使用它安装了几个软件包,但它们都有类似的问题,与自动加载和初始化.
例如,我使用一个名为的包smex,它提供了使用M-x和弦的增强功能.它需要你定义一个键M-x,所以我添加(global-set-key (kbd "M-x") 'smex)到我的init.el文件中.但是在启动emacs之后我按下M-x和弦,我收到消息"符号的函数定义是无效的:smex" ...如果我也放入(require 'smex)我的init.el文件,我收到错误消息"文件错误:无法打开加载文件,smex "
将smex的位置添加到load-path变量使得它按预期工作,但是,这似乎打破了首先拥有包系统的整个目的......
有什么想法吗?有没有更好的方法,或者我们现在忍受这个限制?
phi*_*ils 79
值得注意的是为什么 Emacs推迟了包初始化:
看C-hig (emacs) Package Installation RET,特别是:
加载init文件后自动程序包加载的原因是用户选项仅在加载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在标准包初始化完成后运行,您可以使用它来评估依赖于包的任何init代码.因此package-initialize,您可以改为直接在init.el 中调用:
(add-hook 'after-init-hook 'my-after-init-hook)
(defun my-after-init-hook ()
;; do things after package initialization
)
Run Code Online (Sandbox Code Playgroud)
将需要初始化包系统的代码放在该函数中.
因人而异.
(nb我没有测试过post-init方法,因为我没有真正使用package.el;但我确实在启动代码中确认了事件的顺序,所以我相信它会按照描述工作.)
1 M-x customize-group RET package RET
Nic*_*out 42
你有安装包package.el默认激活后,您.emacs被加载.为了能够在.emacs你结束之前使用它们,你需要使用命令激活它们:
(setq package-enable-at-startup nil)
(package-initialize)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13197 次 |
| 最近记录: |