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?

Erik Kaplun
la source

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.

Malabarba
la source
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