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