26.9.6 Автодополнение имен файлов

В этом разделе описаны низкоуровневые подпрограммы для дополнения имени файла. Для более высокоуровневых функций см. Чтение имен файлов.

Функция: file-name-all-completions partial-filename directory

Эта функция возвращает список всех возможных дополнений для файла, имя которого начинается с partial-filename в каталоге directory. Порядок дополнений соответствует порядку файлов в каталоге, который непредсказуем и не несет никакой полезной информации.

Аргумент partial-filename должен быть именем файла, не содержащим части каталога и не содержащим слэша (или обратного слэша в некоторых системах). По умолчанию к directory добавляется текущий каталог буфера, если directory не является абсолютным.

В следующем примере предположим, что ~rms/lewis — текущий каталог по умолчанию, и в нем есть пять файлов, имена которых начинаются с «f»: foo, file~, file.c, file.c.~1~ и file.c.~2~.

(file-name-all-completions "f" "")
     ⇒ ("foo" "file~" "file.c.~2~"
                "file.c.~1~" "file.c")

(file-name-all-completions "fo" "")
     ⇒ ("foo")
Функция: file-name-completion filename directory &optional predicate

Эта функция дополняет имя файла filename в каталоге directory. Она возвращает самый длинный префикс, общий для всех имен файлов в каталоге directory, которые начинаются с filename. Если predicate не равен nil, то она игнорирует возможные дополнения, которые не соответствуют predicate, после вызова этой функции с одним аргументом — расширенным абсолютным именем файла.

Если существует только одно совпадение, и filename совпадает с ним точно, функция возвращает t. Функция возвращает nil, если в каталоге directory нет имени, начинающегося с filename.

В следующем примере предположим, что в текущем каталоге по умолчанию есть пять файлов, имена которых начинаются с «f»: foo, file~, file.c, file.c.~1~ и file.c.~2~.

(file-name-completion "fi" "")
     ⇒ "file"

(file-name-completion "file.c.~1" "")
     ⇒ "file.c.~1~"

(file-name-completion "file.c.~1~" "")
     ⇒ t

(file-name-completion "file.c.~3" "")
     ⇒ nil
Пользовательский вариант: completion-ignored-extensions

file-name-completion обычно игнорирует имена файлов, оканчивающиеся любой строкой из этого списка. Он не игнорирует их, если все возможные дополнения оканчиваются одной из этих суффиксаций. Эта переменная не влияет на file-name-all-completions.

Типичное значение может выглядеть так:

completion-ignored-extensions
     ⇒ (".o" ".elc" "~" ".dvi")

Если элемент completion-ignored-extensions оканчивается слэшем «/», он указывает на каталог. Элементы, которые не оканчиваются слэшем, никогда не будут соответствовать каталогу; таким образом, вышеуказанное значение не отфильтрует каталог с именем foo.elc.