Spec-Zone.ru › Elisp

Содержимое каталогов

Каталог — это разновидность файла, содержащего другие файлы, зарегистрированные под различными именами. Каталоги являются частью файловой системы.

Emacs может вывести имена файлов в каталоге в виде списка Lisp или отобразить их в буфере с помощью команды оболочки ls. Во втором случае он может также отображать сведения о каждом файле — в зависимости от параметров, переданных команде ls.

Функция: directory-files directory &optional full-name match-regexp nosort count

Эта функция возвращает список имён файлов в каталоге directory. По умолчанию список отсортирован по алфавиту.

Если full-name не равно nil, функция возвращает абсолютные имена файлов. В противном случае она возвращает имена относительно указанного каталога.

Если match-regexp не равно nil, функция возвращает только те имена файлов, часть которых, не являющаяся именем каталога, соответствует этому регулярному выражению; остальные имена файлов исключаются из списка. В файловых системах без учёта регистра сопоставление с регулярным выражением также выполняется без учёта регистра.

Если nosort не равно nil, directory-files не сортирует список, поэтому имена файлов возвращаются в произвольном порядке. Используйте этот параметр, если вам нужна максимально возможная скорость и порядок обработки файлов не важен. Если порядок обработки виден пользователю, ему, вероятно, будет удобнее, если имена отсортированы.

Если count не равно nil, функция возвращает имена первых count файлов или имена всех файлов — в зависимости от того, что наступит раньше. Значение count должно быть целым числом больше нуля.

(directory-files "~lewis")
     ⇒ ("#foo#" "#foo.el#" "." ".."
         "dired-mods.el" "files.texi"
         "files.texi.~1~")

Возникает ошибка, если directory не является именем доступного для чтения каталога.

Функция: directory-empty-p directory

Эта вспомогательная функция возвращает t, если указанный directory является доступным каталогом и не содержит файлов, то есть пуст. Функция игнорирует «.» и «..» в системах, которые возвращают их как файлы в каталоге.

Символические ссылки на каталоги считаются каталогами. Чтобы отличить символические ссылки, см. file-symlink-p.

Функция: directory-files-recursively directory regexp &optional include-directories predicate follow-symlinks

Возвращает все файлы в каталоге directory и его подкаталогах, имена которых соответствуют regexp. Функция рекурсивно ищет в указанном каталоге directory и его подкаталогах файлы, базовые имена которых (то есть имена без начальных каталогов) соответствуют указанному regexp, и возвращает список абсолютных имён найденных файлов (см. абсолютные имена файлов). Имена файлов возвращаются в порядке обхода в глубину: файлы в подкаталоге возвращаются до файлов в его родительском каталоге. Кроме того, найденные файлы в каждом подкаталоге сортируются по алфавиту на основе их базовых имён. По умолчанию каталоги, имена которых соответствуют regexp, не включаются в список, но если необязательный аргумент include-directories не равен nil, они включаются.

По умолчанию выполняется обход всех подкаталогов. Если predicate равен t, ошибки при попытке перейти в подкаталог (например, если у текущего пользователя нет прав на чтение) игнорируются. Если он не равен ни nil, ни t, он должен быть функцией, принимающей один аргумент (имя подкаталога) и возвращающей значение, отличное от nil, если в каталог следует перейти.

По умолчанию переход по символическим ссылкам на подкаталоги не выполняется, но если follow-symlinks не равен nil, по ним выполняется переход.

Функция: locate-dominating-file file name

Начиная с file, функция поднимается вверх по иерархии каталогов в поисках первого каталога, в котором существует строка name, и возвращает этот каталог. Если file — файл, поиск начинается с его каталога; в противном случае file должен быть каталогом, с которого следует начать поиск. Функция проверяет сначала начальный каталог, затем его родительский каталог, затем родительский каталог родительского каталога и так далее, пока не найдёт каталог с name или не достигнет корневого каталога файловой системы. Если каталог не найден, функция возвращает nil.

Аргумент name также может быть функцией-предикатом. Предикат вызывается для каждого каталога, проверяемого функцией, начиная с file (даже если file не является каталогом). Он вызывается с одним аргументом (файлом или каталогом) и должен возвращать значение, отличное от nil, если это искомый каталог.

Функция: file-in-directory-p file dir

Эта функция возвращает t, если file находится в каталоге dir или в его подкаталоге. Она также возвращает t, если file и dir — один и тот же каталог. Функция сравнивает истинные имена двух каталогов. Если dir не обозначает существующий каталог, возвращаемым значением будет nil.

Функция: directory-files-and-attributes directory &optional full-name match-regexp nosort id-format count

Эта функция аналогична directory-files в том, как она определяет, какие файлы возвращать и как сообщать их имена. Однако вместо списка имён файлов она возвращает для каждого файла список (filename . attributes), где attributes — это значение, которое file-attributes возвращает для данного файла. Необязательный аргумент id-format имеет то же значение, что и соответствующий аргумент file-attributes (см. Определение file-attributes).

Константа: directory-files-no-dot-files-regexp

Это регулярное выражение соответствует любому имени файла, кроме «.» и «..». Точнее, оно соответствует частям любой непустой строки, за исключением этих двух. Его удобно использовать в качестве аргумента match-regexp для directory-files и directory-files-and-attributes:

(directory-files "/foo" nil directory-files-no-dot-files-regexp)

возвращает nil, если каталог «/foo» пуст.

Функция: file-expand-wildcards pattern &optional full regexp

Эта функция раскрывает шаблон с подстановочными знаками pattern и возвращает список соответствующих ему имён файлов.

По умолчанию pattern — это строка-шаблон glob с подстановочными знаками, например «"/tmp/*.png"» или «"/*/*/foo.png"», но это также может быть регулярное выражение, если необязательный параметр regexp не равен nil. В любом случае сопоставление выполняется отдельно для каждого подкаталога, поэтому шаблон не может охватывать родительский каталог и его подкаталог одновременно.

Если pattern записан как абсолютное имя файла, возвращаемые значения также будут абсолютными.

Если pattern записан как относительное имя файла, он интерпретируется относительно текущего каталога по умолчанию. Возвращаемые имена файлов обычно также задаются относительно текущего каталога по умолчанию. Однако если full не равен nil, они будут абсолютными.

Функция: insert-directory file switches &optional wildcard full-directory-p

Эта функция вставляет в текущий буфер список содержимого каталога file, отформатированный с помощью ls в соответствии с switches. После вставленного текста устанавливается точка. Аргумент switches может быть строкой параметров или списком строк, представляющих отдельные параметры.

Аргумент file может быть каталогом или спецификацией файла с подстановочными знаками. Если wildcard не равен nil, это означает, что file следует трактовать как спецификацию файла с подстановочными знаками.

Если full-directory-p не равен nil, это означает, что список должен показывать полное содержимое каталога. Следует указать t, если file — каталог, а параметры не содержат «-d». (Параметр «-d» команды ls предписывает описать сам каталог как файл, а не показывать его содержимое.)

В большинстве систем эта функция работает, запуская программу для вывода списка содержимого каталога, имя которой указано в переменной insert-directory-program. Если wildcard не равен nil, функция также запускает оболочку, указанную в shell-file-name, чтобы раскрыть подстановочные знаки.

В системах MS-DOS и MS-Windows обычно отсутствует стандартная Unix-программа ls, поэтому эта функция эмулирует стандартную Unix-программу ls с помощью кода Lisp.

Техническая подробность: если switches содержит длинный параметр «--dired», insert-directory обрабатывает его особым образом для поддержки dired. Однако обычно эквивалентный короткий параметр «-D» просто передаётся insert-directory-program, как и любой другой параметр.

Пользовательский параметр: insert-directory-program

Этот пользовательский параметр задаёт программу, которую следует запустить для создания списка содержимого каталога функцией insert-directory. Он игнорируется в системах, где список создаётся с помощью кода Lisp.

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/Contents-of-Directories.html

Spec-Zone.ru

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