Emacs 如何在elisp defun中设置交互式目录选择的默认路径?
我想要一个以交互方式提示现有目录的函数,但我不希望从默认目录开始,而是希望在使用Emacs 如何在elisp defun中设置交互式目录选择的默认路径?,emacs,elisp,Emacs,Elisp,我想要一个以交互方式提示现有目录的函数,但我不希望从默认目录开始,而是希望在使用(交互“D”)时从“~/should/start/here/always/in/this/function”这样的函数本地默认路径开始?我的第一个想法是创建另一个函数,该函数首先设置默认目录,然后调用我的原始函数,但这似乎不正确,我不确定在这种情况下会出现怎样的交互提示。因为这是您自己写的,您可以这样做: (defun choose-directory (directory) "sample that uses
(交互“D”)
时从“~/should/start/here/always/in/this/function”这样的函数本地默认路径开始?我的第一个想法是创建另一个函数,该函数首先设置默认目录,然后调用我的原始函数,但这似乎不正确,我不确定在这种情况下会出现怎样的交互提示。因为这是您自己写的,您可以这样做:
(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表达式一起使用来调用以获取目录名(您可能希望添加其他参数,请检查链接/docs)
不过,正如你所想,你最初的预感也会起作用,它并没有那么清晰。但是,当您不想或无法修改要更改其行为的函数时,它确实可以很好地工作。我在下面列出了这个解决方案,向您展示了如何实现它(您没有提到的唯一一个难题是):
;; 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)))