Как восстановить пакеты ELPA после обновления Emacs
Я только что обновил GNU Emacs с 23 до 24 на MacOS, а некоторые установленные пакеты ELPA перестали работать. Один из них - AucTeX. Удаление и повторная установка через диспетчер пакетов заставили его работать снова, но я не хочу делать это вручную для каждого пакета. Я немного смущен, что ничего не знаю об этом в Интернете.
Не нужно ли переписывать .elc для новой версии Emacs? Почему это не свойство package.el?
Ответы
Ответ 1
Вам не нужно повторно устанавливать все пакеты. Сами пакеты, вероятно, прекрасны, однако их нужно перекомпилировать, потому что код Emacs Lisp байт обычно не совместим в основных версиях.
Чтобы повторно скомпилировать все пакеты, введите M-: (byte-recompile-directory package-user-dir nil 'force)
. После перезапуска Emacs пакеты должны снова работать нормально.
Ответ 2
Переменная package-activated-list
содержит список интересующих нас пакетов. Поэтому нам просто нужно установить каждый из них. Нам не нужно явно удалять их; вызов package-install
сдует старую версию.
Поместите этот код в буфер нуля и оцените его (то есть положите курсор в конец и нажмите C-x C-e
):
(dolist (package-name package-activated-list)
(package-install package-name))
Ответ 3
Это работает для меня на Emacs 25.1 и 26:
(defun package-reinstall-activated ()
"Reinstall all activated packages."
(interactive)
(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))))))