Spec-Zone.ru › Elisp

Истинные имена

Истинное имя файла — это имя, которое получается при переходе по символическим ссылкам на всех уровнях, пока они не перестанут встречаться, а затем упрощении компонентов имени ‘.’ и ‘..’. В результате получается своего рода каноническое имя файла. У файла не всегда есть единственное истинное имя: количество различных истинных имён файла равно количеству жёстких ссылок на него. Однако истинные имена полезны, поскольку исключают символические ссылки как причину различий в именах.

Функция: file-truename filename

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

Эта функция не раскрывает переменные окружения. Это делает только substitute-in-file-name. См. Определение substitute-in-file-name.

Если может потребоваться переход по символическим ссылкам, предшествующим ‘..’ в качестве компонента имени, вызовите file-truename, не вызывая предварительно напрямую или косвенно expand-file-name. В противном случае компонент имени, непосредственно предшествующий ‘..’, будет упрощён до вызова file-truename. Чтобы не вызывать expand-file-name, file-truename обрабатывает ‘~’ так же, как expand-file-name.

Если цель символической ссылки имеет синтаксис удалённого имени файла, file-truename возвращает её в кавычках. См. Функции раскрытия имён файлов.

Функция: file-chase-links filename &optional limit

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

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

Чтобы проиллюстрировать различие между file-chase-links и file-truename, предположим, что /usr/foo — это символическая ссылка на каталог /home/foo, а /home/foo/hello — обычный файл (или, по крайней мере, не символическая ссылка) либо несуществующий файл. Тогда получим:

(file-chase-links "/usr/foo/hello")
     ;; This does not follow the links in the parent directories.
     ⇒ "/usr/foo/hello"
(file-truename "/usr/foo/hello")
     ;; Assuming that /home is not a symbolic link.
     ⇒ "/home/foo/hello"
Функция: file-equal-p file1 file2

Эта функция возвращает t, если имена файлов file1 и file2 указывают на один и тот же файл. Это похоже на сравнение их истинных имён, за исключением того, что удалённые имена файлов также обрабатываются надлежащим образом. Если file1 или file2 не существует, возвращаемое значение не определено.

Функция: file-name-case-insensitive-p filename

Иногда имена файлов или их части требуется сравнивать как строки, и в этом случае важно знать, нечувствительна ли файловая система к регистру. Эта функция возвращает t, если файл filename находится в файловой системе, нечувствительной к регистру. В MS-DOS и MS-Windows она всегда возвращает t. В Cygwin и macOS файловые системы могут быть как чувствительными, так и нечувствительными к регистру; функция пытается определить это с помощью проверки во время выполнения. Если результат проверки неоднозначен, в Cygwin функция возвращает t, а в macOS — nil.

В настоящее время на платформах, отличных от MS-DOS, MS-Windows, Cygwin и macOS, эта функция всегда возвращает nil. Она не определяет нечувствительность к регистру у смонтированных файловых систем, например общих ресурсов Samba или томов Windows, смонтированных через NFS. На удалённых узлах для метода ‘smb’ предполагается t. Для всех остальных методов подключения выполняются проверки во время выполнения.

Функция: vc-responsible-backend file

Эта функция определяет ответственную систему управления версиями (VC) для указанного файла file. Например, если emacs.c — файл, отслеживаемый Git, (vc-responsible-backend "emacs.c") возвращает ‘Git’. Обратите внимание: если file является символической ссылкой, vc-responsible-backend не будет её разрешать — будет указана система управления версиями самого файла символической ссылки. Чтобы получить систему управления версиями файла, на который указывает file, оберните file функцией разрешения символических ссылок, например file-chase-links:

(vc-responsible-backend (file-chase-links "emacs.c"))

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/Truenames.html

Spec-Zone.ru

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