Как сохранить список всех установленных пакетов в Emacs 24?
Я использую prelude в качестве базовой конфигурации Emacs.
Я установил много пакетов из диспетчера пакетов, и я хочу использовать мои настройки на другом компьютере.
Я не хочу переносить установленные пакеты, а также не хочу создавать список вручную.
Каким образом можно сохранить список всех установленных пакетов в prelude-package.el или любой другой файл, чтобы при использовании этой конфигурации на другой машине они автоматически устанавливались там при первом использовании?
Ответы
Ответ 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