2016-10-07 1 views
0

대화 형 입력을 defadvice으로 재정의하려면 어떻게해야합니까?조언이 포함 된 대화 형 함수 재정의

(defadvice ansi-term (around kill-interactive activate) 
    (let ((explicit-shell-file-name "/bin/bash")) 
    (ad-set-arg 0 explicit-shell-file-name) 
    (deactivate-input-method) 
    ad-do-it)) 

을하지만, 여전히 explicit-shell-file-name가 올바르게 설정된 경우에도 프롬프트 : 예를 들어

, 나는 다음과 같이 입력에 대한 프롬프트에서 ansi-term을 중지하려합니다.

답변

2

이 함수에는 여전히 원래 interactive 선언이 있으므로 대화식으로 호출하면 인수 값을 가져 오는 데 사용됩니다.

interactive 양식을 귀하의 조언에 포함하여 대체 할 수 있습니다. 예를 들어,이 같은 조언을 사용하는 경우 그렇지 않으면 당신은뿐만 아니라 ANSI-용어의 비 대화 형 사용에 대한 PROGRAM 값을 건드리지하고, 인수 값을 설정해야하는 위치

(defadvice ansi-term (around kill-interactive activate) 
    (interactive (list "/bin/bash" nil)) 
    ad-do-it) 

그리고 실제로 그런는 정확히 , 그것은 분명히 당신이 여기에서 원하는 것이 아닙니다!

개인적으로는 아무 것도하지 않겠습니다. 나는 새로운 래퍼 명령을 정의하고, 대신 것을 호출 할 것입니다 : 당신이 ansi-term에 대한 키 바인딩이있는 경우

(defun bash() 
    "Run bash inside `ansi-term'." 
    (interactive) 
    (ansi-term "/bin/bash")) 

당신이 다음과 같이 그것들을 매핑 할 수 있습니다 :

(global-set-key [remap ansi-term] 'bash) 
관련 문제