에 이어 새로운 자문 시스템에 대한 또 다른 질문에 대한 답변 :
구식에서는 advice.el
그렇게 조작되지 않은 멤버에 대한 어떠한 주장도하지 않고 권고 함수의 인수 목록의 개별 멤버를 조작 할 수있었습니다. 예를 들어 다음과 같은 조언이 있습니다.
(defadvice ansi-term (around prompt-for-name last)
(let ((name (read-from-minibuffer "Tag: ")))
(and (not (string= name ""))
(ad-set-arg 1 (concat "Term: " name)))
ad-do-it))
(선택적) 버퍼 이름 인수를 ansi-term
호출에 제공하는 동시에 ansi-term
자체 대화식 양식에 따라 프롬프트하여 첫 번째 인수를 얻습니다.
나중에 참조 할 수 있도록 ansi-term
의 서명은 (PROGRAM &optional BUFFER-NAME)
대화식 양식이며 몇 가지 가능한 기본값으로 PROGRAM을 프롬프트하지만 BUFFER-NAME에 대해서는 아무 것도하지 않습니다.
나는 확실히이 가능 여부 아니에요 nadvice.el
. 그렇다면 어떻게 할 수 있는지 잘 모르겠습니다. 조언 된 함수의 인수 목록 을 대체 하는 몇 가지 방법을 찾았습니다 .
예를 들어,에서 * 정보 * (elisp) 조언 콤비 :
`:filter-args' Call FUNCTION first and use the result (which should be a list) as the new arguments to pass to the old function. More specifically, the composition of the two functions behaves like: (lambda (&rest r) (apply OLDFUN (funcall FUNCTION r)))
다른 콤비는 유사한 기능을 제공하고, 그들 사이의 공통점은 함수의 인수 목록을 대체 할 수있는 반면, 절단, 연장 등은 목록에서 지정된 위치에 인수를 수정할 수있는 기능에 대한 조언을 명백한 방법이 없다, 그입니다 없이 나머지 부분에 대해서는 아무 것도 주장하지 않습니다 .
논의중인 경우, 어드바이저 작성자가 ansi-term
버퍼 이름 만 전달하는 것은 불가능 합니다. 위치 1에는 값이 있지만 nil
위치 0에는 없는 값을 갖는 목록을 구성 할 수 없기 때문입니다 . 일반적으로 어드바이저 작성자가 위치 0 이상의 인수를 임의로 수정하는 것은 불가능합니다.
유감스럽게도 비슷한 효과를 내기 위해서는 코드를 복사하여 붙여 넣을 필요가 있습니다. 특히 ansi-term
대화 형 양식을 복사 하여 취향에 맞게 확장하거나 ansi-term
완전히 복사 하여 마찬가지로 확장 할 수 있습니다 . 두 경우 모두, 이제 init 파일에서 Emacs Lisp 배포판의 일부를 재정의해야하는데, 이는 내구성과 미학 측면에서 바람직하지 않은 것으로 나타났습니다.
내 질문은 다음과 같습니다 : 이런 종류의 인수 목록을 처리 할 수 nadvice.el
있습니까? 그렇다면 어떻게?