我有类似的东西(简化)
(require 'package)
(setq package-archives
'(("org" . "http://orgmode.org/elpa/")
("melpa" . "http://melpa.org/packages/")
("melpa-stable" . "http://stable.melpa.org/packages/")
("gnu" . "http://elpa.gnu.org/packages/")))
(setq package-enable-at-startup nil)
(package-initialize t)
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(let ((default-directory (expand-file-name user-emacs-directory "elpa")))
(normal-top-level-add-subdirs-to-load-path))
(require 'use-package)
(use-package helm
:ensure t
:commands (helm-M-x
helm-mini
helm-find-files
helm-show-kill-ring)
:init
(add-hook 'after-init-hook 'helm-mode)
:config
(helm-autoresize-mode 1))
在我的.emacs
中。但是在启动emacs后我被告知Symbol's function definition is void: helm-mode
。
在阅读Packaging Basics和this answer手册后,我发现我仍然不了解package.el
的机制。
我注意到手册中使用了load
和activate
这两个词,我想load
是' Emacs将包的内容目录添加到load-path,并且评估name-autoloads.el中的自动加载定义。'并activate
完全require
'。我知道如果我将(package-initialize t)
更改为(package-initialize)
,一切都会好的。
我确认"/Users/gaki/.emacs.d/elpa/helm-20160112.258"
中load-path
和helm-mode
autoload
之类的内容是after-init-hook
。它是否可以自动加载,甚至在html, body {
width: 100%;
height: 100%;
overflow-x: hidden;
position: relative;
}
?
答案 0 :(得分:2)
查看package-activate
及其帮助程序package-activate-1
的代码,表明除非程序包已被“激活”,否则不会加载程序包的自动加载文件。
您告诉Emacs不要使用(package-initialize t)
激活任何软件包,并且在使用(setq package-enable-at-startup nil)
加载init文件后阻止它激活它们,因此您的软件包自动装载都不会被识别到Emacs。
我建议将(package-initialize t)
更改为(package-initialize)
。
请注意,您链接的文档将NO-ACTIVATE
参数描述为“仅供内部使用”。
P.S。激活不require
软件包功能 - 如果自动加载没有任何意图 - 所以这不应该花费很长时间,除非你有一个真的大量的包裹?你实际看到的是什么样的时差? (https://emacs.stackexchange.com/a/19263/454可能有助于回答这个问题。)