Spec-Zone.ru › Elisp

Указание кодировки для одной операции

Вы можете указать кодировку для конкретной операции, связав переменные coding-system-for-read и/или coding-system-for-write.

Переменная: coding-system-for-read

Если эта переменная не nil, она указывает кодировку, которую следует использовать для чтения файла или для ввода из синхронного подпроцесса.

Она также применяется к любым асинхронным подпроцессам или сетевым потокам, но по-другому: значение coding-system-for-read при запуске подпроцесса или открытии сетевого потока указывает метод декодирования ввода для этого подпроцесса или сетевого потока. Оно остается в использовании для этого подпроцесса или сетевого потока до тех пор, пока не будет переопределено.

Правильный способ использования этой переменной — связать ее с let для конкретной операции ввода-вывода. Ее глобальное значение обычно nil, и вы не должны глобально устанавливать ей другое значение. Вот пример правильного использования этой переменной:

;; Read the file with no character code conversion.
(let ((coding-system-for-read 'no-conversion))
  (insert-file-contents filename))

Когда ее значение не nil, эта переменная имеет приоритет над всеми другими способами указания кодировки для ввода, включая file-coding-system-alist, process-coding-system-alist и network-coding-system-alist.

Переменная: coding-system-for-write

Это работает очень похоже на coding-system-for-read, за исключением того, что оно применяется к выводу, а не к вводу. Оно влияет на запись в файлы, а также на отправку вывода в подпроцессы и сетевые подключения. Оно также применяется к кодированию аргументов командной строки, с помощью которых Emacs вызывает подпроцессы.

Когда одна операция выполняет как ввод, так и вывод, как call-process-region и start-process, на нее влияют как coding-system-for-read, так и coding-system-for-write.

Переменная: coding-system-require-warning

Связывание coding-system-for-write с ненулевым значением предотвращает вызов функции, указанной select-safe-coding-system-function, в примитивах вывода (см. Выбор кодировки пользователем). Это связано с тем, что C-x RET c (universal-coding-system-argument) работает путем связывания coding-system-for-write, и Emacs должен подчиняться выбору пользователя. Если программа Lisp связывает coding-system-for-write со значением, которое может быть небезопасным для кодирования текста, подлежащего записи, она также может связать coding-system-require-warning с ненулевым значением, что заставит примитивы вывода проверить кодировку, вызвав значение select-safe-coding-system-function, даже если coding-system-for-write имеет ненулевое значение. В качестве альтернативы, явно вызовите select-safe-coding-system перед использованием указанной кодировки.

Пользовательский параметр: inhibit-eol-conversion

Когда эта переменная имеет ненулевое значение, преобразование конца строки не выполняется, независимо от указанной кодировки. Это относится ко всем примитивам ввода-вывода Emacs и подпроцессам, а также к явным функциям кодирования и декодирования (см. Явное кодирование).

Иногда необходимо указать несколько кодировок для некоторой операции, а не фиксировать одну. Emacs позволяет указать порядок приоритета кодировок. Этот порядок влияет на сортировку списков кодировок, возвращаемых функциями, такими как find-coding-systems-region (см. Lisp и кодировки).

Функция: coding-system-priority-list &optional highestp

Эта функция возвращает список кодировок в порядке их текущего приоритета. Необязательный аргумент highestp, если он не nil, означает возвращение только кодировки с наивысшим приоритетом.

Функция: set-coding-system-priority &rest coding-systems

Эта функция помещает coding-systems в начало списка приоритетов кодировок, тем самым повысив их приоритет по сравнению со всеми остальными.

Макрос: with-coding-priority coding-systems &rest body

Этот макрос выполняет body, как и progn (см. progn), с coding-systems в начале списка приоритетов кодировок. coding-systems должен быть списком кодировок, которые следует предпочесть во время выполнения body.

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/Specifying-Coding-Systems.html

Spec-Zone.ru

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