Основы упаковки
Пакет представляет собой либо простой пакет, либо многофайловый пакет. Простой пакет хранится в архиве пакетов как один файл Emacs Lisp, а многофайловый пакет хранится как tar-файл (содержащий несколько файлов Lisp и, возможно, файлы других типов, например руководство).
В обычном использовании различие между простыми и многофайловыми пакетами относительно неважно; интерфейс меню пакетов не делает между ними различий. Однако процедура их создания отличается, как объясняется в следующих разделах.
У каждого пакета (простого или многофайлового) есть определенные атрибуты:
- Имя
-
Короткое слово (например, ‘auctex’). Обычно оно также используется как префикс символов в программе (см. Соглашения о написании кода на Emacs Lisp).
- Версия
-
Номер версии в формате, который понимает функция
version-to-list(например, ‘11.86’). Каждый выпуск пакета должен сопровождаться увеличением номера версии, чтобы пользователи, проверяющие архив пакетов, могли распознать его как обновление. - Краткое описание
-
Оно отображается, когда пакет представлен в меню пакетов. Описание должно занимать одну строку, в идеале не более 36 символов.
- Полное описание
-
Оно отображается в буфере, созданном командой C-h P (
describe-package), после краткого описания пакета и сведений о его установке. Обычно оно состоит из нескольких строк и должно подробно описывать возможности пакета и способы начать пользоваться им после установки. - Зависимости
Список других пакетов (возможно, с указанием минимально допустимых номеров версий), от которых зависит этот пакет. Список может быть пустым, что означает отсутствие зависимостей. В противном случае при установке этого пакета также автоматически устанавливаются все его зависимости, рекурсивно; если какую-либо зависимость найти не удается, пакет установить невозможно.
При установке пакета с помощью команды package-install-file или через меню пакетов создается подкаталог в package-user-dir с именем name-version, где name — имя пакета, а version — его версия (например, ~/.emacs.d/elpa/auctex-11.86/). Этот каталог называется каталогом содержимого пакета. В него Emacs помещает содержимое пакета (единственный файл Lisp для простого пакета или файлы, извлеченные из многофайлового пакета).
Затем Emacs ищет во всех файлах Lisp в каталоге содержимого специальные комментарии автозагрузки (см. Автозагрузка). Эти определения автозагрузки сохраняются в файле с именем name-autoloads.el в каталоге содержимого. Обычно они используются для автозагрузки основных пользовательских команд, определенных в пакете, но могут выполнять и другие задачи, например добавлять элемент в auto-mode-alist (см. Как Emacs выбирает основной режим). Обратите внимание, что пакет обычно не выполняет автозагрузку каждой определенной в нем функции и переменной — только нескольких команд, которые обычно вызываются для начала работы с пакетом. Затем Emacs компилирует байт-код всех файлов Lisp в пакете.
После установки пакет загружается: Emacs добавляет каталог содержимого пакета в load-path и вычисляет определения автозагрузки в name-autoloads.el.
При каждом запуске Emacs автоматически вызывает функцию package-activate-all, чтобы сделать установленные пакеты доступными в текущем сеансе. Это происходит после загрузки файла ранней инициализации, но до загрузки обычного файла инициализации (см. Обзор: последовательность действий при запуске). Пакеты не становятся доступными автоматически, если пользовательский параметр package-enable-at-startup установлен в nil в файле ранней инициализации.
- Функция: package-activate-all
-
Эта функция делает пакеты доступными в текущем сеансе. Пользовательский параметр
package-load-listопределяет, какие пакеты сделать доступными; по умолчанию доступны все установленные пакеты. См. Установка пакетов в Руководстве GNU Emacs.В большинстве случаев вызывать
package-activate-allне требуется, поскольку эта функция автоматически вызывается при запуске. Просто поместите код, который должен выполняться доpackage-activate-all, в файл ранней инициализации, а код, который должен выполняться после него, — в основной файл инициализации (см. Файл инициализации в Руководстве GNU Emacs).
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Packaging-Basics.html