Allgemeine Redewendung zur Umgehung der Makroerweiterung oder zum Auflösen von Warnungen vor undefinierten Variablen während der Bytekompilierung:
(eval-when-compile
(require 'cl-lib))
Aber require ...das in .elcDatei kompiliert ! Ich fand, dass cl-eval-whendie richtige Semantik (nach Namen) haben.
Normalerweise brauchen wir nicht requireals Site-Datei undpackage.el
Zum Beispiel möchte ich meine Bytes kompilieren, .emacsdie einige externe Makros verwenden, aber stillschweigend durchlaufen, wenn es kein solches Paket gibt:
(cl-eval-when 'compile
(condition-case err
(require 'w3m-util)
(error (byte-compile-warn "Failed by: %S" err))))
(w3m-util-DEPENDENT-CODE ...)
Ein anderer Weg, dies zu tun, ist:
(ignore-error
(require 'w3m-util)
(w3m-util-DEPENDENT-CODE ...))
Aber jetzt sind wir keine Top-Level-Form ...
Fülle ich diesen eval-when-compileNamen richtig aus und mache etwas, was von seinem Namen nicht erwartet wird?
(when (require 'w3m-util nil t) (w3m-util-DEPENDENT-CODE...))
(when (require 'w3m-util nil t) ...)ist eine nette Redewendung! Aber ich versuche, eine perfekte .emacsDatei zu erstellen, keine Bibliothek. Denken Sie also daran, das Laden von Code (auf Anfrage) mithilfe des automatischen Ladens zu verzögern. Aus diesem Grund verwende ich häufig die eval-after-loadFrage, ob requiredie Byte-Kompilierung nur mit der Makro-Erweiterung erfolgreich sein soll.
w3m-DEPENDENT-CODEeinem Vermisstenw3m-util.