Après avoir récemment pris connaissance de ces informations, use-package
j'ai décidé d'y porter ma configuration, mais je me suis montré réticent à renoncer à la commodité de l'utilisation package.el
pour installer des packages et les maintenir à jour. Je l'ai trouvé un peu difficile à combiner use-package
et package.el
.
Je suis généralement intéressé à savoir comment les gens se combinent use-package
avec le package.el
système, mais pour une question plus spécifique, continuez à lire.
Voici ce que je veux:
- Pour que les packages soient installés par le gestionnaire de packages afin que je puisse facilement rechercher des packages et les maintenir à jour
list-packages
. - Pour configurer et charger des packages exclusivement via
use-package
, afin que je puisse facilement voir dans mon fichier init exactement ce que je charge et comment il est configuré. - En option, j'aimerais également pouvoir installer des packages via
use-package
le:ensure
mot-clé de.
Si je comprends bien, je veux très peu de ce qui se package-initialize
passe, essentiellement la façon dont il configure le load-path
. Actuellement, j'ai ceci dans ma configuration:
;(package-initialize)
(setq package-enable-at-startup nil)
(let ((default-directory "~/.emacs.d/elpa"))
(normal-top-level-add-subdirs-to-load-path))
(require 'use-package)
La première ligne, commentée, est donc Emacs 25 n'ajoute pas utilement un (package-initialize)
à mon fichier init. Le bit avec normal-top-level-add-subdirs-to-load-path
est une approximation de ce package-initialize
qui ferait le load-path
, une approximation qui semble assez bonne.
Cela semble réaliser mes désirs 1 et 2, mais pas 3. Si j'essaye d'utiliser :ensure
, j'obtiens un message d'erreur disant que ce package.el
n'est pas initialisé. L'appel package-initialize
résoudrait cela, mais je souhaite éviter cela car a) je ne veux pas que toutes les myriades de chargements automatiques soient chargés (je préfère utiliser use-package
pour créer précisément les chargements automatiques dont j'ai besoin), et b) je veux pouvoir facilement évitez de charger certains packages installés quand je veux (ce qui est facile à faire use-package
).
Quelqu'un at-il une recommandation sur la façon de procéder?
la source
package-initialize
ce qui rend ma question théorique.Avec votre configuration actuelle, vous avez effectivement désactivé package.el, car vous n'initialisez pas le gestionnaire de packages et empêchez Emacs de l'initialiser automatiquement. Tout ce que vous faites en retour est d'ajouter ELPA à la
load-path
, mais ce n'est qu'un petit sous-ensemble de ce que fait package.el. Je ne sais pas pourquoi vous faites cela, mais ce n'est pas une configuration que je recommanderais.Plus précisément, vous n'obtiendrez pas de chargement automatique des packages avec votre approche, ce qui signifie qu'au départ, aucune commande d'aucun package ne sera disponible.
En d'autres termes,
M-x
ne vous offrira que des commandes intégrées. Pour ajouter des commandes à partir de vos packages, vous devez ajouter des:commands
définitions explicites à toutes vosuse-package
déclarations, ce qui représente beaucoup d'efforts de maintenance - en particulier pour les gros packages tels que Magit - pour un gain essentiellement nul - package.el vous offre des chargements automatiques gratuits .La combinaison
use-package
avec package.el est en fait très simple - toute l'installation est basée sur cette combinaison - mais il est préférable de laisser package.el faire son travail. Initialisez simplement package.el au tout début de votre fichier init:Pour plus de commodité, vous pouvez par la suite vouloir démarrer
use-package
, s'il n'est pas déjà installé:Cela vous permet de démarrer une session Emacs sur un nouveau système et votre init.el s'installera automatiquement
use-package
.En fin de compte, vous devez charger
use-package
:Vous pouvez maintenant utiliser
use-package
pour installer et configurer des packages:Lorsque Emacs évalue maintenant ce formulaire au démarrage,
use-package
vérifie si Magit est déjà installé et l'installe automatiquement si nécessaire.la source
package-initialize
prend un certain temps pour remplir le chemin, définir les chargements automatiques et faire le reste. Je pense avoir lu quelque part que Jon Wiegley lui-même (l'auteur deuse-package
) préfère déclarer toutes les commandes chargées automatiquement dans lesuse-package
strophes plutôt que de se fier à luipackage.el
.load-path
et ajouter des chargements automatiques dans les deux cas, viause-package
ou viapackage.el
. Je doute qu'il y ait une différence mesurable, en particulier si vous avez un système moderne avec un disque rapide.package-initialize
une liste personnalisée dansload-path
. J'attribue cela à "l'exploration" du système de fichiers qui lepackage.el
fait. Cependant, je n'ai jamais mesuré de différence significative de performances entre le chargement deautoload
définitions à partir de fichiers et leur mise enuse-package
strophes.package.el
système, je dirais que je l'ai seulement désactivépackage-initialize
! La raison en est que même si j'aimelist-packages
parcourir de nouveaux packages et spécialement pour mettre à jour tous mes packages actuellement installés, je pense que je préfère le chargement ciblé deuse-package
. Pour moi, ayant des chargements automatiques uniquement pour les commandes, j'utilise des sons comme une bonne chose!