26.1.2 Подпрограммы посещения

Функция find-file-noselect использует две важные подпрограммы, которые иногда полезны в пользовательском Lisp-коде: create-file-buffer и after-find-file. В этом разделе объясняется, как их использовать.

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

Эта функция создает буфер с подходящим именем для посещения filename и возвращает его. Она использует filename (без каталога) в качестве имени, если это имя свободно; в противном случае она добавляет строку, например, ‘<2>’, чтобы получить неиспользуемое имя. См. также Создание буферов. Обратите внимание, что библиотека uniquify влияет на результат этой функции. См. Uniquify в Руководстве GNU Emacs.

Обратите внимание: create-file-buffer не ассоциирует новый буфер с файлом и не выбирает буфер. Он также не использует основной режим по умолчанию.

(create-file-buffer "foo")
     ⇒ #<buffer foo>
(create-file-buffer "foo")
     ⇒ #<buffer foo<2>>
(create-file-buffer "foo")
     ⇒ #<buffer foo<3>>

Эта функция используется find-file-noselect. Она использует generate-new-buffer (см. Создание буферов).

Функция: after-find-file &optional error warn noauto after-find-file-from-revert-buffer nomodes

Эта функция устанавливает основной режим буфера и анализирует локальные переменные (см. Как Emacs выбирает основной режим). Она вызывается find-file-noselect и функцией по умолчанию для отката (см. Откат).

Если чтение файла выдало ошибку из-за того, что файл не существует, но его каталог существует, вызывающая сторона должна передать не-nil значение для error. В этом случае after-find-file выдает предупреждение: ‘(Новый файл)’. При более серьезных ошибках вызывающая сторона обычно не должна вызывать after-find-file.

Если warn не-nil, то эта функция выдает предупреждение, если существует файл автосохранения и он новее посещенного файла.

Если noauto не-nil, это означает, что не следует включать или отключать режим автосохранения. Режим остается включенным, если он был включен ранее.

Если after-find-file-from-revert-buffer не-nil, это означает, что этот вызов был сделан из revert-buffer. Это не имеет прямого влияния, но некоторые функции режима и хук-функции проверяют значение этой переменной.

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

Последнее, что делает after-find-file, — это вызывает все функции в списке find-file-hook.