3

有没有办法挂钩命令 A,以便在 A 执行后始终调用 B?

4

2 回答 2

10

我认为最直接的方法是通过使用建议来实现这一点。你会做一些类似的事情:

(defadvice command-A (after b-after-a activate)
  "Call command-B after command-A"
  (command-B))

这种方法的优点是即使重新定义了 command-A 也能正常工作。但是,它不适用于宏或从 C 代码调用的原始函数。但是,在实践中,建议这些功能的想法很少见。

也就是说,仅仅定义一个新命令 ( command-C) 可能值得研究,它首先调用command-A然后command-B.

您还可以玩弄符号函数间接并编写新命令。

这有点取决于您要解决的问题。

于 2013-01-03T16:25:45.630 回答
3

您可以使用 defadvice 为函数提供建议:

;; This is the original function command-A
(defun command-A () (do-it))

;; This call will cause (do-sometihng-after-command-A) to be called 
;; every-time (command-A) is called.
(defadvice command-A (after after-command-A)
    (do-something-after-command-A))

;; Enable the advice defined above
(ad-activate 'command-A)

有关更多信息和示例,请参阅信息节点 (elisp)Advising Functions。

于 2013-01-03T16:25:58.710 回答