Exporter les packages installés par Emacs?

10

J'utilise emacs 24.4. J'ai ajouté un grand nombre de packages installés via la directive Mx list-packages sur environ un an d'utilisation. J'aimerais exporter ma liste de packages installés pour une utilisation ailleurs. La copie de mon .emacs me donne quelques erreurs au démarrage, ce qui jogge ma mémoire pour installer certaines choses. Je soupçonne que je pourrais copier le .emacs.d, mais cela semble peut-être une mauvaise idée.

Existe-t-il une procédure ou une directive que je peux émettre pour sauvegarder la liste des packages installés dans un fichier qui peut être utilisé pour les obtenir facilement sur des machines étrangères?

sanimalp
la source
1
Copier votre .emacs.drépertoire (ou de préférence le placer sous contrôle de version) est généralement une bonne idée. (Il est également judicieux de renommer ~/.emacsà ~/.emacs.d/init.elsi vous décidez de le faire.)
Phils

Réponses:

5

Le répertoire ~/.emacs.d/elpacontient tous les packages installés avec list-packages. Vous pouvez copier ce répertoire.

Je voudrais probablement aussi exécuter quelque chose comme (byte-recompile-directory "~/.emacs.d/elpa" 0 t)( 0signifie ne pas demander, tsignifie forcer la recompilation) pour tout recompiler en octets car je pense qu'il y a une certaine incompatibilité des fichiers compilés en octets entre les versions d'Emacs.

nounou
la source
J'ai utilisé cette stratégie plusieurs fois depuis que j'ai posé cette question. Merci pour la contribution.
sanimalp
4

J'ai jeté un œil au package.elfichier et j'ai trouvé la variable package-alist. Cela semble être une liste de tous les packages installés, y compris les packages requis par les packages que vous avez installés.

Si tout ce que vous voulez est une liste des noms de packages installés, le code suivant écrit les noms des packages de cette liste dans le *Messages*tampon.

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

Je ne suis pas un programmeur Lisp, donc je suis sûr que quelqu'un peut écrire une bien meilleure version de ce code.

J'ai également commencé à utiliser le code use-package avec l' :ensure toption afin d'installer tous mes packages sur un nouveau PC.

Colin Bell
la source
2

Une façon de faire pourrait être d'installer le package s'il n'est pas déjà installé, vous devez mettre à jour votre fichier init et ajouter ces lignes:

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

Modifiez la my-packagesvariable et ajoutez / supprimez le package que vous souhaitez installer. M-x describe-variable package-activated-listvous donnera la liste de votre package actuellement installé.

Après cela, la seule chose à partager est votre fichier init. J'espère que cela aidera.

Nsukami _
la source
Oups, je vois que vous avez répondu comment vider la liste. Peut-être que cela devrait être mis en évidence dans votre réponse?
verdammelt