Как стать автором
Обновить

El-get, ELPA, MELPA и автоустановка пакетов

Время на прочтение3 мин
Количество просмотров7.7K
В статье приводчится часть конфига .emacs, позволяющая при запуске автоматически проверить наличие и при неоходимости установить отсутствующие пакеты с помощью el-get и packages. Полезно, если Вы используете EMACS на разных компьютерах либо делитесь своим конфигом с другими людьми.

Вставьте в начало своего .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 не гарантируется
  • комментарии, которые позволят сделать этот скрипт лучше, приветствуются
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
А как Вы решили проблему автоматической установки пакетов в EMACS?
15.38% Решение из доков к el-get2
30.77% Скрипт для packages.el со StackOverflow4
53.85% Никак, устанавливаю вручную7
Проголосовали 13 пользователей. Воздержались 13 пользователей.
Теги:
Хабы:
+4
Комментарии9

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн