Функции для посещения файлов
В этом разделе описаны функции, обычно используемые для посещения файлов. По историческим причинам их имена начинаются с ‘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