如何在emacs lisp中拥有自动填充的输入字段?

时间:2011-08-10 18:27:26

标签: emacs elisp

我想创建一个函数来询问用户文件的路径,然后根据文件是否存在来做一些事情。我知道(interactive "s"),我尝试使用它,但按TAB并不建议可能的路径名。 如何提示路径,并将其存储在变量中?

3 个答案:

答案 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))