Эта функция выбирает систему кодирования для кодирования указанного текста, запрашивая у пользователя выбор при необходимости. Обычно указанный текст является текстом в текущем буфере между 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.
Примитивы Emacs, которые записывают текст в файлы, такие как
write-region, или отправляют текст в другие процессы, такие как
process-send-region, обычно вызывают значение этой переменной,
если только coding-system-for-write не привязана к значению, не равному nil
(см. Указание системы кодирования для одной операции).
Вот две функции, которые вы можете использовать, чтобы позволить пользователю указать систему кодирования с автодополнением. См. Автодополнение.
Эта функция считывает систему кодирования с помощью минибуфера, запрашивая строкой prompt и возвращая имя системы кодирования в виде символа. Если пользователь вводит нулевой ввод, default указывает, какую систему кодирования вернуть. Это должен быть символ или строка.
Эта функция считывает систему кодирования с помощью минибуфера, запрашивая строкой prompt, и возвращает имя системы кодирования в виде символа. Если пользователь пытается ввести нулевой ввод, она просит пользователя попробовать снова. См. Системы кодирования.