Idioma común para solucionar la expansión de macros o resolver advertencias sobre variables indefinidas durante la compilación de bytes:
(eval-when-compile
(require 'cl-lib))
Pero esto require ...compilado en .elcarchivo! Encontré que cl-eval-whentienen una semántica adecuada (según el nombre)
Normalmente no necesitamos requirecomo archivo de sitio ypackage.el
Por ejemplo, quiero compilar en bytes mi .emacsque usa algunas macros externas, pero pasar silenciosamente si no hay tal paquete:
(cl-eval-when 'compile
(condition-case err
(require 'w3m-util)
(error (byte-compile-warn "Failed by: %S" err))))
(w3m-util-DEPENDENT-CODE ...)
Otra forma de hacer esto es:
(ignore-error
(require 'w3m-util)
(w3m-util-DEPENDENT-CODE ...))
Pero ahora no somos una forma de nivel superior ...
¿Relleno correctamente ese eval-when-compilenombre y hago algo que no se espera de su nombre?
(when (require 'w3m-util nil t) (w3m-util-DEPENDENT-CODE...))
(when (require 'w3m-util nil t) ...)es un buen idioma! Pero trato de hacer un .emacsarchivo perfecto , no una biblioteca. Por lo tanto, tenga en cuenta la carga de código retrasado (a pedido) con la ayuda de la carga automática. Por esta razón, uso mucho eval-after-load, requiresolo se necesita para que la compilación de bytes tenga éxito con la expansión de macros.
w3m-DEPENDENT-CODEde los desaparecidosw3m-util.