Emacs installierte Pakete exportieren?

10

Ich benutze Emacs 24.4. Ich habe eine große Anzahl installierter Pakete über die Richtlinie Mx list-packages über einen Zeitraum von etwa einem Jahr hinzugefügt. Ich würde gerne meine Liste der installierten Pakete exportieren, um sie an anderer Stelle zu verwenden. Das Kopieren meiner .emacs führt beim Start zu Fehlern, die meinen Speicher belasten, um bestimmte Dinge zu installieren. Ich vermute, ich könnte die .emacs.d kopieren, aber das scheint vielleicht eine schlechte Idee zu sein.

Gibt es eine Prozedur oder Anweisung, die ich ausgeben kann, um die Liste der installierten Pakete in eine Datei zu kopieren, mit der sie problemlos auf fremde Computer übertragen werden können?

Sanimalp
quelle
1
Das Kopieren Ihres .emacs.dVerzeichnisses (oder vorzugsweise das Versionskontrollieren) ist im Allgemeinen eine gute Idee. (Es ist auch sinnvoll, umzubenennen ~/.emacs, ~/.emacs.d/init.elwenn Sie sich dazu entschließen.)
Phils

Antworten:

5

Das Verzeichnis ~/.emacs.d/elpaenthält alle Pakete, mit denen installiert wurde list-packages. Sie können dieses Verzeichnis kopieren.

Ich würde wahrscheinlich auch so etwas ausführen (byte-recompile-directory "~/.emacs.d/elpa" 0 t)( 0bedeutet nicht fragen, tbedeutet Neukompilierung erzwingen), um alles byte-neu zu kompilieren, da ich glaube, dass es eine gewisse Inkompatibilität von bytekompilierten Dateien zwischen Emacs-Versionen gibt.

Tagesmutter
quelle
Ich habe diese Strategie mehrmals angewendet, seit ich diese Frage gestellt habe. Danke für die Eingabe.
Sanimalp
4

Ich habe die package.elDatei durchgesehen und die Variable gefunden package-alist. Dies scheint eine Liste aller installierten Pakete zu sein, einschließlich der Pakete, die von den von Ihnen installierten Paketen benötigt werden.

Wenn Sie nur eine Liste der installierten Paketnamen wünschen, schreibt der folgende Code die Namen der Pakete aus dieser Liste in den *Messages*Puffer.

(dolist (p1 (sort (mapcar 'symbol-name (mapcar 'car package-alist)) 'string<))
  (message "%s" p1))

Ich bin kein Lisp-Programmierer, daher bin ich sicher, dass jemand eine viel bessere Version dieses Codes schreiben kann.

Ich habe auch begonnen, den Use-Package- Code mit der :ensure tOption zu verwenden, um alle meine Pakete auf einem neuen PC zu installieren.

Colin Bell
quelle
2

Eine Möglichkeit besteht darin, das Paket zu installieren, falls es noch nicht installiert ist. Sie sollten Ihre Init-Datei aktualisieren und die folgenden Zeilen hinzufügen:

(defvar my-packages
  '(color-theme db-pg db kv magit-push-remote magit-tramp
                magit git-rebase-mode git-commit-mode pg
                pretty-lambdada projectile pkg-info epl dash
                python-mode rich-minority s yasnippet yasnippet-bundle
                use-package key-chord undo-tree guide-key move-text
                openwith ack ag aggressive-indent nginx-mode multiple-cursors
                smartparens with-editor haskell-mode)
  "A list of packages to ensure are installed at launch.")

(defun my-packages-installed-p ()
  (loop for p in my-packages
        when (not (package-installed-p p)) do (return nil)
        finally (return t)))

(unless (my-packages-installed-p)
  ;; check for new packages (package versions)                                  
  (package-refresh-contents)
  ;; install the missing packages                                                                               
  (dolist (p my-packages)
    (when (not (package-installed-p p))
      (package-install p))))

Ändern Sie die my-packagesVariable und fügen Sie das Paket hinzu, das Sie installieren möchten. M-x describe-variable package-activated-listgibt Ihnen die Liste Ihres aktuell installierten Pakets.

Danach müssen Sie nur noch Ihre Init-Datei freigeben. Ich hoffe es wird helfen.

Nsukami _
quelle
Hoppla, ich sehe, dass Sie geantwortet haben, wie Sie die Liste löschen sollen. Vielleicht sollte das in Ihrer Antwort deutlicher hervorgehoben werden?
verdammelt