Bagaimana cara menghasilkan dan mengaktifkan autoload untuk paket lokal?

9

Jelas bahwa tidak semua paket lokal / khusus / pribadi harus dirilis secara resmi, dan itu konyol untuk mendapatkan manfaat dari dukungan manajemen paket bawaan. Saya bertanya-tanya bagaimana cara menghasilkan dan mengaktifkan autoload untuk paket lokal? Itu mirip dengan bagaimana package.elmelakukannya untuk paket yang diinstal dari ELPA. Untuk menghindari reinventing the wheel, adakah cara untuk "berpura-pura" bahwa beberapa direktori lokal (dengan subdirektori yang masing-masingnya merupakan paket lokal / custom / personal) adalah ELPA? Saya juga terbuka el-getjika skenario seperti itu dapat didukung melalui, misalnya, resep khusus.

Saya yakin tugasnya cukup umum dan siapa pun yang menggunakan Emacs pada tingkat mahir cepat atau lambat akan sampai ke titik itu. Adakah yang bisa berbagi pengalaman di bidang ini?

Alexander Shukaev
sumber
3
update-directory-autoloadsdapat digunakan secara independen dari semua manajer paket.
npostavs
@npostavs, saya tahu tetapi tidak rekursif dan ini bukan solusi yang komprehensif dalam hal ini. Pasti itu tidak akan cukup dan saya harus membungkusnya dengan implementasi saya sendiri.
Alexander Shukaev
1. Anda dapat memberikan daftar dir (misalnya, dir dan turunannya) update-directory-autoloadsuntuk, pada dasarnya, membuatnya rekursif. 2. Anda dapat menggunakan update-file-autoloadsuntuk setiap file yang Anda minati, terlepas dari direktori mana itu.
Drew
FYI: package.eljuga non-rekursif (yaitu, tidak mendukung paket dengan sumber di subdirektori).
npostavs
Saya mengatur MELPA lokal di Linux. Saya tidak punya solusi yang baik untuk windows. Saya benar-benar berharap emacs akan mendukung hal semacam ini di luar kebiasaan. Mungkin perlu memeriksa paket penggunaan untuk melihat apakah itu bisa.
eflanigan00

Jawaban:

7

Solusi yang benar (IMO) adalah dengan menggunakan manajer paket yang memiliki dukungan eksplisit untuk kasus penggunaan ini. Ini akan menjadi straight.el, yang saya tulis untuk tujuan ini.

Anda dapat membaca dokumentasi verbose, termasuk perbandingan dengan manajer paket lain, di README , jadi saya akan tetap menggunakan cara yang dapat Anda gunakan straight.eluntuk menyelesaikan masalah spesifik Anda.

  1. Tempatkan repositori Anda di ~/.emacs.d/straight/repos/<my-repo>.
  2. Muat menggunakan

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. Kamu sudah selesai. Setiap kali Anda membuat perubahan pada kode sumber, pembuatan autoload dan kompilasi byte akan dilakukan ulang (pada startup Emacs berikutnya). Anda juga mendapatkan hal-hal seperti manajemen ketergantungan, otomatisasi kontrol versi opsional, dll. Secara gratis.

  4. Ketika (jika) Anda ingin mempublikasikan paket, cukup tekan di suatu tempat dan modifikasi resep untuk menunjuk ke repositori Git itu.
  5. Anda juga dapat menggunakan straight.eldengan use-packagejika Anda suka (itu hanya sintaks untuk sebagian besar).
Radon Rosborough
sumber
3

Saya melakukan hal berikut di Linux:

Saya menyiapkan repositori melpa lokal dengan mengkloning melpa.

Saya memodifikasi resep yang ingin saya tunjukkan ke paket lokal saya. Berikut ini adalahlocal-melpa/recipies/ace-window

(ace-window
  :url "/home/my_home/.emacs.d/packages/ace-window/"
  :fetcher git)

Kemudian dari jenis mepla lokal make allatau make recipies/ace-windowuntuk membangun paket (s) dilocal-melpa/packages

Lalu make packages/archive-contents, yang mengisi daftar paket.

Kemudian gunakan untuk mengikuti untuk memberitahu emacs untuk menggunakan melpa lokal saya

(setq package-archives '(("local-melpa" . "~/.emacs.d/packages/local-melpa/packages/")))

Saya belum menemukan cara menjalankannya makedi windows. Tapi saya bisa membuat paket di local-melpaLinux dan menyalinnya ke windows dan emacs mengerti dan menginstal paket dengan benar.

Keuntungan dari ini adalah saya dapat mengatur ulang kapan saja saya mau dengan menghapus ~/.emacs.d/elpa/*direktori saya dan menginstal setiap pembaruan kustom untuk paket apa pun.

eflanigan00
sumber
Mungkin quelpa juga menarik?
npostavs
Saya pikir Anda benar npostavs. Saya harus duduk dan melihatnya.
eflanigan00
2

Jika Anda telah mengganti paket yang sudah diinstal dengan versi yang berbeda, dan semua yang Anda lewatkan adalah file autoloads, Anda dapat menggunakan package-generate-autoloads untuk menghasilkannya:

(package-generate-autoloads "async" "~/.emacs.d/elpa/async-1.9.3/")

Saya merasa lebih mudah menggunakan pembaruan-direktori-autotool ketika saya perlu menurunkan versi paket ke versi yang lebih lama.

Sebenarnya saya pikir saya belum benar-benar menjawab pertanyaan Anda. Saya akan meninggalkan jawaban ini di sini untuk saat ini tetapi jawaban saya lebih relevan di sini: /programming/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

Andreas Raster
sumber