A の実行後に常に B が呼び出されるように、コマンド A にフックする方法はありますか?
質問する
277 次
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 関数を参照してください。
于 2013-01-03T16:25:58.710 に答える