Pendekatan yang tepat untuk menyediakan program eksternal bersama dengan paket?

12

Saya memelihara sejumlah paket elisp (mis. Pencarian kode, emacs-ycmd, traad) yang akan mendapat manfaat dari dapat menginstal program eksternal yang mereka gunakan, menghemat waktu dan usaha untuk beberapa pengguna. Misalnya, dengan codesearch.el akan lebih baik untuk dapat mengunduh, mengkompilasi, dan menginstal alat-alat codeearch (ditulis dalam go, bukan elisp) untuk pengguna. Ini akan menghapus setidaknya satu penghalang untuk menggunakan paket.

Apakah ada "praktik terbaik" untuk melakukan ini? Misalnya, di mana saya harus meletakkan program eksternal?

Jika jika Anda tidak memiliki saran langsung, dapatkah Anda merujuk saya ke paket yang melakukan sesuatu seperti ini (dan, idealnya, melakukannya dengan baik)?

abingham
sumber
1
Saya khawatir ini mungkin berada di antara yang sangat sulit dan tidak mungkin, mengingat Anda tidak memiliki kontrol apakah pengguna Emacs OS menggunakan Linux, Windows atau Mac OS sebagai bootloader ;-).
mbork
2
Saya khawatir lebih baik memisahkan program eksternal dari paket Emacs untuk fleksibilitas maksimum. Pendekatan menyediakan perangkat lunak eksternal dengan paket Emacs tampaknya bekerja paling baik untuk hal-hal seperti termasuk file Ruby / Python / TeX / ... yang ditafsirkan. Pendekatan kebalikan dari menyediakan kode Emacs Lisp dengan paket yang diinstal melalui manajer paket sistem Anda (seperti mu dan yang lainnya) kurang fleksibel karena Anda tidak dapat memiliki autoloads.
wasamasa
Sepertinya kalian berdua benar. Satu-satunya contoh yang saya dapat temukan dari paket emacs yang menyediakan dependensi eksternal adalah misalnya jedi yang menggabungkan beberapa skrip python dalam paket elpa.
abingham
apakah ini sesuatu yang akan dapat kita lakukan di Emacs 25 dengan pemuatan dinamis?
wdkrnls

Jawaban:

3

Tidak ada "praktik terbaik" untuk itu, tidak. Juga tidak ada jenis dukungan yang ada untuk itu. Saya pikir jika itu diinstal khusus untuk paket Foo, maka tempat untuk menginstalnya akan berada dalam direktori paket Foo.

Adapun cara melakukannya, dengan asumsi paket Elisp Anda diinstal melalui ELPA, maka Anda mungkin ingin mencoba menambahkan sesuatu di file Elisp utama Anda seperti:

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

dan kemudian berikan Makefile yang sesuai. Tentu saja, agar bisa bekerja di platform "kebanyakan", Anda mungkin menginginkan sesuatu yang sedikit lebih canggih.

Stefan
sumber
1

Anda mungkin ingin melihat memberikan resep el-get untuk menginstal paket Anda.

Lihat bagian 9 "Resep Penulisan" di file info .

The :build/system-typefasilitas mungkin kepentingan tertentu, jika Anda memiliki persyaratan variabel di platform yang berbeda. Lihat bagian 9.5 "Bangun" untuk detailnya.

phils
sumber