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

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

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

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

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

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

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

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

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

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

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


person SamB    schedule 05.01.2011    source источник
comment
Ха, похоже, что кто-то, кроме меня, добавил это в избранное, но не проголосовал за: 2 пользователя добавили в избранное (один из которых, я думаю), но голосов нет совсем. Интересно, почему это - забывчивость?   -  person SamB    schedule 01.05.2011


Ответы (2)


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

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

person Trey Jackson    schedule 05.01.2011

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

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

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

person Radon Rosborough    schedule 09.08.2017
comment
очень неудобно заставить package.el загрузить локальный пакет, который вы написали сами ... эээ, нет, это не так; на самом деле это невероятно просто: M-x package-install-file - person phils; 10.08.2017
comment
@phils Затем вам нужно повторно запускать эту команду каждый раз, когда вы вносите изменения в файл, и, кроме того, вам нужно перепрыгивать через обручи при использовании M-x find-function и друзей, чтобы убедиться, что вы редактируете настоящий файл, а не копию это package.el создано. Я не считаю это простым. - person Radon Rosborough; 10.08.2017