繁体   English   中英

加载并激活Emacs package.el

[英]Load and activate of Emacs package.el

我有类似的东西(为简化起见)

(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 但是有人告诉我Symbol's function definition is void: helm-mode启动emacs之后Symbol's function definition is void: helm-mode

阅读包装基础手册和这个答案之后 ,我发现我仍然不理解package.el的机制。

我注意到手册中使用了“ load和“ activate两个词,我认为“ load是“ Emacs将软件包的内容目录添加到加载路径,并在name-autoloads.el中评估自动加载定义”。 activate是“完全require ”。 我知道如果我将(package-initialize t)更改为(package-initialize)一切都会好起来的。

我确认类似"/Users/gaki/.emacs.d/elpa/helm-20160112.258"内容位于load-pathhelm-modeautoload 难道它甚至可以在after-init-hook自动加载?

查看package-activate及其助手package-activate-1的代码,可以看到除非已“激活”软件包,否则不会加载软件包的自动加载文件。

您已经告诉Emacs不要使用(package-initialize t)来激活任何软件包,并且已经阻止了它在使用(setq package-enable-at-startup nil)加载init文件后激活它们。软件包自动加载是Emacs已知的。

我建议将(package-initialize t)更改为(package-initialize)

请注意,链接到的文档将NO-ACTIVATE参数描述为“仅供内部使用”。

PS激活并不require的软件包功能部件-就没有目的的自动加载,如果它没有-所以这不应该采取的时间很显著量,除非也许你有一个非常大的包数? 您在这里实际看到的是哪种时差? https://emacs.stackexchange.com/a/19263/454可能有助于回答。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM