Имена каталогов
Имя каталога — это строка, которая должна называть каталог, если она вообще называет какой-либо файл. Каталог фактически является типом файла, и у него есть имя файла (называемое именем файла каталога), которое связано с именем каталога, но обычно не идентично ему. (Это не совсем то же самое, что обычная терминология 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