GNU EmacsをMacOSで23から24にアップグレードしたところ、一部のELPAインストールパッケージが機能しなくなりました。そのうちの1つはAucTeXです。削除してパッケージマネージャーから再インストールすると、再び機能しますが、すべてのパッケージに対してこれを手作業で行いたくないのですが、インターネットでそれについて何も見つけられないのではないかと少し混乱しています。
Emacsの新しいバージョン用に.elcを再コンパイルする必要はありませんか?これはなぜpackage.elの機能ではないのですか?
すべてのパッケージを再インストールする必要はありません。 Emacs LISPバイトコードは通常、メジャーバージョン間で互換性がないため、パッケージ自体はおそらく問題ありませんが、再コンパイルする必要があります。
すべてのパッケージを再コンパイルするには、M-: (byte-recompile-directory package-user-dir nil 'force)
と入力します。 Emacsを再起動した後、パッケージは再び正常に動作するはずです。
変数package-activated-list
は、対象のパッケージのリストを保持しています。そのため、それぞれを再度インストールするだけで済みます。それらを明示的に削除する必要はありません。 package-install
を呼び出すと、古いバージョンが吹き飛ばされます。
このコードをスクラッチバッファーに入れて評価します(つまり、カーソルを最後に置き、C-x C-e
を押します)。
(dolist (package-name package-activated-list)
(package-install package-name))
これは私にとって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)))))
emacs 25後の私のレシピ:
(custom-set-variables '(package-selected-packages (quote (browse-kill-ring helm undo-tree use-package)))
$ rm -rf ~/.emacs.d/elpa/*
(progn (package-refresh-contents) (package-install-selected-packages) (byte-recompile-directory package-user-dir nil 'force))