有没有办法挂钩命令A,以便在A执行后总是调用B?
答案 0 :(得分:10)
我认为最直接的方法是使用advice。 您可以采取以下措施:
(defadvice command-A (after b-after-a activate)
"Call command-B after command-A"
(command-B))
这种方法的优点是即使重新定义了命令-A也能正常工作。但是,它不适用于从C代码调用的宏或基本函数。但是,在实践中,建议这些功能的想法很少。
也就是说,仅仅定义一个新命令(command-C
)可能值得考虑,该命令首先调用command-A
然后调用command-B
。
您也可以使用symbol function indirection并编写新命令。
这取决于你想要解决的问题。
答案 1 :(得分: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)
有关更多信息和示例,请参阅info node(elisp)Advising Functions。