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

10

Я использую Emacs 24.4. Я добавил большое количество установленных пакетов с помощью директивы Mx list-packages за год использования. Я хотел бы экспортировать список установленных пакетов для использования в другом месте. Копирование моего .emacs приводит к некоторым ошибкам при запуске, которые заставляют мою память загружать некоторые вещи. Я подозреваю, что мог бы скопировать .emacs.d, но это может показаться плохой идеей.

Есть ли какая-либо процедура или директива, которую я могу выдать, чтобы вывести список установленных пакетов в файл, который можно легко использовать для получения их на чужих машинах?

sanimalp
источник
1
Копирование вашего .emacs.dкаталога (или, желательно, его контроль над версиями), как правило, хорошая идея. (Это также целесообразно переименовать ~/.emacsв , ~/.emacs.d/init.elесли вы решите сделать это.)
Филс

Ответы:

5

Каталог ~/.emacs.d/elpaсодержит все пакеты, установленные с list-packages. Вы можете скопировать этот каталог.

Я бы, вероятно, также запустил что-то вроде (byte-recompile-directory "~/.emacs.d/elpa" 0 t)( 0значит не спрашивать, tозначает принудительную перекомпиляцию), чтобы перекомпилировать все байты, потому что я считаю, что между версиями Emacs существует некоторая несовместимость файлов, скомпилированных байтами.

няня
источник
Я использовал эту стратегию несколько раз с тех пор, как задал этот вопрос. Спасибо за вклад.
sanimalp
4

Я просмотрел package.elфайл и нашел переменную package-alist. Похоже, это список всех установленных пакетов, включая пакеты, которые требуются установленными вами пакетами.

Если все, что вам нужно, это список установленных имен пакетов, следующий код запишет имена пакетов из этого списка в *Messages*буфер.

(dolist (p1 (sort (mapcar 'symbol-name (mapcar 'car package-alist)) 'string<))
  (message "%s" p1))

Я не программист на Лиспе, поэтому уверен, что кто-нибудь сможет написать гораздо лучшую версию этого кода.

Я также начал использовать код use-package с этой :ensure tопцией, чтобы установить все мои пакеты на новый ПК.

Колин Белл
источник
2

Одним из способов может быть установка пакета, если он еще не установлен, вы должны обновить файл инициализации и добавить следующие строки:

(defvar my-packages
  '(color-theme db-pg db kv magit-push-remote magit-tramp
                magit git-rebase-mode git-commit-mode pg
                pretty-lambdada projectile pkg-info epl dash
                python-mode rich-minority s yasnippet yasnippet-bundle
                use-package key-chord undo-tree guide-key move-text
                openwith ack ag aggressive-indent nginx-mode multiple-cursors
                smartparens with-editor haskell-mode)
  "A list of packages to ensure are installed at launch.")

(defun my-packages-installed-p ()
  (loop for p in my-packages
        when (not (package-installed-p p)) do (return nil)
        finally (return t)))

(unless (my-packages-installed-p)
  ;; check for new packages (package versions)                                  
  (package-refresh-contents)
  ;; install the missing packages                                                                               
  (dolist (p my-packages)
    (when (not (package-installed-p p))
      (package-install p))))

Измените my-packagesпеременную и добавьте / удалите пакет, который вы хотите установить. M-x describe-variable package-activated-listвыдаст вам список установленных на данный момент пакетов.

После этого единственное, чем можно поделиться - это ваш файл инициализации. Надеюсь, это поможет.

Нсуками _
источник
К сожалению, я вижу, что вы ответили, как вывести список. Возможно, это должно быть более заметным в вашем ответе?
verdammelt