Spec-Zone.ru › Elisp

Поиск файлов в стандартных местах

В этом разделе объясняется, как искать файл в списке каталогов (пути) или исполняемый файл в стандартном списке каталогов исполняемых файлов.

О поиске файла конфигурации пользователя см. Стандартные имена файлов и описание функции locate-user-emacs-file.

Функция: locate-file filename path &optional suffixes predicate

Эта функция ищет файл с именем filename в списке каталогов, заданном параметром path, перебирая суффиксы из suffixes. Если файл найден, функция возвращает его абсолютное имя (см. Абсолютные и относительные имена файлов); в противном случае она возвращает nil.

Необязательный аргумент suffixes задаёт список суффиксов имён файлов, которые добавляются к filename при поиске. locate-file проверяет каждый возможный каталог с каждым из этих суффиксов. Если suffixes равен nil или (""), суффиксы не используются, а filename проверяется без изменений. Типичные значения suffixes — exec-suffixes (см. Функции создания подпроцессов), load-suffixes, load-file-rep-suffixes и возвращаемое значение функции get-load-suffixes (см. Суффиксы загрузки).

Типичными значениями path являются exec-path (см. Функции создания подпроцессов) при поиске исполняемых программ или load-path (см. Поиск библиотек) при поиске файлов Lisp. Если filename является абсолютным именем, параметр path не влияет на поиск, однако суффиксы из suffixes по-прежнему проверяются.

Необязательный аргумент predicate, если он не равен nil, задаёт функцию-предикат для проверки пригодности найденного файла. В качестве единственного аргумента предикату передаётся имя проверяемого файла. Если predicate равен nil или не указан, locate-file использует в качестве предиката file-readable-p. Другие полезные предикаты, например file-executable-p и file-directory-p, см. в разделе Различение типов файлов.

Обычно эта функция пропускает каталоги, поэтому, если нужно найти каталог, убедитесь, что функция predicate возвращает для него dir-ok. Например:

(locate-file "html" '("/var/www" "/srv") nil
             (lambda (f) (if (file-directory-p f) 'dir-ok)))

Для обеспечения совместимости predicate также может быть одним из символов executable, readable, writable, exists или списком из одного или нескольких таких символов.

Функция: executable-find program &optional remote

Эта функция ищет исполняемый файл указанной программы program и возвращает абсолютное имя исполняемого файла, включая расширения имени файла, если они есть. Если файл не найден, функция возвращает nil. Функция ищет во всех каталогах из exec-path и проверяет все расширения имён файлов из exec-suffixes (см. Функции создания подпроцессов).

Если remote не равен nil, а default-directory является удалённым каталогом, поиск program выполняется на соответствующем удалённом узле.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Locating-Files.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API