2011-01-26 3 views
6

대화 형으로 기존 디렉터리를 묻는 함수를 원하지만 default-directory에서 시작하는 대신 '~/should/start/here/always/in/this/function'과 같은 로컬 로컬 기본 경로를 사용하고 싶습니다. (interactive "D")을 사용하면 어떻게 시작할 수 있습니까? 첫 번째 생각은 먼저 default-dir을 설정 한 다음 원래 함수를 호출하는 다른 함수를 만드는 것입니다.하지만 그럴 듯하지는 않습니다.이 경우 대화식이 어떻게 표시 될지 확신 할 수 없습니다. ,대화 형 디렉터리 선택을위한 기본 경로를 elisp defun에서 시작하도록 어떻게 설정할 수 있습니까?

디렉토리 이름을 가져 read-directory를 호출하는 LISP 표현식 interactive를 사용
(defun choose-directory (directory) 
    "sample that uses interactive to get a directory" 
    (interactive (list (read-directory-name "What directory? " 
              choose-directory-default-directory))) 
    (message "You chose %s." directory)) 

(defvar choose-directory-default-directory "/home/tjackson/work/data" 
    "Initial starting point.") 

이 (추가 인수를 추가 할 수 있습니다 : 당신이 자신을이 글을 쓰는 것 때문에

답변

9

, 당신은 이런 식으로 뭔가를 할 수/docs 링크를 확인하십시오).

당신이 생각한 것처럼 당신의 오리지널 프랜차이즈도 잘 작동하지만 깨끗하지는 않습니다. 그러나 행동을 바꾸려는 기능을 수정하고 싶지 않거나 수정할 수없는 경우에는 잘 작동합니다. 아래에 그 솔루션을 포함하여 달성 방법을 알려 드리겠습니다 (언급하지 않은 퍼즐의 유일한 부분은 call-interactively입니다) :

;; original version of choose-directory, calling (interactive "D") 
(defun choose-directory (directory) 
    "sample that uses interactive to get a directory" 
    (interactive "DWhat directory? ") 
    (message "You chose %s." directory)) 

(defun wrap-choose-directory() 
    (interactive) 
    (let ((default-directory choose-directory-default-directory)) 
    (call-interactively 'choose-directory))) 
관련 문제