44.3 Многофайловые пакеты

Многофайловый пакет менее удобен для создания, чем однофайловый, но он предлагает больше функций: он может включать несколько файлов Emacs Lisp, руководство Info и другие типы файлов (например, изображения).

До установки многофайловый пакет хранится в архивном пакете в виде tar-файла. Имя tar-файла должно быть имя-версия.tar, где имя — это имя пакета, а версия — номер версии. Его содержимое после извлечения должно находиться в каталоге с именем имя-версия, каталог содержимого (см. Основы упаковки). Файлы также могут извлекаться в подкаталоги каталога содержимого.

Один из файлов в каталоге содержимого должен называться имя-pkg.el. Он должен содержать одну форму Lisp, состоящую из вызова функции define-package, описанной ниже. Это определяет атрибуты пакета: версию, краткое описание и требования.

Например, если мы распространяем версию 1.3 superfrobnicator как многофайловый пакет, tar-файл будет называться superfrobnicator-1.3.tar. Его содержимое извлечется в каталог superfrobnicator-1.3, и один из файлов будет superfrobnicator-pkg.el.

Функция: define-package имя версия &опционально описание требования

Эта функция определяет пакет. имя — это имя пакета, строка. версия — это версия, в виде строки формы, которую может понять функция version-to-list. описание — это краткое описание.

требования — это список требуемых пакетов и их версий. Каждый элемент в этом списке должен иметь форму (имя-зависимости версия-зависимости), где имя-зависимости — это символ, имя которого является именем пакета зависимости, а версия-зависимости — это версия зависимости (строка). Специальное значение 'emacs' означает, что пакет зависит от указанной версии Emacs.

Если в каталоге содержимого есть файл с именем README, этот файл используется как полное описание (переопределяя любой раздел ';;; Комментарий:').

Если в каталоге содержимого есть файл с именем dir, предполагается, что это файл каталога Info, созданный с помощью install-info. См. Вызов install-info в Texinfo. Соответствующие файлы Info также должны присутствовать в каталоге содержимого. В этом случае Emacs автоматически добавит каталог содержимого в Info-directory-list при активации пакета.

Не включайте в пакет никакие файлы .elc. Они создаются при установке пакета. Обратите внимание, что нет способа контролировать порядок байт-компиляции файлов.

Не включайте в пакет ни один файл с именем имя-autoloads.el. Этот файл зарезервирован для определений автозагрузки пакета (см. Основы упаковки). Он создается автоматически при установке пакета путем поиска в всех файлах Lisp пакета магических комментариев автозагрузки.

Если многофайловый пакет содержит вспомогательные файлы данных (например, изображения), код пакета может ссылаться на эти файлы через переменную load-file-name (см. Загрузка). Вот пример:

(defconst superfrobnicator-base (file-name-directory load-file-name))

(defun superfrobnicator-fetch-image (file)
  (expand-file-name file superfrobnicator-base))

Если ваш пакет содержит файлы, которые вы не хотите распространять пользователям (например, регрессионные тесты), вы можете добавить их в файл .elpaignore. В этом файле каждая строка перечисляет файл или подстановочный знак, соответствующий файлам; эти файлы следует игнорировать при создании tar-архива вашего пакета в ELPA (см. Создание и обслуживание архивных пакетов). (ELPA передаст этот файл команде tar через опцию командной строки -X, когда готовит пакет к загрузке.)