如何在升级Emacs后重建ELPA包

时间:2014-07-13 18:17:06

标签: emacs elpa

我刚刚在MacOS上将GNU Emacs从23升级到24,并且一些ELPA安装的软件包停止工作。其中之一是AucTeX。删除它并通过包管理器重新安装它使它再次工作,但我不想手动为每个包执行此操作。我有点困惑,我在互联网上找不到任何相关信息。

对于新版本的Emacs,是否需要重新编译.elc?为什么这不是package.el的功能?

4 个答案:

答案 0 :(得分:86)

您无需重新安装所有软件包。包本身可能很好,但是,它们需要重新编译,因为Emacs Lisp字节代码通常在主要版本之间不兼容。

要重新编译所有包,请键入M-: (byte-recompile-directory package-user-dir nil 'force)。重新启动Emacs后,软件包应该可以正常工作。

答案 1 :(得分:3)

变量package-activated-list包含我们感兴趣的软件包列表。所以我们只需要再次安装每个软件包。我们不需要明确删除它们;致电package-install会打消旧版本。

将此代码放在暂存缓冲区中并对其进行评估(即将光标放在最后,然后按C-x C-e):

(dolist (package-name package-activated-list)
  (package-install package-name))

答案 2 :(得分:3)

这适用于Emacs 25.1和26:

(defun package-reinstall-all-activated-packages ()
  "Refresh and reinstall all activated packages."
  (interactive)
  (package-refresh-contents)
  (dolist (package-name package-activated-list)
    (when (package-installed-p package-name)
      (unless (ignore-errors                   ;some packages may fail to install
                (package-reinstall package-name))
        (warn "Package %s failed to reinstall" package-name)))))

答案 3 :(得分:1)

emacs 25之后的食谱:

  1. .emacs中的(定义软件包列表):
(custom-set-variables
 '(package-selected-packages
   (quote
      (browse-kill-ring helm undo-tree use-package)))
  1. 在终端机上
$ rm -rf ~/.emacs.d/elpa/*
  1. 在emacs中:
(progn (package-refresh-contents)
    (package-install-selected-packages)
    (byte-recompile-directory package-user-dir nil 'force))