web-dev-qa-db-fra.com

Comment enregistrer une liste de tous les packages installés dans Emacs 24?

J'utilise prélude comme configuration de base d'Emacs. J'ai installé de nombreux packages à partir du gestionnaire de packages et je souhaite utiliser mes paramètres sur une autre machine.

Je ne veux pas transporter les packages installés et je ne veux pas non plus créer une liste manuellement.

Comment enregistrer une liste de tous les packages installés dans prelude-package.el ou tout autre fichier afin que lorsque j'apporte cette configuration à mon autre machine, ils y soient automatiquement installés lors de la première utilisation?

49
Akash Kothawale

Vous pouvez obtenir une liste des packages actuellement installés (à l'exclusion des packages intégrés) à partir de la variable package-activated-list. Pour les installer automatiquement au démarrage, consultez cette question: comment installer automatiquement les packages emacs en spécifiant une liste de noms de packages?

Plus précisément, si vous le faites C-h v package-activated-list, copiez la valeur indiquée et insérez-la comme valeur de prelude-packages, emacs s'assurera automatiquement que ces packages sont installés au démarrage.

66
ataylor

La méthodologie canonique est la meilleure (décrite par ataylor). Voici une méthode plus maladroite.

M-x list-packagesC-s installed jusqu'à ce que vous trouviez la première ligne du package installé. Commencez à sélectionner avec C-SPC. Descendez jusqu'à ce que vous atteigniez les packages intégrés. Copier avec M-wC-x b pour un nouveau tampon. Coller avec C-y.C-x C-s pour enregistrer le fichier.

Le seul avantage que je vois est que c'est un peu plus descriptif. Affichage d'une petite description de vos packages. utile lorsque vous installez des packages et que vous les oubliez.

14
knight17

Comme mentionné à comment installer automatiquement les packages emacs en spécifiant une liste de noms de packages? , il serait préférable d'enregistrer également la version du package dont vous avez besoin. Pour ce faire, vous pouvez utiliser la fonction suivante:

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

Cela vous donnera une liste de (NAME VERSION) paires. Malheureusement, je n'ai pas trouvé de moyen d'installer une version spécifique d'un package. Il semble package.el saisit toujours la dernière version disponible. Ce que je fais maintenant, c'est:

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

J'ai écrit une fonction plus longue pour installer des packages correspondant au numéro de version exact, mais elle échoue car package.el par défaut ne récupère que les dernières versions disponibles pour chaque package. Gist

3
Felipe

Comme décrit ci-dessus, en utilisant le mode normal emacs. Voici une autre façon de le faire en mode diabolique:

M-x list-packages;/installé (ils seront mis en évidence); v (pour le mode visuel); j (pour les sélectionner); y (pour les copier); ouvrez un nouveau tampon et collez-les.

1
Achylles