是否可以仅针对特定模式/缓冲区使用 defadvice 修改函数的行为?我希望 mouse-yank-primary 插入额外的文本,但仅当我处于特定模式时。我已经为 mouse-yank-primary 尝试了“defadvice after”,但是一旦激活它也可以在所有其他缓冲区中使用。
我认为可以通过在模式挂钩中将鼠标按钮重新绑定到我自己的功能来解决,但 elisp 手册说最好使用 defadvice。
将鼠标按钮重新绑定到另一个功能对我来说似乎更可取。你不需要一个模式挂钩,通常你只需修改模式的键盘映射:
(eval-after-load '<mode>
'(define-key <mode>-map [mouse-2] 'my-mouse-yank-primary))
将建议本地化到主要模式有点困难。没有参数可以传递给defadvice
它,但你可以在模式挂钩中设置一些变量的缓冲区本地值,然后在建议代码中检查这个值。如果已设置,请做一些特别的事情。如果没有,只需评估ad-do-it
.
将建议本地化到主要模式很容易:
(defadvice foo (after bar activate)
(when (derived-mode-p 'python-mode)
(do (something) now)))