Emacs 24:加载通过 ELPA 安装的包

Che*_*evy 12 package-management emacs elpa cmake

我刚刚cmake-mode使用以下命令在 Emacs 24 中安装了该软件包:

M-x package-install cmake-mode
Run Code Online (Sandbox Code Playgroud)

我可以在以下位置看到包~/.emacs.d/elpa/cmake-mode-20110824,并且可以使用以下Commentary:部分的说明加载它~/.emacs.d/elpa/cmake-mode-20110824/cmake-mode.el

;; Add this code to your .emacs file to use the mode:
;;
;;  (setq load-path (cons (expand-file-name "/dir/with/cmake-mode") load-path))
;;  (require 'cmake-mode)
;;  (setq auto-mode-alist
;;        (append '(("CMakeLists\\.txt\\'" . cmake-mode)
;;                  ("\\.cmake\\'" . cmake-mode))
;;                auto-mode-alist))
Run Code Online (Sandbox Code Playgroud)

然而,这与ELPA 的 EmacsWiki 页面上的使用说明相矛盾:

...在加载 init.el 后初始化包。这意味着您不应该将特定于包的初始化放入您的 init.el ...

我倾向于同意此说明,因为在我的~/.gnu-emacs文件中添加了一行,例如:

(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")
Run Code Online (Sandbox Code Playgroud)

很丑,如果我升级包会坏。但是,如果没有这条线,我将无法使用cmake-mode.

我在这里错过了什么吗?

笔记:

  • 我没有做任何奇怪的事情package-enable-at-startup,它的价值是t.
  • 我正在使用前奏
  • user-emacs-directory值是"~/.emacs.d/" (感谢@lawlist 的建议)
  • package-user-dir 价值是 "~/.emacs.d/elpa"

law*_*ist 2

我使用 marmalade-repo 安装了 cmake-mode,并查看了 cmake-mode-autoloads.el。看来作者做出了一个有意识的决定,not将设置所需的所有内容都包含在自动加载文件中。但是,cmake-mode.el 第 25 至 30 行的说明是正确的,您在问题中引用了这些说明。如果您使用第 25 至 30 行并正确设置路径,则不需要额外的代码行,例如(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/").

显然,您不想使用/dir/with/cmake-mode-- 您希望~/.emacs.d/elpa/cmake-mode-20110824在结尾处不使用正斜杠。

(setq load-path (cons (expand-file-name "~/.emacs.d/elpa/cmake-mode-20110824") load-path))
(require 'cmake-mode)
(setq auto-mode-alist
      (append '(("CMakeLists\\.txt\\'" . cmake-mode)
                ("\\.cmake\\'" . cmake-mode))
              auto-mode-alist))
Run Code Online (Sandbox Code Playgroud)

如果上面的代码不起作用(使用您自己的路径),您可能需要删除 c-make-mode... 目录并尝试重新安装。