È possibile utilizzare contemporaneamente MELPA e MELPA-stable?


29

Uso melpa-stable come repository di pacchetti aggiuntivo, ma uno dei pacchetti che mi piace usare (ghiaccioli) non è disponibile su melpa-stable. C'è un modo per configurare package.el per usare normalmente melpa-stable, ma usare melpa per un sottoinsieme specifico di pacchetti?


1
Esegui l'upgrade a emacs 24.4 ;-)
Malabarba,

@Malabarba, questo è sicuramente tra le carte ...
Timo Geusch,

Non riesco a trovare iciclesneanche su melpa.
user650654,

Risposte:


34

Utilizzare l'opzione package-archive-prioritiescreata proprio per questo scopo. Per preferire MELPA Stable a MELPA, aggiungi quanto segue al tuo file init:

(setq package-archives
      '(("GNU ELPA"     . "https://elpa.gnu.org/packages/")
        ("MELPA Stable" . "https://stable.melpa.org/packages/")
        ("MELPA"        . "https://melpa.org/packages/"))
      package-archive-priorities
      '(("MELPA Stable" . 10)
        ("GNU ELPA"     . 5)
        ("MELPA"        . 0)))

Maggiore è il numero, maggiore è la priorità di un archivio di pacchetti. Per qualsiasi pacchetto esistente in più archivi, il gestore pacchetti di Emacs preleva il pacchetto dall'archivio con la massima priorità e ignora i pacchetti in altri archivi, anche se il numero di versione è superiore. Se il pacchetto esiste in due archivi con la stessa priorità, vince il numero di versione più alto e alla fine penso che l'ordine sia incluso package-archives.

Consiglio di assegnare esplicitamente una priorità a tutti gli archivi, incluso l'archivio ELPA GNU predefinito, per evitare ambiguità. Sebbene gli archivi non presenti package-archive-prioritiesabbiano una priorità predefinita di 0, è fin troppo facile dimenticarsene.

package-archive-priorities è stato introdotto in Emacs 25.1, per le versioni precedenti vedere la vecchia risposta di seguito:


In Emacs 24 non è possibile impostare MELPA Stable come predefinito e utilizzare MELPA solo per pacchetti specifici in modo generale. Senza alcun pacchetto di personalizzazione, per impostazione predefinita l'archivio fornisce all'archivio la versione più alta , ovvero MELPA. Non c'è interfaccia per cambiarlo.

Tuttavia, a partire da Emacs 24.4 la nuova opzione package-pinned-packagesconsente di aggiungere singoli pacchetti agli archivi, ma ciò consente solo di implementare l'inverso dei propri requisiti: impostazione predefinita a MELPA e utilizzare MELPA Stable per pacchetti specifici.

Quindi, attualmente l'unica opzione è riempire package-pinned-packagescon tutti i pacchetti che si desidera utilizzare, manualmente o con un pezzo di codice Emacs Lisp. Si noti che package-pinned-packagesdeve essere impostato prima di chiamare package-refresh-contentsperché il pinning viene valutato durante la creazione dell'indice dei pacchetti e non durante l'installazione dei pacchetti.

Una soluzione a lungo termine sarebbe quella M-x report-emacs-bugdi chiedere agli sviluppatori di Emacs di implementare una sorta di funzionalità di "archivio predefinito", o di chiedere al manutentore di ghiaccioli di rilasciare tag adeguatamente etichettati in modo che MELPA Stable possa costruire pacchetti stabili per esso. Nessuno dei due potrebbe rivelarsi facile, dal momento che il primo richiede modifiche più grandi a package.el e il secondo che i ghiaccioli vengono spostati da EmacsWiki in un vero repository VCS con tag, che presumo che il suo manutentore non sia disposto a fare, per se lo fossero, l'avrebbero fatto molto tempo fa.


0

Qui hai una discussione sull'uso di entrambi i repository in parallelo, quindi questo dovrebbe essere possibile con 24.4; hai provato ad esempio con un defun per aggiornare l'elenco dei repository, quindi il paradosso richiede e infine tornare all'elenco dei repository originali?

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.