J'utilise package
pour gérer mes extensions Emacs. Afin de synchroniser mes paramètres Emacs sur différents ordinateurs, j'aimerais avoir un moyen de spécifier une liste de noms de packages dans le .emacs
fichier, puis package
de rechercher et d'installer automatiquement les packages, de sorte que je n'ai pas besoin de les installer manuellement en appelant M-x package-list-packages
. Comment faire ça?
123
Réponses:
la source
package
.package-refresh-contents
qu'il ne serait exécuté que si le package n'est pas installé? Comment est-il(or (file-exists-p package-user-dir))
meilleur / comment vérifie-t-il même si les packages sont installés?package-refresh-contents
. Cela ne sera probablement exécuté que la première fois que vous ouvrirez emacs sur un nouvel ordinateur, et cela me convient. Si un package doit être mis à jour, cela peut être fait manuellement.use-package
, vous pouvez utiliser le:ensure
mot - clé pour installer automatiquement les packages. Cela configure égalementpackage-selected-packages
si vous devez accéder à la liste des packages via la personnalisation ou par programme.Basé sur les commentaires de Profpatsch et les réponses ci-dessous:
la source
or
? Oh wow.mapc
c'est pour les effets secondaires. Mais pourquoi ne pas l'utiliserunless
?(package-initialize)
avant la référence àpackage-user-dir
Emacs 25.1+ gardera automatiquement une trace des paquets installés par l'utilisateur dans la
package-selected-packages
variable personnalisable .package-install
mettra à jour la variable de personnalisation et vous pourrez installer tous les packages sélectionnés avec lapackage-install-selected-packages
fonction.Un autre avantage pratique de cette approche est que vous pouvez l'utiliser
package-autoremove
pour supprimer automatiquement les packages qui ne sont pas inclus danspackage-selected-packages
(bien que cela préservera les dépendances).Source: http://endlessparentheses.com/new-in-package-el-in-emacs-25-1-user-selected-packages.html
la source
Voici le code que j'utilise pour Emacs Prelude :
Si vous n'utilisez pas MELPA, vous n'avez pas besoin d'en avoir besoin (et si vous devez
melpa.el
être sur votreload-path
(ou installé via MELPA). Le package db n'est pas actualisé à chaque fois (car cela ralentirait considérablement le démarrage ) - uniquement là où des packages désinstallés sont présents.la source
Personne n'a encore mentionné Cask , mais il convient tout à fait à cette tâche.
Fondamentalement, vous créez la
~/.emacs.d/Cask
liste des packages que vous souhaitez installer. Par exemple:L'exécution à
cask
partir de la ligne de commande installera ces packages pour vous, ainsi que toutes les dépendances dont ils ont besoin.En outre, vous pouvez mettre à jour automatiquement les packages installés à l'aide de
cask update
.la source
/path/to/emacs -Q --script /path/to/cask/cask-cli.el -- [args]
Appelez
package-install
avec le nom du package comme symbole. Vous pouvez trouver les noms de packages de vos packages en appelant de manièrepackage-install
interactive et en complétant le nom. La fonctionpackage-installed-p
vous indiquera si elle a déjà été installée.Par exemple:
la source
error: Package
dired + 'n'est pas disponible pour l'installation'. dired + est un package que j'ai essayé avec votre code.dired+
- il lorsque vous courezpackage-list-packages
? Je crois que vous devrez ajouter de la marmelade ou du melpa à votrepackage-archives
. Si oui, pouvez-vous courir(package-install 'dired+)
?(package-installed-p 'dired+)
devrait revenirt
et il sera ignoré dans le code ci-dessus.package-installed-p
seul fonctionne bien, mais tout le bloc de code ne fonctionne pas. J'ai essayé plusieurs packages.la source
J'aime vérifier si l'utilisateur souhaite installer les packages en premier, comme indiqué dans cette réponse . De plus, je rafraîchis le contenu de mon paquet une fois avant d'installer quoi que ce soit. Je ne suis pas sûr que ce soit la meilleure façon, mais je ne pense pas que les principales réponses le faisaient pour moi.
la source
Je suis tombé sur un problème qui ne se passait rien après avoir ajouté
(package-install 'org)
dans.emacs
. Je voulais installer la version à jour deorg-mode
et le intégréorg-mode
est assez ancien.J'ai extrait le code source d'
package-install
Emacs 25.3.1. La fonction auto vérifie déjà si un package est installé ou non et refuse de l'installer si le package est déjà installé. Donc, la vérification(unless (package-installed-p package) ...)
de la réponse 10093312 est en fait déplacée.L'intégré
org-mode
compte également comme installé etpackage-install
refuse d'installer la version la plus récente d'ELPA. Après avoir passé du temps à lire package.el, j'ai trouvé la solution suivante.La raison pour laquelle cela fonctionne est que
package-*
les fonctions de famille traitent les arguments différemment selon qu'il s'agit d'un symbole ou d'unpackage-desc
objet. Vous ne pouvez spécifier les informations de version quepackage-install
via unpackage-desc
objet.la source
Voici le mien, c'est plus court :)
la source
Voici une autre manière.
la source