Как сохранить список всех установленных пакетов в Emacs 24?

Я использую прелюдию в качестве базовой конфигурации Emacs. Я установил много пакетов из диспетчера пакетов и хочу использовать свои настройки на другом компьютере.

Я не хочу нести установленные пакеты, а также я не хочу создавать список вручную.

Как можно сохранить список всех установленных пакетов в prelude-package.el или любом другом файле, чтобы при переносе этой конфигурации на другой компьютер они автоматически устанавливались там при первом использовании?

3 ответа

Решение

Вы можете получить список установленных на данный момент пакетов (исключая встроенные пакеты) из переменной package-activated-list, Чтобы автоматически установить их при запуске, посмотрите этот вопрос: как автоматически установить пакеты emacs, указав список имен пакетов?

Более конкретно, если вы выполните Ch v package-activ-list, скопируйте показанное значение и вставьте его в качестве значения prelude-packages, emacs автоматически обеспечит установку этих пакетов при запуске.

Каноническая методология является лучшей (описана атайлором). Вот более неуклюжий метод.

Mx list-пакеты. Cs установлен, пока вы не найдете первый ряд установленного пакета. Начните выбирать с C-SPC. Идите вниз, пока не дойдете до встроенных пакетов. Скопировать с Mw. Cx b для нового буфера. Вставить с Cy.Cx Cs, чтобы сохранить файл.

Единственное преимущество, которое я вижу, в том, что это немного более наглядно. Отображение небольшого описания ваших пакетов. полезно, когда вы устанавливаете некоторые пакеты и забываете об этом.

Как уже упоминалось, как автоматически устанавливать пакеты emacs, указав список имен пакетов?, было бы лучше также записать версию пакета, который вам нужен. Для этого вы можете использовать следующую функцию:

(defun list-packages-and-versions ()
  "Returns a list of all installed packages and their versions"
  (mapcar
   (lambda (pkg)
     `(,pkg ,(package-desc-version
                (cadr (assq pkg package-alist)))))
   package-activated-list))

Это даст вам список (NAME VERSION) пар. К сожалению, я не смог найти способ установить конкретную версию пакета. Похоже на то package.el всегда захватывает последние доступные Что я делаю сейчас:

(defun install-packages-with-specific-versions (package-version-list)
  "Install the packages in the given list with specific versions.
PACKAGE-VERSION-LIST should be a list of (NAME VERSION) lists,
where NAME is a symbol identifying the package and VERSION is
the minimum version to install."
  (package-download-transaction
   (package-compute-transaction () package-version-list)))

Я написал более длинную функцию для установки пакетов, соответствующих точному номеру версии, но она не работает, потому что package.el по умолчанию извлекаются только самые последние версии, доступные для каждого пакета. суть

Как описано выше, с использованием нормального режима emacs. Вот еще один злой способ сделать это:

Mx list-packages; / установлен (они будут выделены); v (для визуального режима); j (выбрать их); y (чтобы скопировать их); откройте новый буфер и вставьте их.

Другие вопросы по тегам