Improve documentation of coding-systems

* doc/lispref/nonascii.texi (Coding System Basics): Mention
'prefer-utf-8'.  Index it and 'undecided'.
(Encoding and I/O): Fix a typo.
(User-Chosen Coding Systems): Improve the documentation of
ACCEPT-DEFAULT-P argument to select-safe-coding-system.  Document
select-safe-coding-system-function.
(Specifying Coding Systems): Document coding-system-require-warning.
This commit is contained in:
Eli Zaretskii 2017-01-10 20:02:37 +02:00
parent c2fd04c8d5
commit 0e35405a92

View file

@ -1002,10 +1002,14 @@ alternative encodings for the same characters; for example, there are
three coding systems for the Cyrillic (Russian) alphabet: ISO, three coding systems for the Cyrillic (Russian) alphabet: ISO,
Alternativnyj, and KOI8. Alternativnyj, and KOI8.
@vindex undecided@r{ coding system}
@vindex prefer-utf-8@r{ coding system}
Every coding system specifies a particular set of character code Every coding system specifies a particular set of character code
conversions, but the coding system @code{undecided} is special: it conversions, but the coding system @code{undecided} is special: it
leaves the choice unspecified, to be chosen heuristically for each leaves the choice unspecified, to be chosen heuristically for each
file, based on the file's data. file, based on the file's data. The coding system @code{prefer-utf-8}
is like @code{undecided}, but it prefers to choose @code{utf-8} when
possible.
In general, a coding system doesn't guarantee roundtrip identity: In general, a coding system doesn't guarantee roundtrip identity:
decoding a byte sequence using coding system, then encoding the decoding a byte sequence using coding system, then encoding the
@ -1109,7 +1113,7 @@ encode the buffer contents.
(@pxref{Specifying Coding Systems}), or implicitly using a default (@pxref{Specifying Coding Systems}), or implicitly using a default
mechanism (@pxref{Default Coding Systems}). But these methods may not mechanism (@pxref{Default Coding Systems}). But these methods may not
completely specify what to do. For example, they may choose a coding completely specify what to do. For example, they may choose a coding
system such as @code{undefined} which leaves the character code system such as @code{undecided} which leaves the character code
conversion to be determined from the data. In these cases, the I/O conversion to be determined from the data. In these cases, the I/O
operation finishes the job of choosing a coding system. Very often operation finishes the job of choosing a coding system. Very often
you will want to find out afterwards which coding system was chosen. you will want to find out afterwards which coding system was chosen.
@ -1411,19 +1415,21 @@ Otherwise, it asks the user to choose from a list of coding systems
which can encode all the text, and returns the user's choice. which can encode all the text, and returns the user's choice.
@var{default-coding-system} can also be a list whose first element is @var{default-coding-system} can also be a list whose first element is
t and whose other elements are coding systems. Then, if no coding @code{t} and whose other elements are coding systems. Then, if no coding
system in the list can handle the text, @code{select-safe-coding-system} system in the list can handle the text, @code{select-safe-coding-system}
queries the user immediately, without trying any of the three queries the user immediately, without trying any of the three
alternatives described above. alternatives described above. This is handy for checking only the
coding systems in the list.
The optional argument @var{accept-default-p}, if non-@code{nil}, The optional argument @var{accept-default-p} determines whether a
should be a function to determine whether a coding system selected coding system selected without user interaction is acceptable. If
without user interaction is acceptable. @code{select-safe-coding-system} it's omitted or @code{nil}, such a silent selection is always
calls this function with one argument, the base coding system of the acceptable. If it is non-@code{nil}, it should be a function;
selected coding system. If @var{accept-default-p} returns @code{nil}, @code{select-safe-coding-system} calls this function with one
@code{select-safe-coding-system} rejects the silently selected coding argument, the base coding system of the selected coding system. If
system, and asks the user to select a coding system from a list of the function returns @code{nil}, @code{select-safe-coding-system}
possible candidates. rejects the silently selected coding system, and asks the user to
select a coding system from a list of possible candidates.
@vindex select-safe-coding-system-accept-default-p @vindex select-safe-coding-system-accept-default-p
If the variable @code{select-safe-coding-system-accept-default-p} is If the variable @code{select-safe-coding-system-accept-default-p} is
@ -1444,6 +1450,18 @@ similar functions). If it detects an apparent inconsistency,
coding system. coding system.
@end defun @end defun
@defvar select-safe-coding-system-function
This variable names the function to be called to request the user to
select a proper coding system for encoding text when the default
coding system for an output operation cannot safely encode that text.
The default value of this variable is @code{select-safe-coding-system}.
Emacs primitives that write text to files, such as
@code{write-region}, or send text to other processes, such as
@code{process-send-region}, normally call the value of this variable,
unless @code{coding-system-for-write} is bound to a non-@code{nil}
value (@pxref{Specifying Coding Systems}).
@end defvar
Here are two functions you can use to let the user specify a coding Here are two functions you can use to let the user specify a coding
system, with completion. @xref{Completion}. system, with completion. @xref{Completion}.
@ -1704,7 +1722,9 @@ including @code{file-coding-system-alist},
@defvar coding-system-for-write @defvar coding-system-for-write
This works much like @code{coding-system-for-read}, except that it This works much like @code{coding-system-for-read}, except that it
applies to output rather than input. It affects writing to files, applies to output rather than input. It affects writing to files,
as well as sending output to subprocesses and net connections. as well as sending output to subprocesses and net connections. It
also applies to encoding command-line arguments with which Emacs
invokes subprocesses.
When a single operation does both input and output, as do When a single operation does both input and output, as do
@code{call-process-region} and @code{start-process}, both @code{call-process-region} and @code{start-process}, both
@ -1712,6 +1732,23 @@ When a single operation does both input and output, as do
affect it. affect it.
@end defvar @end defvar
@defvar coding-system-require-warning
Binding @code{coding-system-for-write} to a non-@code{nil} value
prevents output primitives from calling the function specified by
@code{select-safe-coding-system-function} (@pxref{User-Chosen Coding
Systems}). This is because @kbd{C-x RET c}
(@code{universal-coding-system-argument}) works by binding
@code{coding-system-for-write}, and Emacs should obey user selection.
If a Lisp program binds @code{coding-system-for-write} to a value that
might not be safe for encoding the text to be written, it can also bind
@code{coding-system-require-warning} to a non-@code{nil} value, which
will force the output primitives to check the encoding by calling the
value of @code{select-safe-coding-system-function} even though
@code{coding-system-for-write} is non-@code{nil}. Alternatively, call
@code{select-safe-coding-system} explicitly before using the specified
encoding.
@end defvar
@defopt inhibit-eol-conversion @defopt inhibit-eol-conversion
When this variable is non-@code{nil}, no end-of-line conversion is done, When this variable is non-@code{nil}, no end-of-line conversion is done,
no matter which coding system is specified. This applies to all the no matter which coding system is specified. This applies to all the