Я установил локальный архив пакетов (Emacs 24.5), используя package.elсначала создание двух каталогов, pkgsи local. (Имена не имеют значения.) Файлы, входящие в ваши пакеты, входят pkgsи в localконечном итоге будут содержать ваш архив. Если вы хотите сделать архив доступным для других, вы можете открыть его localс помощью веб-сервера, но процесс такой же, как создание локального архива.
Я положил следующее в моем init.elфайле:
(require 'package)
(setq package-enable-at-startup nil)
(require 'package-x)
(defvar local-archive
(expand-file-name "local/" user-emacs-directory)
"Location of the package archive.")
(setq package-archive-upload-base local-archive)
(add-to-list 'package-archives `("local" . ,local-archive) t)
(package-initialize)
Я помещаю свой архив в свой .emacs.dкаталог (отсюда и user-emacs-directoryв expand-file-nameформу), но вы можете поместить его где угодно.
Как только это будет оценено, выполните M-x package-upload-fileи введите имя файла вашего пакета для установки. Это создаст новый пакет в local. Вы увидите три новые файлы там, archive-contents, yourpackagename-version.elи yourpackagename-readme.txt. Теперь вы должны быть в состоянии сделать M-x package-list-packagesи увидеть свой пакет в списке. Если повезет, они будут сверху отмечены как «новые». Вы можете установить пакет как обычно, и вы увидите, что он появится в вашем .emacs.d/elpaкаталоге, как и любой другой пакет.
Это должно работать из коробки для Emacs 24. Я не уверен насчет более ранних версий. Ваши пользователи могут получить доступ к вашему пакету обычным способом, включив
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives
'("archive" . "http://yourdomain.com/path-to-local-dir/"))
(package-initialize)
в их init.elфайле.
Информацию о том, как написать пакет, смотрите в разделе Подготовка кода Lisp для распространения в руководстве по GNU Emacs Lisp.