Emacs:在命令上定义自定义挂钩

时间:2013-01-03 15:42:45

标签: emacs hook

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

2 个答案:

答案 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。