среда, 8 апреля 2015 г.

Авто установка пакетов в Emacs

Все наверное знают про возможность установки плагинов в Emacs, "M-x package-list-packages" и вперед - выбираем, устанавливаем, удаляем что не нужно. Это возможно удобно, когда мы экспериментируем с плагинами, играемся с новыми. Но допустим синхронизировать подобным образом плагины на всех своих машинах - уже желания никакого нет. Хочется прописать в конфиг названия всех используемых пакетов, а Emacs, пусть сам при загрузке проверит недостающие и доставит их. К сожалению, встроенной функциональности для этого в Emacs нет, однако добавить такую возможность, как и все остальное, в Emacs не сложно...


Пишем вот такой простой скрипт на elisp:
 
(require 'cl)
(require 'package)

(setq cfg-var:packages '(4clojure dash magit))

(defun cfg:install-packages ()
  (let ((pkgs (remove-if #'package-installed-p cfg-var:packages)))
    (when pkgs
      (message "%s" "Emacs is now refreshing its package database...")
      (package-refresh-contents)
      (message "%s" " done.")
      (dolist (p cfg-var:packages)
        (package-install p)))))

(add-to-list 'package-archives '("marmalade" . "https://marmalade-repo.org/packages/") t)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(cfg:install-packages)

В нем мы в переменную "cfg-var:packages" добавляем названия всех пакетов через пробел, которые должны ставится автоматически. Через "add-to-list" добавляем интересующие нас дополнительные репозитории (в данном случае melpa и marmelade). Дальше функция "cfg:install-packages" устанавливает их, плюс что бы не тормозить загрузку Emacs - не лазить лишний раз в интернет, в функции установки сделана проверка на то, есть ли у нас еще неустановленные пакеты из списка, если нет - то функция инсталяции завершится.

2 комментария:

  1. Возможно, для этого подойдёт такой пакет https://github.com/jwiegley/use-package и его использование в org-mode. Например, как описано здесь http://pages.sachachua.com/.emacs.d/Sacha.html

    ОтветитьУдалить
    Ответы
    1. Да, спасибо, я смотрел на него когда-то очень давно. Там из проблем то, что на чистый емакс прийдется как минимум встроенными средствами ставить этот пакет, а потом через него все остальные. И что-то там еще было не хорошее, сейчас не вспомню. Нужно будет ещё раз попробовать его, слишком часто мне в последнее время про use-package информация попадается, возможно не оценил в первый раз.

      Удалить