我想创建一个函数来询问用户文件的路径,然后根据文件是否存在来做一些事情。我知道(interactive "s")
,我尝试使用它,但按TAB并不建议可能的路径名。
如何提示路径,并将其存储在变量中?
答案 0 :(得分:6)
使用互动功能时,您应该使用f
作为现有文件名,或者在您的情况下使用F
表示可能不存在的文件名:
(defun foo (filename)
(interactive "F")
(if (file-exists-p filename)
...
答案 1 :(得分:3)
以下代码显示了如何执行此操作(将错误性别替换为代码以处理文件存在与否的情况):
(defun do-stuff-with-file (filename)
"Do stuff with a file."
(interactive (list (read-file-name "Do stuff with file: ")))
(when (file-exists-p filename)
(error "%s already exists" filename))
(when (not (file-exists-p filename))
(error "%s doesn't exist" filename)))
答案 2 :(得分:2)
您正在寻找的功能是read-file-name
。尝试按 C-h f 并输入read-file-name
以阅读文档。
以下是一些读取文件名的示例代码:
(defun foo ()
(interactive)
(setq file (read-file-name "File: "))
(message "You chose: %s" file))