如何在elisp defun中设置交互式目录选择的默认路径?

时间:2011-01-26 05:08:19

标签: emacs elisp

我想要一个以交互方式提示现有目录的函数,但是我想要一个函数本地默认路径,比如'〜/ should / start / here / always / in / this / function'在使用(interactive "D")时开始我该如何实现?我的第一个想法是创建另一个函数,首先设置default-dir,然后调用我的原始函数,但这似乎不正确,我不确定在这种情况下将如何提示交互。

1 个答案:

答案 0 :(得分:10)

既然你自己写这篇文章,你可以这样做:

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