Właściwe podejście do zapewniania programów zewnętrznych wraz z pakietami?

12

Utrzymuję wiele pakietów elisp (np. Wyszukiwanie kodu, emacs-ycmd, traad), które skorzystałyby na możliwości zainstalowania programów zewnętrznych, których używają, oszczędzając czas i wysiłek niektórych użytkowników. Na przykład, korzystając z codesearch.el, byłoby fajnie móc pobrać, skompilować i zainstalować narzędzia do wyszukiwania kodu (napisane w go, nie elisp) dla użytkowników. To usunąłoby co najmniej jedną barierę dla korzystania z pakietu.

Czy istnieją jakieś „najlepsze praktyki” w tym zakresie? Na przykład, gdzie powinienem umieścić programy zewnętrzne?

Jeśli nie masz bezpośredniej porady, czy możesz skierować mnie do pakietów, które robią coś takiego (i, najlepiej, robią to dobrze)?

abingham
źródło
1
Obawiam się, że może być gdzieś pomiędzy niezwykle trudnym a niemożliwym, biorąc pod uwagę, że nie masz kontroli, czy system Emacs użytkownika używa Linuxa, Windowsa lub Mac OS jako bootloadera ;-).
mbork
2
Obawiam się, że lepiej jest oddzielić program zewnętrzny od pakietu Emacsa, aby uzyskać maksymalną elastyczność. Podejście polegające na dostarczeniu zewnętrznego oprogramowania z pakietem Emacsa wydaje się najlepsze w przypadku takich elementów, jak dołączone pliki Ruby / Python / TeX / ..., które są interpretowane. Odwrotne podejście do dostarczania kodu Emacs Lisp z pakietem zainstalowanym za pośrednictwem menedżera pakietów systemu (takiego jak mu i notmuch do) jest mniej elastyczne, ponieważ nie można mieć automatycznego ładowania.
wasamasa
Wygląda na to, że macie rację. Jedynymi przykładami, jakie mogę znaleźć pakiety emacs zapewniające zależności zewnętrzne są np. Jedi, który pakuje niektóre skrypty python w pakiecie elpa.
abingham
czy jest to coś, co będziemy mogli zrobić w Emacsie 25 z dynamicznym ładowaniem?
wdkrnls

Odpowiedzi:

3

Nie ma na to „najlepszych praktyk”, nie. Żadne istniejące wsparcie dla niego. Myślę, że jeśli jest zainstalowany specjalnie dla pakietu Foo, to miejsce, w którym można go zainstalować, znajduje się w katalogu pakietu Foo.

Jeśli chodzi o to, jak to zrobić, zakładając, że pakiet Elisp jest instalowany za pośrednictwem ELPA, możesz spróbować dodać do głównego pliku Elisp coś takiego:

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

a następnie podaj odpowiedni plik Makefile. Oczywiście, aby działał na „większości” platform, prawdopodobnie będziesz potrzebować czegoś bardziej wyrafinowanego.

Stefan
źródło
1

Można zajrzeć do dostarczania el-get przepis na instalacji pakietu.

Patrz sekcja 9 „Przepisy autorskie” w pliku informacyjnym .

:build/system-typeInstrument może być szczególnie interesujące, jeśli masz zmienne wymagania w różnych platformach. Szczegółowe informacje można znaleźć w sekcji 9.5 „Kompilacja”.

phils
źródło