Idiome commun pour l'expansion de macro de contournement ou résoudre l'avertissement sur les variables non définies lors de la compilation d'octets:
(eval-when-compile
(require 'cl-lib))
Mais cela require ...compilé dans un .elcfichier! J'ai trouvé qui cl-eval-whenont une sémantique appropriée (selon le nom).
Normalement, nous n'avons pas besoin d'un requirefichier de site etpackage.el
Par exemple, je veux compiler mon octet .emacsqui utilise des macros externes, mais passer silencieusement s'il n'y a pas un tel paquet:
(cl-eval-when 'compile
(condition-case err
(require 'w3m-util)
(error (byte-compile-warn "Failed by: %S" err))))
(w3m-util-DEPENDENT-CODE ...)
Une autre façon de procéder est:
(ignore-error
(require 'w3m-util)
(w3m-util-DEPENDENT-CODE ...))
Mais maintenant, nous ne sommes pas une forme de haut niveau ...
Dois-je remplir correctement ce eval-when-compilenom, faire quelque chose qui n'est pas attendu de son nom?
(when (require 'w3m-util nil t) (w3m-util-DEPENDENT-CODE...))
(when (require 'w3m-util nil t) ...)est un bel idiome! Mais j'essaye de faire un .emacsfichier parfait , pas une bibliothèque. Ayez donc à l'esprit le chargement de code retardé (sur demande) à l'aide du chargement automatique. Pour cette raison que j'utilise intensivement eval-after-load, il requiresuffit de faire en sorte que la compilation d'octets réussisse avec l'expansion des macros.
w3m-DEPENDENT-CODEd'un disparuw3m-util.