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 (и не последние компоненты) могут или не могут заканчиваться символами слэша, и эта функция не удваивает эти символы.

Для преобразования имени каталога в его сокращённую форму используйте эту функцию:

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

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

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

Copyright © 1990-1996, 1998-2022 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