Вставьте в начало своего .emacs, до того, как подгружать неоходимые пакеты с помощью
(require)
;;; Если el-get не установлен, его нужно установить
(add-to-list 'load-path "~/.emacs.d/el-get/el-get")
;;; Эта часть взята из официальной документации el-get
(unless (require 'el-get nil 'noerror)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/dimitri/el-get/master/el-get-install.el")
(goto-char (point-max))
(eval-print-last-sexp)))
;;; Указываем, где будут храниться "рецепты" (набор параметров для каждого пакета в терминологии el-get)
(add-to-list 'el-get-recipe-path "~/.emacs.d/el-get-user/recipes")
(el-get 'sync) ;;; Получаем список пакетов, доступных для установки
;;; Список пакетов, которые будут установлены через el-get
(setq required-packages
(append
'(
anaconda-mode
aggressive-indent-mode
company-mode
company-tern
company-web
el-get
emacs-neotree
emmet-mode
flycheck
flycheck-pos-tip
git-gutter
helm
highlight-parentheses
indent-guide
js2-mode
json-mode
keyfreq
less-css-mode
magit
markdown-mode
mode-icons
monokai-theme
multiple-cursors
paredit
pip-requirements
popup
powerline
py-autopep8
pyvenv
rainbow-delimiters
smart-tab
smartparens
tern
undo-tree
virtualenvwrapper
web-mode
yafolding
yasnippet
yasnippet-snippets
)
(mapcar 'el-get-as-symbol (mapcar 'el-get-source-name el-get-sources))))
;;; Установка пакетов через el-get
(el-get 'sync required-packages)
;;; Дальше идёт подгрузка из MELPA Stable тех компонентов, которых нет в рецептах el-get, либо установка
;;; оттуда нецелесообразна (python-mode лучше ставить именно из MELPA Stasble, поскольку рецепт
;;; для el-get требует наличия в ОС Bazaar - некогда использовавшейся в Canonical системы контроля версий)
(require 'package)
(require 'cl)
;;; А эти пакеты - из MELPA Stable
(defvar elpa-packages '(
py-isort
python-mode
web-beautify
))
(defun cfg:install-packages ()
(let ((pkgs (remove-if #'package-installed-p elpa-packages)))
(when pkgs
(message "%s" "Emacs refresh packages database...")
(package-refresh-contents)
(message "%s" " done.")
(dolist (p elpa-packages)
(package-install p)))))
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/") t)
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t)
;;; Раскомментируйте строку ниже, если хотите, чтобы так же стал доступен основной репозиторий MELPA
;;; Пакеты там более свежие, но и шансов нарваться на глюки больше, чем в Stable
;;; (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
;;; Обновляем список пакетов, доступных для установки через packages
(package-initialize)
;;; Запускаем процесс установки
(cfg:install-packages)
Теперь при запуске Emacs будет автоматически проверять наличие пакетов, перечисленных в списках выше, и при необходимости их устанавливать тем или иным способом.
Отдельно отмечу несколько важных моментов
- наличие Git обязательно
- конфиг сделан для *nix-систем, работа под Windows не гарантируется
- комментарии, которые позволят сделать этот скрипт лучше, приветствуются
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (9)
loz
27.04.2016 01:16Ну и вобще насчет поста — пользователям емакса настоятельно рекомендую разобраться хотябы в основах elisp, потому что вся сила емакса в его программировании/конфигурировании, и делать кастомизации лучше самому для себя, а примеры в интернетах использовать как источники идей.
Тем более емакс это крутейшая среда разработки на elisp — все выполнять, пробовать можно в нем самом — буфер *scratch* и M-x ielm это шикарные вещи. Автодополнение включается через eldoc-mode, автоскобочки — paredit/smartparens, справка C-h f (по функциям), v (по переменным), k (по хоткеям) и тд.
Saffron
27.04.2016 07:32> А как Вы решили проблему автоматической установки пакетов в EMACS?
Написал свой набор скриптов инициализации, частично основанных на el-get.
Запускаю emacs с параметрами -Q -l, таким образом не использую текущую установку никак. Прописываю все директории для временных файлов внутрь под-директории со скриптами emacs. Если что-то появляется в ~/.emacs.d, то я поправляю свои скрипты, чтобы переопределить переменные для записи этого файла внутрь папки emacs. Таким образом я получил портабельный дистрибутив emacs. Правда бинарь берётся системный.
Crandel
27.04.2016 14:39Чуть больше месяца перешел в емакс после вима и поэтому сразу при настройке решил делать все аккуратно и модульно. Основной установщик — el-get, все рецепты переопределяю в свою папку, также в рецептах описываю дополнительные настройки пакетов после инициализации, ну и сам слежу за их актуальностью
Папка с конфигами
loz
Я вот не пойму, зачем нужен этот el-get, когда packages уже идет в стандартной поставке?
bromzh
В el-get намного больше готовых пакетов, он сам добавляет пути к пакету в load-path, так что достаточно только добавить
(require 'package-name)
. Ну и ещё много полезных и удобных штук, который отсутствуют в стандартномpackage.el
.loz
Так и package добавляет пути сам, умеет обновлять пакеты, следить за зависимостями. Чего там не хватает то?
Да еще и интерфейс есть M-x list-packages.
bromzh
А, ну я давно тыкал емакс, тогда package.el мало что умел.
dunmaksim
По поводу количества пакетов хочу сказать пару слов. Специально ходил по ссылкам многих незнакомых мне пакетов, и выяснилось, что они последний раз обновлялись 2-3 года назад, либо вообще в рецепте указывается старый репозиторий, а разработка давно перенесена куда-то ещё. Спросил у автора о данной проблеме, он ответил, что не планирует чистить список рецептов от всякого старья, т.к. это требует большого количества времени, однако, пулл-реквесты приветствуются.