Сохранение файлов автозагрузки Emacs для установленного пользователем elisp?

Emacs имеет это, на первый взгляд, очень хорошее средство для создания файлов автозагрузки на основе волшебных комментариев исходного кода ("куки автозагрузки") в форме ;;;###autoload, которые должны быть размещены в строках непосредственно над каждым определением для автозагрузки; см. (elisp) автозагрузка.

Казалось бы, это идеальный инструмент для поддержки автозагрузки тех маленьких однофайловых пакетов, которые пользователи Emacs неизбежно заканчивают тем, что устанавливали в свои профили. Есть только одна небольшая проблема: эта возможность (в любом случае в GNU Emacs) почти полностью сосредоточена на создании loaddefs.el файл для самого Emacs, с очень небольшой (если таковой имеется) уступкой для других целей.

Это не мешает большим пакетам использовать autoloads.el механизм для создания своих собственных файлов автозагрузки, но у тех, на которые я смотрел, есть довольно грубый код, посвященный тому, чтобы заставить его делать то, что нужно, хотя некоторые из них могут быть вызваны расхождением GNU Emacs/XEmacs.

(Я думаю, что XEmacs немного лучше в этом плане, вероятно, по крайней мере отчасти из-за того, что его официальная система пакетов использует этот механизм для создания отдельных файлов автозагрузки для каждого пакета. Надеемся, что GNU Emacs включит систему пакетов ELPA, которая также использует эту технику, приводит к аналогичным улучшениям на их стороне.)

Итак, мой вопрос к вам:

Как мне сохранить файл автозагрузки для всех .el файлы в каталоге, при условии, что они имеют все необходимое ;;;###autoload комментарии (файлы автозагрузки) уже есть?

[Хм. цитаты блоков выглядят намного лучше на tex.SE...]

В настоящее время я использую GNU Emacs 23.2.1, хотя чем дальше работает ответ, тем лучше. (В этом отношении было бы хорошо, если бы это также работало с XEmacs.)

Я работаю на Windows, но MSYS установлен вместе с Emacs, поэтому сценарии sh/bash, вероятно, будут хорошими, если они не призывают ничего ужасно экзотического.

[Я не совсем уверен, что это относится не к суперпользователю, а к SO. Если уже есть пакет, который может позаботиться об этом только с небольшим количеством конфигурации, это вероятно делает; с другой стороны, если (как я подозреваю) есть только довольно грубые фрагменты кода, которые могут потребовать большого количества прямых изменений, я думаю, что он, вероятно, принадлежит здесь на SO.]

2 ответа

Решение

Проверьте этот ответ на "emacs23 / elisp: как правильно загрузить эту библиотеку?",

Таким образом, вы выгружаете все пакеты в определенную директорию и создаете собственный пакет update-auto-loads.el, который строит loaddefs.el и предоставляет функцию, которую вы можете регулярно запускать для восстановления loaddefs.el файл всякий раз, когда вы хотите.

В 2017 году вам не нужно поддерживать это самостоятельно. Вместо этого вы можете использовать современный менеджер пакетов, такой как straight.elкоторый специально разработан, чтобы позаботиться об этом (а также о многих других вещах) для вас.

Вы могли бы использоватьpackage.elвместоstraight.el, но package.el имеет ряд серьезных проблем, и особенно актуальной является то, что очень неудобно package.elзагрузить локальный пакет, который вы написали сами, и в частности package.el не имеет абсолютно никакой поддержки для внесения изменений в пакет после его установки.

Вы также можете использовать другие менеджеры пакетов. Я написал обширный раздел сравненияstraight.el другим менеджерам пакетов.

Другие вопросы по тегам