Правильный подход к предоставлению внешних программ вместе с пакетами?


12

Я поддерживаю ряд пакетов elisp (например, codesearch, emacs-ycmd, traad), которые выиграют от возможности устанавливать используемые ими внешние программы, экономя время и усилия для некоторых пользователей. Например, с codesearch.el было бы неплохо иметь возможность загружать, компилировать и устанавливать инструменты codesearch (написанные на go, а не elisp) для пользователей. Это устранит по крайней мере один барьер для использования пакета.

Есть ли «лучшие практики» для этого? Например, куда мне поставить внешние программы?

Если у вас нет прямого совета, можете ли вы отослать меня к каким-либо пакетам, которые делают что-то подобное (и, в идеале, которые делают это хорошо)?


1
Боюсь, что это может быть где-то между чрезвычайно сложным и невозможным, учитывая, что вы не можете контролировать, использует ли пользовательская ОС Emacs Linux, Windows или Mac OS в качестве загрузчика ;-).
mbork

2
Боюсь, что для максимальной гибкости лучше отделить внешнюю программу от пакета Emacs. Подход к предоставлению внешнего программного обеспечения с пакетом Emacs лучше всего подходит для таких вещей, как включаемые файлы Ruby / Python / TeX / ..., которые интерпретируются. Противоположный подход к предоставлению кода Emacs Lisp с помощью пакета, установленного через менеджер пакетов вашей системы (как это делают mu и notmuch), менее гибок, поскольку вы не можете иметь автозагрузки.
Васамаса

Похоже, вы двое правы. Единственные примеры, которые я могу найти для пакетов emacs, предоставляющих внешние зависимости, - это, например, jedi, который связывает некоторые скрипты python в пакет elpa.
Абингхэм

это то, что мы сможем сделать в Emacs 25 с динамической загрузкой?
wdkrnls

Ответы:


3

Для этого нет «лучших практик», нет. Ни какой-либо существующей поддержки для этого. Я думаю, что если он установлен специально для пакета Foo, то место для его установки будет находиться в каталоге пакета Foo.

Что касается того, как это сделать, если ваш пакет Elisp установлен через ELPA, то вы можете попробовать добавить в свой основной файл Elisp что-то вроде:

(eval-when-compile (call-process "make"))

и затем предоставьте соответствующий Makefile. Конечно, для того, чтобы он работал на «большинстве» платформ, вам, вероятно, понадобится что-то более сложное.


1

Возможно, вы захотите найти рецепт el-get для установки вашего пакета.

См. Раздел 9 «Авторские рецепты» в информационном файле .

:build/system-typeОбъект может представлять особый интерес, если у вас есть требование к переменному на различные платформы. См. Раздел 9.5 «Сборка» для деталей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.