reangd (reangd) wrote in ru_emacs,
reangd
reangd
ru_emacs

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

(оригинал: ReanGDblog)
Все наверное знают про возможность установки плагинов в 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 - не лазить лишний раз в интернет, в функции установки сделана проверка на то, есть ли у нас еще неустановленные пакеты из списка, если нет - то функция инсталяции завершится.
Tags: emacs
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 7 comments