簡體   English   中英

如何在elisp defun中設置交互式目錄選擇的默認路徑?

[英]How can I set a default path for interactive directory selection to start with in a elisp defun?

我想要一個以交互方式提示現有目錄的函數,但不是從default-directory開始,我想要一個函數本地默認路徑,比如'〜/ should / start / here / always / in / this / function'來啟動使用時(interactive "D")我該如何實現? 我的第一個想法是創建另一個函數,首先設置default-dir,然后調用我的原始函數,但這似乎不正確,我不確定在這種情況下將如何提示交互。

既然你自己寫這篇文章,你可以這樣做:

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

其中使用帶有lisp表達式的interactive來調用read-directory以獲取目錄名稱(您可能希望添加其他參數,請檢查鏈接/文檔)。

你原來的預感也會起作用,但是,正如你所想的那樣,並不是那么干凈。 但是,當您不希望或不能修改要更改其行為的函數時,它確實可以正常工作。 我在下面列出了這個解決方案,向您展示了如何實現它(您沒有提到的唯一一個難題是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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM