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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

M-x list-packages. C-s installed, пока вы не найдете первую строку установленного пакета. Начните выбор с помощью C-SPC. Спускайтесь, пока не достигнете встроенных пакетов. Скопируйте с помощью M-w. C-x b для нового буфера. Вставьте C-y. C-x C-s, чтобы сохранить файл.

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

Ответ 3

Как указано в как автоматически установить пакеты 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 по умолчанию получает только последние версии, доступные для каждого пакета. gist