Je viens de mettre à niveau GNU Emacs de 23 à 24 sur MacOS et certains packages installés par ELPA ont cessé de fonctionner. L'un d'eux est AucTeX. Le supprimer et le réinstaller via le gestionnaire de packages l'a fait fonctionner à nouveau, mais j'ai Je ne veux pas le faire à la main pour chaque paquet. Je suis un peu confus de ne rien trouver à ce sujet sur Internet.
Le .elc n'a-t-il pas besoin d'être recompilé pour une nouvelle version d'Emacs? Pourquoi n'est-ce pas une fonctionnalité de package.el?
Vous n'avez pas besoin de réinstaller tous les packages. Les packages eux-mêmes sont probablement corrects, cependant, ils doivent être recompilés, car le code d'octets LISP d'Emacs n'est généralement pas compatible entre les principales versions.
Pour recompiler tous les packages, tapez M-: (byte-recompile-directory package-user-dir nil 'force)
. Après avoir redémarré Emacs, les packages devraient à nouveau fonctionner correctement.
La variable package-activated-list
contient la liste des packages qui nous intéressent. Il nous suffit donc de réinstaller chacun. Nous n'avons pas besoin de les supprimer explicitement; appelant package-install
fera sauter une ancienne version.
Mettez ce code dans un tampon de travail et évaluez-le (c'est-à-dire, placez votre curseur à la fin et appuyez sur C-x C-e
):
(dolist (package-name package-activated-list)
(package-install package-name))
Cela fonctionne pour moi sur Emacs 25.1 et 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)))))
ma recette après 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))