Nuke hand-written node pointers in doc/emacs
[bpt/emacs.git] / doc / lispref / nonascii.texi
CommitLineData
b8d4c8d0
GM
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
1e103a7c 3@c Copyright (C) 1998-1999, 2001-2012 Free Software Foundation, Inc.
b8d4c8d0 4@c See the file elisp.texi for copying conditions.
b8d4c8d0
GM
5@node Non-ASCII Characters, Searching and Matching, Text, Top
6@chapter Non-@acronym{ASCII} Characters
7@cindex multibyte characters
8@cindex characters, multi-byte
9@cindex non-@acronym{ASCII} characters
10
c4526e93
EZ
11 This chapter covers the special issues relating to characters and
12how they are stored in strings and buffers.
b8d4c8d0
GM
13
14@menu
c4526e93 15* Text Representations:: How Emacs represents text.
b8d4c8d0
GM
16* Converting Representations:: Converting unibyte to multibyte and vice versa.
17* Selecting a Representation:: Treating a byte sequence as unibyte or multi.
18* Character Codes:: How unibyte and multibyte relate to
19 codes of individual characters.
91211f07
EZ
20* Character Properties:: Character attributes that define their
21 behavior and handling.
b8d4c8d0
GM
22* Character Sets:: The space of possible character codes
23 is divided into various character sets.
b8d4c8d0
GM
24* Scanning Charsets:: Which character sets are used in a buffer?
25* Translation of Characters:: Translation tables are used for conversion.
26* Coding Systems:: Coding systems are conversions for saving files.
27* Input Methods:: Input methods allow users to enter various
28 non-ASCII characters without special keyboards.
29* Locales:: Interacting with the POSIX locale.
30@end menu
31
32@node Text Representations
33@section Text Representations
c4526e93
EZ
34@cindex text representation
35
36 Emacs buffers and strings support a large repertoire of characters
97d8273f 37from many different scripts, allowing users to type and display text
8cc8cecf 38in almost any known written language.
c4526e93
EZ
39
40@cindex character codepoint
41@cindex codespace
42@cindex Unicode
43 To support this multitude of characters and scripts, Emacs closely
44follows the @dfn{Unicode Standard}. The Unicode Standard assigns a
45unique number, called a @dfn{codepoint}, to each and every character.
46The range of codepoints defined by Unicode, or the Unicode
85eeac93
CY
47@dfn{codespace}, is @code{0..#x10FFFF} (in hexadecimal notation),
48inclusive. Emacs extends this range with codepoints in the range
49@code{#x110000..#x3FFFFF}, which it uses for representing characters
50that are not unified with Unicode and @dfn{raw 8-bit bytes} that
51cannot be interpreted as characters. Thus, a character codepoint in
52Emacs is a 22-bit integer number.
c4526e93
EZ
53
54@cindex internal representation of characters
55@cindex characters, representation in buffers and strings
56@cindex multibyte text
57 To conserve memory, Emacs does not hold fixed-length 22-bit numbers
58that are codepoints of text characters within buffers and strings.
59Rather, Emacs uses a variable-length internal representation of
60characters, that stores each character as a sequence of 1 to 5 8-bit
61bytes, depending on the magnitude of its codepoint@footnote{
62This internal representation is based on one of the encodings defined
63by the Unicode Standard, called @dfn{UTF-8}, for representing any
64Unicode codepoint, but Emacs extends UTF-8 to represent the additional
8b80cdf5 65codepoints it uses for raw 8-bit bytes and characters not unified with
97d8273f
CY
66Unicode.}. For example, any @acronym{ASCII} character takes up only 1
67byte, a Latin-1 character takes up 2 bytes, etc. We call this
68representation of text @dfn{multibyte}.
c4526e93
EZ
69
70 Outside Emacs, characters can be represented in many different
71encodings, such as ISO-8859-1, GB-2312, Big-5, etc. Emacs converts
97d8273f 72between these external encodings and its internal representation, as
c4526e93
EZ
73appropriate, when it reads text into a buffer or a string, or when it
74writes text to a disk file or passes it to some other process.
75
76 Occasionally, Emacs needs to hold and manipulate encoded text or
031c41de
EZ
77binary non-text data in its buffers or strings. For example, when
78Emacs visits a file, it first reads the file's text verbatim into a
79buffer, and only then converts it to the internal representation.
80Before the conversion, the buffer holds encoded text.
b8d4c8d0
GM
81
82@cindex unibyte text
c4526e93
EZ
83 Encoded text is not really text, as far as Emacs is concerned, but
84rather a sequence of raw 8-bit bytes. We call buffers and strings
85that hold encoded text @dfn{unibyte} buffers and strings, because
97d8273f
CY
86Emacs treats them as a sequence of individual bytes. Usually, Emacs
87displays unibyte buffers and strings as octal codes such as
88@code{\237}. We recommend that you never use unibyte buffers and
c4526e93 89strings except for manipulating encoded text or binary non-text data.
b8d4c8d0
GM
90
91 In a buffer, the buffer-local value of the variable
92@code{enable-multibyte-characters} specifies the representation used.
93The representation for a string is determined and recorded in the string
94when the string is constructed.
95
8a14dec7 96@defvar enable-multibyte-characters
b8d4c8d0
GM
97This variable specifies the current buffer's text representation.
98If it is non-@code{nil}, the buffer contains multibyte text; otherwise,
c4526e93 99it contains unibyte encoded text or binary non-text data.
b8d4c8d0
GM
100
101You cannot set this variable directly; instead, use the function
102@code{set-buffer-multibyte} to change a buffer's representation.
8a14dec7 103@end defvar
b8d4c8d0
GM
104
105@defun position-bytes position
c4526e93
EZ
106Buffer positions are measured in character units. This function
107returns the byte-position corresponding to buffer position
b8d4c8d0
GM
108@var{position} in the current buffer. This is 1 at the start of the
109buffer, and counts upward in bytes. If @var{position} is out of
110range, the value is @code{nil}.
111@end defun
112
113@defun byte-to-position byte-position
031c41de
EZ
114Return the buffer position, in character units, corresponding to given
115@var{byte-position} in the current buffer. If @var{byte-position} is
116out of range, the value is @code{nil}. In a multibyte buffer, an
117arbitrary value of @var{byte-position} can be not at character
118boundary, but inside a multibyte sequence representing a single
119character; in this case, this function returns the buffer position of
120the character whose multibyte sequence includes @var{byte-position}.
121In other words, the value does not change for all byte positions that
122belong to the same character.
b8d4c8d0
GM
123@end defun
124
125@defun multibyte-string-p string
c4526e93
EZ
126Return @code{t} if @var{string} is a multibyte string, @code{nil}
127otherwise.
b8d4c8d0
GM
128@end defun
129
130@defun string-bytes string
131@cindex string, number of bytes
132This function returns the number of bytes in @var{string}.
133If @var{string} is a multibyte string, this can be greater than
134@code{(length @var{string})}.
135@end defun
136
c4526e93
EZ
137@defun unibyte-string &rest bytes
138This function concatenates all its argument @var{bytes} and makes the
139result a unibyte string.
140@end defun
141
b8d4c8d0
GM
142@node Converting Representations
143@section Converting Text Representations
144
145 Emacs can convert unibyte text to multibyte; it can also convert
031c41de 146multibyte text to unibyte, provided that the multibyte text contains
8b80cdf5 147only @acronym{ASCII} and 8-bit raw bytes. In general, these
031c41de
EZ
148conversions happen when inserting text into a buffer, or when putting
149text from several strings together in one string. You can also
150explicitly convert a string's contents to either representation.
b8d4c8d0 151
97d8273f
CY
152 Emacs chooses the representation for a string based on the text from
153which it is constructed. The general rule is to convert unibyte text
154to multibyte text when combining it with other multibyte text, because
155the multibyte representation is more general and can hold whatever
b8d4c8d0
GM
156characters the unibyte text has.
157
158 When inserting text into a buffer, Emacs converts the text to the
159buffer's representation, as specified by
160@code{enable-multibyte-characters} in that buffer. In particular, when
161you insert multibyte text into a unibyte buffer, Emacs converts the text
162to unibyte, even though this conversion cannot in general preserve all
163the characters that might be in the multibyte text. The other natural
164alternative, to convert the buffer contents to multibyte, is not
165acceptable because the buffer's representation is a choice made by the
166user that cannot be overridden automatically.
167
97d8273f 168 Converting unibyte text to multibyte text leaves @acronym{ASCII}
e4021ec1 169characters unchanged, and converts bytes with codes 128 through 255 to
97d8273f 170the multibyte representation of raw eight-bit bytes.
b8d4c8d0 171
031c41de
EZ
172 Converting multibyte text to unibyte converts all @acronym{ASCII}
173and eight-bit characters to their single-byte form, but loses
174information for non-@acronym{ASCII} characters by discarding all but
175the low 8 bits of each character's codepoint. Converting unibyte text
176to multibyte and back to unibyte reproduces the original unibyte text.
b8d4c8d0 177
031c41de 178The next two functions either return the argument @var{string}, or a
b8d4c8d0
GM
179newly created string with no text properties.
180
b8d4c8d0
GM
181@defun string-to-multibyte string
182This function returns a multibyte string containing the same sequence
031c41de 183of characters as @var{string}. If @var{string} is a multibyte string,
8b80cdf5
EZ
184it is returned unchanged. The function assumes that @var{string}
185includes only @acronym{ASCII} characters and raw 8-bit bytes; the
186latter are converted to their multibyte representation corresponding
85eeac93
CY
187to the codepoints @code{#x3FFF80} through @code{#x3FFFFF}, inclusive
188(@pxref{Text Representations, codepoints}).
031c41de
EZ
189@end defun
190
191@defun string-to-unibyte string
192This function returns a unibyte string containing the same sequence of
193characters as @var{string}. It signals an error if @var{string}
194contains a non-@acronym{ASCII} character. If @var{string} is a
8b80cdf5
EZ
195unibyte string, it is returned unchanged. Use this function for
196@var{string} arguments that contain only @acronym{ASCII} and eight-bit
197characters.
b8d4c8d0
GM
198@end defun
199
3e99b825
CY
200@defun byte-to-string byte
201@cindex byte to string
202This function returns a unibyte string containing a single byte of
35a30759 203character data, @var{character}. It signals an error if
3e99b825
CY
204@var{character} is not an integer between 0 and 255.
205@end defun
b8d4c8d0
GM
206
207@defun multibyte-char-to-unibyte char
97d8273f
CY
208This converts the multibyte character @var{char} to a unibyte
209character, and returns that character. If @var{char} is neither
210@acronym{ASCII} nor eight-bit, the function returns -1.
b8d4c8d0
GM
211@end defun
212
213@defun unibyte-char-to-multibyte char
214This convert the unibyte character @var{char} to a multibyte
8b80cdf5
EZ
215character, assuming @var{char} is either @acronym{ASCII} or raw 8-bit
216byte.
b8d4c8d0
GM
217@end defun
218
219@node Selecting a Representation
220@section Selecting a Representation
221
222 Sometimes it is useful to examine an existing buffer or string as
223multibyte when it was unibyte, or vice versa.
224
225@defun set-buffer-multibyte multibyte
226Set the representation type of the current buffer. If @var{multibyte}
227is non-@code{nil}, the buffer becomes multibyte. If @var{multibyte}
228is @code{nil}, the buffer becomes unibyte.
229
230This function leaves the buffer contents unchanged when viewed as a
031c41de 231sequence of bytes. As a consequence, it can change the contents
97d8273f
CY
232viewed as characters; for instance, a sequence of three bytes which is
233treated as one character in multibyte representation will count as
234three characters in unibyte representation. Eight-bit characters
031c41de
EZ
235representing raw bytes are an exception. They are represented by one
236byte in a unibyte buffer, but when the buffer is set to multibyte,
237they are converted to two-byte sequences, and vice versa.
b8d4c8d0
GM
238
239This function sets @code{enable-multibyte-characters} to record which
240representation is in use. It also adjusts various data in the buffer
241(including overlays, text properties and markers) so that they cover the
242same text as they did before.
243
244You cannot use @code{set-buffer-multibyte} on an indirect buffer,
245because indirect buffers always inherit the representation of the
246base buffer.
247@end defun
248
249@defun string-as-unibyte string
97d8273f
CY
250If @var{string} is already a unibyte string, this function returns
251@var{string} itself. Otherwise, it returns a new string with the same
252bytes as @var{string}, but treating each byte as a separate character
253(so that the value may have more characters than @var{string}); as an
254exception, each eight-bit character representing a raw byte is
255converted into a single byte. The newly-created string contains no
031c41de 256text properties.
b8d4c8d0
GM
257@end defun
258
259@defun string-as-multibyte string
97d8273f
CY
260If @var{string} is a multibyte string, this function returns
261@var{string} itself. Otherwise, it returns a new string with the same
262bytes as @var{string}, but treating each multibyte sequence as one
263character. This means that the value may have fewer characters than
264@var{string} has. If a byte sequence in @var{string} is invalid as a
265multibyte representation of a single character, each byte in the
266sequence is treated as a raw 8-bit byte. The newly-created string
267contains no text properties.
b8d4c8d0
GM
268@end defun
269
270@node Character Codes
271@section Character Codes
272@cindex character codes
273
ffdbc44b
CY
274 The unibyte and multibyte text representations use different
275character codes. The valid character codes for unibyte representation
85eeac93
CY
276range from 0 to @code{#xFF} (255)---the values that can fit in one
277byte. The valid character codes for multibyte representation range
278from 0 to @code{#x3FFFFF}. In this code space, values 0 through
279@code{#x7F} (127) are for @acronym{ASCII} characters, and values
280@code{#x80} (128) through @code{#x3FFF7F} (4194175) are for
281non-@acronym{ASCII} characters.
282
283 Emacs character codes are a superset of the Unicode standard.
284Values 0 through @code{#x10FFFF} (1114111) correspond to Unicode
285characters of the same codepoint; values @code{#x110000} (1114112)
286through @code{#x3FFF7F} (4194175) represent characters that are not
287unified with Unicode; and values @code{#x3FFF80} (4194176) through
288@code{#x3FFFFF} (4194303) represent eight-bit raw bytes.
ffdbc44b
CY
289
290@defun characterp charcode
291This returns @code{t} if @var{charcode} is a valid character, and
292@code{nil} otherwise.
b8d4c8d0
GM
293
294@example
80070260 295@group
ffdbc44b 296(characterp 65)
b8d4c8d0 297 @result{} t
80070260
EZ
298@end group
299@group
ffdbc44b 300(characterp 4194303)
b8d4c8d0 301 @result{} t
80070260
EZ
302@end group
303@group
ffdbc44b
CY
304(characterp 4194304)
305 @result{} nil
80070260
EZ
306@end group
307@end example
308@end defun
309
310@cindex maximum value of character codepoint
311@cindex codepoint, largest value
312@defun max-char
313This function returns the largest value that a valid character
314codepoint can have.
315
316@example
317@group
318(characterp (max-char))
319 @result{} t
320@end group
321@group
322(characterp (1+ (max-char)))
323 @result{} nil
324@end group
b8d4c8d0 325@end example
b8d4c8d0
GM
326@end defun
327
106e6894 328@defun get-byte &optional pos string
97d8273f
CY
329This function returns the byte at character position @var{pos} in the
330current buffer. If the current buffer is unibyte, this is literally
331the byte at that position. If the buffer is multibyte, byte values of
031c41de
EZ
332@acronym{ASCII} characters are the same as character codepoints,
333whereas eight-bit raw bytes are converted to their 8-bit codes. The
334function signals an error if the character at @var{pos} is
335non-@acronym{ASCII}.
336
337The optional argument @var{string} means to get a byte value from that
338string instead of the current buffer.
339@end defun
340
91211f07
EZ
341@node Character Properties
342@section Character Properties
343@cindex character properties
344A @dfn{character property} is a named attribute of a character that
345specifies how the character behaves and how it should be handled
346during text processing and display. Thus, character properties are an
347important part of specifying the character's semantics.
348
434843ec 349 On the whole, Emacs follows the Unicode Standard in its implementation
91211f07
EZ
350of character properties. In particular, Emacs supports the
351@uref{http://www.unicode.org/reports/tr23/, Unicode Character Property
352Model}, and the Emacs character property database is derived from the
353Unicode Character Database (@acronym{UCD}). See the
354@uref{http://www.unicode.org/versions/Unicode5.0.0/ch04.pdf, Character
97d8273f
CY
355Properties chapter of the Unicode Standard}, for a detailed
356description of Unicode character properties and their meaning. This
357section assumes you are already familiar with that chapter of the
358Unicode Standard, and want to apply that knowledge to Emacs Lisp
359programs.
91211f07
EZ
360
361 In Emacs, each property has a name, which is a symbol, and a set of
af38459f 362possible values, whose types depend on the property; if a character
c06ea95e
EZ
363does not have a certain property, the value is @code{nil}. As a
364general rule, the names of character properties in Emacs are produced
365from the corresponding Unicode properties by downcasing them and
366replacing each @samp{_} character with a dash @samp{-}. For example,
367@code{Canonical_Combining_Class} becomes
368@code{canonical-combining-class}. However, sometimes we shorten the
369names to make their use easier.
370
bca633fb
EZ
371@cindex unassigned character codepoints
372 Some codepoints are left @dfn{unassigned} by the
373@acronym{UCD}---they don't correspond to any character. The Unicode
374Standard defines default values of properties for such codepoints;
375they are mentioned below for each property.
376
97d8273f
CY
377 Here is the full list of value types for all the character
378properties that Emacs knows about:
91211f07
EZ
379
380@table @code
381@item name
049bcbcb
CY
382Corresponds to the @code{Name} Unicode property. The value is a
383string consisting of upper-case Latin letters A to Z, digits, spaces,
bca633fb
EZ
384and hyphen @samp{-} characters. For unassigned codepoints, the value
385is an empty string.
91211f07 386
f8848423 387@cindex unicode general category
91211f07 388@item general-category
049bcbcb
CY
389Corresponds to the @code{General_Category} Unicode property. The
390value is a symbol whose name is a 2-letter abbreviation of the
bca633fb
EZ
391character's classification. For unassigned codepoints, the value
392is @code{Cn}.
91211f07
EZ
393
394@item canonical-combining-class
049bcbcb 395Corresponds to the @code{Canonical_Combining_Class} Unicode property.
bca633fb
EZ
396The value is an integer number. For unassigned codepoints, the value
397is zero.
91211f07 398
10862873 399@cindex bidirectional class of characters
91211f07 400@item bidi-class
af38459f
EZ
401Corresponds to the Unicode @code{Bidi_Class} property. The value is a
402symbol whose name is the Unicode @dfn{directional type} of the
c094bb0c 403character. Emacs uses this property when it reorders bidirectional
bca633fb
EZ
404text for display (@pxref{Bidirectional Display}). For unassigned
405codepoints, the value depends on the code blocks to which the
406codepoint belongs: most unassigned codepoints get the value of
407@code{L} (strong L), but some get values of @code{AL} (Arabic letter)
408or @code{R} (strong R).
91211f07
EZ
409
410@item decomposition
af38459f
EZ
411Corresponds to the Unicode @code{Decomposition_Type} and
412@code{Decomposition_Value} properties. The value is a list, whose
413first element may be a symbol representing a compatibility formatting
83ef8187
CY
414tag, such as @code{small}@footnote{The Unicode specification writes
415these tag names inside @samp{<..>} brackets, but the tag names in
416Emacs do not include the brackets; e.g.@: Unicode specifies
417@samp{<small>} where Emacs uses @samp{small}. }; the other elements
418are characters that give the compatibility decomposition sequence of
419this character. For unassigned codepoints, the value is the character
420itself.
91211f07
EZ
421
422@item decimal-digit-value
af38459f
EZ
423Corresponds to the Unicode @code{Numeric_Value} property for
424characters whose @code{Numeric_Type} is @samp{Digit}. The value is an
bca633fb
EZ
425integer number. For unassigned codepoints, the value is @code{nil},
426which means @acronym{NaN}, or ``not-a-number''.
91211f07 427
bc039a3b 428@item digit-value
af38459f
EZ
429Corresponds to the Unicode @code{Numeric_Value} property for
430characters whose @code{Numeric_Type} is @samp{Decimal}. The value is
431an integer number. Examples of such characters include compatibility
432subscript and superscript digits, for which the value is the
bca633fb
EZ
433corresponding number. For unassigned codepoints, the value is
434@code{nil}, which means @acronym{NaN}.
91211f07
EZ
435
436@item numeric-value
af38459f
EZ
437Corresponds to the Unicode @code{Numeric_Value} property for
438characters whose @code{Numeric_Type} is @samp{Numeric}. The value of
97d8273f 439this property is an integer or a floating-point number. Examples of
af38459f 440characters that have this property include fractions, subscripts,
91211f07 441superscripts, Roman numerals, currency numerators, and encircled
af38459f 442numbers. For example, the value of this property for the character
bca633fb
EZ
443@code{U+2155} (@sc{vulgar fraction one fifth}) is @code{0.2}. For
444unassigned codepoints, the value is @code{nil}, which means
445@acronym{NaN}.
91211f07 446
10862873 447@cindex mirroring of characters
91211f07 448@item mirrored
af38459f 449Corresponds to the Unicode @code{Bidi_Mirrored} property. The value
bca633fb
EZ
450of this property is a symbol, either @code{Y} or @code{N}. For
451unassigned codepoints, the value is @code{N}.
91211f07 452
10862873
EZ
453@item mirroring
454Corresponds to the Unicode @code{Bidi_Mirroring_Glyph} property. The
455value of this property is a character whose glyph represents the
456mirror image of the character's glyph, or @code{nil} if there's no
457defined mirroring glyph. All the characters whose @code{mirrored}
458property is @code{N} have @code{nil} as their @code{mirroring}
459property; however, some characters whose @code{mirrored} property is
460@code{Y} also have @code{nil} for @code{mirroring}, because no
c094bb0c
EZ
461appropriate characters exist with mirrored glyphs. Emacs uses this
462property to display mirror images of characters when appropriate
bca633fb
EZ
463(@pxref{Bidirectional Display}). For unassigned codepoints, the value
464is @code{nil}.
10862873 465
91211f07 466@item old-name
af38459f 467Corresponds to the Unicode @code{Unicode_1_Name} property. The value
bca633fb 468is a string. For unassigned codepoints, the value is an empty string.
91211f07
EZ
469
470@item iso-10646-comment
af38459f 471Corresponds to the Unicode @code{ISO_Comment} property. The value is
bca633fb 472a string. For unassigned codepoints, the value is an empty string.
91211f07
EZ
473
474@item uppercase
af38459f 475Corresponds to the Unicode @code{Simple_Uppercase_Mapping} property.
bca633fb
EZ
476The value of this property is a single character. For unassigned
477codepoints, the value is @code{nil}, which means the character itself.
91211f07
EZ
478
479@item lowercase
af38459f 480Corresponds to the Unicode @code{Simple_Lowercase_Mapping} property.
bca633fb
EZ
481The value of this property is a single character. For unassigned
482codepoints, the value is @code{nil}, which means the character itself.
91211f07
EZ
483
484@item titlecase
af38459f 485Corresponds to the Unicode @code{Simple_Titlecase_Mapping} property.
91211f07 486@dfn{Title case} is a special form of a character used when the first
af38459f 487character of a word needs to be capitalized. The value of this
bca633fb
EZ
488property is a single character. For unassigned codepoints, the value
489is @code{nil}, which means the character itself.
91211f07
EZ
490@end table
491
492@defun get-char-code-property char propname
493This function returns the value of @var{char}'s @var{propname} property.
494
495@example
496@group
497(get-char-code-property ? 'general-category)
498 @result{} Zs
499@end group
500@group
501(get-char-code-property ?1 'general-category)
502 @result{} Nd
503@end group
504@group
049bcbcb
CY
505;; subscript 4
506(get-char-code-property ?\u2084 'digit-value)
91211f07
EZ
507 @result{} 4
508@end group
509@group
049bcbcb
CY
510;; one fifth
511(get-char-code-property ?\u2155 'numeric-value)
bc039a3b 512 @result{} 0.2
91211f07
EZ
513@end group
514@group
049bcbcb
CY
515;; Roman IV
516(get-char-code-property ?\u2163 'numeric-value)
bc039a3b 517 @result{} 4
91211f07
EZ
518@end group
519@end example
520@end defun
521
522@defun char-code-property-description prop value
523This function returns the description string of property @var{prop}'s
524@var{value}, or @code{nil} if @var{value} has no description.
525
526@example
527@group
528(char-code-property-description 'general-category 'Zs)
529 @result{} "Separator, Space"
530@end group
531@group
532(char-code-property-description 'general-category 'Nd)
533 @result{} "Number, Decimal Digit"
534@end group
535@group
536(char-code-property-description 'numeric-value '1/5)
537 @result{} nil
538@end group
539@end example
540@end defun
541
542@defun put-char-code-property char propname value
543This function stores @var{value} as the value of the property
544@var{propname} for the character @var{char}.
545@end defun
546
f8848423 547@defvar unicode-category-table
91211f07 548The value of this variable is a char-table (@pxref{Char-Tables}) that
f8848423
EZ
549specifies, for each character, its Unicode @code{General_Category}
550property as a symbol.
551@end defvar
552
553@defvar char-script-table
554The value of this variable is a char-table that specifies, for each
555character, a symbol whose name is the script to which the character
556belongs, according to the Unicode Standard classification of the
557Unicode code space into script-specific blocks. This char-table has a
558single extra slot whose value is the list of all script symbols.
91211f07
EZ
559@end defvar
560
561@defvar char-width-table
562The value of this variable is a char-table that specifies the width of
563each character in columns that it will occupy on the screen.
564@end defvar
565
566@defvar printable-chars
567The value of this variable is a char-table that specifies, for each
568character, whether it is printable or not. That is, if evaluating
569@code{(aref printable-chars char)} results in @code{t}, the character
570is printable, and if it results in @code{nil}, it is not.
571@end defvar
572
b8d4c8d0
GM
573@node Character Sets
574@section Character Sets
575@cindex character sets
576
031c41de
EZ
577@cindex charset
578@cindex coded character set
579An Emacs @dfn{character set}, or @dfn{charset}, is a set of characters
580in which each character is assigned a numeric code point. (The
434843ec 581Unicode Standard calls this a @dfn{coded character set}.) Each Emacs
031c41de
EZ
582charset has a name which is a symbol. A single character can belong
583to any number of different character sets, but it will generally have
584a different code point in each charset. Examples of character sets
585include @code{ascii}, @code{iso-8859-1}, @code{greek-iso8859-7}, and
586@code{windows-1255}. The code point assigned to a character in a
587charset is usually different from its code point used in Emacs buffers
588and strings.
589
590@cindex @code{emacs}, a charset
591@cindex @code{unicode}, a charset
592@cindex @code{eight-bit}, a charset
593 Emacs defines several special character sets. The character set
594@code{unicode} includes all the characters whose Emacs code points are
85eeac93 595in the range @code{0..#x10FFFF}. The character set @code{emacs}
031c41de
EZ
596includes all @acronym{ASCII} and non-@acronym{ASCII} characters.
597Finally, the @code{eight-bit} charset includes the 8-bit raw bytes;
598Emacs uses it to represent raw bytes encountered in text.
b8d4c8d0
GM
599
600@defun charsetp object
601Returns @code{t} if @var{object} is a symbol that names a character set,
602@code{nil} otherwise.
603@end defun
604
605@defvar charset-list
606The value is a list of all defined character set names.
607@end defvar
608
031c41de
EZ
609@defun charset-priority-list &optional highestp
610This functions returns a list of all defined character sets ordered by
611their priority. If @var{highestp} is non-@code{nil}, the function
612returns a single character set of the highest priority.
613@end defun
614
615@defun set-charset-priority &rest charsets
616This function makes @var{charsets} the highest priority character sets.
b8d4c8d0
GM
617@end defun
618
106e6894 619@defun char-charset character &optional restriction
031c41de
EZ
620This function returns the name of the character set of highest
621priority that @var{character} belongs to. @acronym{ASCII} characters
622are an exception: for them, this function always returns @code{ascii}.
106e6894
CY
623
624If @var{restriction} is non-@code{nil}, it should be a list of
625charsets to search. Alternatively, it can be a coding system, in
626which case the returned charset must be supported by that coding
627system (@pxref{Coding Systems}).
b8d4c8d0
GM
628@end defun
629
630@defun charset-plist charset
031c41de
EZ
631This function returns the property list of the character set
632@var{charset}. Although @var{charset} is a symbol, this is not the
633same as the property list of that symbol. Charset properties include
634important information about the charset, such as its documentation
635string, short name, etc.
b8d4c8d0
GM
636@end defun
637
031c41de
EZ
638@defun put-charset-property charset propname value
639This function sets the @var{propname} property of @var{charset} to the
640given @var{value}.
b8d4c8d0
GM
641@end defun
642
031c41de
EZ
643@defun get-charset-property charset propname
644This function returns the value of @var{charset}s property
645@var{propname}.
b8d4c8d0
GM
646@end defun
647
031c41de
EZ
648@deffn Command list-charset-chars charset
649This command displays a list of characters in the character set
650@var{charset}.
651@end deffn
b8d4c8d0 652
8b80cdf5
EZ
653 Emacs can convert between its internal representation of a character
654and the character's codepoint in a specific charset. The following
655two functions support these conversions.
656
657@c FIXME: decode-char and encode-char accept and ignore an additional
658@c argument @var{restriction}. When that argument actually makes a
659@c difference, it should be documented here.
031c41de
EZ
660@defun decode-char charset code-point
661This function decodes a character that is assigned a @var{code-point}
662in @var{charset}, to the corresponding Emacs character, and returns
8b80cdf5
EZ
663it. If @var{charset} doesn't contain a character of that code point,
664the value is @code{nil}. If @var{code-point} doesn't fit in a Lisp
665integer (@pxref{Integer Basics, most-positive-fixnum}), it can be
666specified as a cons cell @code{(@var{high} . @var{low})}, where
031c41de
EZ
667@var{low} are the lower 16 bits of the value and @var{high} are the
668high 16 bits.
b8d4c8d0
GM
669@end defun
670
031c41de
EZ
671@defun encode-char char charset
672This function returns the code point assigned to the character
8b80cdf5
EZ
673@var{char} in @var{charset}. If the result does not fit in a Lisp
674integer, it is returned as a cons cell @code{(@var{high} . @var{low})}
675that fits the second argument of @code{decode-char} above. If
676@var{charset} doesn't have a codepoint for @var{char}, the value is
677@code{nil}.
b3f1f4a5
EZ
678@end defun
679
680 The following function comes in handy for applying a certain
681function to all or part of the characters in a charset:
682
85eeac93 683@defun map-charset-chars function charset &optional arg from-code to-code
b3f1f4a5
EZ
684Call @var{function} for characters in @var{charset}. @var{function}
685is called with two arguments. The first one is a cons cell
686@code{(@var{from} . @var{to})}, where @var{from} and @var{to}
687indicate a range of characters contained in charset. The second
85eeac93 688argument passed to @var{function} is @var{arg}.
b3f1f4a5
EZ
689
690By default, the range of codepoints passed to @var{function} includes
8c9d5f9f
KH
691all the characters in @var{charset}, but optional arguments
692@var{from-code} and @var{to-code} limit that to the range of
693characters between these two codepoints of @var{charset}. If either
694of them is @code{nil}, it defaults to the first or last codepoint of
695@var{charset}, respectively.
b8d4c8d0
GM
696@end defun
697
b8d4c8d0
GM
698@node Scanning Charsets
699@section Scanning for Character Sets
700
97d8273f
CY
701 Sometimes it is useful to find out which character set a particular
702character belongs to. One use for this is in determining which coding
703systems (@pxref{Coding Systems}) are capable of representing all of
704the text in question; another is to determine the font(s) for
705displaying that text.
b8d4c8d0
GM
706
707@defun charset-after &optional pos
031c41de 708This function returns the charset of highest priority containing the
97d8273f 709character at position @var{pos} in the current buffer. If @var{pos}
031c41de
EZ
710is omitted or @code{nil}, it defaults to the current value of point.
711If @var{pos} is out of range, the value is @code{nil}.
b8d4c8d0
GM
712@end defun
713
714@defun find-charset-region beg end &optional translation
031c41de 715This function returns a list of the character sets of highest priority
8b80cdf5 716that contain characters in the current buffer between positions
031c41de 717@var{beg} and @var{end}.
b8d4c8d0 718
97d8273f
CY
719The optional argument @var{translation} specifies a translation table
720to use for scanning the text (@pxref{Translation of Characters}). If
721it is non-@code{nil}, then each character in the region is translated
b8d4c8d0
GM
722through this table, and the value returned describes the translated
723characters instead of the characters actually in the buffer.
724@end defun
725
726@defun find-charset-string string &optional translation
97d8273f 727This function returns a list of character sets of highest priority
031c41de
EZ
728that contain characters in @var{string}. It is just like
729@code{find-charset-region}, except that it applies to the contents of
730@var{string} instead of part of the current buffer.
b8d4c8d0
GM
731@end defun
732
733@node Translation of Characters
734@section Translation of Characters
735@cindex character translation tables
736@cindex translation tables
737
031c41de
EZ
738 A @dfn{translation table} is a char-table (@pxref{Char-Tables}) that
739specifies a mapping of characters into characters. These tables are
740used in encoding and decoding, and for other purposes. Some coding
741systems specify their own particular translation tables; there are
742also default translation tables which apply to all other coding
743systems.
b8d4c8d0 744
031c41de
EZ
745 A translation table has two extra slots. The first is either
746@code{nil} or a translation table that performs the reverse
747translation; the second is the maximum number of characters to look up
8b80cdf5
EZ
748for translating sequences of characters (see the description of
749@code{make-translation-table-from-alist} below).
b8d4c8d0
GM
750
751@defun make-translation-table &rest translations
752This function returns a translation table based on the argument
753@var{translations}. Each element of @var{translations} should be a
754list of elements of the form @code{(@var{from} . @var{to})}; this says
755to translate the character @var{from} into @var{to}.
756
757The arguments and the forms in each argument are processed in order,
758and if a previous form already translates @var{to} to some other
759character, say @var{to-alt}, @var{from} is also translated to
760@var{to-alt}.
b8d4c8d0
GM
761@end defun
762
031c41de
EZ
763 During decoding, the translation table's translations are applied to
764the characters that result from ordinary decoding. If a coding system
97d8273f 765has the property @code{:decode-translation-table}, that specifies the
031c41de
EZ
766translation table to use, or a list of translation tables to apply in
767sequence. (This is a property of the coding system, as returned by
768@code{coding-system-get}, not a property of the symbol that is the
769coding system's name. @xref{Coding System Basics,, Basic Concepts of
770Coding Systems}.) Finally, if
771@code{standard-translation-table-for-decode} is non-@code{nil}, the
772resulting characters are translated by that table.
773
774 During encoding, the translation table's translations are applied to
775the characters in the buffer, and the result of translation is
776actually encoded. If a coding system has property
777@code{:encode-translation-table}, that specifies the translation table
778to use, or a list of translation tables to apply in sequence. In
779addition, if the variable @code{standard-translation-table-for-encode}
780is non-@code{nil}, it specifies the translation table to use for
781translating the result.
b8d4c8d0
GM
782
783@defvar standard-translation-table-for-decode
031c41de
EZ
784This is the default translation table for decoding. If a coding
785systems specifies its own translation tables, the table that is the
786value of this variable, if non-@code{nil}, is applied after them.
b8d4c8d0
GM
787@end defvar
788
789@defvar standard-translation-table-for-encode
031c41de
EZ
790This is the default translation table for encoding. If a coding
791systems specifies its own translation tables, the table that is the
792value of this variable, if non-@code{nil}, is applied after them.
b8d4c8d0
GM
793@end defvar
794
5c9c5c4b
EZ
795@defvar translation-table-for-input
796Self-inserting characters are translated through this translation
797table before they are inserted. Search commands also translate their
798input through this table, so they can compare more reliably with
799what's in the buffer.
800
801This variable automatically becomes buffer-local when set.
802@end defvar
803
031c41de
EZ
804@defun make-translation-table-from-vector vec
805This function returns a translation table made from @var{vec} that is
85eeac93 806an array of 256 elements to map bytes (values 0 through #xFF) to
031c41de
EZ
807characters. Elements may be @code{nil} for untranslated bytes. The
808returned table has a translation table for reverse mapping in the
8b80cdf5 809first extra slot, and the value @code{1} in the second extra slot.
031c41de
EZ
810
811This function provides an easy way to make a private coding system
812that maps each byte to a specific character. You can specify the
813returned table and the reverse translation table using the properties
814@code{:decode-translation-table} and @code{:encode-translation-table}
815respectively in the @var{props} argument to
816@code{define-coding-system}.
817@end defun
818
819@defun make-translation-table-from-alist alist
820This function is similar to @code{make-translation-table} but returns
821a complex translation table rather than a simple one-to-one mapping.
822Each element of @var{alist} is of the form @code{(@var{from}
97d8273f
CY
823. @var{to})}, where @var{from} and @var{to} are either characters or
824vectors specifying a sequence of characters. If @var{from} is a
031c41de
EZ
825character, that character is translated to @var{to} (i.e.@: to a
826character or a character sequence). If @var{from} is a vector of
827characters, that sequence is translated to @var{to}. The returned
828table has a translation table for reverse mapping in the first extra
8b80cdf5
EZ
829slot, and the maximum length of all the @var{from} character sequences
830in the second extra slot.
031c41de
EZ
831@end defun
832
b8d4c8d0
GM
833@node Coding Systems
834@section Coding Systems
835
836@cindex coding system
837 When Emacs reads or writes a file, and when Emacs sends text to a
838subprocess or receives text from a subprocess, it normally performs
839character code conversion and end-of-line conversion as specified
840by a particular @dfn{coding system}.
841
842 How to define a coding system is an arcane matter, and is not
843documented here.
844
845@menu
846* Coding System Basics:: Basic concepts.
847* Encoding and I/O:: How file I/O functions handle coding systems.
848* Lisp and Coding Systems:: Functions to operate on coding system names.
849* User-Chosen Coding Systems:: Asking the user to choose a coding system.
850* Default Coding Systems:: Controlling the default choices.
851* Specifying Coding Systems:: Requesting a particular coding system
852 for a single file operation.
853* Explicit Encoding:: Encoding or decoding text without doing I/O.
854* Terminal I/O Encoding:: Use of encoding for terminal I/O.
855* MS-DOS File Types:: How DOS "text" and "binary" files
856 relate to coding systems.
857@end menu
858
859@node Coding System Basics
860@subsection Basic Concepts of Coding Systems
861
862@cindex character code conversion
80070260
EZ
863 @dfn{Character code conversion} involves conversion between the
864internal representation of characters used inside Emacs and some other
865encoding. Emacs supports many different encodings, in that it can
866convert to and from them. For example, it can convert text to or from
867encodings such as Latin 1, Latin 2, Latin 3, Latin 4, Latin 5, and
868several variants of ISO 2022. In some cases, Emacs supports several
869alternative encodings for the same characters; for example, there are
870three coding systems for the Cyrillic (Russian) alphabet: ISO,
871Alternativnyj, and KOI8.
872
af38459f
EZ
873 Every coding system specifies a particular set of character code
874conversions, but the coding system @code{undecided} is special: it
875leaves the choice unspecified, to be chosen heuristically for each
876file, based on the file's data.
b8d4c8d0
GM
877
878 In general, a coding system doesn't guarantee roundtrip identity:
879decoding a byte sequence using coding system, then encoding the
880resulting text in the same coding system, can produce a different byte
80070260
EZ
881sequence. But some coding systems do guarantee that the byte sequence
882will be the same as what you originally decoded. Here are a few
883examples:
b8d4c8d0
GM
884
885@quotation
80070260 886iso-8859-1, utf-8, big5, shift_jis, euc-jp
b8d4c8d0
GM
887@end quotation
888
889 Encoding buffer text and then decoding the result can also fail to
80070260
EZ
890reproduce the original text. For instance, if you encode a character
891with a coding system which does not support that character, the result
892is unpredictable, and thus decoding it using the same coding system
893may produce a different text. Currently, Emacs can't report errors
894that result from encoding unsupported characters.
b8d4c8d0
GM
895
896@cindex EOL conversion
897@cindex end-of-line conversion
898@cindex line end conversion
80070260
EZ
899 @dfn{End of line conversion} handles three different conventions
900used on various systems for representing end of line in files. The
901Unix convention, used on GNU and Unix systems, is to use the linefeed
902character (also called newline). The DOS convention, used on
903MS-Windows and MS-DOS systems, is to use a carriage-return and a
904linefeed at the end of a line. The Mac convention is to use just
905carriage-return.
b8d4c8d0
GM
906
907@cindex base coding system
908@cindex variant coding system
909 @dfn{Base coding systems} such as @code{latin-1} leave the end-of-line
910conversion unspecified, to be chosen based on the data. @dfn{Variant
911coding systems} such as @code{latin-1-unix}, @code{latin-1-dos} and
912@code{latin-1-mac} specify the end-of-line conversion explicitly as
913well. Most base coding systems have three corresponding variants whose
914names are formed by adding @samp{-unix}, @samp{-dos} and @samp{-mac}.
915
02eccf6b 916@vindex raw-text@r{ coding system}
b8d4c8d0 917 The coding system @code{raw-text} is special in that it prevents
02eccf6b
EZ
918character code conversion, and causes the buffer visited with this
919coding system to be a unibyte buffer. For historical reasons, you can
920save both unibyte and multibyte text with this coding system. When
921you use @code{raw-text} to encode multibyte text, it does perform one
922character code conversion: it converts eight-bit characters to their
923single-byte external representation. @code{raw-text} does not specify
924the end-of-line conversion, allowing that to be determined as usual by
925the data, and has the usual three variants which specify the
926end-of-line conversion.
927
928@vindex no-conversion@r{ coding system}
929@vindex binary@r{ coding system}
930 @code{no-conversion} (and its alias @code{binary}) is equivalent to
931@code{raw-text-unix}: it specifies no conversion of either character
932codes or end-of-line.
b8d4c8d0 933
80070260 934@vindex emacs-internal@r{ coding system}
97d8273f
CY
935@vindex utf-8-emacs@r{ coding system}
936 The coding system @code{utf-8-emacs} specifies that the data is
937represented in the internal Emacs encoding (@pxref{Text
938Representations}). This is like @code{raw-text} in that no code
939conversion happens, but different in that the result is multibyte
940data. The name @code{emacs-internal} is an alias for
941@code{utf-8-emacs}.
b8d4c8d0
GM
942
943@defun coding-system-get coding-system property
944This function returns the specified property of the coding system
945@var{coding-system}. Most coding system properties exist for internal
80070260 946purposes, but one that you might find useful is @code{:mime-charset}.
b8d4c8d0
GM
947That property's value is the name used in MIME for the character coding
948which this coding system can read and write. Examples:
949
950@example
80070260 951(coding-system-get 'iso-latin-1 :mime-charset)
b8d4c8d0 952 @result{} iso-8859-1
80070260 953(coding-system-get 'iso-2022-cn :mime-charset)
b8d4c8d0 954 @result{} iso-2022-cn
80070260 955(coding-system-get 'cyrillic-koi8 :mime-charset)
b8d4c8d0
GM
956 @result{} koi8-r
957@end example
958
80070260 959The value of the @code{:mime-charset} property is also defined
b8d4c8d0
GM
960as an alias for the coding system.
961@end defun
962
91211f07
EZ
963@defun coding-system-aliases coding-system
964This function returns the list of aliases of @var{coding-system}.
965@end defun
966
b8d4c8d0
GM
967@node Encoding and I/O
968@subsection Encoding and I/O
969
970 The principal purpose of coding systems is for use in reading and
97d8273f
CY
971writing files. The function @code{insert-file-contents} uses a coding
972system to decode the file data, and @code{write-region} uses one to
973encode the buffer contents.
b8d4c8d0
GM
974
975 You can specify the coding system to use either explicitly
976(@pxref{Specifying Coding Systems}), or implicitly using a default
977mechanism (@pxref{Default Coding Systems}). But these methods may not
978completely specify what to do. For example, they may choose a coding
979system such as @code{undefined} which leaves the character code
980conversion to be determined from the data. In these cases, the I/O
981operation finishes the job of choosing a coding system. Very often
982you will want to find out afterwards which coding system was chosen.
983
984@defvar buffer-file-coding-system
e2e3f1d7
MR
985This buffer-local variable records the coding system used for saving the
986buffer and for writing part of the buffer with @code{write-region}. If
987the text to be written cannot be safely encoded using the coding system
988specified by this variable, these operations select an alternative
989encoding by calling the function @code{select-safe-coding-system}
990(@pxref{User-Chosen Coding Systems}). If selecting a different encoding
991requires to ask the user to specify a coding system,
992@code{buffer-file-coding-system} is updated to the newly selected coding
993system.
b8d4c8d0
GM
994
995@code{buffer-file-coding-system} does @emph{not} affect sending text
996to a subprocess.
997@end defvar
998
999@defvar save-buffer-coding-system
1000This variable specifies the coding system for saving the buffer (by
1001overriding @code{buffer-file-coding-system}). Note that it is not used
1002for @code{write-region}.
1003
1004When a command to save the buffer starts out to use
1005@code{buffer-file-coding-system} (or @code{save-buffer-coding-system}),
1006and that coding system cannot handle
1007the actual text in the buffer, the command asks the user to choose
1008another coding system (by calling @code{select-safe-coding-system}).
1009After that happens, the command also updates
1010@code{buffer-file-coding-system} to represent the coding system that
1011the user specified.
1012@end defvar
1013
1014@defvar last-coding-system-used
1015I/O operations for files and subprocesses set this variable to the
1016coding system name that was used. The explicit encoding and decoding
1017functions (@pxref{Explicit Encoding}) set it too.
1018
1019@strong{Warning:} Since receiving subprocess output sets this variable,
1020it can change whenever Emacs waits; therefore, you should copy the
1021value shortly after the function call that stores the value you are
1022interested in.
1023@end defvar
1024
1025 The variable @code{selection-coding-system} specifies how to encode
1026selections for the window system. @xref{Window System Selections}.
1027
1028@defvar file-name-coding-system
1029The variable @code{file-name-coding-system} specifies the coding
1030system to use for encoding file names. Emacs encodes file names using
1031that coding system for all file operations. If
1032@code{file-name-coding-system} is @code{nil}, Emacs uses a default
1033coding system determined by the selected language environment. In the
1034default language environment, any non-@acronym{ASCII} characters in
1035file names are not encoded specially; they appear in the file system
1036using the internal Emacs representation.
1037@end defvar
1038
1039 @strong{Warning:} if you change @code{file-name-coding-system} (or
1040the language environment) in the middle of an Emacs session, problems
1041can result if you have already visited files whose names were encoded
1042using the earlier coding system and are handled differently under the
1043new coding system. If you try to save one of these buffers under the
1044visited file name, saving may use the wrong file name, or it may get
1045an error. If such a problem happens, use @kbd{C-x C-w} to specify a
1046new file name for that buffer.
1047
1048@node Lisp and Coding Systems
1049@subsection Coding Systems in Lisp
1050
1051 Here are the Lisp facilities for working with coding systems:
1052
0e90e7be 1053@cindex list all coding systems
b8d4c8d0
GM
1054@defun coding-system-list &optional base-only
1055This function returns a list of all coding system names (symbols). If
1056@var{base-only} is non-@code{nil}, the value includes only the
1057base coding systems. Otherwise, it includes alias and variant coding
1058systems as well.
1059@end defun
1060
1061@defun coding-system-p object
1062This function returns @code{t} if @var{object} is a coding system
1063name or @code{nil}.
1064@end defun
1065
0e90e7be
EZ
1066@cindex validity of coding system
1067@cindex coding system, validity check
b8d4c8d0 1068@defun check-coding-system coding-system
80070260
EZ
1069This function checks the validity of @var{coding-system}. If that is
1070valid, it returns @var{coding-system}. If @var{coding-system} is
1071@code{nil}, the function return @code{nil}. For any other values, it
1072signals an error whose @code{error-symbol} is @code{coding-system-error}
1073(@pxref{Signaling Errors, signal}).
b8d4c8d0
GM
1074@end defun
1075
0e90e7be 1076@cindex eol type of coding system
b8d4c8d0
GM
1077@defun coding-system-eol-type coding-system
1078This function returns the type of end-of-line (a.k.a.@: @dfn{eol})
1079conversion used by @var{coding-system}. If @var{coding-system}
1080specifies a certain eol conversion, the return value is an integer 0,
10811, or 2, standing for @code{unix}, @code{dos}, and @code{mac},
1082respectively. If @var{coding-system} doesn't specify eol conversion
1083explicitly, the return value is a vector of coding systems, each one
1084with one of the possible eol conversion types, like this:
1085
1086@lisp
1087(coding-system-eol-type 'latin-1)
1088 @result{} [latin-1-unix latin-1-dos latin-1-mac]
1089@end lisp
1090
1091@noindent
1092If this function returns a vector, Emacs will decide, as part of the
1093text encoding or decoding process, what eol conversion to use. For
1094decoding, the end-of-line format of the text is auto-detected, and the
1095eol conversion is set to match it (e.g., DOS-style CRLF format will
1096imply @code{dos} eol conversion). For encoding, the eol conversion is
1097taken from the appropriate default coding system (e.g.,
4e3b4528 1098default value of @code{buffer-file-coding-system} for
b8d4c8d0
GM
1099@code{buffer-file-coding-system}), or from the default eol conversion
1100appropriate for the underlying platform.
1101@end defun
1102
0e90e7be 1103@cindex eol conversion of coding system
b8d4c8d0
GM
1104@defun coding-system-change-eol-conversion coding-system eol-type
1105This function returns a coding system which is like @var{coding-system}
1106except for its eol conversion, which is specified by @code{eol-type}.
1107@var{eol-type} should be @code{unix}, @code{dos}, @code{mac}, or
1108@code{nil}. If it is @code{nil}, the returned coding system determines
1109the end-of-line conversion from the data.
1110
1111@var{eol-type} may also be 0, 1 or 2, standing for @code{unix},
1112@code{dos} and @code{mac}, respectively.
1113@end defun
1114
0e90e7be 1115@cindex text conversion of coding system
b8d4c8d0
GM
1116@defun coding-system-change-text-conversion eol-coding text-coding
1117This function returns a coding system which uses the end-of-line
1118conversion of @var{eol-coding}, and the text conversion of
1119@var{text-coding}. If @var{text-coding} is @code{nil}, it returns
1120@code{undecided}, or one of its variants according to @var{eol-coding}.
1121@end defun
1122
0e90e7be
EZ
1123@cindex safely encode region
1124@cindex coding systems for encoding region
b8d4c8d0
GM
1125@defun find-coding-systems-region from to
1126This function returns a list of coding systems that could be used to
1127encode a text between @var{from} and @var{to}. All coding systems in
1128the list can safely encode any multibyte characters in that portion of
1129the text.
1130
1131If the text contains no multibyte characters, the function returns the
1132list @code{(undecided)}.
1133@end defun
1134
0e90e7be
EZ
1135@cindex safely encode a string
1136@cindex coding systems for encoding a string
b8d4c8d0
GM
1137@defun find-coding-systems-string string
1138This function returns a list of coding systems that could be used to
1139encode the text of @var{string}. All coding systems in the list can
1140safely encode any multibyte characters in @var{string}. If the text
1141contains no multibyte characters, this returns the list
1142@code{(undecided)}.
1143@end defun
1144
0e90e7be
EZ
1145@cindex charset, coding systems to encode
1146@cindex safely encode characters in a charset
b8d4c8d0
GM
1147@defun find-coding-systems-for-charsets charsets
1148This function returns a list of coding systems that could be used to
1149encode all the character sets in the list @var{charsets}.
1150@end defun
1151
91211f07
EZ
1152@defun check-coding-systems-region start end coding-system-list
1153This function checks whether coding systems in the list
1154@code{coding-system-list} can encode all the characters in the region
1155between @var{start} and @var{end}. If all of the coding systems in
1156the list can encode the specified text, the function returns
1157@code{nil}. If some coding systems cannot encode some of the
1158characters, the value is an alist, each element of which has the form
1159@code{(@var{coding-system1} @var{pos1} @var{pos2} @dots{})}, meaning
1160that @var{coding-system1} cannot encode characters at buffer positions
1161@var{pos1}, @var{pos2}, @enddots{}.
1162
1163@var{start} may be a string, in which case @var{end} is ignored and
1164the returned value references string indices instead of buffer
1165positions.
1166@end defun
1167
b8d4c8d0
GM
1168@defun detect-coding-region start end &optional highest
1169This function chooses a plausible coding system for decoding the text
80070260
EZ
1170from @var{start} to @var{end}. This text should be a byte sequence,
1171i.e.@: unibyte text or multibyte text with only @acronym{ASCII} and
1172eight-bit characters (@pxref{Explicit Encoding}).
b8d4c8d0
GM
1173
1174Normally this function returns a list of coding systems that could
1175handle decoding the text that was scanned. They are listed in order of
1176decreasing priority. But if @var{highest} is non-@code{nil}, then the
1177return value is just one coding system, the one that is highest in
1178priority.
1179
1180If the region contains only @acronym{ASCII} characters except for such
1181ISO-2022 control characters ISO-2022 as @code{ESC}, the value is
1182@code{undecided} or @code{(undecided)}, or a variant specifying
1183end-of-line conversion, if that can be deduced from the text.
0b4faef3
EZ
1184
1185If the region contains null bytes, the value is @code{no-conversion},
1186even if the region contains text encoded in some coding system.
b8d4c8d0
GM
1187@end defun
1188
1189@defun detect-coding-string string &optional highest
1190This function is like @code{detect-coding-region} except that it
1191operates on the contents of @var{string} instead of bytes in the buffer.
91211f07
EZ
1192@end defun
1193
0e90e7be 1194@cindex null bytes, and decoding text
0b4faef3
EZ
1195@defvar inhibit-null-byte-detection
1196If this variable has a non-@code{nil} value, null bytes are ignored
1197when detecting the encoding of a region or a string. This allows to
1198correctly detect the encoding of text that contains null bytes, such
1199as Info files with Index nodes.
1200@end defvar
1201
1202@defvar inhibit-iso-escape-detection
1203If this variable has a non-@code{nil} value, ISO-2022 escape sequences
1204are ignored when detecting the encoding of a region or a string. The
1205result is that no text is ever detected as encoded in some ISO-2022
1206encoding, and all escape sequences become visible in a buffer.
1207@strong{Warning:} @emph{Use this variable with extreme caution,
1208because many files in the Emacs distribution use ISO-2022 encoding.}
1209@end defvar
1210
0e90e7be 1211@cindex charsets supported by a coding system
91211f07
EZ
1212@defun coding-system-charset-list coding-system
1213This function returns the list of character sets (@pxref{Character
1214Sets}) supported by @var{coding-system}. Some coding systems that
1215support too many character sets to list them all yield special values:
1216@itemize @bullet
1217@item
1218If @var{coding-system} supports all the ISO-2022 charsets, the value
1219is @code{iso-2022}.
1220@item
1221If @var{coding-system} supports all Emacs characters, the value is
1222@code{(emacs)}.
1223@item
1224If @var{coding-system} supports all emacs-mule characters, the value
1225is @code{emacs-mule}.
1226@item
1227If @var{coding-system} supports all Unicode characters, the value is
1228@code{(unicode)}.
1229@end itemize
b8d4c8d0
GM
1230@end defun
1231
1232 @xref{Coding systems for a subprocess,, Process Information}, in
1233particular the description of the functions
1234@code{process-coding-system} and @code{set-process-coding-system}, for
1235how to examine or set the coding systems used for I/O to a subprocess.
1236
1237@node User-Chosen Coding Systems
1238@subsection User-Chosen Coding Systems
1239
1240@cindex select safe coding system
1241@defun select-safe-coding-system from to &optional default-coding-system accept-default-p file
1242This function selects a coding system for encoding specified text,
1243asking the user to choose if necessary. Normally the specified text
1244is the text in the current buffer between @var{from} and @var{to}. If
1245@var{from} is a string, the string specifies the text to encode, and
1246@var{to} is ignored.
1247
77730170
EZ
1248If the specified text includes raw bytes (@pxref{Text
1249Representations}), @code{select-safe-coding-system} suggests
1250@code{raw-text} for its encoding.
1251
b8d4c8d0
GM
1252If @var{default-coding-system} is non-@code{nil}, that is the first
1253coding system to try; if that can handle the text,
1254@code{select-safe-coding-system} returns that coding system. It can
1255also be a list of coding systems; then the function tries each of them
1256one by one. After trying all of them, it next tries the current
1257buffer's value of @code{buffer-file-coding-system} (if it is not
4e3b4528
SM
1258@code{undecided}), then the default value of
1259@code{buffer-file-coding-system} and finally the user's most
b8d4c8d0
GM
1260preferred coding system, which the user can set using the command
1261@code{prefer-coding-system} (@pxref{Recognize Coding,, Recognizing
1262Coding Systems, emacs, The GNU Emacs Manual}).
1263
1264If one of those coding systems can safely encode all the specified
1265text, @code{select-safe-coding-system} chooses it and returns it.
1266Otherwise, it asks the user to choose from a list of coding systems
1267which can encode all the text, and returns the user's choice.
1268
1269@var{default-coding-system} can also be a list whose first element is
1270t and whose other elements are coding systems. Then, if no coding
1271system in the list can handle the text, @code{select-safe-coding-system}
1272queries the user immediately, without trying any of the three
1273alternatives described above.
1274
1275The optional argument @var{accept-default-p}, if non-@code{nil},
1276should be a function to determine whether a coding system selected
1277without user interaction is acceptable. @code{select-safe-coding-system}
1278calls this function with one argument, the base coding system of the
1279selected coding system. If @var{accept-default-p} returns @code{nil},
1280@code{select-safe-coding-system} rejects the silently selected coding
1281system, and asks the user to select a coding system from a list of
1282possible candidates.
1283
1284@vindex select-safe-coding-system-accept-default-p
1285If the variable @code{select-safe-coding-system-accept-default-p} is
9bd79893
GM
1286non-@code{nil}, it should be a function taking a single argument.
1287It is used in place of @var{accept-default-p}, overriding any
1288value supplied for this argument.
b8d4c8d0
GM
1289
1290As a final step, before returning the chosen coding system,
1291@code{select-safe-coding-system} checks whether that coding system is
1292consistent with what would be selected if the contents of the region
1293were read from a file. (If not, this could lead to data corruption in
1294a file subsequently re-visited and edited.) Normally,
1295@code{select-safe-coding-system} uses @code{buffer-file-name} as the
1296file for this purpose, but if @var{file} is non-@code{nil}, it uses
1297that file instead (this can be relevant for @code{write-region} and
1298similar functions). If it detects an apparent inconsistency,
1299@code{select-safe-coding-system} queries the user before selecting the
1300coding system.
1301@end defun
1302
1303 Here are two functions you can use to let the user specify a coding
1304system, with completion. @xref{Completion}.
1305
1306@defun read-coding-system prompt &optional default
1307This function reads a coding system using the minibuffer, prompting with
1308string @var{prompt}, and returns the coding system name as a symbol. If
1309the user enters null input, @var{default} specifies which coding system
1310to return. It should be a symbol or a string.
1311@end defun
1312
1313@defun read-non-nil-coding-system prompt
1314This function reads a coding system using the minibuffer, prompting with
1315string @var{prompt}, and returns the coding system name as a symbol. If
1316the user tries to enter null input, it asks the user to try again.
1317@xref{Coding Systems}.
1318@end defun
1319
1320@node Default Coding Systems
1321@subsection Default Coding Systems
0e90e7be
EZ
1322@cindex default coding system
1323@cindex coding system, automatically determined
b8d4c8d0
GM
1324
1325 This section describes variables that specify the default coding
1326system for certain files or when running certain subprograms, and the
1327function that I/O operations use to access them.
1328
1329 The idea of these variables is that you set them once and for all to the
1330defaults you want, and then do not change them again. To specify a
1331particular coding system for a particular operation in a Lisp program,
1332don't change these variables; instead, override them using
1333@code{coding-system-for-read} and @code{coding-system-for-write}
1334(@pxref{Specifying Coding Systems}).
1335
0e90e7be 1336@cindex file contents, and default coding system
01f17ae2 1337@defopt auto-coding-regexp-alist
b8d4c8d0
GM
1338This variable is an alist of text patterns and corresponding coding
1339systems. Each element has the form @code{(@var{regexp}
1340. @var{coding-system})}; a file whose first few kilobytes match
1341@var{regexp} is decoded with @var{coding-system} when its contents are
1342read into a buffer. The settings in this alist take priority over
1343@code{coding:} tags in the files and the contents of
1344@code{file-coding-system-alist} (see below). The default value is set
1345so that Emacs automatically recognizes mail files in Babyl format and
1346reads them with no code conversions.
01f17ae2 1347@end defopt
b8d4c8d0 1348
0e90e7be 1349@cindex file name, and default coding system
01f17ae2 1350@defopt file-coding-system-alist
b8d4c8d0
GM
1351This variable is an alist that specifies the coding systems to use for
1352reading and writing particular files. Each element has the form
1353@code{(@var{pattern} . @var{coding})}, where @var{pattern} is a regular
1354expression that matches certain file names. The element applies to file
1355names that match @var{pattern}.
1356
1357The @sc{cdr} of the element, @var{coding}, should be either a coding
1358system, a cons cell containing two coding systems, or a function name (a
1359symbol with a function definition). If @var{coding} is a coding system,
1360that coding system is used for both reading the file and writing it. If
1361@var{coding} is a cons cell containing two coding systems, its @sc{car}
1362specifies the coding system for decoding, and its @sc{cdr} specifies the
1363coding system for encoding.
1364
1365If @var{coding} is a function name, the function should take one
1366argument, a list of all arguments passed to
1367@code{find-operation-coding-system}. It must return a coding system
1368or a cons cell containing two coding systems. This value has the same
1369meaning as described above.
1370
1371If @var{coding} (or what returned by the above function) is
1372@code{undecided}, the normal code-detection is performed.
01f17ae2 1373@end defopt
b8d4c8d0 1374
01f17ae2 1375@defopt auto-coding-alist
0e90e7be
EZ
1376This variable is an alist that specifies the coding systems to use for
1377reading and writing particular files. Its form is like that of
1378@code{file-coding-system-alist}, but, unlike the latter, this variable
1379takes priority over any @code{coding:} tags in the file.
01f17ae2 1380@end defopt
0e90e7be
EZ
1381
1382@cindex program name, and default coding system
b8d4c8d0
GM
1383@defvar process-coding-system-alist
1384This variable is an alist specifying which coding systems to use for a
1385subprocess, depending on which program is running in the subprocess. It
1386works like @code{file-coding-system-alist}, except that @var{pattern} is
1387matched against the program name used to start the subprocess. The coding
1388system or systems specified in this alist are used to initialize the
1389coding systems used for I/O to the subprocess, but you can specify
1390other coding systems later using @code{set-process-coding-system}.
1391@end defvar
1392
1393 @strong{Warning:} Coding systems such as @code{undecided}, which
1394determine the coding system from the data, do not work entirely reliably
1395with asynchronous subprocess output. This is because Emacs handles
1396asynchronous subprocess output in batches, as it arrives. If the coding
1397system leaves the character code conversion unspecified, or leaves the
1398end-of-line conversion unspecified, Emacs must try to detect the proper
1399conversion from one batch at a time, and this does not always work.
1400
1401 Therefore, with an asynchronous subprocess, if at all possible, use a
1402coding system which determines both the character code conversion and
1403the end of line conversion---that is, one like @code{latin-1-unix},
1404rather than @code{undecided} or @code{latin-1}.
1405
0e90e7be
EZ
1406@cindex port number, and default coding system
1407@cindex network service name, and default coding system
b8d4c8d0
GM
1408@defvar network-coding-system-alist
1409This variable is an alist that specifies the coding system to use for
1410network streams. It works much like @code{file-coding-system-alist},
1411with the difference that the @var{pattern} in an element may be either a
1412port number or a regular expression. If it is a regular expression, it
1413is matched against the network service name used to open the network
1414stream.
1415@end defvar
1416
1417@defvar default-process-coding-system
1418This variable specifies the coding systems to use for subprocess (and
1419network stream) input and output, when nothing else specifies what to
1420do.
1421
1422The value should be a cons cell of the form @code{(@var{input-coding}
1423. @var{output-coding})}. Here @var{input-coding} applies to input from
1424the subprocess, and @var{output-coding} applies to output to it.
1425@end defvar
1426
0e90e7be 1427@cindex default coding system, functions to determine
01f17ae2 1428@defopt auto-coding-functions
b8d4c8d0
GM
1429This variable holds a list of functions that try to determine a
1430coding system for a file based on its undecoded contents.
1431
1432Each function in this list should be written to look at text in the
1433current buffer, but should not modify it in any way. The buffer will
1434contain undecoded text of parts of the file. Each function should
1435take one argument, @var{size}, which tells it how many characters to
1436look at, starting from point. If the function succeeds in determining
1437a coding system for the file, it should return that coding system.
1438Otherwise, it should return @code{nil}.
1439
1440If a file has a @samp{coding:} tag, that takes precedence, so these
1441functions won't be called.
01f17ae2 1442@end defopt
b8d4c8d0 1443
0e90e7be
EZ
1444@defun find-auto-coding filename size
1445This function tries to determine a suitable coding system for
1446@var{filename}. It examines the buffer visiting the named file, using
1447the variables documented above in sequence, until it finds a match for
1448one of the rules specified by these variables. It then returns a cons
1449cell of the form @code{(@var{coding} . @var{source})}, where
1450@var{coding} is the coding system to use and @var{source} is a symbol,
1451one of @code{auto-coding-alist}, @code{auto-coding-regexp-alist},
1452@code{:coding}, or @code{auto-coding-functions}, indicating which one
1453supplied the matching rule. The value @code{:coding} means the coding
1454system was specified by the @code{coding:} tag in the file
1455(@pxref{Specify Coding,, coding tag, emacs, The GNU Emacs Manual}).
1456The order of looking for a matching rule is @code{auto-coding-alist}
1457first, then @code{auto-coding-regexp-alist}, then the @code{coding:}
1458tag, and lastly @code{auto-coding-functions}. If no matching rule was
1459found, the function returns @code{nil}.
1460
1461The second argument @var{size} is the size of text, in characters,
1462following point. The function examines text only within @var{size}
1463characters after point. Normally, the buffer should be positioned at
1464the beginning when this function is called, because one of the places
1465for the @code{coding:} tag is the first one or two lines of the file;
1466in that case, @var{size} should be the size of the buffer.
1467@end defun
1468
1469@defun set-auto-coding filename size
1470This function returns a suitable coding system for file
1471@var{filename}. It uses @code{find-auto-coding} to find the coding
1472system. If no coding system could be determined, the function returns
1473@code{nil}. The meaning of the argument @var{size} is like in
1474@code{find-auto-coding}.
1475@end defun
1476
b8d4c8d0
GM
1477@defun find-operation-coding-system operation &rest arguments
1478This function returns the coding system to use (by default) for
1479performing @var{operation} with @var{arguments}. The value has this
1480form:
1481
1482@example
1483(@var{decoding-system} . @var{encoding-system})
1484@end example
1485
1486The first element, @var{decoding-system}, is the coding system to use
1487for decoding (in case @var{operation} does decoding), and
1488@var{encoding-system} is the coding system for encoding (in case
1489@var{operation} does encoding).
1490
049bcbcb
CY
1491The argument @var{operation} is a symbol; it should be one of
1492@code{write-region}, @code{start-process}, @code{call-process},
1493@code{call-process-region}, @code{insert-file-contents}, or
1494@code{open-network-stream}. These are the names of the Emacs I/O
1495primitives that can do character code and eol conversion.
b8d4c8d0
GM
1496
1497The remaining arguments should be the same arguments that might be given
1498to the corresponding I/O primitive. Depending on the primitive, one
1499of those arguments is selected as the @dfn{target}. For example, if
1500@var{operation} does file I/O, whichever argument specifies the file
1501name is the target. For subprocess primitives, the process name is the
1502target. For @code{open-network-stream}, the target is the service name
1503or port number.
1504
1505Depending on @var{operation}, this function looks up the target in
1506@code{file-coding-system-alist}, @code{process-coding-system-alist},
1507or @code{network-coding-system-alist}. If the target is found in the
1508alist, @code{find-operation-coding-system} returns its association in
1509the alist; otherwise it returns @code{nil}.
1510
1511If @var{operation} is @code{insert-file-contents}, the argument
1512corresponding to the target may be a cons cell of the form
1513@code{(@var{filename} . @var{buffer})}). In that case, @var{filename}
1514is a file name to look up in @code{file-coding-system-alist}, and
1515@var{buffer} is a buffer that contains the file's contents (not yet
1516decoded). If @code{file-coding-system-alist} specifies a function to
1517call for this file, and that function needs to examine the file's
1518contents (as it usually does), it should examine the contents of
1519@var{buffer} instead of reading the file.
1520@end defun
1521
1522@node Specifying Coding Systems
1523@subsection Specifying a Coding System for One Operation
1524
1525 You can specify the coding system for a specific operation by binding
1526the variables @code{coding-system-for-read} and/or
1527@code{coding-system-for-write}.
1528
1529@defvar coding-system-for-read
1530If this variable is non-@code{nil}, it specifies the coding system to
1531use for reading a file, or for input from a synchronous subprocess.
1532
1533It also applies to any asynchronous subprocess or network stream, but in
1534a different way: the value of @code{coding-system-for-read} when you
1535start the subprocess or open the network stream specifies the input
1536decoding method for that subprocess or network stream. It remains in
1537use for that subprocess or network stream unless and until overridden.
1538
1539The right way to use this variable is to bind it with @code{let} for a
1540specific I/O operation. Its global value is normally @code{nil}, and
1541you should not globally set it to any other value. Here is an example
1542of the right way to use the variable:
1543
1544@example
1545;; @r{Read the file with no character code conversion.}
1546;; @r{Assume @acronym{crlf} represents end-of-line.}
1547(let ((coding-system-for-read 'emacs-mule-dos))
1548 (insert-file-contents filename))
1549@end example
1550
1551When its value is non-@code{nil}, this variable takes precedence over
1552all other methods of specifying a coding system to use for input,
1553including @code{file-coding-system-alist},
1554@code{process-coding-system-alist} and
1555@code{network-coding-system-alist}.
1556@end defvar
1557
1558@defvar coding-system-for-write
1559This works much like @code{coding-system-for-read}, except that it
1560applies to output rather than input. It affects writing to files,
1561as well as sending output to subprocesses and net connections.
1562
1563When a single operation does both input and output, as do
1564@code{call-process-region} and @code{start-process}, both
1565@code{coding-system-for-read} and @code{coding-system-for-write}
1566affect it.
1567@end defvar
1568
01f17ae2 1569@defopt inhibit-eol-conversion
b8d4c8d0
GM
1570When this variable is non-@code{nil}, no end-of-line conversion is done,
1571no matter which coding system is specified. This applies to all the
1572Emacs I/O and subprocess primitives, and to the explicit encoding and
1573decoding functions (@pxref{Explicit Encoding}).
01f17ae2 1574@end defopt
b8d4c8d0 1575
91211f07
EZ
1576@cindex priority order of coding systems
1577@cindex coding systems, priority
1578 Sometimes, you need to prefer several coding systems for some
1579operation, rather than fix a single one. Emacs lets you specify a
1580priority order for using coding systems. This ordering affects the
333f9019 1581sorting of lists of coding systems returned by functions such as
91211f07
EZ
1582@code{find-coding-systems-region} (@pxref{Lisp and Coding Systems}).
1583
1584@defun coding-system-priority-list &optional highestp
1585This function returns the list of coding systems in the order of their
1586current priorities. Optional argument @var{highestp}, if
1587non-@code{nil}, means return only the highest priority coding system.
1588@end defun
1589
1590@defun set-coding-system-priority &rest coding-systems
1591This function puts @var{coding-systems} at the beginning of the
1592priority list for coding systems, thus making their priority higher
1593than all the rest.
1594@end defun
1595
1596@defmac with-coding-priority coding-systems &rest body@dots{}
1597This macro execute @var{body}, like @code{progn} does
1598(@pxref{Sequencing, progn}), with @var{coding-systems} at the front of
1599the priority list for coding systems. @var{coding-systems} should be
1600a list of coding systems to prefer during execution of @var{body}.
1601@end defmac
1602
b8d4c8d0
GM
1603@node Explicit Encoding
1604@subsection Explicit Encoding and Decoding
1605@cindex encoding in coding systems
1606@cindex decoding in coding systems
1607
1608 All the operations that transfer text in and out of Emacs have the
1609ability to use a coding system to encode or decode the text.
1610You can also explicitly encode and decode text using the functions
1611in this section.
1612
1613 The result of encoding, and the input to decoding, are not ordinary
1614text. They logically consist of a series of byte values; that is, a
80070260
EZ
1615series of @acronym{ASCII} and eight-bit characters. In unibyte
1616buffers and strings, these characters have codes in the range 0
85eeac93
CY
1617through #xFF (255). In a multibyte buffer or string, eight-bit
1618characters have character codes higher than #xFF (@pxref{Text
1619Representations}), but Emacs transparently converts them to their
1620single-byte values when you encode or decode such text.
b8d4c8d0
GM
1621
1622 The usual way to read a file into a buffer as a sequence of bytes, so
1623you can decode the contents explicitly, is with
1624@code{insert-file-contents-literally} (@pxref{Reading from Files});
1625alternatively, specify a non-@code{nil} @var{rawfile} argument when
1626visiting a file with @code{find-file-noselect}. These methods result in
1627a unibyte buffer.
1628
1629 The usual way to use the byte sequence that results from explicitly
1630encoding text is to copy it to a file or process---for example, to write
1631it with @code{write-region} (@pxref{Writing to Files}), and suppress
1632encoding by binding @code{coding-system-for-write} to
1633@code{no-conversion}.
1634
1635 Here are the functions to perform explicit encoding or decoding. The
1636encoding functions produce sequences of bytes; the decoding functions
1637are meant to operate on sequences of bytes. All of these functions
80070260
EZ
1638discard text properties. They also set @code{last-coding-system-used}
1639to the precise coding system they used.
b8d4c8d0 1640
80070260 1641@deffn Command encode-coding-region start end coding-system &optional destination
b8d4c8d0 1642This command encodes the text from @var{start} to @var{end} according
80070260
EZ
1643to coding system @var{coding-system}. Normally, the encoded text
1644replaces the original text in the buffer, but the optional argument
1645@var{destination} can change that. If @var{destination} is a buffer,
1646the encoded text is inserted in that buffer after point (point does
1647not move); if it is @code{t}, the command returns the encoded text as
1648a unibyte string without inserting it.
1649
1650If encoded text is inserted in some buffer, this command returns the
1651length of the encoded text.
1652
1653The result of encoding is logically a sequence of bytes, but the
1654buffer remains multibyte if it was multibyte before, and any 8-bit
1655bytes are converted to their multibyte representation (@pxref{Text
1656Representations}).
77730170
EZ
1657
1658@cindex @code{undecided} coding-system, when encoding
1659Do @emph{not} use @code{undecided} for @var{coding-system} when
1660encoding text, since that may lead to unexpected results. Instead,
1661use @code{select-safe-coding-system} (@pxref{User-Chosen Coding
1662Systems, select-safe-coding-system}) to suggest a suitable encoding,
1663if there's no obvious pertinent value for @var{coding-system}.
b8d4c8d0
GM
1664@end deffn
1665
80070260 1666@defun encode-coding-string string coding-system &optional nocopy buffer
b8d4c8d0
GM
1667This function encodes the text in @var{string} according to coding
1668system @var{coding-system}. It returns a new string containing the
1669encoded text, except when @var{nocopy} is non-@code{nil}, in which
1670case the function may return @var{string} itself if the encoding
1671operation is trivial. The result of encoding is a unibyte string.
1672@end defun
1673
106e6894 1674@deffn Command decode-coding-region start end coding-system &optional destination
b8d4c8d0 1675This command decodes the text from @var{start} to @var{end} according
80070260
EZ
1676to coding system @var{coding-system}. To make explicit decoding
1677useful, the text before decoding ought to be a sequence of byte
1678values, but both multibyte and unibyte buffers are acceptable (in the
1679multibyte case, the raw byte values should be represented as eight-bit
1680characters). Normally, the decoded text replaces the original text in
1681the buffer, but the optional argument @var{destination} can change
1682that. If @var{destination} is a buffer, the decoded text is inserted
1683in that buffer after point (point does not move); if it is @code{t},
1684the command returns the decoded text as a multibyte string without
1685inserting it.
1686
1687If decoded text is inserted in some buffer, this command returns the
1688length of the decoded text.
7d2a859f
EZ
1689
1690This command puts a @code{charset} text property on the decoded text.
1691The value of the property states the character set used to decode the
1692original text.
b8d4c8d0
GM
1693@end deffn
1694
80070260
EZ
1695@defun decode-coding-string string coding-system &optional nocopy buffer
1696This function decodes the text in @var{string} according to
1697@var{coding-system}. It returns a new string containing the decoded
1698text, except when @var{nocopy} is non-@code{nil}, in which case the
1699function may return @var{string} itself if the decoding operation is
1700trivial. To make explicit decoding useful, the contents of
1701@var{string} ought to be a unibyte string with a sequence of byte
1702values, but a multibyte string is also acceptable (assuming it
1703contains 8-bit bytes in their multibyte form).
1704
1705If optional argument @var{buffer} specifies a buffer, the decoded text
1706is inserted in that buffer after point (point does not move). In this
1707case, the return value is the length of the decoded text.
7d2a859f
EZ
1708
1709@cindex @code{charset}, text property
1710This function puts a @code{charset} text property on the decoded text.
1711The value of the property states the character set used to decode the
1712original text:
1713
1714@example
1715@group
1716(decode-coding-string "Gr\374ss Gott" 'latin-1)
1717 @result{} #("Gr@"uss Gott" 0 9 (charset iso-8859-1))
1718@end group
1719@end example
b8d4c8d0
GM
1720@end defun
1721
1722@defun decode-coding-inserted-region from to filename &optional visit beg end replace
1723This function decodes the text from @var{from} to @var{to} as if
1724it were being read from file @var{filename} using @code{insert-file-contents}
1725using the rest of the arguments provided.
1726
1727The normal way to use this function is after reading text from a file
1728without decoding, if you decide you would rather have decoded it.
1729Instead of deleting the text and reading it again, this time with
1730decoding, you can call this function.
1731@end defun
1732
1733@node Terminal I/O Encoding
1734@subsection Terminal I/O Encoding
1735
1736 Emacs can decode keyboard input using a coding system, and encode
80070260
EZ
1737terminal output. This is useful for terminals that transmit or
1738display text using a particular encoding such as Latin-1. Emacs does
1739not set @code{last-coding-system-used} for encoding or decoding of
1740terminal I/O.
b8d4c8d0 1741
3f1d322f 1742@defun keyboard-coding-system &optional terminal
b8d4c8d0 1743This function returns the coding system that is in use for decoding
3f1d322f
EZ
1744keyboard input from @var{terminal}---or @code{nil} if no coding system
1745is to be used for that terminal. If @var{terminal} is omitted or
1746@code{nil}, it means the selected frame's terminal. @xref{Multiple
1747Terminals}.
b8d4c8d0
GM
1748@end defun
1749
3f1d322f
EZ
1750@deffn Command set-keyboard-coding-system coding-system &optional terminal
1751This command specifies @var{coding-system} as the coding system to use
1752for decoding keyboard input from @var{terminal}. If
1753@var{coding-system} is @code{nil}, that means do not decode keyboard
1754input. If @var{terminal} is a frame, it means that frame's terminal;
1755if it is @code{nil}, that means the currently selected frame's
1756terminal. @xref{Multiple Terminals}.
b8d4c8d0
GM
1757@end deffn
1758
106e6894 1759@defun terminal-coding-system &optional terminal
b8d4c8d0 1760This function returns the coding system that is in use for encoding
106e6894
CY
1761terminal output from @var{terminal}---or @code{nil} if the output is
1762not encoded. If @var{terminal} is a frame, it means that frame's
1763terminal; if it is @code{nil}, that means the currently selected
1764frame's terminal.
b8d4c8d0
GM
1765@end defun
1766
106e6894 1767@deffn Command set-terminal-coding-system coding-system &optional terminal
b8d4c8d0 1768This command specifies @var{coding-system} as the coding system to use
106e6894
CY
1769for encoding terminal output from @var{terminal}. If
1770@var{coding-system} is @code{nil}, terminal output is not encoded. If
1771@var{terminal} is a frame, it means that frame's terminal; if it is
1772@code{nil}, that means the currently selected frame's terminal.
b8d4c8d0
GM
1773@end deffn
1774
1775@node MS-DOS File Types
1776@subsection MS-DOS File Types
1777@cindex DOS file types
1778@cindex MS-DOS file types
1779@cindex Windows file types
1780@cindex file types on MS-DOS and Windows
1781@cindex text files and binary files
1782@cindex binary files and text files
1783
1784 On MS-DOS and Microsoft Windows, Emacs guesses the appropriate
1785end-of-line conversion for a file by looking at the file's name. This
1786feature classifies files as @dfn{text files} and @dfn{binary files}. By
1787``binary file'' we mean a file of literal byte values that are not
1788necessarily meant to be characters; Emacs does no end-of-line conversion
1789and no character code conversion for them. On the other hand, the bytes
1790in a text file are intended to represent characters; when you create a
1791new file whose name implies that it is a text file, Emacs uses DOS
1792end-of-line conversion.
1793
1794@defvar buffer-file-type
1795This variable, automatically buffer-local in each buffer, records the
1796file type of the buffer's visited file. When a buffer does not specify
1797a coding system with @code{buffer-file-coding-system}, this variable is
1798used to determine which coding system to use when writing the contents
1799of the buffer. It should be @code{nil} for text, @code{t} for binary.
1800If it is @code{t}, the coding system is @code{no-conversion}.
1801Otherwise, @code{undecided-dos} is used.
1802
1803Normally this variable is set by visiting a file; it is set to
1804@code{nil} if the file was visited without any actual conversion.
4e3b4528
SM
1805
1806Its default value is used to decide how to handle files for which
1807@code{file-name-buffer-file-type-alist} says nothing about the type:
1808If the default value is non-@code{nil}, then these files are treated as
1809binary: the coding system @code{no-conversion} is used. Otherwise,
1810nothing special is done for them---the coding system is deduced solely
1811from the file contents, in the usual Emacs fashion.
b8d4c8d0
GM
1812@end defvar
1813
1814@defopt file-name-buffer-file-type-alist
1815This variable holds an alist for recognizing text and binary files.
1816Each element has the form (@var{regexp} . @var{type}), where
1817@var{regexp} is matched against the file name, and @var{type} may be
1818@code{nil} for text, @code{t} for binary, or a function to call to
1819compute which. If it is a function, then it is called with a single
1820argument (the file name) and should return @code{t} or @code{nil}.
1821
1822When running on MS-DOS or MS-Windows, Emacs checks this alist to decide
1823which coding system to use when reading a file. For a text file,
1824@code{undecided-dos} is used. For a binary file, @code{no-conversion}
1825is used.
1826
1827If no element in this alist matches a given file name, then
4e3b4528 1828the default value of @code{buffer-file-type} says how to treat the file.
b8d4c8d0
GM
1829@end defopt
1830
1831@node Input Methods
1832@section Input Methods
1833@cindex input methods
1834
1835 @dfn{Input methods} provide convenient ways of entering non-@acronym{ASCII}
1836characters from the keyboard. Unlike coding systems, which translate
1837non-@acronym{ASCII} characters to and from encodings meant to be read by
1838programs, input methods provide human-friendly commands. (@xref{Input
1839Methods,,, emacs, The GNU Emacs Manual}, for information on how users
1840use input methods to enter text.) How to define input methods is not
1841yet documented in this manual, but here we describe how to use them.
1842
1843 Each input method has a name, which is currently a string;
1844in the future, symbols may also be usable as input method names.
1845
1846@defvar current-input-method
1847This variable holds the name of the input method now active in the
1848current buffer. (It automatically becomes local in each buffer when set
1849in any fashion.) It is @code{nil} if no input method is active in the
1850buffer now.
1851@end defvar
1852
1853@defopt default-input-method
1854This variable holds the default input method for commands that choose an
1855input method. Unlike @code{current-input-method}, this variable is
1856normally global.
1857@end defopt
1858
1859@deffn Command set-input-method input-method
1860This command activates input method @var{input-method} for the current
1861buffer. It also sets @code{default-input-method} to @var{input-method}.
1862If @var{input-method} is @code{nil}, this command deactivates any input
1863method for the current buffer.
1864@end deffn
1865
1866@defun read-input-method-name prompt &optional default inhibit-null
1867This function reads an input method name with the minibuffer, prompting
1868with @var{prompt}. If @var{default} is non-@code{nil}, that is returned
1869by default, if the user enters empty input. However, if
1870@var{inhibit-null} is non-@code{nil}, empty input signals an error.
1871
1872The returned value is a string.
1873@end defun
1874
1875@defvar input-method-alist
1876This variable defines all the supported input methods.
1877Each element defines one input method, and should have the form:
1878
1879@example
1880(@var{input-method} @var{language-env} @var{activate-func}
1881 @var{title} @var{description} @var{args}...)
1882@end example
1883
1884Here @var{input-method} is the input method name, a string;
1885@var{language-env} is another string, the name of the language
1886environment this input method is recommended for. (That serves only for
1887documentation purposes.)
1888
1889@var{activate-func} is a function to call to activate this method. The
1890@var{args}, if any, are passed as arguments to @var{activate-func}. All
1891told, the arguments to @var{activate-func} are @var{input-method} and
1892the @var{args}.
1893
1894@var{title} is a string to display in the mode line while this method is
1895active. @var{description} is a string describing this method and what
1896it is good for.
1897@end defvar
1898
1899 The fundamental interface to input methods is through the
1900variable @code{input-method-function}. @xref{Reading One Event},
1901and @ref{Invoking the Input Method}.
1902
1903@node Locales
1904@section Locales
1905@cindex locale
1906
1907 POSIX defines a concept of ``locales'' which control which language
1908to use in language-related features. These Emacs variables control
1909how Emacs interacts with these features.
1910
1911@defvar locale-coding-system
1912@cindex keyboard input decoding on X
1913This variable specifies the coding system to use for decoding system
1914error messages and---on X Window system only---keyboard input, for
1915encoding the format argument to @code{format-time-string}, and for
1916decoding the return value of @code{format-time-string}.
1917@end defvar
1918
1919@defvar system-messages-locale
1920This variable specifies the locale to use for generating system error
1921messages. Changing the locale can cause messages to come out in a
1922different language or in a different orthography. If the variable is
1923@code{nil}, the locale is specified by environment variables in the
1924usual POSIX fashion.
1925@end defvar
1926
1927@defvar system-time-locale
1928This variable specifies the locale to use for formatting time values.
1929Changing the locale can cause messages to appear according to the
1930conventions of a different language. If the variable is @code{nil}, the
1931locale is specified by environment variables in the usual POSIX fashion.
1932@end defvar
1933
1934@defun locale-info item
1935This function returns locale data @var{item} for the current POSIX
1936locale, if available. @var{item} should be one of these symbols:
1937
1938@table @code
1939@item codeset
1940Return the character set as a string (locale item @code{CODESET}).
1941
1942@item days
1943Return a 7-element vector of day names (locale items
1944@code{DAY_1} through @code{DAY_7});
1945
1946@item months
1947Return a 12-element vector of month names (locale items @code{MON_1}
1948through @code{MON_12}).
1949
1950@item paper
1951Return a list @code{(@var{width} @var{height})} for the default paper
1952size measured in millimeters (locale items @code{PAPER_WIDTH} and
1953@code{PAPER_HEIGHT}).
1954@end table
1955
1956If the system can't provide the requested information, or if
1957@var{item} is not one of those symbols, the value is @code{nil}. All
1958strings in the return value are decoded using
1959@code{locale-coding-system}. @xref{Locales,,, libc, The GNU Libc Manual},
1960for more information about locales and locale items.
1961@end defun