Idioma comum para solucionar a expansão de macro ou resolver o aviso sobre variáveis indefinidas durante a compilação de bytes:
(eval-when-compile
(require 'cl-lib))
Mas isso require ...
compilado em .elc
arquivo! Eu achei que cl-eval-when
tem semântica adequada (de acordo com o nome).
Normalmente não precisamos require
como arquivo do site epackage.el
Por exemplo, eu quero compilar em bytes o meu, .emacs
que usa algumas macros externas, mas passa silenciosamente se não houver esse pacote:
(cl-eval-when 'compile
(condition-case err
(require 'w3m-util)
(error (byte-compile-warn "Failed by: %S" err))))
(w3m-util-DEPENDENT-CODE ...)
Outra maneira de fazer isso é:
(ignore-error
(require 'w3m-util)
(w3m-util-DEPENDENT-CODE ...))
Mas agora não somos um formulário de nível superior ...
Devo preencher adequadamente esse eval-when-compile
nome e fazer algo que não é esperado dele?
(when (require 'w3m-util nil t) (w3m-util-DEPENDENT-CODE...))
(when (require 'w3m-util nil t) ...)
é um bom idioma! Mas tento criar um .emacs
arquivo perfeito , não uma biblioteca. Portanto, lembre-se do atraso no carregamento do código (mediante solicitação) com a ajuda do carregamento automático. Por esse motivo que uso extensivamente eval-after-load
, o solicitado require
precisa apenas obter êxito na compilação de bytes com a expansão de macros.
w3m-DEPENDENT-CODE
de uma faltaw3m-util
.