3

A の実行後に常に B が呼び出されるように、コマンド A にフックする方法はありますか?

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-Acommand-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 関数を参照してください。

于 2013-01-03T16:25:58.710 に答える