34.10.4 Выбор систем кодирования пользователем

Функция: select-safe-coding-system from to &optional default-coding-system accept-default-p file

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

Если указанный текст содержит необработанные байты (см. Представления текста), select-safe-coding-system предлагает raw-text для его кодирования.

Если default-coding-system не равен nil, то это первая система кодирования, которую будет предпринята попытка; если она может обработать текст, select-safe-coding-system возвращает эту систему кодирования. Она также может быть списком систем кодирования; тогда функция пытается каждую из них по очереди. После попытки всех из них она затем пробует значение buffer-file-coding-system текущего буфера (если оно не undecided), затем значение по умолчанию buffer-file-coding-system и, наконец, наиболее предпочтительную систему кодирования пользователя, которую пользователь может установить с помощью команды prefer-coding-system (см. Распознавание систем кодирования в Руководство GNU Emacs).

Если одна из этих систем кодирования может безопасно закодировать весь указанный текст, select-safe-coding-system выбирает ее и возвращает. В противном случае она просит пользователя выбрать из списка систем кодирования, которые могут закодировать весь текст, и возвращает выбор пользователя.

default-coding-system также может быть списком, первый элемент которого является t, а остальные элементы — системами кодирования. Тогда, если ни одна система кодирования в списке не может обработать текст, select-safe-coding-system немедленно запрашивает у пользователя, не пытаясь использовать ни один из трех альтернатив, описанных выше. Это удобно для проверки только систем кодирования в списке.

Необязательный аргумент accept-default-p определяет, приемлем ли выбранная без участия пользователя система кодирования. Если он опущен или равен nil, такой неявный выбор всегда приемлем. Если он не равен nil, то это должна быть функция; select-safe-coding-system вызывает эту функцию с одним аргументом — базовой системой кодирования выбранной системы кодирования. Если функция возвращает nil, select-safe-coding-system отклоняет неявно выбранную систему кодирования и просит пользователя выбрать систему кодирования из списка возможных кандидатов.

Если переменная select-safe-coding-system-accept-default-p не равна nil, она должна быть функцией, принимающей один аргумент. Она используется вместо accept-default-p, переопределяя любое значение, предоставленное для этого аргумента.

В качестве заключительного шага, перед возвратом выбранной системы кодирования, select-safe-coding-system проверяет, согласуется ли эта система кодирования с тем, что было бы выбрано, если бы содержимое области было прочитано из файла. (В противном случае это может привести к повреждению данных в файле, который будет впоследствии посещен и отредактирован.) Обычно select-safe-coding-system использует buffer-file-name в качестве файла для этой цели, но если file не равен nil, он использует этот файл вместо него (это может быть актуально для write-region и аналогичных функций). Если он обнаруживает явное несоответствие, select-safe-coding-system запрашивает у пользователя перед выбором системы кодирования.

Переменная: select-safe-coding-system-function

Эта переменная указывает функцию, которая должна быть вызвана для запроса у пользователя выбора надлежащей системы кодирования для кодирования текста, когда системная кодирование по умолчанию для операции вывода не может безопасно закодировать этот текст. Значение по умолчанию для этой переменной — select-safe-coding-system. Примитивы Emacs, которые записывают текст в файлы, такие как write-region, или отправляют текст в другие процессы, такие как process-send-region, обычно вызывают значение этой переменной, если только coding-system-for-write не привязана к значению, не равному nil (см. Указание системы кодирования для одной операции).

Вот две функции, которые вы можете использовать, чтобы позволить пользователю указать систему кодирования с автодополнением. См. Автодополнение.

Функция: read-coding-system prompt &optional default

Эта функция считывает систему кодирования с помощью минибуфера, запрашивая строкой prompt и возвращая имя системы кодирования в виде символа. Если пользователь вводит нулевой ввод, default указывает, какую систему кодирования вернуть. Это должен быть символ или строка.

Функция: read-non-nil-coding-system prompt

Эта функция считывает систему кодирования с помощью минибуфера, запрашивая строкой prompt, и возвращает имя системы кодирования в виде символа. Если пользователь пытается ввести нулевой ввод, она просит пользователя попробовать снова. См. Системы кодирования.