当运行时需要软件包时,如何让 emacs 发出警告?我想做一些像cl
对它的警告所做的那样的事情,
警告:运行时需要 cl 包
我在 cl 库中没有看到负责任的代码段。
看起来它来自bytecomp.el
的byte-compile-file-form-require
. 有一条线(put 'require 'byte-hunk-handler 'byte-compile-file-form-require)
似乎使它钩入require
。 您可以重新定义byte-compile-file-form-require
以使其对其他库发出警告。
您可以尝试如下操作:
(when (assoc '(t byte-compile-file-form-require ((require '<mypkg>)) nil)
(backtrace-frames))
(message "Warning: package <mypkg> required at runtime"))
请注意,backtrace-frames
是 Emacs-26 中的新功能,因此对于早期的 Emacsen,您需要从 backtrace-frame
或类似的东西中重现它。 例如,对于早期的Emacsen,您可以使用macroexp--backtrace
:
(when (assoc '(t byte-compile-file-form-require (require '<mypkg>))
(macroexp--backtrace))
(message "Warning: package <mypkg> required at runtime"))