Чтение из файлов
Для копирования содержимого файла в буфер используйте функцию 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