Je comprends ce que le chargement automatique fait pour les fonctions (enregistrer le fichier à charger lorsqu'une telle fonction est appelée ou que sa chaîne de documentation est récupérée). Cependant, il n'est pas clair comment utiliser la fonction de chargement automatique en conjonction avec des variables et des macros.
J'ai deux questions:
Que se passe-t-il lorsque le package a un paramètre implémenté en tant que variable que l'utilisateur peut définir, mais qu'il n'est pas chargé automatiquement? Ces variables doivent-elles être chargées automatiquement? Sinon, il s'avère que de telles variables n'existent pas, l'environnement Lisp n'en sait rien, y compris leurs valeurs par défaut, jusqu'à ce qu'une fonction de chargement automatique du package soit utilisée (généralement après le chargement des fichiers de configuration), puis si l'utilisateur les définit dans son / son fichier de configuration, c'est comme définir une variable non existante. Si la valeur de la variable est une liste non vide et que l'utilisateur utilise
push
ouadd-to-list
pour modifier sa valeur, que se passe-t-il exactement? Les valeurs par défaut sont-elles perdues?Que se passe-t-il lorsqu'une macro est chargée automatiquement? Quand faut-il charger automatiquement une macro?
la source
setq
éditées (c'est-à-dire peu importe les valeurs qu'elles avaient avant) peuvent avoir une valeur par défaut spécifiée dansdefvar
oudefcustom
sous forme, mais en cas de liste qui peut être étendue par l'utilisateur, il est préférable d'utilisereval-after-load
non? De plus, parfois de bons défauts sont bons, même s'ils prennent la forme d'une liste ;-)eval-after-load
, c'est un bug dans l'implémentation du package. En règle générale,eval-after-load
doit être utilisé pour des corrections de bogues ou des personnalisations très inhabituelles. Soit dit en passant, il peut être préférable d'utiliser un crochet si le paquet en met un à disposition.eval-after-load
bien, les utilisateurs ne pourront toujours pas supprimer les éléments de la liste! Cela me fait me demander si je devrais abandonner les valeurs par défaut.eval-after-load
ne devrait être nécessaire que pour des situations inhabituelles. C'est l'un des outils standard de la boîte à outils à chargement différé. Si les gens ne veulent pas utiliser de tels outils, ils peuventrequire
consulter la bibliothèque à l'avance (c'est en effet ce que les nouveaux arrivants sont invariablement recommandés de faire - au moment où ils se mettent à penser "Je souhaite qu'Emacs démarre un peu plus vite", ils ' ai probablement appris suffisamment pour ne pas être effrayé par la nouvelle syntaxe :)customize-set-variable
plutôt quesetq
peut être un bon. Mais je n'ai pas le temps maintenant pour l'étude approfondie requise pour améliorer ma réponse à cet égard. Si vous pensez que c'est important, pourquoi n'écrivez-vous pas votre propre réponse? Il sera plus visible que ce long fil de commentaires.