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