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 .elc
archivo! Encontré que cl-eval-when
tienen una semántica adecuada (según el nombre)
Normalmente no necesitamos require
como archivo de sitio ypackage.el
Por ejemplo, quiero compilar en bytes mi .emacs
que 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-compile
nombre 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 .emacs
archivo 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
, require
solo se necesita para que la compilación de bytes tenga éxito con la expansión de macros.
w3m-DEPENDENT-CODE
de los desaparecidosw3m-util
.