2011-01-26 22 views
6

Tôi muốn một chức năng tương tác nhắc cho một thư mục hiện có, nhưng thay vì bắt đầu từ thư mục mặc định, tôi muốn một hàm mặc định đường dẫn mặc định như '~/should/start/here/always/in/this/function' bắt đầu từ khi nào bằng cách sử dụng (interactive "D") làm cách nào tôi có thể đạt được điều này? Suy nghĩ đầu tiên của tôi là tạo một hàm khác mà trước tiên đặt default-dir và sau đó gọi hàm ban đầu của tôi, nhưng điều đó có vẻ không đúng và tôi không chắc chắn về cách tương tác sẽ được nhắc trong trường hợp đó.Làm cách nào để tôi có thể đặt đường dẫn mặc định cho lựa chọn thư mục tương tác để bắt đầu với một trình gỡ lỗi elisp?

Trả lời

9

Vì bạn đang viết những dòng này cho mình, bạn có thể làm một cái gì đó như thế này:

(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.") 

Trong đó sử dụng interactive với một biểu thức lisp gọi read-directory để có được một tên thư mục (bạn có thể muốn thêm đối số bổ sung, kiểm tra liên kết/tài liệu).

Linh cảm ban đầu của bạn sẽ hoạt động tốt, tuy nhiên, như bạn nghĩ, không hoàn toàn sạch sẽ. Tuy nhiên, nó hoạt động tốt khi bạn không muốn hoặc không thể sửa đổi hàm có hành vi bạn muốn thay đổi. Tôi đã đưa giải pháp đó vào bên dưới để cho bạn biết cách bạn đạt được nó (phần duy nhất của câu đố bạn không đề cập đến là 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))) 
Các vấn đề liên quan