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

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

Чтобы найти конфигурационный файл, специфичный для пользователя, см. Стандартные имена файлов, для функции 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 ищется на соответствующем удаленном хосте.