Spec-Zone.ru › Elisp

Имена каталогов

Имя каталога — это строка, которая должна обозначать каталог, если она вообще обозначает какой-либо файл. Каталог фактически является разновидностью файла и имеет имя файла (называемое именем файла каталога), связанное с именем каталога, но обычно не совпадающее с ним. (Это не совсем то же самое, что обычная терминология POSIX.) Эти два имени одной сущности связаны синтаксическим преобразованием. В GNU и других POSIX-подобных системах всё просто: чтобы получить имя каталога, добавьте «/» к имени файла каталога, если оно ещё не заканчивается на «/». В MS-DOS эта связь сложнее.

Различие между именем каталога и именем файла каталога тонкое, но крайне важное. Если переменная Emacs или аргумент функции описаны как имя каталога, имя файла каталога не подходит. Когда file-name-directory возвращает строку, это всегда имя каталога.

Следующие две функции преобразуют имена каталогов в имена файлов каталогов и обратно. Они не выполняют особой обработки подстановок переменных среды, таких как «$HOME», и конструкций «~», «.» и «..».

Функция: file-name-as-directory filename

Эта функция возвращает строку, представляющую filename в форме, которую операционная система интерпретирует как имя каталога (имя каталога). В большинстве систем это означает добавление к строке косой черты, если она ещё не заканчивается на неё.

(file-name-as-directory "~rms/lewis")
     ⇒ "~rms/lewis/"
Функция: directory-name-p filename

Эта функция возвращает значение, отличное от nil, если filename заканчивается символом-разделителем каталогов. В GNU и других POSIX-подобных системах это прямая косая черта «/»; MS-Windows и MS-DOS распознают в качестве разделителей каталогов и прямую косую черту, и обратную косую черту «\».

Функция: directory-file-name dirname

Эта функция возвращает строку, представляющую dirname в форме, которую операционная система интерпретирует как имя файла (имя файла каталога). В большинстве систем это означает удаление из строки конечных разделителей каталогов, если только строка не состоит исключительно из разделителей каталогов.

(directory-file-name "~lewis/")
     ⇒ "~lewis"
Функция: file-name-concat directory &rest components

Объединяет components с directory, вставляя косую черту перед компонентами, если directory или предыдущий компонент не заканчивается косой чертой.

(file-name-concat "/tmp" "foo")
     ⇒ "/tmp/foo"

Если directory или компоненты равны nil либо являются пустой строкой, они игнорируются — сначала они отфильтровываются и никак не влияют на результат.

Это почти то же самое, что использовать concat, но dirname (и компоненты, кроме последнего) могут заканчиваться косыми чертами, а могут и не заканчиваться, и эта функция не будет дублировать эти символы.

В большинстве случаев для создания имён файлов с указанием родительских каталогов лучше подходят один или несколько вызовов expand-file-name (см. Функции раскрытия имён файлов). Используйте эту функцию только в том случае, если некоторые специальные возможности expand-file-name мешают выполнению задачи вашей программы. Например, вам может не подойти специальная обработка expand-file-name конструкций ~, ~user и nil или удаление . и ...

Чтобы получить сокращённую форму имени каталога, используйте эту функцию:

Функция: abbreviate-file-name filename

Эта функция возвращает сокращённую форму filename. Она применяет сокращения, указанные в directory-abbrev-alist (см. Псевдонимы файлов в Руководстве GNU Emacs), а затем заменяет домашний каталог пользователя на «~», если аргумент обозначает файл в домашнем каталоге или одном из его подкаталогов. Если домашний каталог является корневым каталогом, он не заменяется на «~», поскольку во многих системах это не делает результат короче.

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

Функция: file-name-parent-directory filename

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

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/Directory-Names.html

Spec-Zone.ru

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