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

  • 7 comments