2013-01-03 2 views

답변

10

나는 이것을 달성하는 가장 직접적인 방법이 advice을 사용하는 것이라고 생각합니다. 당신의 라인을 따라 뭔가를 할 것이다 :

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

이 접근 방식은 명령-A가 재정의 될 때에도 작동하는 장점이있다. 그러나 매크로 나 C 코드에서 호출 된 기본 함수에서는 작동하지 않습니다. 그러나 실제로 이러한 기능에 대한 조언은 거의 없습니다.

처음에는 command-A을 호출 한 다음 command-B을 호출하는 새로운 명령 (command-C)을 정의하는 것이 가치가 있습니다.

symbol function indirection으로 놀고 새로운 명령을 쓸 수도 있습니다.

당신이 해결하려고하는 대상에 따라 다릅니다.

;; 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)를 참조하십시오 :

+0

평가하기 전에 함수에 "조언"을 할 수 있습니까? – PascalVKooten

+0

@Dualinity 예, 정의에서'after'를'before' (또는'around')로 대체합니다. 실제로 명령 (대화 형을 사용합니다)인데 상호 작용하는 부분의 작동 방식을 변경하려는 경우 조언에 '상호 작용'이 있는지 확인해야합니다. 자세한 내용은 조언 링크를 확인하십시오. 그리고 조언 라이브러리 자체의 주석에있는 "튜토리얼"을 확인하십시오 ('M-x find-library advice RET'). –

3

당신은 함수를 사용 defadvice 조언을 할 수 있습니다.

관련 문제