2012-12-13 6 views
42

Ich benutze Prelude als Basis Emacs Konfiguration. Ich habe viele Pakete aus dem Paket-Manager installiert, und ich möchte meine Einstellungen auf einem anderen Computer verwenden.Wie speichere ich eine Liste aller installierten Pakete in Emacs 24?

Ich möchte die installierten Pakete nicht mitnehmen und auch nicht manuell eine Liste erstellen.

Wie speichern Sie eine Liste aller installierten Pakete in prelude-package.el oder einer anderen Datei, so dass sie bei der ersten Verwendung automatisch installiert werden, wenn ich diese Konfiguration auf meinen anderen Computer übernehme?

Antwort

59

Sie können eine Liste der aktuell installierten Pakete (ausgenommen integrierte Pakete) von der Variablen package-activated-list abrufen. Um automatisch installieren sie beim Start, diese Frage sehen: how to automatically install emacs packages by specifying a list of package names?

Genauer gesagt, wenn Sie das tun Ch v Paket-Aktivliste, kopieren Sie den Wert gezeigt, und legen Sie es als den Wert von prelude-packages, Emacs automatisch sichern Diese Pakete werden beim Start installiert.

+0

Oh das ist fabelhaft. – uchuugaka

+0

Es ist erwähnenswert, die Paket-aktivierte Liste wird nicht durch Entfernen von Paketen aktualisiert, sondern scheint nur beim Neustart. – uchuugaka

11

Die kanonische Methode ist die beste (von Ataylor beschrieben). Hier ist eine etwas ungeschickte Methode.

M-x Listen-Pakete. C-s installiert, bis Sie die erste Zeile des installierten Pakets finden. Starten Sie die Auswahl mit C-SPC. Gehen Sie nach unten, bis Sie integrierte Pakete erreichen. Kopieren mit M-w. C-x b für neuen Puffer. Paste mit C-y. C-x C-s zum Speichern der Datei.

Nur der Vorteil, den ich sehe, ist dies ein bisschen beschreibender. Zeigt eine kleine Beschreibung Ihrer Pakete an. nützlich, wenn Sie einige Pakete installieren und vergessen Sie es.

+0

Ja - Ich mag, dass dies ein bisschen mehr Beschreibung hinzufügt als die 'Paket-aktivierte-Liste' –

1

Wie unter how to automatically install emacs packages by specifying a list of package names? erwähnt, wäre es besser, auch die Version des Pakets aufzunehmen, die Sie benötigen. Um dies zu tun, können Sie die folgende Funktion verwenden:

(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)) 

dass Sie eine Liste von (NAME VERSION) Paare geben. Leider konnte ich keine Möglichkeit finden, eine bestimmte Version eines Pakets zu installieren. Es scheint, package.el greift immer die neuesten verfügbaren. Was ich tue, ist jetzt:

(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))) 

Ich habe eine längere Funktion geschrieben Installieren von Paketen die genaue Versionsnummer übereinstimmt, aber es funktioniert nicht, weil package.el standardmäßig nur die neuesten Versionen für jedes Paket abruft. gist

Verwandte Themen