Spec-Zone.ru › Elisp

Чтение из файлов

Для копирования содержимого файла в буфер используйте функцию insert-file-contents. (Не используйте команду insert-file в программе Lisp, так как она устанавливает метку.)

Функция: insert-file-contents filename &optional visit beg end replace

Эта функция вставляет содержимое файла filename в текущий буфер после точки. Она возвращает список абсолютного имени файла и длины вставленных данных. Возникает ошибка, если filename не является именем файла, который можно прочитать.

Эта функция проверяет содержимое файла на соответствие определенным форматам файлов и преобразует содержимое файла, если необходимо, а также вызывает функции в списке after-insert-file-functions. См. Преобразование форматов. Обычно одна из функций в списке after-insert-file-functions определяет систему кодирования (см. Системы кодирования), используемую для декодирования содержимого файла, включая преобразование конца строки. Однако, если файл содержит нулевые байты, он по умолчанию обрабатывается без каких-либо преобразований кода. См. inhibit-null-byte-detection.

Если visit не nil, эта функция дополнительно помечает буфер как неизмененный и устанавливает различные поля в буфере, чтобы он обрабатывал файл filename: это включает имя посещаемого файла буфера и его последнее время изменения файла. Эта функция используется find-file-noselect и, вероятно, вам не следует её использовать самостоятельно.

Если beg и end не nil, они должны быть числами, которые являются байтовыми смещениями, определяющими часть файла для вставки. В этом случае visit должно быть nil. Например,

(insert-file-contents filename nil 0 500)

вставляет символы, закодированные первыми 500 байтами файла.

Если beg или end оказываются посередине многобайтовой последовательности символа, преобразование кодировки символов Emacs вставит один или несколько восьмибитовых символов (также известных как «сырые байты») (см. Наборы символов) в буфер. Если вы хотите прочитать часть файла таким образом, мы рекомендуем привязать coding-system-for-read к подходящему значению вокруг вызова этой функции (см. Указание систем кодирования) и написать код Lisp, который проверит сырые байты на границах, прочитает всю последовательность этих байтов и преобразует их обратно в допустимые символы.

Если аргумент replace не nil, это означает замену содержимого буфера (в действительности, только доступной части) содержимым файла. Это лучше, чем просто удаление содержимого буфера и вставка всего файла, потому что (1) сохраняются некоторые позиции маркеров и (2) в список отмены попадает меньше данных.

Возможность чтения специального файла (например, FIFO или устройства ввода/вывода) с помощью insert-file-contents, при условии, что replace и visit являются nil.

Функция: insert-file-contents-literally filename &optional visit beg end replace

Эта функция работает так же, как insert-file-contents, за исключением того, что каждый байт в файле обрабатывается отдельно, преобразуясь в восьмибитовый символ при необходимости. Она не запускает after-insert-file-functions, и не выполняет декодирование форматов, преобразование кодировки символов, автоматическое распаковку и т. д.

Если вы хотите передать имя файла другому процессу, чтобы другая программа могла прочитать этот файл, используйте функцию file-local-copy; см. Магические имена файлов.

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/Reading-from-Files.html

Spec-Zone.ru

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