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 делает, но она не выполняет никаких преобразований формата (см. Преобразование формата), преобразований кодовой страницы (см. Кодовые системы) или преобразований конца строки (см. Преобразование конца строки). Буфер, посещающий файл, делается однобайтовым, и его основной режим — Режим Основного режима, независимо от имени файла. Локальные переменные файла в файле (см. Локальные переменные файла) игнорируются, и автоматическое распаковки и добавление новой строки в конце файла из-за 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

Spec-Zone.ru

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