Emacs. Управление пакетами. package
Emacs. Управление пакетами. package.
Содержание
1 Общая информация
- Документация: https://www.gnu.org/software/emacs/manual/html_node/emacs/Packages.html
- Встроенный пакет Emacs для управления пакетами.
2 Основные операции
- Обновить пакеты:
package-upgrade,package-upgrade-all. - Удалить пакеты:
package-delete.
3 Установка пакетов репозитория
- По умолчанию
package-installзагружает пакет из архива и устанавливает его файлы. - Можно установить и напрямую из репозитория.
- Можно установить, используя
package-vc-install. - Просто клонировать источник пакета, не добавляя его в список пакетов:
package-vc-checkout.
3.1 Указание источников пакетов
Чтобы установить пакет из исходного кода, Emacs должен знать, где взять исходный код пакета (например, репозиторий кода) и основные информация о структуре кода (например, основной файл в многофайловый пакет).
Emacs может автоматически загрузить спецификацию пакета из указанного архива, если первый аргумент у
package-vc-install— это символьное название пакета:;; Emacs will download BBDB's specification from GNU ELPA (package-vc-install 'bbdb)Основные ключи для описания пакета:
:url(строка) : URL-адрес, указывающий репозиторий, из которого следует получить исходный код пакета;:branch(строка) : версия кода для установки;:lisp-dir(строка) : относительное имя каталога для репозитория; по умолчанию загружаются файлы, которые находятся в корневом каталоге репозитория;- Поскольку указывается только строка (а не список строк), не понятно, как устанавливать пакеты, файлы которых находятся в нескольких каталогах.
- Пока использую straight или quelpa.
:main-file(строка) : основной файл проекта, из которого можно собрать метаданные пакета; если не указано, по умолчанию используется имя пакета;:doc(строка) : имя документации относительно репозитория;:vc-backend(символ) : бэкэнд для загрузки копии репозитория.
Пример:
;; Specifying information manually: (package-vc-install '(bbdb :url "https://git.savannah.nongnu.org/git/bbdb.git" :lisp-dir "lisp" :doc "doc/bbdb.texi"))
4 Зеркала для пакетного менеджера
4.1 Базовые источники
Emacs скачивает пакеты из источников, перечисленных в переменной
package-archives.По умолчанию там только GNU ELPA.
Обычно сразу добавляют MELPA.
Чтобы использовать зеркала, нужно просто подставить их URL перед вызовом
package-initialize.;; ~/.emacs.d/init.el (require 'package) (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/") ("nongnu" . "https://elpa.nongnu.org/nongnu/") ("gnu-devel" . "https://elpa.gnu.org/devel/") ("melpa" . "https://melpa.org/packages/") ("melpa-stable" . "https://stable.melpa.org/packages/"))) (package-initialize) (unless package-archive-contents (package-refresh-contents))Традиционно сложились такие имена:
- gnu — официальный архив GNU ELPA. Исторически он единственный был встроен по умолчанию.
- melpa — самый популярный неофициальный архив со срезом последних коммитов пакетов (сборочная модель «снимки»).
- melpa-stable — архив MELPA, в который попадают только стабильные релизы (теги) пакетов.
Emacs из коробки не поддерживает fallback-зеркала.
В
package-archivesу каждого имени может быть только один URL. Если добавить две записи с одинаковым именем, последняя просто перезапишет предыдущую.Технически можно добавить несколько архивов, содержащих одно и то же, под разными именами.
Тогда в списке пакетов вы увидите одни и те же пакеты дважды, и Emacs может установить пакет из любого архива.
Приоритет будет у первого.
Если основное зеркало недоступно, то при
package-refresh-contentsвы получите ошибку о недоступности основного репозитория.Однако это порождает путаницу и не гарантирует корректного разрешения зависимостей (версии могут отличаться).
Это не рекомендуется.
4.2 Зеркала
4.2.1 Зеркало d12frosted на github
- Автоматически зеркалирует GNU ELPA, MELPA, Org ELPA с помощью GitHub Actions.
- Репозиторий: https://github.com/d12frosted/elpa-mirror:
(setq package-archives '(("melpa" . "https://raw.githubusercontent.com/d12frosted/elpa-mirror/master/melpa/") ("melpa-stable" . "https://raw.githubusercontent.com/d12frosted/elpa-mirror/master/stable-melpa") ("gnu" . "https://raw.githubusercontent.com/d12frosted/elpa-mirror/master/gnu/") ("nongnu" . "https://raw.githubusercontent.com/d12frosted/elpa-mirror/master/nongnu"))) - По ссылке нельзя просмотреть содержимое каталога, поэтому emacs выдаёт ошибку.
- Я отключил эти зеркала.
4.2.2 Зеркало d12frosted на GitLab
- Автоматически зеркалирует GNU ELPA, MELPA, Org ELPA с помощью GitHub Actions.
- Репозиторий: https://gitlab.com/d12frosted/elpa-mirror/:
(setq package-archives '(("melpa" . "https://gitlab.com/d12frosted/elpa-mirror/-/tree/master/melpa") ("melpa-stable" . "https://gitlab.com/d12frosted/elpa-mirror/-/tree/master/stable-melpa") ("gnu" . "https://gitlab.com/d12frosted/elpa-mirror/-/tree/master/gnu") ("nongnu" . "https://gitlab.com/d12frosted/elpa-mirror/-/tree/master/nongnu")))
4.2.3 Проверка зеркала
- Любой URL, добавляемый в
package-archives, должен отдавать файлarchive-contents. - Просто откройте в браузере
<адрес>/archive-contents. - Если видите текстовые данные с описанием пакетов, зеркало работает.
