Сбой управления пакетами Emacs в Emacs 27.1

#emacs #magit #melpa

#emacs #magit #melpa

Вопрос:

Моя конечная цель — снова заставить magit работать с Emacs 27.1 на openSUSE Tumbleweed, но перед этим возникает проблема в том, чтобы заставить работать управление пакетами (melpa?) — так что это действительно то, о чем этот пост. Я сталкиваюсь с этими проблемами с другими пакетами; magit — это просто пример, потому что хочу, чтобы они были потрясающими. В последнее время я не устанавливал никаких пакетов с Emacs 26.3, но я предполагаю, что все было в порядке. Magit, безусловно, работал.

Попытка начать с чистого листа:

 rm .emacs
rm -r .emacs.d
  

Нужен melpa для получения magit, поэтому я создаю новый .emacs только с этим внутри:

 (require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
  

При перезапуске emacs команда package-list показывает массу содержимого melpa (ура!). Включая magit!

Итак, я устанавливаю это (версия 20200820.227), нажав на кнопку установки, затем «Да», когда он запрашивает подтверждение. Вот что происходит в конце буфера «Сообщений»:

 Wrote /home/tcarroll/.emacs.d/elpa/magit-20200820.227/magit-autoloads.el [2 times]
Loading async...done
Contacting host: melpa.org:80

error in process sentinel: async-handle-result: End of file during parsing
error in process sentinel: End of file during parsing
  

На данный момент magit «установлен» — и magit-status даже работает. Но если я перезапущу Emacs, запуск magit-status приведет к:

load-history-filename-element: Wrong type argument: stringp, (require . info)

… и я на самом деле не получаю никакого статуса Git.

Я получаю некоторый вывод, который, насколько я помню, никогда не получал при запуске Emacs 26.3:

 Warning: game dir '/var/games/emacs': Permission denied
Loading loadup.el (source)...
dump mode: nil
Using load-path (/usr/share/emacs/27.1/site-lisp /usr/share/emacs/site-lisp /usr/share/emacs/27.1/lisp /usr/share/emacs/27.1/lisp/emacs-lisp /usr/share/emacs/27.1/lisp/progmodes /usr/share/emacs/27.1/lisp/language /usr/share/emacs/27.1/lisp/international /usr/share/emacs/27.1/lisp/textmodes /usr/share/emacs/27.1/lisp/vc)
Loading emacs-lisp/byte-run...
Loading emacs-lisp/byte-run...done
Loading emacs-lisp/backquote...
  

Несколько скриншотов «Загрузки» того и этого; Я могу включить больше, если это полезно. Я предполагаю, что это как-то связано с новым portable dumper?

Поблизости от меня очень много гладко выбритых яков (а остальные напуганы). Пытаюсь не допустить, чтобы это заняло слишком много времени.

Добавление новой информации по запросу:

openSUSE Tumbleweed обновил сегодня emacs. Все еще в версии 27.1, но датирован сегодняшним днем:

GNU Emacs 27.1 (build 1, x86_64-suse-linux-gnu, GTK Version 3.24.22, cairo version 1.16.0) of 2020-08-25

Переключен на отладку с помощью переключения-debug-on-error. Поведение при установке, к сожалению, ничего нового; все еще

async-handle-result: End of file during parsing

Еще раз спасибо за любую помощь!

Комментарии:

1. Можете ли вы попробовать клонировать репозиторий Magit и добавить его в path. Это был бы альтернативный способ установки.

2. Посмотрите, M-x toggle-debug-on-error приведет ли вас к возврату, если вы воспроизведете эту ошибку. «Конец файла во время синтаксического анализа», безусловно, указывает на то, что что-то не загрузилось должным образом; но навскидку я не уверен, что бы это могло быть.

Ответ №1:

Оказывается, /usr/bin/emacs — это скрипт, а не двоичный файл (я уверен, что для большинства из вас это старая новость), и он выбирает между различными способами вызова Emacs. Для меня ключевым моментом является то, что в конце он делает это:

exec -a emacs /usr/bin/emacs-gtk

что приводит к тому, что Emacs выдает множество сообщений о «загрузке» того или иного, включая loadup.el, и, наконец, не работает должным образом в отношении пакетов (затронуты Org и Magit, возможно, другие).

Когда я вызываю это вместо:

/usr/bin/emacs-gtk

… Я не вижу ни одного из этих сообщений о «загрузке». И Magit, и Org работают нормально.

Исходя из моего ограниченного понимания этого «exec -a», кажется, что «не должно» быть такой разницы в поведении, так что, возможно, это какая-то глупая вещь в моей среде, которую я упустил из виду. Но теперь все работает.

Комментарии:

1. Мой emacs — это фактический двоичный файл — такого рода вещи будут зависеть только от того, как вы установили Emacs. Предположительно, то, что вы видите, — это подход, используемый пакетом openSUSE.

2. Интересно видеть сообщения «включая loadup.el» — это указывает на не загруженный Emacs — loadup.el определяет, что будет предварительно загружено в выгруженный исполняемый файл. Итак, возможно, проблема с (новым) переносным дампером в 27.1. Вы действительно устанавливали 27.1 через пакет openSUSE или вы вручную установили 27.1 поверх ранее существующего пакета openSUSE для более ранней версии Emacs?

3. @phils Управление пакетами openSUSE (Tumbleweed) (YaST / zypper) обработало установку Emacs, включая обновление до 27.1. Я не думаю, что 26.3 больше существует.

4. Для меня это звучит как проблема либо с новым пакетом Tumbleweed для 27.1, либо с процессом обновления из более старого пакета. Я предлагаю вам зарегистрировать это в восходящем потоке у тех, кто обслуживает пакеты, и посмотреть, смогут ли они увидеть, что пошло не так, и предотвратить это в будущем.

5. Открыт bugzilla.opensuse.org/show_bug.cgi?id=1175915