Spec-Zone.ru › Elisp

Имя файла буфера

Имя файла буфера — это имя файла, открытого в этом буфере. Если буфер не связан с файлом, его имя файла буфера — nil. Чаще всего имя буфера совпадает с частью имени файла буфера, не содержащей каталог, но имя файла буфера и имя буфера — разные понятия, и их можно задавать независимо. См. раздел Работа с файлами.

Функция: buffer-file-name &optional buffer

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

(buffer-file-name (other-buffer))
     ⇒ "/usr/user/lewis/manual/files.texi"
Переменная: buffer-file-name

Эта локальная переменная буфера содержит абсолютное имя файла, открытого в текущем буфере, или nil, если буфер не связан с файлом. Это постоянная локальная переменная, на которую не влияет kill-all-local-variables. Ее значение совпадает со значением, возвращаемым функцией buffer-file-name.

buffer-file-name
     ⇒ "/usr/user/lewis/manual/buffers.texi"

Изменять значение этой переменной рискованно, если не выполнить ряд других действий. Обычно лучше использовать set-visited-file-name (см. ниже); некоторые выполняемые ею действия, например изменение имени буфера, строго говоря, необязательны, но другие необходимы, чтобы не запутать Emacs.

Переменная: buffer-file-truename

Эта локальная переменная буфера содержит сокращенное истинное имя файла, открытого в текущем буфере, или nil, если ни один файл не открыт. Это постоянная локальная переменная, на которую не влияет kill-all-local-variables. См. раздел Истинные имена и функцию abbreviate-file-name.

Переменная: buffer-file-number

Эта локальная переменная буфера содержит номер индексного дескриптора и идентификатор устройства файла, открытого в текущем буфере, или nil, если файл не открыт или не существует. Это постоянная локальная переменная, на которую не влияет kill-all-local-variables.

Обычно ее значение — список вида (inodenum device). Этот кортеж однозначно идентифицирует файл среди всех файлов, доступных в системе. Подробнее об этом см. описание функции file-attributes в разделе Атрибуты файлов.

Если buffer-file-name — имя символической ссылки, то и inodenum, и device относятся к конечному файлу, на который указывает ссылка.

Функция: get-file-buffer filename

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

(get-file-buffer "buffers.texi")
    ⇒ #<buffer buffers.texi>

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

Функция: find-buffer-visiting filename &optional predicate

Эта функция похожа на get-file-buffer, но может вернуть любой буфер, открывающий файл возможно, под другим именем. То есть buffer-file-name буфера не обязательно должно в точности совпадать с раскрытым значением filename; достаточно, чтобы оно указывало на тот же файл. Если predicate не равно nil, оно должно быть функцией с одним аргументом — буфером, открывающим filename. Буфер считается подходящим для возврата, только если predicate возвращает значение, не равное nil. Если подходящий буфер найти не удается, find-buffer-visiting возвращает nil.

Команда: set-visited-file-name filename &optional no-query along-with-file

Если filename — непустая строка, эта функция меняет имя файла, открытого в текущем буфере, на filename. (Если буфер не был связан с файлом, теперь он будет с ним связан.) При следующем сохранении буфер будет записан в файл с новым именем.

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

Если filename равно nil или является пустой строкой, это означает «файл не открыт». В этом случае set-visited-file-name помечает буфер как не связанный с файлом, не меняя флаг изменения буфера.

Обычно эта функция запрашивает у пользователя подтверждение, если буфер, открывающий filename, уже существует. Если no-query не равно nil, этот запрос не выводится. Если буфер, открывающий filename, уже существует и пользователь подтверждает действие либо no-query не равно nil, эта функция делает имя нового буфера уникальным, добавляя к filename номер в угловых скобках ‘<…>’.

Если along-with-file не равно nil, предполагается, что прежний открытый файл был переименован в filename. В этом случае команда не меняет флаг изменения буфера и записанное время последнего изменения файла, возвращаемое функцией visited-file-modtime (см. раздел Время изменения буфера). Если along-with-file равно nil, эта функция сбрасывает записанное время последнего изменения файла, после чего visited-file-modtime возвращает ноль.

При интерактивном вызове функции set-visited-file-name она запрашивает filename в минибуфере.

Переменная: list-buffers-directory

Эта локальная переменная буфера задает строку, отображаемую в списке буферов вместо имени открытого файла для буферов, не связанных с файлом. Эта переменная используется буферами Dired.

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/Buffer-File-Name.html

Spec-Zone.ru

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