Spec-Zone.ru › Elisp

Функции для посещения файлов

В этом разделе описаны функции, обычно используемые для посещения файлов. По историческим причинам их имена начинаются с ‘find-’, а не с ‘visit-’. См. Имя файла буфера: там описаны функции и переменные, которые обращаются к имени посещённого файла буфера или находят существующий буфер по имени посещённого файла.

В программе на Lisp, если нужно просмотреть содержимое файла, но не изменять его, быстрее всего использовать insert-file-contents во временном буфере. Посещать файл не требуется, к тому же это занимает больше времени. См. Чтение из файлов.

Команда: find-file filename &optional wildcards

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

Если не учитывать некоторые технические детали, тело функции find-file по сути эквивалентно следующему:

(switch-to-buffer (find-file-noselect filename nil nil wildcards))

(См. switch-to-buffer в разделе Переключение на буфер в окне.)

Если wildcards не равно nil, что всегда верно при интерактивном вызове, то find-file раскрывает подстановочные символы в filename и посещает все соответствующие файлы.

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

Команда: find-file-literally filename

Эта команда посещает filename, как и find-file, но не выполняет преобразования формата (см. Преобразование формата файла), преобразования кодировки символов (см. Системы кодирования) или преобразования конца строки (см. Преобразование конца строки). Буфер, посещающий файл, становится однобайтным, а его основным режимом становится Fundamental mode независимо от имени файла. Спецификации локальных переменных файла (см. Локальные переменные файла) игнорируются; автоматическая распаковка и добавление символа новой строки в конец файла из-за require-final-newline (см. require-final-newline) также отключены.

Обратите внимание: если в Emacs уже есть буфер, посещающий тот же файл не в буквальном режиме, файл не будет посещён в буквальном режиме — вместо этого Emacs просто переключится на существующий буфер. Если необходимо гарантированно получить буквальное содержимое файла, следует создать временный буфер и считать в него содержимое файла с помощью insert-file-contents-literally (см. Чтение из файлов).

Функция: find-file-noselect filename &optional nowarn rawfile wildcards

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

Если буфер уже существует, функция возвращает его; в противном случае она создаёт новый буфер и считывает в него файл. Если find-file-noselect использует существующий буфер, сначала проверяется, не изменился ли файл с момента последнего посещения или сохранения в этом буфере (если только nowarn не равно nil; см. ниже). Если файл изменился, функция спрашивает пользователя, следует ли перечитать изменённый файл. Если пользователь отвечает ‘yes’, все внесённые ранее в буфер изменения теряются.

При чтении файла его содержимое декодируется (см. Системы кодирования), в том числе выполняется преобразование конца строки и преобразование формата (см. Преобразование формата файла). Если wildcards не равно nil, то find-file-noselect раскрывает подстановочные символы в filename и посещает все соответствующие файлы.

В некоторых особых случаях эта функция выводит предупреждения или информационные сообщения, если только необязательный аргумент nowarn не равен nil. Например, если необходимо создать буфер, а файла с именем filename не существует, в области эха отображается сообщение ‘(New file)’, а буфер остаётся пустым. Проверка времени последнего изменения файла также пропускается, если nowarn не равно nil.

Обычно функция find-file-noselect после чтения файла вызывает after-find-file (см. Вспомогательные функции посещения файлов). Эта функция задаёт основной режим буфера, анализирует локальные переменные, предупреждает пользователя, если существует файл автосохранения новее только что посещённого файла, и в завершение запускает функции из find-file-hook.

Если необязательный аргумент rawfile не равен nil, то after-find-file не вызывается, а find-file-not-found-functions не запускаются в случае ошибки. Кроме того, значение rawfile, не равное nil, отключает преобразование системы кодирования и преобразование формата.

Обычно функция find-file-noselect возвращает буфер, посещающий файл filename. Однако если подстановочные символы действительно использовались и были раскрыты, функция возвращает список буферов, посещающих соответствующие файлы.

(find-file-noselect "/etc/fstab")
     ⇒ #<buffer fstab>
Команда: find-file-other-window filename &optional wildcards

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

При интерактивном вызове эта команда запрашивает filename.

Команда: find-file-read-only filename &optional wildcards

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

При интерактивном вызове эта команда запрашивает filename.

Параметр пользователя: find-file-wildcards

Если значение этой переменной не равно nil, различные команды find-file проверяют наличие подстановочных символов и посещают все соответствующие им файлы (при интерактивном вызове или если их аргумент wildcards не равен nil). Если этот параметр равен nil, команды find-file игнорируют аргумент wildcards и никогда не обрабатывают подстановочные символы особым образом.

Параметр пользователя: find-file-hook

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

Эта переменная является обычным хуком. См. Хуки.

Переменная: find-file-not-found-functions

Значение этой переменной — список функций, вызываемых, когда find-file или find-file-noselect передаётся имя несуществующего файла. find-file-noselect вызывает эти функции сразу после обнаружения несуществующего файла. Функции вызываются в порядке списка до тех пор, пока одна из них не вернёт значение, отличное от nil. buffer-file-name к этому моменту уже настроена.

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

Переменная: find-file-literally

Если этой буферно-локальной переменной присвоено значение, отличное от nil, функция save-buffer ведёт себя так, как если бы буфер посещал файл в буквальном режиме, то есть без каких-либо преобразований. Команда find-file-literally задаёт локальное значение этой переменной, однако это могут делать и другие эквивалентные функции и команды, например чтобы предотвратить автоматическое добавление символа новой строки в конец файла. Эта переменная является постоянной локальной переменной и поэтому не затрагивается при смене основных режимов.

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/Visiting-Functions.html

Spec-Zone.ru

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