Подтвердить что ты не робот

Как восстановить пакеты ELPA после обновления Emacs

Я только что обновил GNU Emacs с 23 до 24 на MacOS, а некоторые установленные пакеты ELPA перестали работать. Один из них - AucTeX. Удаление и повторная установка через диспетчер пакетов заставили его работать снова, но я не хочу делать это вручную для каждого пакета. Я немного смущен, что ничего не знаю об этом в Интернете.

Не нужно ли переписывать .elc для новой версии Emacs? Почему это не свойство package.el?

4b9b3361

Ответ 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))))))