Emacs 如何在运行时需要包时发出警告

Emacs 如何在运行时需要包时发出警告,emacs,compiler-warnings,Emacs,Compiler Warnings,当运行时需要包时,如何让emacs发出警告?我想用它的警告做一些类似于cl的事情 警告:运行时需要cl包 我在cl库中没有看到负责的代码。看起来它来自字节编译文件格式require中的字节编译文件。有一行(put'require'byte hunk handler'byte compile file form require)似乎使它与require挂钩。您可以重新定义字节编译文件格式require,使其在其他库中发出警告。您可以尝试以下操作: (when (assoc '(t byte-com

当运行时需要包时,如何让emacs发出警告?我想用它的警告做一些类似于cl的事情

警告:运行时需要cl包


我在cl库中没有看到负责的代码。

看起来它来自
字节编译文件格式require
中的
字节编译文件。有一行
(put'require'byte hunk handler'byte compile file form require)
似乎使它与
require
挂钩。您可以重新定义
字节编译文件格式require
,使其在其他库中发出警告。

您可以尝试以下操作:

(when (assoc '(t byte-compile-file-form-require ((require '<mypkg>)) nil)
             (backtrace-frames))
  (message "Warning: package <mypkg> required at runtime"))

谢谢这很有帮助。重新定义这个函数感觉有点笨手笨脚,因为它需要在全局范围内重新定义才能工作——比如在源代码中或者在加载所有外部包之前。我不能让它工作,但这似乎是正确的想法。我应该把这个表单(第一个-我在emacs26上)放在我想要显示错误的包中,对吗?那么,如果另一个包在运行时需要它,我会期望得到一条消息?对,把它放在
.el
文件的顶层。如果它不工作,那么您可以通过添加
(消息“%S”(回溯帧))
来调试它,这样您就可以看到回溯元素的外观,这样您就可以调整要查找的元素的形状。
(when (assoc '(t byte-compile-file-form-require (require '<mypkg>))
             (macroexp--backtrace))
  (message "Warning: package <mypkg> required at runtime"))