Функции для посещения файлов
В этом разделе описываются функции, обычно используемые для посещения файлов. По историческим причинам эти функции имеют имена, начинающиеся с ‘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делает, но она не выполняет никаких преобразований формата (см. Преобразование формата), преобразований кодовой страницы (см. Кодовые системы) или преобразований конца строки (см. Преобразование конца строки). Буфер, посещающий файл, делается однобайтовым, и его основной режим — Режим Основного режима, независимо от имени файла. Локальные переменные файла в файле (см. Локальные переменные файла) игнорируются, и автоматическое распаковки и добавление новой строки в конце файла из-заrequire-final-newline(см. require-final-newline) также отключены.Обратите внимание, что если Emacs уже имеет буфер, посещающий тот же файл не буквально, он не будет посещать тот же файл буквально, а вместо этого просто переключится на существующий буфер. Если вы хотите быть уверенным в доступе к содержимому файла буквально, вы должны создать временный буфер и затем прочитать содержимое файла в него, используя
insert-file-contents-literally(см. Чтение из файлов).
- Функция: find-file-noselect filename &optional nowarn rawfile wildcards
-
Эта функция — ядро всех функций посещения файлов. Она возвращает буфер, посещающий файл filename. Вы можете сделать буфер текущим или отобразить его в окне, если хотите, но эта функция этого не делает.
Функция возвращает существующий буфер, если он есть; в противном случае она создает новый буфер и читает файл в него. Когда
find-file-noselectиспользует существующий буфер, она сначала проверяет, не изменился ли файл с момента последнего посещения или сохранения в этом буфере. Если файл изменился, эта функция спрашивает пользователя, нужно ли перечитать измененный файл. Если пользователь отвечает «да», все изменения, ранее внесенные в буфер, теряются.Чтение файла включает декодирование содержимого файла (см. Кодовые системы), включая преобразование конца строки, и преобразование формата (см. Преобразование формата). Если wildcards не
nil, тогдаfind-file-noselectрасширяет символы подстановочных знаков в filename и посещает все соответствующие файлы.Эта функция отображает предупреждающие или информационные сообщения в различных особых случаях, если необязательный аргумент nowarn не
nil. Например, если ей нужно создать буфер, и файла с именем filename нет, она отображает сообщение «(Новый файл)» в области эха и оставляет буфер пустым.Функция
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-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Visiting-Functions.html