2012-12-13 13 views
42

Sto usando prelude come configurazione di base di Emacs. Ho installato molti pacchetti dal gestore pacchetti e voglio usare le mie impostazioni su un'altra macchina.Come salvare un elenco di tutti i pacchetti installati in Emacs 24?

Non voglio portare i pacchetti installati e anche io non voglio creare un elenco manualmente.

Qual è il modo di salvare un elenco di tutti i pacchetti installati in prelude-package.el o in qualsiasi altro file in modo tale che quando prendo questa configurazione sull'altro mio computer, vengano installati automaticamente al primo utilizzo?

risposta

59

È possibile ottenere un elenco dei pacchetti attualmente installati (esclusi i pacchetti integrati) dalla variabile package-activated-list. Per installarli automaticamente all'avvio, vedere questa domanda: how to automatically install emacs packages by specifying a list of package names?

Più in particolare, se si fa Ch v pacchetto-activated-list, copiare il valore mostrato, e inserirlo come valore di prelude-packages, emacs assicureranno automaticamente quei pacchetti sono installati all'avvio.

+0

Oh questo è favoloso. – uchuugaka

+0

Vale la pena notare che l'elenco attivato dal pacchetto non viene aggiornato rimuovendo i pacchetti, ma sembra solo al riavvio. – uchuugaka

11

La metodologia canonica è la migliore (descritta da ataylor). Ecco un metodo più maldestro.

M-x list-packages. C-s installato fino a trovare la prima riga del pacchetto installato. Inizia selezionando con C-SPC. Scendi fino a raggiungere i pacchetti integrati. Copia con M-w. C-x b per il nuovo buffer. Incolla con C-y. C-x C-s per salvare il file.

Unico vantaggio che vedo è un po 'più descrittivo. Mostrando una piccola descrizione dei tuoi pacchetti. utile quando installi alcuni pacchetti e ti dimentichi.

+0

Sì, mi piace che questo aggiunga un po 'più di descrizione del 'pacchetto-attivato-lista' –

1

Come menzionato allo how to automatically install emacs packages by specifying a list of package names?, sarebbe meglio registrare anche la versione del pacchetto di cui avete bisogno. Per fare ciò, è possibile utilizzare la seguente funzione:

(defun list-packages-and-versions() 
    "Returns a list of all installed packages and their versions" 
    (mapcar 
    (lambda (pkg) 
    `(,pkg ,(package-desc-version 
       (cadr (assq pkg package-alist))))) 
    package-activated-list)) 

che vi darà una lista di (NAME VERSION) coppie. Sfortunatamente, non sono stato in grado di trovare un modo per installare una versione specifica di un pacchetto. Sembra che package.el afferri sempre l'ultimo disponibile. Quello che sto facendo ora è:

(defun install-packages-with-specific-versions (package-version-list) 
    "Install the packages in the given list with specific versions. 
PACKAGE-VERSION-LIST should be a list of (NAME VERSION) lists, 
where NAME is a symbol identifying the package and VERSION is 
the minimum version to install." 
    (package-download-transaction 
    (package-compute-transaction() package-version-list))) 

ho scritto una funzione più tempo per installare i pacchetti che corrispondono l'esatto numero di versione, ma non riesce a causa package.el di default recupera solo le ultime versioni disponibili per ogni pacchetto. gist