Есть ли способ установить пакеты ELPA из командной строки?

Я заинтересован в стандартизации конфигураций emacs, которые некоторые из нас используют (~ 5 человек).

Есть ли способ установить пакеты ELPA из lisp функций, которые могут быть включены в script, если мы знаем набор пакетов, которые нам нужны? Все, что я могу найти, - это вызвать list-packages и графически установить отдельные пакеты.

Ответ 1

Вам нужно использовать функцию package-install, например:

(mapc 'package-install install-list)

переменная install-list должна содержать список имен пакетов, которые вы хотите установить.

Ответ 2

Вы также можете взглянуть на cask. Он позволяет объявлять пакеты, которые вы хотите установить, в файл с именем Cask с использованием DSL, описанного здесь здесь. Затем из командной строки перейдите в каталог и запустите Cask. Он установит все пакеты, объявленные в файле Cask.

В файле init вам нужно будет добавить следующие строки, чтобы использовать пакеты, установленные в cask.

(require 'cask "~/.cask/cask.el")
(cask-initialize)

Ответ 3

Другое, что вы можете сделать, это сделать свой собственный пакет, который зависит от других пакетов, которые вы хотите установить. Затем установите этот пакет.

Пакеты могут быть установлены из файла с помощью:

M-x package-install-from-file

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

Вы также можете сделать это из командной строки:

emacs -e "(progn (package-initialize)(package-install 'packagename))"

для установки из командной строки операционной системы, если хотите.

Ответ 4

Кроме того, вы можете получить список уже установленных пакетов ELPA на

(defun eab/print-0 (body)
  "Insert value of body in current-buffer."
  (let ((print-length nil)
        (eval-expression-print-length nil))
    (prin1 `,body (current-buffer))))

(defun eab/package-installed ()
  "Get the list of ELPA installed packages."
  (mapcar (lambda (x) (car x)) package-alist))

(eab/print-0 (eab/package-installed))

и то же самое для пакетов el-get

(defun eab/el-get-installed ()
  "Get the list of el-get installed packages."
  (mapcar 'intern
      (el-get-list-package-names-with-status "installed")))

(eab/print-0 (eab/el-get-installed))