Come generare e attivare i caricamenti automatici per i pacchetti locali?


9

È chiaro che non tutti i pacchetti locali / personalizzati / personali dovrebbero essere rilasciati ufficialmente, e sarebbe sciocco farlo solo per beneficiare del supporto integrato per la gestione dei pacchetti. Mi chiedo come generare e attivare i caricamenti automatici per i pacchetti locali? Questo è simile a come package.elfunziona per i pacchetti installati da ELPA. Per evitare di reinventare la ruota, c'è un modo per "fingere" che una directory locale (con sottodirectory ognuna delle quali è un pacchetto locale / personalizzato / personale) sia ELPA? Sono anche aperto a el-getse tale scenario può essere supportato tramite, ad esempio, ricette personalizzate.

Sono sicuro che il compito è piuttosto comune e chiunque usi Emacs a livello avanzato prima o poi arriva a quel punto. Qualcuno potrebbe condividere le proprie esperienze in questo campo?


3
update-directory-autoloadspuò essere utilizzato indipendentemente da qualsiasi gestore di pacchetti.
npostavs,

@npostavs, lo so ma non è ricorsivo e in questo caso non è una soluzione completa. Di sicuro non sarà abbastanza e dovrei inserirlo nella mia implementazione.
Alexander Shukaev,

1. È possibile fornire un elenco di dir (ad es. Una dir e i suoi discendenti) update-directory-autoloadsper, in effetti, renderlo ricorsivo. 2. Puoi utilizzare update-file-autoloadstutti i file che ti interessano, indipendentemente dalla directory in cui si trovano.
Estratto il

Cordiali saluti: package.elè anche non ricorsivo (ovvero non supporta pacchetti con sorgenti in sottodirectory).
npostavs,

Ho creato un MELPA locale su Linux. Non ho una buona soluzione per Windows. Vorrei davvero che Emacs potesse supportare questo tipo di cose fuori dagli schemi. Potrebbe valere la pena controllare use-package per vedere se è possibile.
eflanigan00,

Risposte:


7

La soluzione corretta (IMO) consiste nell'utilizzare un gestore di pacchetti che ha il supporto esplicito per questo caso d'uso. Questo sarebbe straight.el, che ho scritto per questo scopo.

Puoi leggere la documentazione dettagliata, inclusi i confronti con altri gestori di pacchetti, nel README , quindi mi atterrò a come puoi usare straight.elper risolvere il tuo problema specifico.

  1. Inserisci il tuo repository in ~/.emacs.d/straight/repos/<my-repo>.
  2. Caricalo usando

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. Hai finito. Ogni volta che si apportano modifiche al codice sorgente, la generazione del caricamento automatico e la compilazione dei byte verranno rifatte (al prossimo avvio di Emacs). Ottieni anche cose come la gestione delle dipendenze, l'automazione del controllo versione opzionale, ecc. Gratuitamente.

  4. Quando (se) vuoi pubblicare il pacchetto, spingilo da qualche parte e modifica la ricetta per puntare a quel repository Git.
  5. Puoi anche usare straight.elcon use-packagese preferisci (è solo zucchero di sintassi per la maggior parte).

3

Faccio quanto segue su Linux:

Ho creato un repository melpa locale clonando melpa.

Modifico le ricette che desidero indicare ai miei pacchetti locali. Quanto segue èlocal-melpa/recipies/ace-window

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

Quindi dal tipo local-mepla make allo make recipies/ace-windowper compilare il / i pacchetto / ilocal-melpa/packages

Quindi make packages/archive-contents, che popola l'elenco dei pacchetti.

Quindi in uso per seguire per dire a emacs di usare il mio melpa locale

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

Non ho capito come correre makesu Windows. Ma posso compilare i pacchetti local-melpasu Linux e copiarli su Windows ed Emacs comprende e installa i pacchetti correttamente.

Il vantaggio di questo è che posso reimpostare quando voglio eliminando la mia ~/.emacs.d/elpa/*directory e installando eventuali aggiornamenti personalizzati su qualsiasi pacchetto.


Forse sarebbe interessante anche il quelpa ?
npostavs

Penso che tu abbia ragione npostavs. Devo sedermi e guardarlo.
eflanigan00,

2

Se hai sostituito un pacchetto già installato con una versione diversa, e tutto ciò che ti manca è il file autoloads, puoi usare package-generate-autoloads per generarlo:

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

Ho trovato più semplice l'uso di update-directory-autotools quando devo effettuare il downgrade di un pacchetto a una versione precedente.

In realtà penso di non aver veramente risposto alla tua domanda. Lascerò questa risposta qui per il momento, ma la mia risposta è più pertinente qui: /programming/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.