이전에 입력 한 대화 형 인수에 액세스해야 다음 인수의 초기 값으로 사용할 수 있습니다. 무슨 뜻인지 명확히하기 위해, 버퍼의 이름을 변경하는 예 기능을 고려다음 매개 변수의 초기 값에서 이전 대화 형 인수 사용
(defun my/rename-buffer (old-name new-name)
(interactive (list (read-buffer "Buffer to rename: " (current-buffer) t)
(read-string "Rename buffer to: ")))
;; Implementation here.
)
나는 내가 new-name
프롬프트에 대한 초기 값으로 사용할 수 있도록 old-name
에 입력 된 값에 액세스 할 수 있습니까?
자세히 설명해 드리겠습니다. 우리가 M-x my/example
할 때, 사용자는과 같이 (*scratch*
가정 현재 버퍼이다)하라는 메시지가 표시됩니다 : 사용자가 *scratch
를 사용하는 첫 번째 프롬프트 (*scratch*
), 내가 좋아하는 것 두 번째 프롬프트에 대한 기본을 받아
Buffer to rename (default *scratch*):
Rename buffer to:
경우 초기 값은 사용자에게 표시되는 상기 사용자가 상기 제 프롬프트 다른 버퍼의 이름을 입력하는 대신 경우
Rename buffer to: *scratch*
, 두 번째 메시지가 초기 값으로 another-buffer
있어야 another-buffer
말 :
Rename buffer to: another-buffer
그래서 두 번째 프롬프트는 첫 번째 매개 변수의 값을 두 번째 프롬프트의 초기 값으로 사용해야합니다. 선명도
일부 노트 :
나는 표준
rename-buffer
잘 작동 이후my/rename-buffer
의 구체적인 예에 관심이 아니다. 이것은 실제로 예일뿐입니다.문자열을 arg-descriptor으로 사용하지 않는 솔루션을 찾고 있습니다. 표현식의 목록 인 기존의 arg-descriptor으로 솔루션을 작성해야합니다. 문자열로 다시 구현할 수 있다고는 생각하지 않지만, 가능하다해도 그러한 솔루션에는 관심이 없습니다.
마지막 값을 읽기 전용 프롬프트 문자열의 일부로 표시하고 싶지 않지만 프롬프트 문자열 다음에 표시되는 수정 가능한 초기 값으로 사용하고 싶습니다.
↑을 눌러 이전 인수에 액세스하는 것은 해결책이 아닙니다. 마지막 값을 얻기 위해 사용자 상호 작용을 원하지 않기 때문입니다. 나는 또한 (미래에 또는 다른 기능을 위해) 축약 된 그대로 표시하는 대신 마지막 값의 약간 수정 된 버전을 보여주기를 원할 수도있다. 이러한 솔루션은 프롬프트가 다른 유형이라면 동일한 기록을 가지지 않기 때문에 작동하지 않습니다.
고맙습니다!지금 문서를 살펴보면이 점은 분명합니다. 그러나 내 두뇌는'(list ...) '형식의 "list literal"을 사용하는 것 이상으로 생각할 수 없습니다. –