après-init-hook vs eval-after-load / avec-eval-after-load


13

J'ai trouvé le fonctionnement assez utile des packages dans Emacs 24 , cependant, je voudrais une réponse définitive d'un utilisateur expérimenté ou d'un développeur principal quant à laquelle est réellement préféré dans le cas typique sur 24.4.

Afaik, (add-hook 'after-init-hook ...)est la soi-disant approche par force brute pour configurer les personnalisations des packages. Cependant, eval-after-loadet sa syntaxe plus sucrée with-eval-after-loadsemble plus appropriée pour une configuration plus dynamique et à grain fin qui joue bien avec le chargement progressif, séparé et paresseux des extensions.

Ma compréhension est-elle correcte? Que dois-je garder à l'esprit?

Réponses:


11

Afaik, (add-hook 'after-init-hook ...)est la soi-disant approche par force brute pour configurer les personnalisations des packages.

Non. Si vous souhaitez configurer des packages dans votre fichier init, l'approche typique consiste à appeler (package-initialize)en haut du fichier, puis à effectuer les configurations. after-init-hookest inutilement compliqué à cet effet.

Cependant, eval-after-loadet sa syntaxe plus sucrée with-eval-after-loadsemble plus appropriée pour une configuration plus dynamique et à grain fin qui joue bien avec le chargement progressif, séparé et paresseux des extensions.

(with-)eval-after-loadest utilisé pour les choses que vous voulez faire après le chargement d'un package. package-initializene charge pas les packages, il les «prépare» uniquement (charge leurs chargements automatiques).

Si vous utilisez eval-after-loadautour de chaque ensemble de configurations, vous n'aurez pas besoin d'appeler (package-initialize)en haut. Mais ce que les gens font habituellement, c'est d'appeler (package-initialize), de sorte que la plupart des configurations puissent être écrites directement dans le fichier init, puis uniquement du eval-after-loadcode qui est très long ou qui dépend du paquet en cours de chargement.


mais il serait toujours OK de tout mettre sous eval-after-loadpour un paquet donné, non, et de ne pas l'utiliser (package-initialize)du tout?
Erik Kaplun

@ErikAllik Oui. Si vous utilisez eval-after-load pour chaque ensemble de configurations, vous n'aurez pas besoin d'appeler (package-initialize) en haut.
Malabarba
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.