建议仅适用于重新评估函数调用建议函数后的所有情况

Nat*_*ath 3 emacs elisp

在我的.emacs文件中,我有:

(defadvice narrow-to-region (around test activate)
   (message "advice")
   ad-do-it)
Run Code Online (Sandbox Code Playgroud)

当我称之为狭隘地区时,建议会在缩小之前运行并打印"建议".

当我称之为狭隘的定义时,事实并非如此.

我在lisp.el中找到了定义narrow-to-defun的地方,并重新评估了该函数.此时,建议开始运行.

什么可能导致这个?

Dan*_*Dan 6

问题是,很显然,由于字节编译,因此无法告知缩小原语(narrow-to-region是原始的,narrow-to-defun电话narrow-to-region).

关于Null程序的以下帖子("Emacs建议的限制")详细介绍了这个问题.这是帖子深处的简短版本:

事实证明它narrow-to-region是如此特殊 - 可能是因为它经常被使用 - 它获得了自己的字节码.原始函数调用正被编译成单个指令.这意味着我的建议不会在字节编译代码中考虑.Darnit.widen(代码126)也是如此.

至于为什么建议你开始工作后重新评估narrow-to-defun:我猜那是因为你结束了更换字节编译版本,重新评估的时候.