Сохранение файлов автозагрузки 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
другим менеджерам пакетов.