Spec-Zone.ru › Elisp

Запись в файлы

Вы можете записать содержимое буфера или его части непосредственно в файл на диске, используя функции append-to-file и write-region. Не используйте эти функции для записи в файлы, которые посещаются; это может вызвать путаницу в механизмах посещения.

Команда: append-to-file start end filename

Эта функция добавляет содержимое области, ограниченной start и end в текущем буфере, в конец файла filename. Если файл не существует, он создается. Эта функция возвращает nil.

Ошибка сигнализируется, если невозможно записать или создать filename.

При вызове из Lisp, эта функция полностью эквивалентна:

(write-region start end filename t)
Команда: write-region start end filename &optional append visit lockname mustbenew

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

Если start равно nil, то команда записывает содержимое всего буфера (не только доступную часть) в файл и игнорирует end.

Если start является строкой, то write-region записывает или добавляет эту строку, а не текст из буфера. end игнорируется в этом случае.

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

Если mustbenew не равно nil, то write-region запрашивает подтверждение, если filename указывает на существующий файл. Если mustbenew равно символу excl, то write-region не запрашивает подтверждения, а вместо этого сигнализирует об ошибке file-already-exists, если файл уже существует. Хотя write-region обычно следует за символической ссылкой и создаёт целевой файл, если символическая ссылка является висячей, она не следует за символическими ссылками, если mustbenew равно excl.

Проверка на существование файла, когда mustbenew равно excl, использует специальную системную функцию. По крайней мере, для файлов на локальном диске нет возможности, чтобы другая программа создала файл с тем же именем до того, как это сделает Emacs, без того, чтобы Emacs об этом не узнал.

Если visit равно t, то Emacs устанавливает связь между буфером и файлом: буфер затем посещает этот файл. Он также устанавливает время последнего изменения файла для текущего буфера на modtime файла filename и помечает буфер как не изменённый. Эта функция используется save-buffer, но, вероятно, вам не следует её использовать самостоятельно.

Если visit является строкой, она указывает имя файла для посещения. Таким образом, вы можете записать данные в один файл (filename), одновременно регистрируя буфер как посещающий другой файл (visit). Аргумент visit используется в сообщении области эха и также для блокировки файлов; visit сохраняется в buffer-file-name. Эта функция используется для реализации file-precious-flag; не используйте её самостоятельно, если вы не знаете, что делаете.

Необязательный аргумент lockname, если он не nil, указывает имя файла, используемое для целей блокировки и разблокировки, переопределяя filename и visit для этой цели.

Функция write-region преобразует данные, которые она записывает, в соответствующие форматы файлов, указанные buffer-file-format, и также вызывает функции в списке write-region-annotate-functions. См. Преобразование форматов.

Обычно write-region отображает сообщение ‘Записано в filename’ в области эха. Это сообщение подавляется, если visit не является ни t, ни nil, ни строкой, или если Emacs работает в пакетном режиме (см. Пакетный режим). Эта функция полезна для программ, которые используют файлы для внутренних целей, файлы, о которых пользователю не нужно знать.

Переменная: write-region-inhibit-fsync

Если значение этой переменной равно nil, write-region использует системный вызов fsync после записи файла. Хотя это замедляет Emacs, это снижает риск потери данных после отключения питания. Если значение равно t, Emacs не использует fsync. Значение по умолчанию равно nil при интерактивной работе Emacs и t при работе Emacs в пакетном режиме. См. Файлы и хранение.

Макрос: with-temp-file file body…

Макрос with-temp-file вычисляет формы body с временным буфером как текущим буфером; затем, в конце, он записывает содержимое буфера в файл file. Он уничтожает временный буфер по окончании, восстанавливая буфер, который был текущим до формы with-temp-file. Затем он возвращает значение последней формы в body.

Текущий буфер восстанавливается даже в случае аварийного выхода через throw или ошибки (см. Нелокальные выходы).

Как и with-temp-buffer (см. Текущий буфер), временный буфер, используемый этим макросом, не выполняет хуки kill-buffer-hook, kill-buffer-query-functions (см. Уничтожение буферов) и buffer-list-update-hook (см. Список буферов).

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/Writing-to-Files.html

Spec-Zone.ru

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