Как я могу иметь автозаполняемое поле ввода в emacs lisp? - PullRequest
1 голос
/ 10 августа 2011

Я хочу создать функцию, которая будет запрашивать у пользователя путь к файлу, а затем делать некоторые вещи в зависимости от того, существует файл или нет. Я знаю о (interactive "s"), и я пытался использовать его, но нажатие клавиши TAB не предлагает возможные имена путей. Как я могу запросить путь и сохранить его в переменной?

Ответы [ 3 ]

6 голосов
/ 11 августа 2011

В случае с интерактивным, вы должны использовать f для существующего имени файла, или, в вашем случае, F для возможно несуществующего:

(defun foo (filename)
  (interactive "F")
  (if (file-exists-p filename)
    ...
3 голосов
/ 10 августа 2011

Следующий код показывает, как вы можете это сделать (замените код ошибки sexps кодом для обработки сценария, где файл существует или нет):

(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 голосов
/ 10 августа 2011

Функция, которую вы ищете: read-file-name. Попробуйте нажать C-h f и введите read-file-name, чтобы прочитать документацию.

Вот пример кода, который читает имя файла:

(defun foo ()
  (interactive)
  (setq file (read-file-name "File: "))
  (message "You chose: %s" file))
...