*** empty log message ***
[bpt/emacs.git] / lispref / text.texi
CommitLineData
73804d4b
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
9db3a582 3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001
177c0ea7 4@c Free Software Foundation, Inc.
73804d4b
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/text
f9f59935 7@node Text, Non-ASCII Characters, Markers, Top
73804d4b
RS
8@chapter Text
9@cindex text
10
11 This chapter describes the functions that deal with the text in a
61cfa852 12buffer. Most examine, insert, or delete text in the current buffer,
b6954afd
RS
13often operating at point or on text adjacent to point. Many are
14interactive. All the functions that change the text provide for undoing
15the changes (@pxref{Undo}).
73804d4b
RS
16
17 Many text-related functions operate on a region of text defined by two
18buffer positions passed in arguments named @var{start} and @var{end}.
19These arguments should be either markers (@pxref{Markers}) or numeric
20character positions (@pxref{Positions}). The order of these arguments
21does not matter; it is all right for @var{start} to be the end of the
22region and @var{end} the beginning. For example, @code{(delete-region 1
2310)} and @code{(delete-region 10 1)} are equivalent. An
24@code{args-out-of-range} error is signaled if either @var{start} or
25@var{end} is outside the accessible portion of the buffer. In an
26interactive call, point and the mark are used for these arguments.
27
28@cindex buffer contents
29 Throughout this chapter, ``text'' refers to the characters in the
b6954afd
RS
30buffer, together with their properties (when relevant). Keep in mind
31that point is always between two characters, and the cursor appears on
32the character after point.
73804d4b
RS
33
34@menu
35* Near Point:: Examining text in the vicinity of point.
36* Buffer Contents:: Examining text in a general fashion.
37* Comparing Text:: Comparing substrings of buffers.
38* Insertion:: Adding new text to a buffer.
39* Commands for Insertion:: User-level commands to insert text.
40* Deletion:: Removing text from a buffer.
41* User-Level Deletion:: User-level commands to delete text.
42* The Kill Ring:: Where removed text sometimes is saved for later use.
43* Undo:: Undoing changes to the text of a buffer.
44* Maintaining Undo:: How to enable and disable undo information.
45 How to control how much information is kept.
46* Filling:: Functions for explicit filling.
bfe721d1 47* Margins:: How to specify margins for filling commands.
e75ecfec 48* Adaptive Fill:: Adaptive Fill mode chooses a fill prefix from context.
73804d4b
RS
49* Auto Filling:: How auto-fill mode is implemented to break lines.
50* Sorting:: Functions for sorting parts of the buffer.
51* Columns:: Computing horizontal positions, and using them.
52* Indentation:: Functions to insert or adjust indentation.
53* Case Changes:: Case conversion of parts of the buffer.
54* Text Properties:: Assigning Lisp property lists to text characters.
55* Substitution:: Replacing a given character wherever it appears.
b22f3a19 56* Transposition:: Swapping two portions of a buffer.
73804d4b
RS
57* Registers:: How registers are implemented. Accessing the text or
58 position stored in a register.
b6954afd 59* Base 64:: Conversion to or from base 64 encoding.
944351c0 60* MD5 Checksum:: Compute the MD5 ``message digest''/``checksum''.
af1996b5 61* Atomic Changes:: Installing several buffer changes ``atomically''.
73804d4b
RS
62* Change Hooks:: Supplying functions to be run when text is changed.
63@end menu
64
65@node Near Point
66@section Examining Text Near Point
67
68 Many functions are provided to look at the characters around point.
69Several simple functions are described here. See also @code{looking-at}
70in @ref{Regexp Search}.
71
af1996b5
LT
72In the following four functions, ``beginning'' or ``end'' of buffer
73refers to the beginning or end of the accessible portion.
74
1911e6e5 75@defun char-after &optional position
73804d4b
RS
76This function returns the character in the current buffer at (i.e.,
77immediately after) position @var{position}. If @var{position} is out of
78range for this purpose, either before the beginning of the buffer, or at
1911e6e5
RS
79or beyond the end, then the value is @code{nil}. The default for
80@var{position} is point.
73804d4b
RS
81
82In the following example, assume that the first character in the
83buffer is @samp{@@}:
84
85@example
86@group
87(char-to-string (char-after 1))
88 @result{} "@@"
89@end group
90@end example
91@end defun
92
1911e6e5 93@defun char-before &optional position
969fe9b5
RS
94This function returns the character in the current buffer immediately
95before position @var{position}. If @var{position} is out of range for
a3a349c4 96this purpose, either at or before the beginning of the buffer, or beyond
1911e6e5
RS
97the end, then the value is @code{nil}. The default for
98@var{position} is point.
969fe9b5
RS
99@end defun
100
73804d4b
RS
101@defun following-char
102This function returns the character following point in the current
103buffer. This is similar to @code{(char-after (point))}. However, if
104point is at the end of the buffer, then @code{following-char} returns 0.
105
106Remember that point is always between characters, and the terminal
107cursor normally appears over the character following point. Therefore,
108the character returned by @code{following-char} is the character the
109cursor is over.
110
111In this example, point is between the @samp{a} and the @samp{c}.
112
113@example
114@group
115---------- Buffer: foo ----------
116Gentlemen may cry ``Pea@point{}ce! Peace!,''
117but there is no peace.
118---------- Buffer: foo ----------
119@end group
120
121@group
122(char-to-string (preceding-char))
123 @result{} "a"
124(char-to-string (following-char))
125 @result{} "c"
126@end group
127@end example
128@end defun
129
130@defun preceding-char
131This function returns the character preceding point in the current
132buffer. See above, under @code{following-char}, for an example. If
133point is at the beginning of the buffer, @code{preceding-char} returns
1340.
135@end defun
136
137@defun bobp
138This function returns @code{t} if point is at the beginning of the
139buffer. If narrowing is in effect, this means the beginning of the
140accessible portion of the text. See also @code{point-min} in
141@ref{Point}.
142@end defun
143
144@defun eobp
145This function returns @code{t} if point is at the end of the buffer.
146If narrowing is in effect, this means the end of accessible portion of
147the text. See also @code{point-max} in @xref{Point}.
148@end defun
149
150@defun bolp
151This function returns @code{t} if point is at the beginning of a line.
f9f59935 152@xref{Text Lines}. The beginning of the buffer (or of its accessible
61cfa852 153portion) always counts as the beginning of a line.
73804d4b
RS
154@end defun
155
156@defun eolp
157This function returns @code{t} if point is at the end of a line. The
158end of the buffer (or of its accessible portion) is always considered
159the end of a line.
160@end defun
161
162@node Buffer Contents
163@section Examining Buffer Contents
164
2a233172 165 This section describes functions that allow a Lisp program to
73804d4b
RS
166convert any portion of the text in the buffer into a string.
167
168@defun buffer-substring start end
169This function returns a string containing a copy of the text of the
170region defined by positions @var{start} and @var{end} in the current
171buffer. If the arguments are not positions in the accessible portion of
172the buffer, @code{buffer-substring} signals an @code{args-out-of-range}
173error.
174
175It is not necessary for @var{start} to be less than @var{end}; the
176arguments can be given in either order. But most often the smaller
177argument is written first.
178
22697dac
KH
179If the text being copied has any text properties, these are copied into
180the string along with the characters they belong to. @xref{Text
181Properties}. However, overlays (@pxref{Overlays}) in the buffer and
182their properties are ignored, not copied.
183
73804d4b
RS
184@example
185@group
186---------- Buffer: foo ----------
187This is the contents of buffer foo
188
189---------- Buffer: foo ----------
190@end group
191
192@group
193(buffer-substring 1 10)
194@result{} "This is t"
195@end group
196@group
197(buffer-substring (point-max) 10)
198@result{} "he contents of buffer foo
199"
200@end group
201@end example
202@end defun
203
371f8cd0 204@defun buffer-substring-no-properties start end
22697dac
KH
205This is like @code{buffer-substring}, except that it does not copy text
206properties, just the characters themselves. @xref{Text Properties}.
22697dac
KH
207@end defun
208
73804d4b 209@defun buffer-string
f9f59935 210This function returns the contents of the entire accessible portion of
a9f0a989
RS
211the current buffer as a string. It is equivalent to
212
213@example
214(buffer-substring (point-min) (point-max))
215@end example
73804d4b
RS
216
217@example
218@group
219---------- Buffer: foo ----------
220This is the contents of buffer foo
221
222---------- Buffer: foo ----------
223
224(buffer-string)
225 @result{} "This is the contents of buffer foo
226"
227@end group
228@end example
229@end defun
230
74eee906
RS
231@tindex current-word
232@defun current-word &optional strict really-word
233This function returns the symbol (or word) at or near point, as a string.
234The return value includes no text properties.
235
af1996b5
LT
236If the optional argument @var{really-word} is non-@code{nil}, it finds a
237word; otherwise, it finds a symbol (which includes both word
238characters and symbol constituent characters).
74eee906
RS
239
240If the optional argument @var{strict} is non-@code{nil}, then point
241must be in or next to the symbol or word---if no symbol or word is
242there, the function returns @code{nil}. Otherwise, a nearby symbol or
243word on the same line is acceptable.
244@end defun
245
f9f59935
RS
246@defun thing-at-point thing
247Return the @var{thing} around or next to point, as a string.
248
249The argument @var{thing} is a symbol which specifies a kind of syntactic
250entity. Possibilities include @code{symbol}, @code{list}, @code{sexp},
251@code{defun}, @code{filename}, @code{url}, @code{word}, @code{sentence},
252@code{whitespace}, @code{line}, @code{page}, and others.
253
254@example
255---------- Buffer: foo ----------
256Gentlemen may cry ``Pea@point{}ce! Peace!,''
257but there is no peace.
258---------- Buffer: foo ----------
259
260(thing-at-point 'word)
261 @result{} "Peace"
262(thing-at-point 'line)
263 @result{} "Gentlemen may cry ``Peace! Peace!,''\n"
264(thing-at-point 'whitespace)
265 @result{} nil
266@end example
267@end defun
268
73804d4b
RS
269@node Comparing Text
270@section Comparing Text
271@cindex comparing buffer text
272
273 This function lets you compare portions of the text in a buffer, without
274copying them into strings first.
275
276@defun compare-buffer-substrings buffer1 start1 end1 buffer2 start2 end2
277This function lets you compare two substrings of the same buffer or two
278different buffers. The first three arguments specify one substring,
af1996b5
LT
279giving a buffer (or a buffer name) and two positions within the
280buffer. The last three arguments specify the other substring in the
281same way. You can use @code{nil} for @var{buffer1}, @var{buffer2}, or
282both to stand for the current buffer.
73804d4b
RS
283
284The value is negative if the first substring is less, positive if the
285first is greater, and zero if they are equal. The absolute value of
286the result is one plus the index of the first differing characters
287within the substrings.
288
289This function ignores case when comparing characters
bfe721d1
KH
290if @code{case-fold-search} is non-@code{nil}. It always ignores
291text properties.
73804d4b
RS
292
293Suppose the current buffer contains the text @samp{foobarbar
294haha!rara!}; then in this example the two substrings are @samp{rbar }
295and @samp{rara!}. The value is 2 because the first substring is greater
296at the second character.
297
298@example
8241495d 299(compare-buffer-substrings nil 6 11 nil 16 21)
73804d4b
RS
300 @result{} 2
301@end example
73804d4b
RS
302@end defun
303
304@node Insertion
bfe721d1 305@section Inserting Text
73804d4b
RS
306@cindex insertion of text
307@cindex text insertion
308
969fe9b5
RS
309@cindex insertion before point
310@cindex before point, insertion
73804d4b
RS
311 @dfn{Insertion} means adding new text to a buffer. The inserted text
312goes at point---between the character before point and the character
969fe9b5
RS
313after point. Some insertion functions leave point before the inserted
314text, while other functions leave it after. We call the former
315insertion @dfn{after point} and the latter insertion @dfn{before point}.
73804d4b
RS
316
317 Insertion relocates markers that point at positions after the
318insertion point, so that they stay with the surrounding text
319(@pxref{Markers}). When a marker points at the place of insertion,
969fe9b5
RS
320insertion may or may not relocate the marker, depending on the marker's
321insertion type (@pxref{Marker Insertion Types}). Certain special
322functions such as @code{insert-before-markers} relocate all such markers
323to point after the inserted text, regardless of the markers' insertion
324type.
73804d4b
RS
325
326 Insertion functions signal an error if the current buffer is
2468d0c0 327read-only or if they insert within read-only text.
73804d4b 328
bfe721d1
KH
329 These functions copy text characters from strings and buffers along
330with their properties. The inserted characters have exactly the same
331properties as the characters they were copied from. By contrast,
332characters specified as separate arguments, not part of a string or
333buffer, inherit their text properties from the neighboring text.
334
a9f0a989
RS
335 The insertion functions convert text from unibyte to multibyte in
336order to insert in a multibyte buffer, and vice versa---if the text
337comes from a string or from a buffer. However, they do not convert
338unibyte character codes 128 through 255 to multibyte characters, not
339even if the current buffer is a multibyte buffer. @xref{Converting
340Representations}.
341
73804d4b
RS
342@defun insert &rest args
343This function inserts the strings and/or characters @var{args} into the
61cfa852
RS
344current buffer, at point, moving point forward. In other words, it
345inserts the text before point. An error is signaled unless all
346@var{args} are either strings or characters. The value is @code{nil}.
73804d4b
RS
347@end defun
348
349@defun insert-before-markers &rest args
350This function inserts the strings and/or characters @var{args} into the
351current buffer, at point, moving point forward. An error is signaled
352unless all @var{args} are either strings or characters. The value is
353@code{nil}.
354
355This function is unlike the other insertion functions in that it
356relocates markers initially pointing at the insertion point, to point
2a233172
RS
357after the inserted text. If an overlay begins at the insertion point,
358the inserted text falls outside the overlay; if a nonempty overlay
359ends at the insertion point, the inserted text falls inside that
360overlay.
73804d4b
RS
361@end defun
362
9e3561d2 363@defun insert-char character count &optional inherit
73804d4b 364This function inserts @var{count} instances of @var{character} into the
969fe9b5 365current buffer before point. The argument @var{count} should be a
af1996b5 366number, and @var{character} must be a character. The value is @code{nil}.
33acbad2 367
a9f0a989
RS
368This function does not convert unibyte character codes 128 through 255
369to multibyte characters, not even if the current buffer is a multibyte
370buffer. @xref{Converting Representations}.
371
33acbad2
RS
372If @var{inherit} is non-@code{nil}, then the inserted characters inherit
373sticky text properties from the two characters before and after the
374insertion point. @xref{Sticky Properties}.
73804d4b
RS
375@end defun
376
377@defun insert-buffer-substring from-buffer-or-name &optional start end
378This function inserts a portion of buffer @var{from-buffer-or-name}
379(which must already exist) into the current buffer before point. The
af1996b5 380text inserted is the region between @var{start} and @var{end}. (These
73804d4b
RS
381arguments default to the beginning and end of the accessible portion of
382that buffer.) This function returns @code{nil}.
383
384In this example, the form is executed with buffer @samp{bar} as the
385current buffer. We assume that buffer @samp{bar} is initially empty.
386
387@example
388@group
389---------- Buffer: foo ----------
390We hold these truths to be self-evident, that all
391---------- Buffer: foo ----------
392@end group
393
394@group
395(insert-buffer-substring "foo" 1 20)
396 @result{} nil
397
398---------- Buffer: bar ----------
61cfa852 399We hold these truth@point{}
73804d4b
RS
400---------- Buffer: bar ----------
401@end group
402@end example
d73eac4d
RS
403@end defun
404
405@defun insert-buffer-substring-no-properties from-buffer-or-name &optional start end
406This is like @code{insert-buffer-substring} except that it does not
407copy any text properties.
73804d4b
RS
408@end defun
409
410 @xref{Sticky Properties}, for other insertion functions that inherit
61cfa852 411text properties from the nearby text in addition to inserting it.
33acbad2
RS
412Whitespace inserted by indentation functions also inherits text
413properties.
73804d4b
RS
414
415@node Commands for Insertion
416@section User-Level Insertion Commands
417
418 This section describes higher-level commands for inserting text,
419commands intended primarily for the user but useful also in Lisp
420programs.
421
422@deffn Command insert-buffer from-buffer-or-name
af1996b5
LT
423This command inserts the entire accessible contents of
424@var{from-buffer-or-name} (which must exist) into the current buffer
425after point. It leaves the mark after the inserted text. The value
426is @code{nil}.
73804d4b
RS
427@end deffn
428
429@deffn Command self-insert-command count
430@cindex character insertion
431@cindex self-insertion
61cfa852
RS
432This command inserts the last character typed; it does so @var{count}
433times, before point, and returns @code{nil}. Most printing characters
434are bound to this command. In routine use, @code{self-insert-command}
435is the most frequently called function in Emacs, but programs rarely use
436it except to install it on a keymap.
73804d4b
RS
437
438In an interactive call, @var{count} is the numeric prefix argument.
439
22697dac 440This command calls @code{auto-fill-function} whenever that is
ca3be36e
DL
441non-@code{nil} and the character inserted is in the table
442@code{auto-fill-chars} (@pxref{Auto Filling}).
73804d4b
RS
443
444@c Cross refs reworded to prevent overfull hbox. --rjc 15mar92
22697dac 445This command performs abbrev expansion if Abbrev mode is enabled and
73804d4b
RS
446the inserted character does not have word-constituent
447syntax. (@xref{Abbrevs}, and @ref{Syntax Class Table}.)
448
22697dac
KH
449This is also responsible for calling @code{blink-paren-function} when
450the inserted character has close parenthesis syntax (@pxref{Blinking}).
a40d4712
PR
451
452Do not try substituting your own definition of
453@code{self-insert-command} for the standard one. The editor command
454loop handles this function specially.
73804d4b
RS
455@end deffn
456
177c0ea7 457@deffn Command newline &optional number-of-newlines
73804d4b
RS
458This command inserts newlines into the current buffer before point.
459If @var{number-of-newlines} is supplied, that many newline characters
460are inserted.
461
462@cindex newline and Auto Fill mode
61cfa852
RS
463This function calls @code{auto-fill-function} if the current column
464number is greater than the value of @code{fill-column} and
465@var{number-of-newlines} is @code{nil}. Typically what
466@code{auto-fill-function} does is insert a newline; thus, the overall
467result in this case is to insert two newlines at different places: one
468at point, and another earlier in the line. @code{newline} does not
469auto-fill if @var{number-of-newlines} is non-@code{nil}.
73804d4b 470
bfe721d1
KH
471This command indents to the left margin if that is not zero.
472@xref{Margins}.
473
73804d4b
RS
474The value returned is @code{nil}. In an interactive call, @var{count}
475is the numeric prefix argument.
476@end deffn
477
478@deffn Command split-line
479This command splits the current line, moving the portion of the line
61cfa852 480after point down vertically so that it is on the next line directly
73804d4b
RS
481below where it was before. Whitespace is inserted as needed at the
482beginning of the lower line, using the @code{indent-to} function.
483@code{split-line} returns the position of point.
484
485Programs hardly ever use this function.
486@end deffn
487
488@defvar overwrite-mode
1911e6e5
RS
489This variable controls whether overwrite mode is in effect. The value
490should be @code{overwrite-mode-textual}, @code{overwrite-mode-binary},
491or @code{nil}. @code{overwrite-mode-textual} specifies textual
492overwrite mode (treats newlines and tabs specially), and
493@code{overwrite-mode-binary} specifies binary overwrite mode (treats
494newlines and tabs like any other characters).
73804d4b
RS
495@end defvar
496
497@node Deletion
bfe721d1 498@section Deleting Text
73804d4b
RS
499
500@cindex deletion vs killing
501 Deletion means removing part of the text in a buffer, without saving
502it in the kill ring (@pxref{The Kill Ring}). Deleted text can't be
503yanked, but can be reinserted using the undo mechanism (@pxref{Undo}).
61cfa852
RS
504Some deletion functions do save text in the kill ring in some special
505cases.
73804d4b 506
af1996b5 507 All of the deletion functions operate on the current buffer.
73804d4b 508
1911e6e5 509@deffn Command erase-buffer
af1996b5
LT
510This function deletes the entire text of the current buffer
511(@emph{not} just the accessible portion), leaving it
73804d4b 512empty. If the buffer is read-only, it signals a @code{buffer-read-only}
2468d0c0
DL
513error; if some of the text in it is read-only, it signals a
514@code{text-read-only} error. Otherwise, it deletes the text without
515asking for any confirmation. It returns @code{nil}.
8241495d 516
73804d4b
RS
517Normally, deleting a large amount of text from a buffer inhibits further
518auto-saving of that buffer ``because it has shrunk''. However,
519@code{erase-buffer} does not do this, the idea being that the future
520text is not really related to the former text, and its size should not
521be compared with that of the former text.
1911e6e5 522@end deffn
73804d4b
RS
523
524@deffn Command delete-region start end
1dffc5db
RS
525This command deletes the text between positions @var{start} and
526@var{end} in the current buffer, and returns @code{nil}. If point was
527inside the deleted region, its value afterward is @var{start}.
68002b5f 528Otherwise, point relocates with the surrounding text, as markers do.
73804d4b
RS
529@end deffn
530
1dffc5db
RS
531@defun delete-and-extract-region start end
532@tindex delete-and-extract-region
533This function deletes the text between positions @var{start} and
534@var{end} in the current buffer, and returns a string containing the
535text just deleted.
536
537If point was inside the deleted region, its value afterward is
538@var{start}. Otherwise, point relocates with the surrounding text, as
539markers do.
540@end defun
541
73804d4b
RS
542@deffn Command delete-char count &optional killp
543This command deletes @var{count} characters directly after point, or
544before point if @var{count} is negative. If @var{killp} is
545non-@code{nil}, then it saves the deleted characters in the kill ring.
546
547In an interactive call, @var{count} is the numeric prefix argument, and
548@var{killp} is the unprocessed prefix argument. Therefore, if a prefix
549argument is supplied, the text is saved in the kill ring. If no prefix
550argument is supplied, then one character is deleted, but not saved in
551the kill ring.
552
553The value returned is always @code{nil}.
554@end deffn
555
556@deffn Command delete-backward-char count &optional killp
557@cindex delete previous char
558This command deletes @var{count} characters directly before point, or
559after point if @var{count} is negative. If @var{killp} is
560non-@code{nil}, then it saves the deleted characters in the kill ring.
561
562In an interactive call, @var{count} is the numeric prefix argument, and
563@var{killp} is the unprocessed prefix argument. Therefore, if a prefix
564argument is supplied, the text is saved in the kill ring. If no prefix
565argument is supplied, then one character is deleted, but not saved in
566the kill ring.
567
568The value returned is always @code{nil}.
569@end deffn
570
571@deffn Command backward-delete-char-untabify count &optional killp
572@cindex tab deletion
573This command deletes @var{count} characters backward, changing tabs
574into spaces. When the next character to be deleted is a tab, it is
575first replaced with the proper number of spaces to preserve alignment
576and then one of those spaces is deleted instead of the tab. If
577@var{killp} is non-@code{nil}, then the command saves the deleted
578characters in the kill ring.
579
580Conversion of tabs to spaces happens only if @var{count} is positive.
581If it is negative, exactly @minus{}@var{count} characters after point
582are deleted.
583
584In an interactive call, @var{count} is the numeric prefix argument, and
585@var{killp} is the unprocessed prefix argument. Therefore, if a prefix
586argument is supplied, the text is saved in the kill ring. If no prefix
587argument is supplied, then one character is deleted, but not saved in
588the kill ring.
589
590The value returned is always @code{nil}.
591@end deffn
592
969fe9b5
RS
593@defopt backward-delete-char-untabify-method
594This option specifies how @code{backward-delete-char-untabify} should
595deal with whitespace. Possible values include @code{untabify}, the
596default, meaning convert a tab to many spaces and delete one;
af1996b5
LT
597@code{hungry}, meaning delete all tabs and spaces before point with
598one command; @code{all} meaning delete all tabs, spaces and newlines
599before point, and @code{nil}, meaning do nothing special for
969fe9b5
RS
600whitespace characters.
601@end defopt
602
73804d4b
RS
603@node User-Level Deletion
604@section User-Level Deletion Commands
605
606 This section describes higher-level commands for deleting text,
607commands intended primarily for the user but useful also in Lisp
608programs.
609
af1996b5 610@deffn Command delete-horizontal-space &optional backward-only
73804d4b
RS
611@cindex deleting whitespace
612This function deletes all spaces and tabs around point. It returns
613@code{nil}.
614
af1996b5
LT
615If @var{backward-only} is non-@code{nil}, the function deletes
616spaces and tabs before point, but not after point.
617
73804d4b
RS
618In the following examples, we call @code{delete-horizontal-space} four
619times, once on each line, with point between the second and third
61cfa852 620characters on the line each time.
73804d4b
RS
621
622@example
623@group
624---------- Buffer: foo ----------
625I @point{}thought
626I @point{} thought
627We@point{} thought
628Yo@point{}u thought
629---------- Buffer: foo ----------
630@end group
631
632@group
633(delete-horizontal-space) ; @r{Four times.}
634 @result{} nil
635
636---------- Buffer: foo ----------
637Ithought
638Ithought
639Wethought
640You thought
641---------- Buffer: foo ----------
642@end group
643@end example
644@end deffn
645
177c0ea7 646@deffn Command delete-indentation &optional join-following-p
73804d4b
RS
647This function joins the line point is on to the previous line, deleting
648any whitespace at the join and in some cases replacing it with one
649space. If @var{join-following-p} is non-@code{nil},
650@code{delete-indentation} joins this line to the following line
a9f0a989 651instead. The function returns @code{nil}.
73804d4b
RS
652
653If there is a fill prefix, and the second of the lines being joined
654starts with the prefix, then @code{delete-indentation} deletes the
bfe721d1 655fill prefix before joining the lines. @xref{Margins}.
73804d4b
RS
656
657In the example below, point is located on the line starting
658@samp{events}, and it makes no difference if there are trailing spaces
659in the preceding line.
660
661@smallexample
b22f3a19 662@group
73804d4b
RS
663---------- Buffer: foo ----------
664When in the course of human
665@point{} events, it becomes necessary
666---------- Buffer: foo ----------
b22f3a19 667@end group
73804d4b
RS
668
669(delete-indentation)
670 @result{} nil
671
b22f3a19 672@group
73804d4b
RS
673---------- Buffer: foo ----------
674When in the course of human@point{} events, it becomes necessary
675---------- Buffer: foo ----------
b22f3a19 676@end group
73804d4b
RS
677@end smallexample
678
679After the lines are joined, the function @code{fixup-whitespace} is
680responsible for deciding whether to leave a space at the junction.
681@end deffn
682
af1996b5
LT
683@deffn Command fixup-whitespace
684This function replaces all the horizontal whitespace surrounding point
685with either one space or no space, according to the context. It
686returns @code{nil}.
73804d4b
RS
687
688At the beginning or end of a line, the appropriate amount of space is
689none. Before a character with close parenthesis syntax, or after a
690character with open parenthesis or expression-prefix syntax, no space is
691also appropriate. Otherwise, one space is appropriate. @xref{Syntax
692Class Table}.
693
694In the example below, @code{fixup-whitespace} is called the first time
61cfa852
RS
695with point before the word @samp{spaces} in the first line. For the
696second invocation, point is directly after the @samp{(}.
73804d4b
RS
697
698@smallexample
699@group
700---------- Buffer: foo ----------
701This has too many @point{}spaces
702This has too many spaces at the start of (@point{} this list)
703---------- Buffer: foo ----------
704@end group
705
706@group
707(fixup-whitespace)
708 @result{} nil
709(fixup-whitespace)
710 @result{} nil
711@end group
712
713@group
714---------- Buffer: foo ----------
715This has too many spaces
716This has too many spaces at the start of (this list)
717---------- Buffer: foo ----------
718@end group
719@end smallexample
af1996b5 720@end deffn
73804d4b
RS
721
722@deffn Command just-one-space
723@comment !!SourceFile simple.el
724This command replaces any spaces and tabs around point with a single
725space. It returns @code{nil}.
726@end deffn
727
728@deffn Command delete-blank-lines
729This function deletes blank lines surrounding point. If point is on a
730blank line with one or more blank lines before or after it, then all but
731one of them are deleted. If point is on an isolated blank line, then it
732is deleted. If point is on a nonblank line, the command deletes all
af1996b5 733blank lines immediately following it.
73804d4b
RS
734
735A blank line is defined as a line containing only tabs and spaces.
736
737@code{delete-blank-lines} returns @code{nil}.
738@end deffn
739
740@node The Kill Ring
741@section The Kill Ring
742@cindex kill ring
743
969fe9b5 744 @dfn{Kill functions} delete text like the deletion functions, but save
73804d4b
RS
745it so that the user can reinsert it by @dfn{yanking}. Most of these
746functions have @samp{kill-} in their name. By contrast, the functions
747whose names start with @samp{delete-} normally do not save text for
748yanking (though they can still be undone); these are ``deletion''
749functions.
750
751 Most of the kill commands are primarily for interactive use, and are
752not described here. What we do describe are the functions provided for
753use in writing such commands. You can use these functions to write
61cfa852 754commands for killing text. When you need to delete text for internal
73804d4b
RS
755purposes within a Lisp function, you should normally use deletion
756functions, so as not to disturb the kill ring contents.
757@xref{Deletion}.
758
759 Killed text is saved for later yanking in the @dfn{kill ring}. This
61cfa852
RS
760is a list that holds a number of recent kills, not just the last text
761kill. We call this a ``ring'' because yanking treats it as having
762elements in a cyclic order. The list is kept in the variable
763@code{kill-ring}, and can be operated on with the usual functions for
764lists; there are also specialized functions, described in this section,
765that treat it as a ring.
73804d4b
RS
766
767 Some people think this use of the word ``kill'' is unfortunate, since
61cfa852 768it refers to operations that specifically @emph{do not} destroy the
73804d4b
RS
769entities ``killed''. This is in sharp contrast to ordinary life, in
770which death is permanent and ``killed'' entities do not come back to
771life. Therefore, other metaphors have been proposed. For example, the
772term ``cut ring'' makes sense to people who, in pre-computer days, used
773scissors and paste to cut up and rearrange manuscripts. However, it
774would be difficult to change the terminology now.
775
776@menu
777* Kill Ring Concepts:: What text looks like in the kill ring.
778* Kill Functions:: Functions that kill text.
d73eac4d 779* Yanking:: How yanking is done.
73804d4b 780* Yank Commands:: Commands that access the kill ring.
61cfa852 781* Low-Level Kill Ring:: Functions and variables for kill ring access.
af1996b5 782* Internals of Kill Ring:: Variables that hold kill ring data.
73804d4b
RS
783@end menu
784
785@node Kill Ring Concepts
786@comment node-name, next, previous, up
787@subsection Kill Ring Concepts
788
789 The kill ring records killed text as strings in a list, most recent
790first. A short kill ring, for example, might look like this:
791
792@example
793("some text" "a different piece of text" "even older text")
794@end example
795
796@noindent
797When the list reaches @code{kill-ring-max} entries in length, adding a
798new entry automatically deletes the last entry.
799
800 When kill commands are interwoven with other commands, each kill
801command makes a new entry in the kill ring. Multiple kill commands in
af1996b5 802succession build up a single kill ring entry, which would be yanked as a
a9f0a989
RS
803unit; the second and subsequent consecutive kill commands add text to
804the entry made by the first one.
73804d4b
RS
805
806 For yanking, one entry in the kill ring is designated the ``front'' of
807the ring. Some yank commands ``rotate'' the ring by designating a
808different element as the ``front.'' But this virtual rotation doesn't
809change the list itself---the most recent entry always comes first in the
810list.
811
812@node Kill Functions
813@comment node-name, next, previous, up
814@subsection Functions for Killing
815
816 @code{kill-region} is the usual subroutine for killing text. Any
817command that calls this function is a ``kill command'' (and should
818probably have @samp{kill} in its name). @code{kill-region} puts the
819newly killed text in a new element at the beginning of the kill ring or
f9f59935
RS
820adds it to the most recent element. It determines automatically (using
821@code{last-command}) whether the previous command was a kill command,
61cfa852 822and if so appends the killed text to the most recent entry.
73804d4b 823
d73eac4d 824@deffn Command kill-region start end &optional yank-handler
73804d4b 825This function kills the text in the region defined by @var{start} and
bfe721d1
KH
826@var{end}. The text is deleted but saved in the kill ring, along with
827its text properties. The value is always @code{nil}.
73804d4b
RS
828
829In an interactive call, @var{start} and @var{end} are point and
830the mark.
831
832@c Emacs 19 feature
2468d0c0
DL
833If the buffer or text is read-only, @code{kill-region} modifies the kill
834ring just the same, then signals an error without modifying the buffer.
835This is convenient because it lets the user use a series of kill
836commands to copy text from a read-only buffer into the kill ring.
d73eac4d
RS
837
838If @var{yank-handler} is non-@code{nil}, this puts that value onto
af1996b5
LT
839the string of killed text, as a @code{yank-handler} text property.
840@xref{Yanking}. Note that if @var{yank-handler} is @code{nil}, any
841@code{yank-handler} properties present on the killed text are copied
842onto the kill ring, like other text properties.
73804d4b
RS
843@end deffn
844
1911e6e5 845@defopt kill-read-only-ok
2468d0c0
DL
846If this option is non-@code{nil}, @code{kill-region} does not signal an
847error if the buffer or text is read-only. Instead, it simply returns,
848updating the kill ring but not changing the buffer.
1911e6e5
RS
849@end defopt
850
73804d4b
RS
851@deffn Command copy-region-as-kill start end
852This command saves the region defined by @var{start} and @var{end} on
bfe721d1 853the kill ring (including text properties), but does not delete the text
af1996b5 854from the buffer. It returns @code{nil}.
73804d4b 855
22697dac
KH
856The command does not set @code{this-command} to @code{kill-region}, so a
857subsequent kill command does not append to the same kill ring entry.
858
73804d4b 859Don't call @code{copy-region-as-kill} in Lisp programs unless you aim to
f9f59935
RS
860support Emacs 18. For newer Emacs versions, it is better to use
861@code{kill-new} or @code{kill-append} instead. @xref{Low-Level Kill
862Ring}.
73804d4b
RS
863@end deffn
864
d73eac4d
RS
865@node Yanking
866@subsection Yanking
867
868 Yanking means inserting text from the kill ring, but it does
869not insert the text blindly. Yank commands and some other commands
870use @code{insert-for-yank} to perform special processing on the
871text that they copy into the buffer.
872
873@defun insert-for-yank string
874This function normally works like @code{insert} except that it doesn't
875insert the text properties in the @code{yank-excluded-properties}
af1996b5
LT
876list. However, if any part of @var{string} has a non-@code{nil}
877@code{yank-handler} text property, that property can do various
878special processing on that part of the text being inserted.
d73eac4d
RS
879@end defun
880
881@defun insert-buffer-substring-as-yank buf &optional start end
882This function resembles @code{insert-buffer-substring} except that it
883doesn't insert the text properties in the
884@code{yank-excluded-properties} list.
885@end defun
886
af1996b5
LT
887 You can put a @code{yank-handler} text property on all or part of
888the text to control how it will be inserted if it is yanked. The
889@code{insert-for-yank} function looks for that property. The property
890value must be a list of one to four elements, with the following
891format (where elements after the first may be omitted):
d73eac4d
RS
892
893@example
894(@var{function} @var{param} @var{noexclude} @var{undo})
895@end example
896
897 Here is what the elements do:
898
899@table @var
900@item function
af1996b5 901When @var{function} is present and non-@code{nil}, it is called instead of
d73eac4d
RS
902@code{insert} to insert the string. @var{function} takes one
903argument---the string to insert.
904
905@item param
906If @var{param} is present and non-@code{nil}, it replaces @var{string}
af1996b5
LT
907(or the part of @var{string} being processed) as the object passed to
908@var{function} (or @code{insert}); for example, if @var{function} is
909@code{yank-rectangle}, @var{param} should be a list of strings to
910insert as a rectangle.
d73eac4d
RS
911
912@item noexclude
913If @var{noexclude} is present and non-@code{nil}, the normal removal of the
914yank-excluded-properties is not performed; instead @var{function} is
915responsible for removing those properties. This may be necessary
916if @var{function} adjusts point before or after inserting the object.
917
918@item undo
af1996b5 919If @var{undo} is present and non-@code{nil}, it is a function that will be
d73eac4d
RS
920called by @code{yank-pop} to undo the insertion of the current object.
921It is called with two arguments, the start and end of the current
922region. @var{function} can set @code{yank-undo-function} to override
923the @var{undo} value.
924@end table
925
73804d4b
RS
926@node Yank Commands
927@comment node-name, next, previous, up
928@subsection Functions for Yanking
929
930 @dfn{Yanking} means reinserting an entry of previously killed text
bfe721d1 931from the kill ring. The text properties are copied too.
73804d4b
RS
932
933@deffn Command yank &optional arg
934@cindex inserting killed text
af1996b5 935This command inserts before point the text at the front of the
73804d4b
RS
936kill ring. It positions the mark at the beginning of that text, and
937point at the end.
938
af1996b5
LT
939If @var{arg} is a non-@code{nil} list (which occurs interactively when
940the user types @kbd{C-u} with no digits), then @code{yank} inserts the
941text as described above, but puts point before the yanked text and
942puts the mark after it.
73804d4b 943
af1996b5
LT
944If @var{arg} is a number, then @code{yank} inserts the @var{arg}th
945most recently killed text---the @var{arg}th element of the kill ring
946list, counted cyclically from the front, which is considered the
947first element for this purpose.
73804d4b 948
af1996b5
LT
949@code{yank} does not alter the contents of the kill ring, unless it
950used text provided by another program, in which case it pushes that text
951onto the kill ring. However if @var{arg} is an integer different from
952one, it rotates the kill ring to place the yanked string at the front.
953
954@code{yank} returns @code{nil}.
73804d4b
RS
955@end deffn
956
af1996b5 957@deffn Command yank-pop &optional arg
73804d4b
RS
958This command replaces the just-yanked entry from the kill ring with a
959different entry from the kill ring.
960
961This is allowed only immediately after a @code{yank} or another
962@code{yank-pop}. At such a time, the region contains text that was just
963inserted by yanking. @code{yank-pop} deletes that text and inserts in
964its place a different piece of killed text. It does not add the deleted
965text to the kill ring, since it is already in the kill ring somewhere.
af1996b5
LT
966It does however rotate the kill ring to place the newly yanked string at
967the front.
73804d4b
RS
968
969If @var{arg} is @code{nil}, then the replacement text is the previous
970element of the kill ring. If @var{arg} is numeric, the replacement is
971the @var{arg}th previous kill. If @var{arg} is negative, a more recent
972kill is the replacement.
973
974The sequence of kills in the kill ring wraps around, so that after the
975oldest one comes the newest one, and before the newest one goes the
976oldest.
977
a9f0a989 978The return value is always @code{nil}.
73804d4b
RS
979@end deffn
980
d73eac4d
RS
981@defvar yank-undo-function
982If this variable is non-@code{nil}, the function @code{yank-pop} uses
983its value instead of @code{delete-region} to delete the text
984inserted by the previous @code{yank} or
af1996b5
LT
985@code{yank-pop} command. The value must be a function of two
986arguments, the start and end of the current region.
d73eac4d
RS
987
988The function @code{insert-for-yank} automatically sets this variable
989according to the @var{undo} element of the @code{yank-handler}
990text property, if there is one.
991@end defvar
992
61cfa852
RS
993@node Low-Level Kill Ring
994@subsection Low-Level Kill Ring
73804d4b 995
969fe9b5
RS
996 These functions and variables provide access to the kill ring at a
997lower level, but still convenient for use in Lisp programs, because they
998take care of interaction with window system selections
999(@pxref{Window System Selections}).
73804d4b
RS
1000
1001@defun current-kill n &optional do-not-move
a9f0a989
RS
1002The function @code{current-kill} rotates the yanking pointer, which
1003designates the ``front'' of the kill ring, by @var{n} places (from newer
61cfa852 1004kills to older ones), and returns the text at that place in the ring.
73804d4b
RS
1005
1006If the optional second argument @var{do-not-move} is non-@code{nil},
1007then @code{current-kill} doesn't alter the yanking pointer; it just
61cfa852 1008returns the @var{n}th kill, counting from the current yanking pointer.
73804d4b
RS
1009
1010If @var{n} is zero, indicating a request for the latest kill,
1011@code{current-kill} calls the value of
af1996b5
LT
1012@code{interprogram-paste-function} (documented below) before
1013consulting the kill ring. If that value is a function and calling it
1014returns a string, @code{current-kill} pushes that string onto the kill
1015ring and returns it. It also sets the yanking pointer to point to
1016that new entry, regardless of the value of @var{do-not-move}.
1017Otherwise, @code{current-kill} does not treat a zero value for @var{n}
1018specially: it returns the entry pointed at by the yanking pointer and
1019does not move the yanking pointer.
1020@end defun
1021
1022@defun kill-new string &optional replace yank-handler
1023This function pushes the text @var{string} onto the kill ring and
1024makes the yanking pointer point to it. It discards the oldest entry
1025if appropriate. It also invokes the value of
73804d4b 1026@code{interprogram-cut-function} (see below).
d73eac4d 1027
af1996b5
LT
1028If @var{replace} is non-@code{nil}, then @code{kill-new} replaces the
1029first element of the kill ring with @var{string}, rather than pushing
1030@var{string} onto the kill ring.
1031
d73eac4d
RS
1032If @var{yank-handler} is non-@code{nil}, this puts that value onto
1033the string of killed text, as a @code{yank-handler} property.
af1996b5
LT
1034@xref{Yanking}. Note that if @var{yank-handler} is @code{nil}, then
1035@code{kill-new} copies any @code{yank-handler} properties present on
1036@var{string} onto the kill ring, as it does with other text properties.
73804d4b
RS
1037@end defun
1038
d73eac4d 1039@defun kill-append string before-p &optional yank-handler
73804d4b 1040This function appends the text @var{string} to the first entry in the
af1996b5
LT
1041kill ring and makes the yanking pointer point to the combined entry.
1042Normally @var{string} goes at the end of the entry, but if
73804d4b 1043@var{before-p} is non-@code{nil}, it goes at the beginning. This
af1996b5
LT
1044function also invokes the value of @code{interprogram-cut-function}
1045(see below). This handles @var{yank-handler} just like
1046@code{kill-new}, except that if @var{yank-handler} is different from
1047the @code{yank-handler} property of the first entry of the kill ring,
1048@code{kill-append} pushes the concatenated string onto the kill ring,
1049instead of replacing the original first entry with it.
73804d4b
RS
1050@end defun
1051
1052@defvar interprogram-paste-function
1053This variable provides a way of transferring killed text from other
1054programs, when you are using a window system. Its value should be
1055@code{nil} or a function of no arguments.
1056
1057If the value is a function, @code{current-kill} calls it to get the
1058``most recent kill''. If the function returns a non-@code{nil} value,
1059then that value is used as the ``most recent kill''. If it returns
af1996b5 1060@code{nil}, then the front of the kill ring is used.
73804d4b 1061
969fe9b5
RS
1062The normal use of this hook is to get the window system's primary
1063selection as the most recent kill, even if the selection belongs to
1064another application. @xref{Window System Selections}.
73804d4b
RS
1065@end defvar
1066
1067@defvar interprogram-cut-function
61cfa852
RS
1068This variable provides a way of communicating killed text to other
1069programs, when you are using a window system. Its value should be
af1996b5 1070@code{nil} or a function of one required and one optional argument.
73804d4b
RS
1071
1072If the value is a function, @code{kill-new} and @code{kill-append} call
af1996b5
LT
1073it with the new first element of the kill ring as the first argument.
1074The second, optional, argument has the same meaning as the @var{push}
1075argument to @code{x-set-cut-buffer} (@pxref{Definition of
1076x-set-cut-buffer}) and only affects the second and later cut buffers.
73804d4b 1077
969fe9b5 1078The normal use of this hook is to set the window system's primary
af1996b5
LT
1079selection (and first cut buffer) from the newly killed text.
1080@xref{Window System Selections}.
73804d4b
RS
1081@end defvar
1082
1083@node Internals of Kill Ring
1084@comment node-name, next, previous, up
1085@subsection Internals of the Kill Ring
1086
1087 The variable @code{kill-ring} holds the kill ring contents, in the
1088form of a list of strings. The most recent kill is always at the front
177c0ea7 1089of the list.
73804d4b
RS
1090
1091 The @code{kill-ring-yank-pointer} variable points to a link in the
61cfa852
RS
1092kill ring list, whose @sc{car} is the text to yank next. We say it
1093identifies the ``front'' of the ring. Moving
73804d4b 1094@code{kill-ring-yank-pointer} to a different link is called
61cfa852
RS
1095@dfn{rotating the kill ring}. We call the kill ring a ``ring'' because
1096the functions that move the yank pointer wrap around from the end of the
1097list to the beginning, or vice-versa. Rotation of the kill ring is
1098virtual; it does not change the value of @code{kill-ring}.
73804d4b
RS
1099
1100 Both @code{kill-ring} and @code{kill-ring-yank-pointer} are Lisp
1101variables whose values are normally lists. The word ``pointer'' in the
1102name of the @code{kill-ring-yank-pointer} indicates that the variable's
1103purpose is to identify one element of the list for use by the next yank
1104command.
1105
1106 The value of @code{kill-ring-yank-pointer} is always @code{eq} to one
1107of the links in the kill ring list. The element it identifies is the
1108@sc{car} of that link. Kill commands, which change the kill ring, also
61cfa852
RS
1109set this variable to the value of @code{kill-ring}. The effect is to
1110rotate the ring so that the newly killed text is at the front.
73804d4b
RS
1111
1112 Here is a diagram that shows the variable @code{kill-ring-yank-pointer}
1113pointing to the second entry in the kill ring @code{("some text" "a
177c0ea7 1114different piece of text" "yet older text")}.
73804d4b
RS
1115
1116@example
1117@group
969fe9b5
RS
1118kill-ring ---- kill-ring-yank-pointer
1119 | |
1120 | v
1121 | --- --- --- --- --- ---
1122 --> | | |------> | | |--> | | |--> nil
1123 --- --- --- --- --- ---
177c0ea7
JB
1124 | | |
1125 | | |
1126 | | -->"yet older text"
73804d4b 1127 | |
177c0ea7 1128 | --> "a different piece of text"
73804d4b
RS
1129 |
1130 --> "some text"
1131@end group
1132@end example
1133
1134@noindent
1135This state of affairs might occur after @kbd{C-y} (@code{yank})
1136immediately followed by @kbd{M-y} (@code{yank-pop}).
1137
1138@defvar kill-ring
61cfa852
RS
1139This variable holds the list of killed text sequences, most recently
1140killed first.
73804d4b
RS
1141@end defvar
1142
1143@defvar kill-ring-yank-pointer
1144This variable's value indicates which element of the kill ring is at the
1145``front'' of the ring for yanking. More precisely, the value is a tail
1146of the value of @code{kill-ring}, and its @sc{car} is the kill string
1147that @kbd{C-y} should yank.
1148@end defvar
1149
1150@defopt kill-ring-max
1151The value of this variable is the maximum length to which the kill
1152ring can grow, before elements are thrown away at the end. The default
af1996b5 1153value for @code{kill-ring-max} is 60.
73804d4b
RS
1154@end defopt
1155
1156@node Undo
1157@comment node-name, next, previous, up
1158@section Undo
1159@cindex redo
1160
61cfa852
RS
1161 Most buffers have an @dfn{undo list}, which records all changes made
1162to the buffer's text so that they can be undone. (The buffers that
1163don't have one are usually special-purpose buffers for which Emacs
1164assumes that undoing is not useful.) All the primitives that modify the
1165text in the buffer automatically add elements to the front of the undo
1166list, which is in the variable @code{buffer-undo-list}.
73804d4b
RS
1167
1168@defvar buffer-undo-list
1169This variable's value is the undo list of the current buffer.
1170A value of @code{t} disables the recording of undo information.
1171@end defvar
1172
1173Here are the kinds of elements an undo list can have:
1174
1175@table @code
1911e6e5
RS
1176@item @var{position}
1177This kind of element records a previous value of point; undoing this
1178element moves point to @var{position}. Ordinary cursor motion does not
1179make any sort of undo record, but deletion operations use these entries
1180to record where point was before the command.
73804d4b
RS
1181
1182@item (@var{beg} . @var{end})
1183This kind of element indicates how to delete text that was inserted.
177c0ea7 1184Upon insertion, the text occupied the range @var{beg}--@var{end} in the
73804d4b
RS
1185buffer.
1186
d1756ab9 1187@item (@var{text} . @var{position})
73804d4b 1188This kind of element indicates how to reinsert text that was deleted.
d1756ab9 1189The deleted text itself is the string @var{text}. The place to
af1996b5
LT
1190reinsert it is @code{(abs @var{position})}. If @var{position} is
1191positive, point was at the beginning of the deleted text, otherwise it
1192was at the end.
73804d4b
RS
1193
1194@item (t @var{high} . @var{low})
1195This kind of element indicates that an unmodified buffer became
1196modified. The elements @var{high} and @var{low} are two integers, each
1197recording 16 bits of the visited file's modification time as of when it
1198was previously visited or saved. @code{primitive-undo} uses those
1199values to determine whether to mark the buffer as unmodified once again;
1200it does so only if the file's modification time matches those numbers.
1201
1202@item (nil @var{property} @var{value} @var{beg} . @var{end})
1203This kind of element records a change in a text property.
1204Here's how you might undo the change:
1205
1206@example
1207(put-text-property @var{beg} @var{end} @var{property} @var{value})
1208@end example
d1756ab9 1209
61ee3601
RS
1210@item (@var{marker} . @var{adjustment})
1211This kind of element records the fact that the marker @var{marker} was
1212relocated due to deletion of surrounding text, and that it moved
1213@var{adjustment} character positions. Undoing this element moves
1214@var{marker} @minus{} @var{adjustment} characters.
1215
73804d4b
RS
1216@item nil
1217This element is a boundary. The elements between two boundaries are
1218called a @dfn{change group}; normally, each change group corresponds to
1219one keyboard command, and undo commands normally undo an entire group as
1220a unit.
1221@end table
1222
1223@defun undo-boundary
1224This function places a boundary element in the undo list. The undo
1225command stops at such a boundary, and successive undo commands undo
1226to earlier and earlier boundaries. This function returns @code{nil}.
1227
b6a786ce
RS
1228The editor command loop automatically creates an undo boundary before
1229each key sequence is executed. Thus, each undo normally undoes the
1230effects of one command. Self-inserting input characters are an
1231exception. The command loop makes a boundary for the first such
1232character; the next 19 consecutive self-inserting input characters do
1233not make boundaries, and then the 20th does, and so on as long as
1234self-inserting characters continue.
1235
1236All buffer modifications add a boundary whenever the previous undoable
a9f0a989
RS
1237change was made in some other buffer. This is to ensure that
1238each command makes a boundary in each buffer where it makes changes.
b6a786ce
RS
1239
1240Calling this function explicitly is useful for splitting the effects of
1241a command into more than one unit. For example, @code{query-replace}
1242calls @code{undo-boundary} after each replacement, so that the user can
1243undo individual replacements one by one.
73804d4b
RS
1244@end defun
1245
1246@defun primitive-undo count list
1247This is the basic function for undoing elements of an undo list.
1248It undoes the first @var{count} elements of @var{list}, returning
1249the rest of @var{list}. You could write this function in Lisp,
1250but it is convenient to have it in C.
1251
1252@code{primitive-undo} adds elements to the buffer's undo list when it
1253changes the buffer. Undo commands avoid confusion by saving the undo
1254list value at the beginning of a sequence of undo operations. Then the
1255undo operations use and update the saved value. The new elements added
bfe721d1 1256by undoing are not part of this saved value, so they don't interfere with
73804d4b
RS
1257continuing to undo.
1258@end defun
1259
1260@node Maintaining Undo
1261@section Maintaining Undo Lists
1262
1263 This section describes how to enable and disable undo information for
1264a given buffer. It also explains how the undo list is truncated
1265automatically so it doesn't get too big.
1266
1267 Recording of undo information in a newly created buffer is normally
1268enabled to start with; but if the buffer name starts with a space, the
1269undo recording is initially disabled. You can explicitly enable or
1270disable undo recording with the following two functions, or by setting
1271@code{buffer-undo-list} yourself.
1272
1273@deffn Command buffer-enable-undo &optional buffer-or-name
1274This command enables recording undo information for buffer
1275@var{buffer-or-name}, so that subsequent changes can be undone. If no
1276argument is supplied, then the current buffer is used. This function
1277does nothing if undo recording is already enabled in the buffer. It
1278returns @code{nil}.
1279
1280In an interactive call, @var{buffer-or-name} is the current buffer.
1281You cannot specify any other buffer.
1282@end deffn
1283
af1996b5
LT
1284@deffn Command buffer-disable-undo &optional buffer-or-name
1285@deffnx Command buffer-flush-undo &optional buffer-or-name
73804d4b 1286@cindex disable undo
af1996b5 1287This function discards the undo list of @var{buffer-or-name}, and disables
73804d4b
RS
1288further recording of undo information. As a result, it is no longer
1289possible to undo either previous changes or any subsequent changes. If
af1996b5 1290the undo list of @var{buffer-or-name} is already disabled, this function
73804d4b
RS
1291has no effect.
1292
a9f0a989 1293This function returns @code{nil}.
73804d4b
RS
1294
1295The name @code{buffer-flush-undo} is not considered obsolete, but the
969fe9b5 1296preferred name is @code{buffer-disable-undo}.
a9f0a989 1297@end deffn
73804d4b
RS
1298
1299 As editing continues, undo lists get longer and longer. To prevent
1300them from using up all available memory space, garbage collection trims
1301them back to size limits you can set. (For this purpose, the ``size''
1302of an undo list measures the cons cells that make up the list, plus the
1303strings of deleted text.) Two variables control the range of acceptable
1304sizes: @code{undo-limit} and @code{undo-strong-limit}.
1305
1306@defvar undo-limit
1307This is the soft limit for the acceptable size of an undo list. The
1308change group at which this size is exceeded is the last one kept.
1309@end defvar
1310
1311@defvar undo-strong-limit
61cfa852
RS
1312This is the upper limit for the acceptable size of an undo list. The
1313change group at which this size is exceeded is discarded itself (along
1314with all older change groups). There is one exception: the very latest
bda144f4 1315change group is never discarded no matter how big it is.
73804d4b
RS
1316@end defvar
1317
1318@node Filling
1319@comment node-name, next, previous, up
1320@section Filling
1321@cindex filling, explicit
1322
1323 @dfn{Filling} means adjusting the lengths of lines (by moving the line
1324breaks) so that they are nearly (but no greater than) a specified
1325maximum width. Additionally, lines can be @dfn{justified}, which means
bfe721d1
KH
1326inserting spaces to make the left and/or right margins line up
1327precisely. The width is controlled by the variable @code{fill-column}.
1328For ease of reading, lines should be no longer than 70 or so columns.
73804d4b
RS
1329
1330 You can use Auto Fill mode (@pxref{Auto Filling}) to fill text
1331automatically as you insert it, but changes to existing text may leave
1332it improperly filled. Then you must fill the text explicitly.
1333
22697dac
KH
1334 Most of the commands in this section return values that are not
1335meaningful. All the functions that do filling take note of the current
bfe721d1
KH
1336left margin, current right margin, and current justification style
1337(@pxref{Margins}). If the current justification style is
1338@code{none}, the filling functions don't actually do anything.
1339
1340 Several of the filling functions have an argument @var{justify}.
1341If it is non-@code{nil}, that requests some kind of justification. It
1342can be @code{left}, @code{right}, @code{full}, or @code{center}, to
1343request a specific style of justification. If it is @code{t}, that
1344means to use the current justification style for this part of the text
969fe9b5
RS
1345(see @code{current-justification}, below). Any other value is treated
1346as @code{full}.
bfe721d1
KH
1347
1348 When you call the filling functions interactively, using a prefix
1349argument implies the value @code{full} for @var{justify}.
73804d4b 1350
bfe721d1 1351@deffn Command fill-paragraph justify
73804d4b
RS
1352@cindex filling a paragraph
1353This command fills the paragraph at or after point. If
bfe721d1 1354@var{justify} is non-@code{nil}, each line is justified as well.
73804d4b 1355It uses the ordinary paragraph motion commands to find paragraph
0b2fb045 1356boundaries. @xref{Paragraphs,,, emacs, The GNU Emacs Manual}.
73804d4b
RS
1357@end deffn
1358
15da7853 1359@deffn Command fill-region start end &optional justify nosqueeze to-eop
73804d4b 1360This command fills each of the paragraphs in the region from @var{start}
bfe721d1 1361to @var{end}. It justifies as well if @var{justify} is
73804d4b
RS
1362non-@code{nil}.
1363
1911e6e5
RS
1364If @var{nosqueeze} is non-@code{nil}, that means to leave whitespace
1365other than line breaks untouched. If @var{to-eop} is non-@code{nil},
ebc6903b 1366that means to keep filling to the end of the paragraph---or the next hard
1911e6e5
RS
1367newline, if @code{use-hard-newlines} is enabled (see below).
1368
73804d4b
RS
1369The variable @code{paragraph-separate} controls how to distinguish
1370paragraphs. @xref{Standard Regexps}.
1371@end deffn
1372
2468d0c0 1373@deffn Command fill-individual-paragraphs start end &optional justify citation-regexp
73804d4b
RS
1374This command fills each paragraph in the region according to its
1375individual fill prefix. Thus, if the lines of a paragraph were indented
1376with spaces, the filled paragraph will remain indented in the same
1377fashion.
1378
1379The first two arguments, @var{start} and @var{end}, are the beginning
1380and end of the region to be filled. The third and fourth arguments,
2468d0c0 1381@var{justify} and @var{citation-regexp}, are optional. If
bfe721d1 1382@var{justify} is non-@code{nil}, the paragraphs are justified as
2468d0c0 1383well as filled. If @var{citation-regexp} is non-@code{nil}, it means the
73804d4b 1384function is operating on a mail message and therefore should not fill
2468d0c0
DL
1385the header lines. If @var{citation-regexp} is a string, it is used as
1386a regular expression; if it matches the beginning of a line, that line
1387is treated as a citation marker.
73804d4b
RS
1388
1389Ordinarily, @code{fill-individual-paragraphs} regards each change in
1390indentation as starting a new paragraph. If
1391@code{fill-individual-varying-indent} is non-@code{nil}, then only
61cfa852
RS
1392separator lines separate paragraphs. That mode can handle indented
1393paragraphs with additional indentation on the first line.
73804d4b
RS
1394@end deffn
1395
1396@defopt fill-individual-varying-indent
1397This variable alters the action of @code{fill-individual-paragraphs} as
1398described above.
1399@end defopt
1400
1911e6e5 1401@deffn Command fill-region-as-paragraph start end &optional justify nosqueeze squeeze-after
f9f59935
RS
1402This command considers a region of text as a single paragraph and fills
1403it. If the region was made up of many paragraphs, the blank lines
1404between paragraphs are removed. This function justifies as well as
1405filling when @var{justify} is non-@code{nil}.
22697dac
KH
1406
1407In an interactive call, any prefix argument requests justification.
73804d4b 1408
1911e6e5
RS
1409If @var{nosqueeze} is non-@code{nil}, that means to leave whitespace
1410other than line breaks untouched. If @var{squeeze-after} is
ebc6903b 1411non-@code{nil}, it specifies a position in the region, and means don't
1911e6e5
RS
1412canonicalize spaces before that position.
1413
1414In Adaptive Fill mode, this command calls @code{fill-context-prefix} to
1415choose a fill prefix by default. @xref{Adaptive Fill}.
73804d4b
RS
1416@end deffn
1417
2468d0c0 1418@deffn Command justify-current-line &optional how eop nosqueeze
73804d4b
RS
1419This command inserts spaces between the words of the current line so
1420that the line ends exactly at @code{fill-column}. It returns
1421@code{nil}.
22697dac
KH
1422
1423The argument @var{how}, if non-@code{nil} specifies explicitly the style
1424of justification. It can be @code{left}, @code{right}, @code{full},
1425@code{center}, or @code{none}. If it is @code{t}, that means to do
1426follow specified justification style (see @code{current-justification},
1427below). @code{nil} means to do full justification.
1428
9e2b495b 1429If @var{eop} is non-@code{nil}, that means do left-justification if
22697dac
KH
1430@code{current-justification} specifies full justification. This is used
1431for the last line of a paragraph; even if the paragraph as a whole is
1432fully justified, the last line should not be.
1433
1434If @var{nosqueeze} is non-@code{nil}, that means do not change interior
1435whitespace.
73804d4b
RS
1436@end deffn
1437
22697dac
KH
1438@defopt default-justification
1439This variable's value specifies the style of justification to use for
1440text that doesn't specify a style with a text property. The possible
1441values are @code{left}, @code{right}, @code{full}, @code{center}, or
bfe721d1 1442@code{none}. The default value is @code{left}.
22697dac
KH
1443@end defopt
1444
1445@defun current-justification
1446This function returns the proper justification style to use for filling
1447the text around point.
1448@end defun
1449
1911e6e5
RS
1450@defopt sentence-end-double-space
1451If this variable is non-@code{nil}, a period followed by just one space
1452does not count as the end of a sentence, and the filling functions
1453avoid breaking the line at such a place.
1454@end defopt
1455
bfe721d1
KH
1456@defvar fill-paragraph-function
1457This variable provides a way for major modes to override the filling of
1458paragraphs. If the value is non-@code{nil}, @code{fill-paragraph} calls
1459this function to do the work. If the function returns a non-@code{nil}
1460value, @code{fill-paragraph} assumes the job is done, and immediately
1461returns that value.
1462
1463The usual use of this feature is to fill comments in programming
1464language modes. If the function needs to fill a paragraph in the usual
1465way, it can do so as follows:
1466
1467@example
1468(let ((fill-paragraph-function nil))
1469 (fill-paragraph arg))
1470@end example
1471@end defvar
1472
1473@defvar use-hard-newlines
1474If this variable is non-@code{nil}, the filling functions do not delete
1475newlines that have the @code{hard} text property. These ``hard
1476newlines'' act as paragraph separators.
1477@end defvar
1478
1479@node Margins
1480@section Margins for Filling
1481
61cfa852 1482@defopt fill-prefix
a9f0a989
RS
1483This buffer-local variable specifies a string of text that appears at
1484the beginning
61cfa852
RS
1485of normal text lines and should be disregarded when filling them. Any
1486line that fails to start with the fill prefix is considered the start of
1487a paragraph; so is any line that starts with the fill prefix followed by
1488additional whitespace. Lines that start with the fill prefix but no
1489additional whitespace are ordinary text lines that can be filled
1490together. The resulting filled lines also start with the fill prefix.
bfe721d1
KH
1491
1492The fill prefix follows the left margin whitespace, if any.
61cfa852
RS
1493@end defopt
1494
1911e6e5 1495@defopt fill-column
f9f59935
RS
1496This buffer-local variable specifies the maximum width of filled lines.
1497Its value should be an integer, which is a number of columns. All the
1498filling, justification, and centering commands are affected by this
1499variable, including Auto Fill mode (@pxref{Auto Filling}).
73804d4b
RS
1500
1501As a practical matter, if you are writing text for other people to
1502read, you should set @code{fill-column} to no more than 70. Otherwise
1503the line will be too long for people to read comfortably, and this can
1504make the text seem clumsy.
1911e6e5 1505@end defopt
73804d4b
RS
1506
1507@defvar default-fill-column
1508The value of this variable is the default value for @code{fill-column} in
1509buffers that do not override it. This is the same as
1510@code{(default-value 'fill-column)}.
1511
1512The default value for @code{default-fill-column} is 70.
1513@end defvar
1514
22697dac
KH
1515@deffn Command set-left-margin from to margin
1516This sets the @code{left-margin} property on the text from @var{from} to
1517@var{to} to the value @var{margin}. If Auto Fill mode is enabled, this
1518command also refills the region to fit the new margin.
1519@end deffn
1520
1521@deffn Command set-right-margin from to margin
bfe721d1
KH
1522This sets the @code{right-margin} property on the text from @var{from}
1523to @var{to} to the value @var{margin}. If Auto Fill mode is enabled,
1524this command also refills the region to fit the new margin.
22697dac
KH
1525@end deffn
1526
1527@defun current-left-margin
1528This function returns the proper left margin value to use for filling
1529the text around point. The value is the sum of the @code{left-margin}
1530property of the character at the start of the current line (or zero if
bfe721d1 1531none), and the value of the variable @code{left-margin}.
22697dac
KH
1532@end defun
1533
1534@defun current-fill-column
1535This function returns the proper fill column value to use for filling
1536the text around point. The value is the value of the @code{fill-column}
1537variable, minus the value of the @code{right-margin} property of the
1538character after point.
1539@end defun
1540
1541@deffn Command move-to-left-margin &optional n force
1542This function moves point to the left margin of the current line. The
1543column moved to is determined by calling the function
bfe721d1 1544@code{current-left-margin}. If the argument @var{n} is non-@code{nil},
22697dac
KH
1545@code{move-to-left-margin} moves forward @var{n}@minus{}1 lines first.
1546
1547If @var{force} is non-@code{nil}, that says to fix the line's
1548indentation if that doesn't match the left margin value.
1549@end deffn
1550
2468d0c0
DL
1551@defun delete-to-left-margin &optional from to
1552This function removes left margin indentation from the text between
1553@var{from} and @var{to}. The amount of indentation to delete is
1554determined by calling @code{current-left-margin}. In no case does this
1555function delete non-whitespace. If @var{from} and @var{to} are omitted,
1556they default to the whole buffer.
22697dac
KH
1557@end defun
1558
bfe721d1
KH
1559@defun indent-to-left-margin
1560This is the default @code{indent-line-function}, used in Fundamental
1561mode, Text mode, etc. Its effect is to adjust the indentation at the
1562beginning of the current line to the value specified by the variable
1563@code{left-margin}. This may involve either inserting or deleting
1564whitespace.
1565@end defun
1566
1567@defvar left-margin
1568This variable specifies the base left margin column. In Fundamental
969fe9b5 1569mode, @kbd{C-j} indents to this column. This variable automatically
bfe721d1
KH
1570becomes buffer-local when set in any fashion.
1571@end defvar
1572
969fe9b5
RS
1573@defvar fill-nobreak-predicate
1574This variable gives major modes a way to specify not to break a line at
1575certain places. Its value should be a function. This function is
1576called during filling, with no arguments and with point located at the
1577place where a break is being considered. If the function returns
1578non-@code{nil}, then the line won't be broken there.
1579@end defvar
1580
1911e6e5
RS
1581@node Adaptive Fill
1582@section Adaptive Fill Mode
1583@cindex Adaptive Fill mode
1584
1585 Adaptive Fill mode chooses a fill prefix automatically from the text
1586in each paragraph being filled.
1587
1588@defopt adaptive-fill-mode
1589Adaptive Fill mode is enabled when this variable is non-@code{nil}.
1590It is @code{t} by default.
1591@end defopt
1592
1593@defun fill-context-prefix from to
1594This function implements the heart of Adaptive Fill mode; it chooses a
1595fill prefix based on the text between @var{from} and @var{to}. It does
1596this by looking at the first two lines of the paragraph, based on the
1597variables described below.
2468d0c0
DL
1598@c The optional argument first-line-regexp is not documented
1599@c because it exists for internal purposes and might be eliminated
1600@c in the future.
1911e6e5
RS
1601@end defun
1602
1603@defopt adaptive-fill-regexp
1604This variable holds a regular expression to control Adaptive Fill mode.
ebc6903b
RS
1605Adaptive Fill mode matches this regular expression against the text
1606starting after the left margin whitespace (if any) on a line; the
1607characters it matches are that line's candidate for the fill prefix.
1911e6e5
RS
1608@end defopt
1609
1610@defopt adaptive-fill-first-line-regexp
ebc6903b
RS
1611In a one-line paragraph, if the candidate fill prefix matches this
1612regular expression, or if it matches @code{comment-start-skip}, then it
1613is used---otherwise, spaces amounting to the same width are used
1614instead.
1911e6e5
RS
1615
1616However, the fill prefix is never taken from a one-line paragraph
1617if it would act as a paragraph starter on subsequent lines.
1618@end defopt
1619
1620@defopt adaptive-fill-function
1621You can specify more complex ways of choosing a fill prefix
1622automatically by setting this variable to a function. The function is
1623called when @code{adaptive-fill-regexp} does not match, with point after
1624the left margin of a line, and it should return the appropriate fill
1625prefix based on that line. If it returns @code{nil}, that means it sees
1626no fill prefix in that line.
1627@end defopt
1628
73804d4b
RS
1629@node Auto Filling
1630@comment node-name, next, previous, up
1631@section Auto Filling
1632@cindex filling, automatic
1633@cindex Auto Fill mode
1634
61cfa852 1635 Auto Fill mode is a minor mode that fills lines automatically as text
bda144f4 1636is inserted. This section describes the hook used by Auto Fill mode.
61cfa852
RS
1637For a description of functions that you can call explicitly to fill and
1638justify existing text, see @ref{Filling}.
73804d4b 1639
bfe721d1
KH
1640 Auto Fill mode also enables the functions that change the margins and
1641justification style to refill portions of the text. @xref{Margins}.
1642
73804d4b 1643@defvar auto-fill-function
22697dac 1644The value of this variable should be a function (of no arguments) to be
ca3be36e
DL
1645called after self-inserting a character from the table
1646@code{auto-fill-chars}. It may be @code{nil}, in which case nothing
1647special is done in that case.
73804d4b
RS
1648
1649The value of @code{auto-fill-function} is @code{do-auto-fill} when
1650Auto-Fill mode is enabled. That is a function whose sole purpose is to
1651implement the usual strategy for breaking a line.
1652
1653@quotation
1654In older Emacs versions, this variable was named @code{auto-fill-hook},
1655but since it is not called with the standard convention for hooks, it
1656was renamed to @code{auto-fill-function} in version 19.
1657@end quotation
1658@end defvar
1659
910bc071
RS
1660@defvar normal-auto-fill-function
1661This variable specifies the function to use for
1662@code{auto-fill-function}, if and when Auto Fill is turned on. Major
969fe9b5
RS
1663modes can set buffer-local values for this variable to alter how Auto
1664Fill works.
910bc071
RS
1665@end defvar
1666
ca3be36e
DL
1667@defvar auto-fill-chars
1668A char table of characters which invoke @code{auto-fill-function} when
1669self-inserted---space and newline in most language environments. They
1670have an entry @code{t} in the table.
1671@end defvar
1672
73804d4b
RS
1673@node Sorting
1674@section Sorting Text
1675@cindex sorting text
1676
1677 The sorting functions described in this section all rearrange text in
1678a buffer. This is in contrast to the function @code{sort}, which
1679rearranges the order of the elements of a list (@pxref{Rearrangement}).
1680The values returned by these functions are not meaningful.
1681
1682@defun sort-subr reverse nextrecfun endrecfun &optional startkeyfun endkeyfun
f9f59935
RS
1683This function is the general text-sorting routine that subdivides a
1684buffer into records and then sorts them. Most of the commands in this
1685section use this function.
73804d4b
RS
1686
1687To understand how @code{sort-subr} works, consider the whole accessible
1688portion of the buffer as being divided into disjoint pieces called
f9f59935
RS
1689@dfn{sort records}. The records may or may not be contiguous, but they
1690must not overlap. A portion of each sort record (perhaps all of it) is
73804d4b
RS
1691designated as the sort key. Sorting rearranges the records in order by
1692their sort keys.
1693
1694Usually, the records are rearranged in order of ascending sort key.
1695If the first argument to the @code{sort-subr} function, @var{reverse},
1696is non-@code{nil}, the sort records are rearranged in order of
1697descending sort key.
1698
1699The next four arguments to @code{sort-subr} are functions that are
1700called to move point across a sort record. They are called many times
1701from within @code{sort-subr}.
1702
1703@enumerate
1704@item
1705@var{nextrecfun} is called with point at the end of a record. This
1706function moves point to the start of the next record. The first record
1707is assumed to start at the position of point when @code{sort-subr} is
1708called. Therefore, you should usually move point to the beginning of
1709the buffer before calling @code{sort-subr}.
1710
1711This function can indicate there are no more sort records by leaving
1712point at the end of the buffer.
1713
1714@item
1715@var{endrecfun} is called with point within a record. It moves point to
1716the end of the record.
1717
1718@item
1719@var{startkeyfun} is called to move point from the start of a record to
1720the start of the sort key. This argument is optional; if it is omitted,
1721the whole record is the sort key. If supplied, the function should
1722either return a non-@code{nil} value to be used as the sort key, or
1723return @code{nil} to indicate that the sort key is in the buffer
1724starting at point. In the latter case, @var{endkeyfun} is called to
1725find the end of the sort key.
1726
1727@item
1728@var{endkeyfun} is called to move point from the start of the sort key
1729to the end of the sort key. This argument is optional. If
1730@var{startkeyfun} returns @code{nil} and this argument is omitted (or
1731@code{nil}), then the sort key extends to the end of the record. There
1732is no need for @var{endkeyfun} if @var{startkeyfun} returns a
1733non-@code{nil} value.
1734@end enumerate
1735
1736As an example of @code{sort-subr}, here is the complete function
1737definition for @code{sort-lines}:
1738
1739@example
1740@group
1741;; @r{Note that the first two lines of doc string}
1742;; @r{are effectively one line when viewed by a user.}
1743(defun sort-lines (reverse beg end)
f9f59935
RS
1744 "Sort lines in region alphabetically;\
1745 argument means descending order.
73804d4b
RS
1746Called from a program, there are three arguments:
1747@end group
1748@group
f9f59935
RS
1749REVERSE (non-nil means reverse order),\
1750 BEG and END (region to sort).
1751The variable `sort-fold-case' determines\
1752 whether alphabetic case affects
690146de 1753the sort order."
f9f59935
RS
1754@end group
1755@group
73804d4b 1756 (interactive "P\nr")
1911e6e5
RS
1757 (save-excursion
1758 (save-restriction
1759 (narrow-to-region beg end)
1760 (goto-char (point-min))
1761 (sort-subr reverse 'forward-line 'end-of-line))))
73804d4b
RS
1762@end group
1763@end example
1764
1765Here @code{forward-line} moves point to the start of the next record,
1766and @code{end-of-line} moves point to the end of record. We do not pass
1767the arguments @var{startkeyfun} and @var{endkeyfun}, because the entire
1768record is used as the sort key.
1769
1770The @code{sort-paragraphs} function is very much the same, except that
1771its @code{sort-subr} call looks like this:
1772
1773@example
1774@group
1775(sort-subr reverse
1911e6e5
RS
1776 (function
1777 (lambda ()
1778 (while (and (not (eobp))
1779 (looking-at paragraph-separate))
1780 (forward-line 1))))
73804d4b
RS
1781 'forward-paragraph)
1782@end group
1783@end example
f9f59935
RS
1784
1785Markers pointing into any sort records are left with no useful
1786position after @code{sort-subr} returns.
73804d4b
RS
1787@end defun
1788
1911e6e5
RS
1789@defopt sort-fold-case
1790If this variable is non-@code{nil}, @code{sort-subr} and the other
1791buffer sorting functions ignore case when comparing strings.
1792@end defopt
1793
73804d4b
RS
1794@deffn Command sort-regexp-fields reverse record-regexp key-regexp start end
1795This command sorts the region between @var{start} and @var{end}
1796alphabetically as specified by @var{record-regexp} and @var{key-regexp}.
1797If @var{reverse} is a negative integer, then sorting is in reverse
1798order.
1799
1800Alphabetical sorting means that two sort keys are compared by
1801comparing the first characters of each, the second characters of each,
1802and so on. If a mismatch is found, it means that the sort keys are
1803unequal; the sort key whose character is less at the point of first
1804mismatch is the lesser sort key. The individual characters are compared
f9f59935 1805according to their numerical character codes in the Emacs character set.
73804d4b
RS
1806
1807The value of the @var{record-regexp} argument specifies how to divide
1808the buffer into sort records. At the end of each record, a search is
f9f59935
RS
1809done for this regular expression, and the text that matches it is taken
1810as the next record. For example, the regular expression @samp{^.+$},
1811which matches lines with at least one character besides a newline, would
1812make each such line into a sort record. @xref{Regular Expressions}, for
1813a description of the syntax and meaning of regular expressions.
73804d4b
RS
1814
1815The value of the @var{key-regexp} argument specifies what part of each
1816record is the sort key. The @var{key-regexp} could match the whole
1817record, or only a part. In the latter case, the rest of the record has
1818no effect on the sorted order of records, but it is carried along when
1819the record moves to its new position.
1820
1821The @var{key-regexp} argument can refer to the text matched by a
1822subexpression of @var{record-regexp}, or it can be a regular expression
1823on its own.
1824
1825If @var{key-regexp} is:
1826
1827@table @asis
1828@item @samp{\@var{digit}}
1829then the text matched by the @var{digit}th @samp{\(...\)} parenthesis
1830grouping in @var{record-regexp} is the sort key.
1831
1832@item @samp{\&}
1833then the whole record is the sort key.
1834
1835@item a regular expression
1836then @code{sort-regexp-fields} searches for a match for the regular
1837expression within the record. If such a match is found, it is the sort
1838key. If there is no match for @var{key-regexp} within a record then
1839that record is ignored, which means its position in the buffer is not
1840changed. (The other records may move around it.)
1841@end table
1842
1843For example, if you plan to sort all the lines in the region by the
1844first word on each line starting with the letter @samp{f}, you should
1845set @var{record-regexp} to @samp{^.*$} and set @var{key-regexp} to
1846@samp{\<f\w*\>}. The resulting expression looks like this:
1847
1848@example
1849@group
1850(sort-regexp-fields nil "^.*$" "\\<f\\w*\\>"
1851 (region-beginning)
1852 (region-end))
1853@end group
1854@end example
1855
1856If you call @code{sort-regexp-fields} interactively, it prompts for
1857@var{record-regexp} and @var{key-regexp} in the minibuffer.
1858@end deffn
1859
1860@deffn Command sort-lines reverse start end
1861This command alphabetically sorts lines in the region between
1862@var{start} and @var{end}. If @var{reverse} is non-@code{nil}, the sort
1863is in reverse order.
1864@end deffn
1865
1866@deffn Command sort-paragraphs reverse start end
1867This command alphabetically sorts paragraphs in the region between
1868@var{start} and @var{end}. If @var{reverse} is non-@code{nil}, the sort
1869is in reverse order.
1870@end deffn
1871
1872@deffn Command sort-pages reverse start end
1873This command alphabetically sorts pages in the region between
1874@var{start} and @var{end}. If @var{reverse} is non-@code{nil}, the sort
1875is in reverse order.
1876@end deffn
1877
1878@deffn Command sort-fields field start end
1879This command sorts lines in the region between @var{start} and
1880@var{end}, comparing them alphabetically by the @var{field}th field
1881of each line. Fields are separated by whitespace and numbered starting
1882from 1. If @var{field} is negative, sorting is by the
1883@w{@minus{}@var{field}th} field from the end of the line. This command
1884is useful for sorting tables.
1885@end deffn
1886
1887@deffn Command sort-numeric-fields field start end
1888This command sorts lines in the region between @var{start} and
1889@var{end}, comparing them numerically by the @var{field}th field of each
1890line. The specified field must contain a number in each line of the
1891region. Fields are separated by whitespace and numbered starting from
18921. If @var{field} is negative, sorting is by the
1893@w{@minus{}@var{field}th} field from the end of the line. This command
1894is useful for sorting tables.
1895@end deffn
1896
1897@deffn Command sort-columns reverse &optional beg end
1898This command sorts the lines in the region between @var{beg} and
1899@var{end}, comparing them alphabetically by a certain range of columns.
1900The column positions of @var{beg} and @var{end} bound the range of
1901columns to sort on.
1902
1903If @var{reverse} is non-@code{nil}, the sort is in reverse order.
1904
1905One unusual thing about this command is that the entire line
1906containing position @var{beg}, and the entire line containing position
1907@var{end}, are included in the region sorted.
1908
1909Note that @code{sort-columns} uses the @code{sort} utility program,
1910and so cannot work properly on text containing tab characters. Use
969fe9b5 1911@kbd{M-x untabify} to convert tabs to spaces before sorting.
73804d4b
RS
1912@end deffn
1913
1914@node Columns
1915@comment node-name, next, previous, up
1916@section Counting Columns
1917@cindex columns
1918@cindex counting columns
1919@cindex horizontal position
1920
1921 The column functions convert between a character position (counting
1922characters from the beginning of the buffer) and a column position
1923(counting screen characters from the beginning of a line).
1924
f9f59935
RS
1925 These functions count each character according to the number of
1926columns it occupies on the screen. This means control characters count
1927as occupying 2 or 4 columns, depending upon the value of
1928@code{ctl-arrow}, and tabs count as occupying a number of columns that
1929depends on the value of @code{tab-width} and on the column where the tab
1930begins. @xref{Usual Display}.
73804d4b
RS
1931
1932 Column number computations ignore the width of the window and the
1933amount of horizontal scrolling. Consequently, a column value can be
6fac48b3
RS
1934arbitrarily high. The first (or leftmost) column is numbered 0. They
1935also ignore overlays and text properties, aside from invisibility.
73804d4b
RS
1936
1937@defun current-column
1938This function returns the horizontal position of point, measured in
1939columns, counting from 0 at the left margin. The column position is the
1940sum of the widths of all the displayed representations of the characters
1941between the start of the current line and point.
1942
1943For an example of using @code{current-column}, see the description of
1944@code{count-lines} in @ref{Text Lines}.
1945@end defun
1946
1947@defun move-to-column column &optional force
1948This function moves point to @var{column} in the current line. The
1949calculation of @var{column} takes into account the widths of the
1950displayed representations of the characters between the start of the
1951line and point.
1952
1953If column @var{column} is beyond the end of the line, point moves to the
1954end of the line. If @var{column} is negative, point moves to the
1955beginning of the line.
1956
1957If it is impossible to move to column @var{column} because that is in
1958the middle of a multicolumn character such as a tab, point moves to the
1959end of that character. However, if @var{force} is non-@code{nil}, and
1960@var{column} is in the middle of a tab, then @code{move-to-column}
1961converts the tab into spaces so that it can move precisely to column
1962@var{column}. Other multicolumn characters can cause anomalies despite
1963@var{force}, since there is no way to split them.
1964
1965The argument @var{force} also has an effect if the line isn't long
8241495d
RS
1966enough to reach column @var{column}; if it is @code{t}, that means to
1967add whitespace at the end of the line to reach that column.
73804d4b
RS
1968
1969If @var{column} is not an integer, an error is signaled.
1970
1971The return value is the column number actually moved to.
1972@end defun
1973
1974@node Indentation
1975@section Indentation
1976@cindex indentation
1977
1978 The indentation functions are used to examine, move to, and change
1979whitespace that is at the beginning of a line. Some of the functions
1980can also change whitespace elsewhere on a line. Columns and indentation
1981count from zero at the left margin.
1982
1983@menu
1984* Primitive Indent:: Functions used to count and insert indentation.
1985* Mode-Specific Indent:: Customize indentation for different modes.
1986* Region Indent:: Indent all the lines in a region.
1987* Relative Indent:: Indent the current line based on previous lines.
1988* Indent Tabs:: Adjustable, typewriter-like tab stops.
1989* Motion by Indent:: Move to first non-blank character.
1990@end menu
1991
1992@node Primitive Indent
1993@subsection Indentation Primitives
1994
1995 This section describes the primitive functions used to count and
1996insert indentation. The functions in the following sections use these
969fe9b5 1997primitives. @xref{Width}, for related functions.
73804d4b
RS
1998
1999@defun current-indentation
2000@comment !!Type Primitive Function
2001@comment !!SourceFile indent.c
2002This function returns the indentation of the current line, which is
2003the horizontal position of the first nonblank character. If the
2004contents are entirely blank, then this is the horizontal position of the
2005end of the line.
2006@end defun
2007
2008@deffn Command indent-to column &optional minimum
2009@comment !!Type Primitive Function
2010@comment !!SourceFile indent.c
61cfa852
RS
2011This function indents from point with tabs and spaces until @var{column}
2012is reached. If @var{minimum} is specified and non-@code{nil}, then at
2013least that many spaces are inserted even if this requires going beyond
2014@var{column}. Otherwise the function does nothing if point is already
2015beyond @var{column}. The value is the column at which the inserted
2016indentation ends.
33acbad2
RS
2017
2018The inserted whitespace characters inherit text properties from the
2019surrounding text (usually, from the preceding text only). @xref{Sticky
2020Properties}.
73804d4b
RS
2021@end deffn
2022
2023@defopt indent-tabs-mode
2024@comment !!SourceFile indent.c
2025If this variable is non-@code{nil}, indentation functions can insert
2026tabs as well as spaces. Otherwise, they insert only spaces. Setting
969fe9b5 2027this variable automatically makes it buffer-local in the current buffer.
73804d4b
RS
2028@end defopt
2029
2030@node Mode-Specific Indent
2031@subsection Indentation Controlled by Major Mode
2032
2033 An important function of each major mode is to customize the @key{TAB}
2034key to indent properly for the language being edited. This section
2035describes the mechanism of the @key{TAB} key and how to control it.
2036The functions in this section return unpredictable values.
2037
2038@defvar indent-line-function
2039This variable's value is the function to be used by @key{TAB} (and
2040various commands) to indent the current line. The command
2041@code{indent-according-to-mode} does no more than call this function.
2042
2043In Lisp mode, the value is the symbol @code{lisp-indent-line}; in C
2044mode, @code{c-indent-line}; in Fortran mode, @code{fortran-indent-line}.
2045In Fundamental mode, Text mode, and many other modes with no standard
2046for indentation, the value is @code{indent-to-left-margin} (which is the
2047default value).
2048@end defvar
2049
2050@deffn Command indent-according-to-mode
2051This command calls the function in @code{indent-line-function} to
2052indent the current line in a way appropriate for the current major mode.
2053@end deffn
2054
2055@deffn Command indent-for-tab-command
2056This command calls the function in @code{indent-line-function} to indent
a9f0a989
RS
2057the current line; however, if that function is
2058@code{indent-to-left-margin}, @code{insert-tab} is called instead. (That
61cfa852 2059is a trivial command that inserts a tab character.)
73804d4b
RS
2060@end deffn
2061
73804d4b
RS
2062@deffn Command newline-and-indent
2063@comment !!SourceFile simple.el
2064This function inserts a newline, then indents the new line (the one
2065following the newline just inserted) according to the major mode.
2066
2067It does indentation by calling the current @code{indent-line-function}.
2068In programming language modes, this is the same thing @key{TAB} does,
2069but in some text modes, where @key{TAB} inserts a tab,
2070@code{newline-and-indent} indents to the column specified by
2071@code{left-margin}.
2072@end deffn
2073
2074@deffn Command reindent-then-newline-and-indent
2075@comment !!SourceFile simple.el
2076This command reindents the current line, inserts a newline at point,
1911e6e5 2077and then indents the new line (the one following the newline just
73804d4b
RS
2078inserted).
2079
2080This command does indentation on both lines according to the current
2081major mode, by calling the current value of @code{indent-line-function}.
2082In programming language modes, this is the same thing @key{TAB} does,
2083but in some text modes, where @key{TAB} inserts a tab,
2084@code{reindent-then-newline-and-indent} indents to the column specified
2085by @code{left-margin}.
2086@end deffn
2087
2088@node Region Indent
2089@subsection Indenting an Entire Region
2090
61cfa852 2091 This section describes commands that indent all the lines in the
73804d4b
RS
2092region. They return unpredictable values.
2093
2094@deffn Command indent-region start end to-column
2095This command indents each nonblank line starting between @var{start}
2096(inclusive) and @var{end} (exclusive). If @var{to-column} is
2097@code{nil}, @code{indent-region} indents each nonblank line by calling
2098the current mode's indentation function, the value of
2099@code{indent-line-function}.
2100
2101If @var{to-column} is non-@code{nil}, it should be an integer
2102specifying the number of columns of indentation; then this function
2103gives each line exactly that much indentation, by either adding or
2104deleting whitespace.
2105
2106If there is a fill prefix, @code{indent-region} indents each line
2107by making it start with the fill prefix.
2108@end deffn
2109
2110@defvar indent-region-function
2111The value of this variable is a function that can be used by
a9f0a989
RS
2112@code{indent-region} as a short cut. It should take two arguments, the
2113start and end of the region. You should design the function so
73804d4b
RS
2114that it will produce the same results as indenting the lines of the
2115region one by one, but presumably faster.
2116
2117If the value is @code{nil}, there is no short cut, and
2118@code{indent-region} actually works line by line.
2119
61cfa852 2120A short-cut function is useful in modes such as C mode and Lisp mode,
73804d4b 2121where the @code{indent-line-function} must scan from the beginning of
61cfa852
RS
2122the function definition: applying it to each line would be quadratic in
2123time. The short cut can update the scan information as it moves through
2124the lines indenting them; this takes linear time. In a mode where
2125indenting a line individually is fast, there is no need for a short cut.
73804d4b 2126
61cfa852
RS
2127@code{indent-region} with a non-@code{nil} argument @var{to-column} has
2128a different meaning and does not use this variable.
73804d4b
RS
2129@end defvar
2130
2131@deffn Command indent-rigidly start end count
2132@comment !!SourceFile indent.el
2133This command indents all lines starting between @var{start}
2134(inclusive) and @var{end} (exclusive) sideways by @var{count} columns.
2135This ``preserves the shape'' of the affected region, moving it as a
2136rigid unit. Consequently, this command is useful not only for indenting
2137regions of unindented text, but also for indenting regions of formatted
2138code.
2139
2140For example, if @var{count} is 3, this command adds 3 columns of
2141indentation to each of the lines beginning in the region specified.
2142
2143In Mail mode, @kbd{C-c C-y} (@code{mail-yank-original}) uses
2144@code{indent-rigidly} to indent the text copied from the message being
2145replied to.
2146@end deffn
2147
2148@defun indent-code-rigidly start end columns &optional nochange-regexp
2149This is like @code{indent-rigidly}, except that it doesn't alter lines
2150that start within strings or comments.
2151
2152In addition, it doesn't alter a line if @var{nochange-regexp} matches at
2153the beginning of the line (if @var{nochange-regexp} is non-@code{nil}).
2154@end defun
2155
2156@node Relative Indent
2157@subsection Indentation Relative to Previous Lines
2158
61cfa852 2159 This section describes two commands that indent the current line
73804d4b
RS
2160based on the contents of previous lines.
2161
2162@deffn Command indent-relative &optional unindented-ok
2163This command inserts whitespace at point, extending to the same
2164column as the next @dfn{indent point} of the previous nonblank line. An
2165indent point is a non-whitespace character following whitespace. The
2166next indent point is the first one at a column greater than the current
2167column of point. For example, if point is underneath and to the left of
2168the first non-blank character of a line of text, it moves to that column
2169by inserting whitespace.
2170
2171If the previous nonblank line has no next indent point (i.e., none at a
2172great enough column position), @code{indent-relative} either does
2173nothing (if @var{unindented-ok} is non-@code{nil}) or calls
2174@code{tab-to-tab-stop}. Thus, if point is underneath and to the right
2175of the last column of a short line of text, this command ordinarily
2176moves point to the next tab stop by inserting whitespace.
2177
2178The return value of @code{indent-relative} is unpredictable.
2179
2180In the following example, point is at the beginning of the second
2181line:
2182
2183@example
2184@group
2185 This line is indented twelve spaces.
2186@point{}The quick brown fox jumped.
2187@end group
2188@end example
2189
2190@noindent
2191Evaluation of the expression @code{(indent-relative nil)} produces the
2192following:
2193
2194@example
2195@group
2196 This line is indented twelve spaces.
2197 @point{}The quick brown fox jumped.
2198@end group
2199@end example
2200
f9f59935 2201 In this next example, point is between the @samp{m} and @samp{p} of
73804d4b
RS
2202@samp{jumped}:
2203
2204@example
2205@group
2206 This line is indented twelve spaces.
2207The quick brown fox jum@point{}ped.
2208@end group
2209@end example
2210
2211@noindent
2212Evaluation of the expression @code{(indent-relative nil)} produces the
2213following:
2214
2215@example
2216@group
2217 This line is indented twelve spaces.
2218The quick brown fox jum @point{}ped.
2219@end group
2220@end example
2221@end deffn
2222
2223@deffn Command indent-relative-maybe
2224@comment !!SourceFile indent.el
f9f59935
RS
2225This command indents the current line like the previous nonblank line,
2226by calling @code{indent-relative} with @code{t} as the
2227@var{unindented-ok} argument. The return value is unpredictable.
73804d4b
RS
2228
2229If the previous nonblank line has no indent points beyond the current
2230column, this command does nothing.
2231@end deffn
2232
2233@node Indent Tabs
2234@comment node-name, next, previous, up
2235@subsection Adjustable ``Tab Stops''
2236@cindex tabs stops for indentation
2237
2238 This section explains the mechanism for user-specified ``tab stops''
61cfa852 2239and the mechanisms that use and set them. The name ``tab stops'' is
73804d4b
RS
2240used because the feature is similar to that of the tab stops on a
2241typewriter. The feature works by inserting an appropriate number of
2242spaces and tab characters to reach the next tab stop column; it does not
2243affect the display of tab characters in the buffer (@pxref{Usual
2244Display}). Note that the @key{TAB} character as input uses this tab
2245stop feature only in a few major modes, such as Text mode.
2246
2247@deffn Command tab-to-tab-stop
f9f59935
RS
2248This command inserts spaces or tabs before point, up to the next tab
2249stop column defined by @code{tab-stop-list}. It searches the list for
2250an element greater than the current column number, and uses that element
2251as the column to indent to. It does nothing if no such element is
2252found.
73804d4b
RS
2253@end deffn
2254
2255@defopt tab-stop-list
2256This variable is the list of tab stop columns used by
2257@code{tab-to-tab-stops}. The elements should be integers in increasing
2258order. The tab stop columns need not be evenly spaced.
2259
2260Use @kbd{M-x edit-tab-stops} to edit the location of tab stops
2261interactively.
2262@end defopt
2263
2264@node Motion by Indent
2265@subsection Indentation-Based Motion Commands
2266
2267 These commands, primarily for interactive use, act based on the
2268indentation in the text.
2269
177c0ea7 2270@deffn Command back-to-indentation
73804d4b
RS
2271@comment !!SourceFile simple.el
2272This command moves point to the first non-whitespace character in the
2273current line (which is the line in which point is located). It returns
2274@code{nil}.
2275@end deffn
2276
2b42d12a 2277@deffn Command backward-to-indentation &optional arg
73804d4b
RS
2278@comment !!SourceFile simple.el
2279This command moves point backward @var{arg} lines and then to the
2280first nonblank character on that line. It returns @code{nil}.
2b42d12a 2281If @var{arg} is omitted or @code{nil}, it defaults to 1.
73804d4b
RS
2282@end deffn
2283
2b42d12a 2284@deffn Command forward-to-indentation &optional arg
73804d4b
RS
2285@comment !!SourceFile simple.el
2286This command moves point forward @var{arg} lines and then to the first
2287nonblank character on that line. It returns @code{nil}.
2b42d12a 2288If @var{arg} is omitted or @code{nil}, it defaults to 1.
73804d4b
RS
2289@end deffn
2290
2291@node Case Changes
2292@comment node-name, next, previous, up
2293@section Case Changes
969fe9b5 2294@cindex case conversion in buffers
73804d4b
RS
2295
2296 The case change commands described here work on text in the current
969fe9b5
RS
2297buffer. @xref{Case Conversion}, for case conversion functions that work
2298on strings and characters. @xref{Case Tables}, for how to customize
73804d4b
RS
2299which characters are upper or lower case and how to convert them.
2300
2301@deffn Command capitalize-region start end
2302This function capitalizes all words in the region defined by
2303@var{start} and @var{end}. To capitalize means to convert each word's
2304first character to upper case and convert the rest of each word to lower
2305case. The function returns @code{nil}.
2306
2307If one end of the region is in the middle of a word, the part of the
2308word within the region is treated as an entire word.
2309
2310When @code{capitalize-region} is called interactively, @var{start} and
2311@var{end} are point and the mark, with the smallest first.
2312
2313@example
2314@group
2315---------- Buffer: foo ----------
2316This is the contents of the 5th foo.
2317---------- Buffer: foo ----------
2318@end group
2319
2320@group
2321(capitalize-region 1 44)
2322@result{} nil
2323
2324---------- Buffer: foo ----------
2325This Is The Contents Of The 5th Foo.
2326---------- Buffer: foo ----------
2327@end group
2328@end example
2329@end deffn
2330
2331@deffn Command downcase-region start end
2332This function converts all of the letters in the region defined by
2333@var{start} and @var{end} to lower case. The function returns
2334@code{nil}.
2335
2336When @code{downcase-region} is called interactively, @var{start} and
2337@var{end} are point and the mark, with the smallest first.
2338@end deffn
2339
2340@deffn Command upcase-region start end
2341This function converts all of the letters in the region defined by
2342@var{start} and @var{end} to upper case. The function returns
2343@code{nil}.
2344
2345When @code{upcase-region} is called interactively, @var{start} and
2346@var{end} are point and the mark, with the smallest first.
2347@end deffn
2348
2349@deffn Command capitalize-word count
2350This function capitalizes @var{count} words after point, moving point
2351over as it does. To capitalize means to convert each word's first
2352character to upper case and convert the rest of each word to lower case.
2353If @var{count} is negative, the function capitalizes the
2354@minus{}@var{count} previous words but does not move point. The value
2355is @code{nil}.
2356
61cfa852
RS
2357If point is in the middle of a word, the part of the word before point
2358is ignored when moving forward. The rest is treated as an entire word.
73804d4b
RS
2359
2360When @code{capitalize-word} is called interactively, @var{count} is
2361set to the numeric prefix argument.
2362@end deffn
2363
2364@deffn Command downcase-word count
2365This function converts the @var{count} words after point to all lower
2366case, moving point over as it does. If @var{count} is negative, it
2367converts the @minus{}@var{count} previous words but does not move point.
2368The value is @code{nil}.
2369
2370When @code{downcase-word} is called interactively, @var{count} is set
2371to the numeric prefix argument.
2372@end deffn
2373
2374@deffn Command upcase-word count
2375This function converts the @var{count} words after point to all upper
2376case, moving point over as it does. If @var{count} is negative, it
2377converts the @minus{}@var{count} previous words but does not move point.
2378The value is @code{nil}.
2379
2380When @code{upcase-word} is called interactively, @var{count} is set to
2381the numeric prefix argument.
2382@end deffn
2383
2384@node Text Properties
2385@section Text Properties
2386@cindex text properties
2387@cindex attributes of text
2388@cindex properties of text
2389
2390 Each character position in a buffer or a string can have a @dfn{text
2391property list}, much like the property list of a symbol (@pxref{Property
2392Lists}). The properties belong to a particular character at a
2393particular place, such as, the letter @samp{T} at the beginning of this
2394sentence or the first @samp{o} in @samp{foo}---if the same character
2395occurs in two different places, the two occurrences generally have
2396different properties.
2397
2398 Each property has a name and a value. Both of these can be any Lisp
2399object, but the name is normally a symbol. The usual way to access the
2400property list is to specify a name and ask what value corresponds to it.
2401
2402 If a character has a @code{category} property, we call it the
2403@dfn{category} of the character. It should be a symbol. The properties
2404of the symbol serve as defaults for the properties of the character.
2405
2406 Copying text between strings and buffers preserves the properties
2407along with the characters; this includes such diverse functions as
2408@code{substring}, @code{insert}, and @code{buffer-substring}.
2409
2410@menu
a6b73788
RS
2411* Examining Properties:: Looking at the properties of one character.
2412* Changing Properties:: Setting the properties of a range of text.
2413* Property Search:: Searching for where a property changes value.
2414* Special Properties:: Particular properties with special meanings.
2415* Format Properties:: Properties for representing formatting of text.
2416* Sticky Properties:: How inserted text gets properties from
2417 neighboring text.
2418* Saving Properties:: Saving text properties in files, and reading
2419 them back.
2420* Lazy Properties:: Computing text properties in a lazy fashion
2421 only when text is examined.
2422* Clickable Text:: Using text properties to make regions of text
2423 do something when you click on them.
2424* Fields:: The @code{field} property defines
2425 fields within the buffer.
2426* Not Intervals:: Why text properties do not use
2427 Lisp-visible text intervals.
73804d4b
RS
2428@end menu
2429
2430@node Examining Properties
2431@subsection Examining Text Properties
2432
2433 The simplest way to examine text properties is to ask for the value of
2434a particular property of a particular character. For that, use
2435@code{get-text-property}. Use @code{text-properties-at} to get the
2436entire property list of a character. @xref{Property Search}, for
2437functions to examine the properties of a number of characters at once.
2438
2439 These functions handle both strings and buffers. Keep in mind that
2440positions in a string start from 0, whereas positions in a buffer start
2441from 1.
2442
2443@defun get-text-property pos prop &optional object
2444This function returns the value of the @var{prop} property of the
2445character after position @var{pos} in @var{object} (a buffer or
2446string). The argument @var{object} is optional and defaults to the
2447current buffer.
2448
2449If there is no @var{prop} property strictly speaking, but the character
61cfa852 2450has a category that is a symbol, then @code{get-text-property} returns
73804d4b
RS
2451the @var{prop} property of that symbol.
2452@end defun
2453
6fac48b3 2454@defun get-char-property position prop &optional object
73804d4b
RS
2455This function is like @code{get-text-property}, except that it checks
2456overlays first and then text properties. @xref{Overlays}.
2457
2458The argument @var{object} may be a string, a buffer, or a window. If it
2459is a window, then the buffer displayed in that window is used for text
2460properties and overlays, but only the overlays active for that window
2461are considered. If @var{object} is a buffer, then all overlays in that
2462buffer are considered, as well as text properties. If @var{object} is a
2463string, only text properties are considered, since strings never have
2464overlays.
2465@end defun
2466
6fac48b3
RS
2467@defun get-char-property-and-overlay position prop &optional object
2468This is like @code{get-char-property}, but gives extra information
2469about the overlay that the property value comes from.
2470
2471Its value is a cons cell whose @sc{car} is the property value, the
2472same value @code{get-char-property} would return with the same
2473arguments. Its @sc{cdr} is the overlay in which the property was
2474found, or @code{nil}, if it was found as a text property or not found
2475at all.
2476
2477If @var{position} is at the end of @var{object}, both the @sc{car} and
2478the @sc{cdr} of the value are @code{nil}.
2479@end defun
2480
1f63f814
CW
2481@defvar char-property-alias-alist
2482This variable holds an alist which maps property names to a list of
2483alternative property names. If a character does not specify a direct
2484value for a property, the alternative property names are consulted in
74eee906 2485order; the first non-@code{nil} value is used. This variable takes
1f63f814
CW
2486precedence over @code{default-text-properties}, and @code{category}
2487properties take precedence over this variable.
2488@end defvar
2489
73804d4b
RS
2490@defun text-properties-at position &optional object
2491This function returns the entire property list of the character at
2492@var{position} in the string or buffer @var{object}. If @var{object} is
2493@code{nil}, it defaults to the current buffer.
2494@end defun
2495
22697dac
KH
2496@defvar default-text-properties
2497This variable holds a property list giving default values for text
2498properties. Whenever a character does not specify a value for a
1f63f814
CW
2499property, neither directly, through a category symbol, or through
2500@code{char-property-alias-alist}, the value stored in this list is
2501used instead. Here is an example:
22697dac
KH
2502
2503@example
1f63f814
CW
2504(setq default-text-properties '(foo 69)
2505 char-property-alias-alist nil)
22697dac
KH
2506;; @r{Make sure character 1 has no properties of its own.}
2507(set-text-properties 1 2 nil)
2508;; @r{What we get, when we ask, is the default value.}
2509(get-text-property 1 'foo)
2510 @result{} 69
2511@end example
2512@end defvar
2513
73804d4b
RS
2514@node Changing Properties
2515@subsection Changing Text Properties
2516
2517 The primitives for changing properties apply to a specified range of
e78ea3db
RS
2518text in a buffer or string. The function @code{set-text-properties}
2519(see end of section) sets the entire property list of the text in that
2520range; more often, it is useful to add, change, or delete just certain
2521properties specified by name.
73804d4b 2522
e78ea3db 2523 Since text properties are considered part of the contents of the
9a36dd51
RS
2524buffer (or string), and can affect how a buffer looks on the screen,
2525any change in buffer text properties marks the buffer as modified.
2526Buffer text property changes are undoable also (@pxref{Undo}).
2527Positions in a string start from 0, whereas positions in a buffer
2528start from 1.
73804d4b 2529
bfe721d1
KH
2530@defun put-text-property start end prop value &optional object
2531This function sets the @var{prop} property to @var{value} for the text
2532between @var{start} and @var{end} in the string or buffer @var{object}.
2533If @var{object} is @code{nil}, it defaults to the current buffer.
2534@end defun
2535
73804d4b 2536@defun add-text-properties start end props &optional object
f9f59935 2537This function adds or overrides text properties for the text between
73804d4b
RS
2538@var{start} and @var{end} in the string or buffer @var{object}. If
2539@var{object} is @code{nil}, it defaults to the current buffer.
2540
f9f59935
RS
2541The argument @var{props} specifies which properties to add. It should
2542have the form of a property list (@pxref{Property Lists}): a list whose
2543elements include the property names followed alternately by the
73804d4b
RS
2544corresponding values.
2545
2546The return value is @code{t} if the function actually changed some
2547property's value; @code{nil} otherwise (if @var{props} is @code{nil} or
2548its values agree with those in the text).
2549
2550For example, here is how to set the @code{comment} and @code{face}
2551properties of a range of text:
2552
2553@example
2554(add-text-properties @var{start} @var{end}
2555 '(comment t face highlight))
2556@end example
2557@end defun
2558
73804d4b
RS
2559@defun remove-text-properties start end props &optional object
2560This function deletes specified text properties from the text between
2561@var{start} and @var{end} in the string or buffer @var{object}. If
2562@var{object} is @code{nil}, it defaults to the current buffer.
2563
2564The argument @var{props} specifies which properties to delete. It
2565should have the form of a property list (@pxref{Property Lists}): a list
2566whose elements are property names alternating with corresponding values.
2567But only the names matter---the values that accompany them are ignored.
2568For example, here's how to remove the @code{face} property.
2569
2570@example
2571(remove-text-properties @var{start} @var{end} '(face nil))
2572@end example
2573
2574The return value is @code{t} if the function actually changed some
2575property's value; @code{nil} otherwise (if @var{props} is @code{nil} or
2576if no character in the specified text had any of those properties).
e78ea3db
RS
2577
2578To remove all text properties from certain text, use
2579@code{set-text-properties} and specify @code{nil} for the new property
2580list.
73804d4b
RS
2581@end defun
2582
d73eac4d
RS
2583@defun remove-list-of-text-properties start end list-of-properties &optional object
2584Like @code{remove-list-properties} except that
2585@var{list-of-properties} is a list property names only, not an
2586alternating list of property values.
2587@end defun
2588
73804d4b
RS
2589@defun set-text-properties start end props &optional object
2590This function completely replaces the text property list for the text
2591between @var{start} and @var{end} in the string or buffer @var{object}.
2592If @var{object} is @code{nil}, it defaults to the current buffer.
2593
2594The argument @var{props} is the new property list. It should be a list
2595whose elements are property names alternating with corresponding values.
2596
2597After @code{set-text-properties} returns, all the characters in the
2598specified range have identical properties.
2599
2600If @var{props} is @code{nil}, the effect is to get rid of all properties
2601from the specified range of text. Here's an example:
2602
2603@example
2604(set-text-properties @var{start} @var{end} nil)
2605@end example
a40d4712
PR
2606@end defun
2607
2608 The easiest way to make a string with text properties
2609is with @code{propertize}:
2610
2611@defun propertize string &rest properties
2612@tindex propertize
2613This function returns a copy of @var{string} which has the text
2614properties @var{properties}. These properties apply to all the
2615characters in the string that is returned. Here is an example that
2616constructs a string with a @code{face} property and a @code{mouse-face}
2617property:
2618
2619@smallexample
2620(propertize "foo" 'face 'italic
2621 'mouse-face 'bold-italic)
2622 @result{} #("foo" 0 3 (mouse-face bold-italic face italic))
2623@end smallexample
2624
2625To put different properties on various parts of a string, you can
2626construct each part with @code{propertize} and then combine them with
2627@code{concat}:
2628
2629@smallexample
2630(concat
2631 (propertize "foo" 'face 'italic
2632 'mouse-face 'bold-italic)
2633 " and "
2634 (propertize "bar" 'face 'italic
2635 'mouse-face 'bold-italic))
2636 @result{} #("foo and bar"
2637 0 3 (face italic mouse-face bold-italic)
2638 3 8 nil
2639 8 11 (face italic mouse-face bold-italic))
2640@end smallexample
73804d4b
RS
2641@end defun
2642
f9f59935 2643 See also the function @code{buffer-substring-no-properties}
22697dac
KH
2644(@pxref{Buffer Contents}) which copies text from the buffer
2645but does not copy its properties.
2646
73804d4b 2647@node Property Search
f9f59935 2648@subsection Text Property Search Functions
73804d4b 2649
f9f59935 2650 In typical use of text properties, most of the time several or many
73804d4b
RS
2651consecutive characters have the same value for a property. Rather than
2652writing your programs to examine characters one by one, it is much
2653faster to process chunks of text that have the same property value.
2654
f9f59935 2655 Here are functions you can use to do this. They use @code{eq} for
bfe721d1
KH
2656comparing property values. In all cases, @var{object} defaults to the
2657current buffer.
73804d4b 2658
f9f59935 2659 For high performance, it's very important to use the @var{limit}
73804d4b 2660argument to these functions, especially the ones that search for a
bfe721d1
KH
2661single property---otherwise, they may spend a long time scanning to the
2662end of the buffer, if the property you are interested in does not change.
73804d4b 2663
f9f59935
RS
2664 These functions do not move point; instead, they return a position (or
2665@code{nil}). Remember that a position is always between two characters;
2666the position returned by these functions is between two characters with
2667different properties.
61cfa852 2668
73804d4b
RS
2669@defun next-property-change pos &optional object limit
2670The function scans the text forward from position @var{pos} in the
2671string or buffer @var{object} till it finds a change in some text
2672property, then returns the position of the change. In other words, it
2673returns the position of the first character beyond @var{pos} whose
2674properties are not identical to those of the character just after
2675@var{pos}.
2676
2677If @var{limit} is non-@code{nil}, then the scan ends at position
177c0ea7 2678@var{limit}. If there is no property change before that point,
73804d4b
RS
2679@code{next-property-change} returns @var{limit}.
2680
2681The value is @code{nil} if the properties remain unchanged all the way
61cfa852
RS
2682to the end of @var{object} and @var{limit} is @code{nil}. If the value
2683is non-@code{nil}, it is a position greater than or equal to @var{pos}.
2684The value equals @var{pos} only when @var{limit} equals @var{pos}.
73804d4b
RS
2685
2686Here is an example of how to scan the buffer by chunks of text within
2687which all properties are constant:
2688
2689@smallexample
2690(while (not (eobp))
2691 (let ((plist (text-properties-at (point)))
2692 (next-change
2693 (or (next-property-change (point) (current-buffer))
2694 (point-max))))
2695 @r{Process text from point to @var{next-change}@dots{}}
2696 (goto-char next-change)))
2697@end smallexample
2698@end defun
2699
2700@defun next-single-property-change pos prop &optional object limit
2701The function scans the text forward from position @var{pos} in the
2702string or buffer @var{object} till it finds a change in the @var{prop}
2703property, then returns the position of the change. In other words, it
2704returns the position of the first character beyond @var{pos} whose
2705@var{prop} property differs from that of the character just after
2706@var{pos}.
2707
2708If @var{limit} is non-@code{nil}, then the scan ends at position
177c0ea7 2709@var{limit}. If there is no property change before that point,
73804d4b
RS
2710@code{next-single-property-change} returns @var{limit}.
2711
2712The value is @code{nil} if the property remains unchanged all the way to
2713the end of @var{object} and @var{limit} is @code{nil}. If the value is
2714non-@code{nil}, it is a position greater than or equal to @var{pos}; it
2715equals @var{pos} only if @var{limit} equals @var{pos}.
2716@end defun
2717
2718@defun previous-property-change pos &optional object limit
2719This is like @code{next-property-change}, but scans back from @var{pos}
2720instead of forward. If the value is non-@code{nil}, it is a position
2721less than or equal to @var{pos}; it equals @var{pos} only if @var{limit}
2722equals @var{pos}.
73804d4b
RS
2723@end defun
2724
2725@defun previous-single-property-change pos prop &optional object limit
61cfa852
RS
2726This is like @code{next-single-property-change}, but scans back from
2727@var{pos} instead of forward. If the value is non-@code{nil}, it is a
2728position less than or equal to @var{pos}; it equals @var{pos} only if
2729@var{limit} equals @var{pos}.
73804d4b
RS
2730@end defun
2731
9db3a582 2732@defun next-char-property-change pos &optional limit
f9f59935 2733This is like @code{next-property-change} except that it considers
9db3a582
MB
2734overlay properties as well as text properties, and if no change is
2735found before the end of the buffer, it returns the maximum buffer
2736position rather than @code{nil} (in this sense, it resembles the
2737corresponding overlay function @code{next-overlay-change}, rather than
2738@code{next-property-change}). There is no @var{object} operand
2739because this function operates only on the current buffer. It returns
2740the next address at which either kind of property changes.
f9f59935
RS
2741@end defun
2742
9db3a582 2743@defun previous-char-property-change pos &optional limit
f9f59935 2744This is like @code{next-char-property-change}, but scans back from
9db3a582
MB
2745@var{pos} instead of forward, and returns the minimum buffer
2746position if no change is found.
2747@end defun
2748
2749@defun next-single-char-property-change pos prop &optional object limit
adce7d83 2750@tindex next-single-char-property-change
9db3a582
MB
2751This is like @code{next-single-property-change} except that it
2752considers overlay properties as well as text properties, and if no
2753change is found before the end of the @var{object}, it returns the
2754maximum valid position in @var{object} rather than @code{nil}. Unlike
2755@code{next-char-property-change}, this function @emph{does} have an
2756@var{object} operand; if @var{object} is not a buffer, only
2757text-properties are considered.
2758@end defun
2759
2760@defun previous-single-char-property-change pos prop &optional object limit
adce7d83 2761@tindex previous-single-char-property-change
9db3a582
MB
2762This is like @code{next-single-char-property-change}, but scans back
2763from @var{pos} instead of forward, and returns the minimum valid
2764position in @var{object} if no change is found.
f9f59935
RS
2765@end defun
2766
73804d4b
RS
2767@defun text-property-any start end prop value &optional object
2768This function returns non-@code{nil} if at least one character between
2769@var{start} and @var{end} has a property @var{prop} whose value is
2770@var{value}. More precisely, it returns the position of the first such
2771character. Otherwise, it returns @code{nil}.
2772
2773The optional fifth argument, @var{object}, specifies the string or
2774buffer to scan. Positions are relative to @var{object}. The default
2775for @var{object} is the current buffer.
2776@end defun
2777
2778@defun text-property-not-all start end prop value &optional object
2779This function returns non-@code{nil} if at least one character between
f9f59935
RS
2780@var{start} and @var{end} does not have a property @var{prop} with value
2781@var{value}. More precisely, it returns the position of the first such
2782character. Otherwise, it returns @code{nil}.
73804d4b
RS
2783
2784The optional fifth argument, @var{object}, specifies the string or
2785buffer to scan. Positions are relative to @var{object}. The default
2786for @var{object} is the current buffer.
2787@end defun
2788
2789@node Special Properties
2790@subsection Properties with Special Meanings
2791
bfe721d1 2792 Here is a table of text property names that have special built-in
969fe9b5
RS
2793meanings. The following sections list a few additional special property
2794names that control filling and property inheritance. All other names
2795have no standard meaning, and you can use them as you like.
bfe721d1 2796
73804d4b
RS
2797@table @code
2798@cindex category of text character
2799@kindex category @r{(text property)}
2800@item category
2801If a character has a @code{category} property, we call it the
2802@dfn{category} of the character. It should be a symbol. The properties
2803of the symbol serve as defaults for the properties of the character.
2804
2805@item face
2806@cindex face codes of text
2807@kindex face @r{(text property)}
2808You can use the property @code{face} to control the font and color of
8241495d
RS
2809text. @xref{Faces}, for more information.
2810
2811In the simplest case, the value is a face name. It can also be a list;
2812then each element can be any of these possibilities;
2813
2814@itemize @bullet
2815@item
2816A face name (a symbol or string).
f9f59935 2817
8241495d
RS
2818@item
2819Starting in Emacs 21, a property list of face attributes. This has the
2820form (@var{keyword} @var{value} @dots{}), where each @var{keyword} is a
2821face attribute name and @var{value} is a meaningful value for that
2822attribute. With this feature, you do not need to create a face each
2823time you want to specify a particular attribute for certain text.
2824@xref{Face Attributes}.
2825
2826@item
2827A cons cell of the form @code{(foreground-color . @var{color-name})} or
2828@code{(background-color . @var{color-name})}. These elements specify
2829just the foreground color or just the background color.
2830
2831@code{(foreground-color . @var{color-name})} is equivalent to
2832@code{(:foreground @var{color-name})}, and likewise for the background.
2833@end itemize
f9f59935 2834
1f63f814
CW
2835You can use Font Lock Mode (@pxref{Font Lock Mode}), to dynamically
2836update @code{face} properties based on the contents of the text.
2837
2838@item font-lock-face
2839@kindex font-lock-face @r{(text property)}
2840The @code{font-lock-face} property is the same in all respects as the
2841@code{face} property, but its state of activation is controlled by
2842@code{font-lock-mode}. This can be advantageous for special buffers
2843which are not intended to be user-editable, or for static areas of
2844text which are always fontified in the same way.
2845@xref{Precalculated Fontification}.
2846
2847Strictly speaking, @code{font-lock-face} is not a built-in text
2848property; rather, it is implemented in Font Lock mode using
2849@code{char-property-alias-alist}. @xref{Examining Properties}.
2850
2851This property is new in Emacs 21.4.
73804d4b
RS
2852
2853@item mouse-face
2854@kindex mouse-face @r{(text property)}
2855The property @code{mouse-face} is used instead of @code{face} when the
2856mouse is on or near the character. For this purpose, ``near'' means
2857that all text between the character and where the mouse is have the same
2858@code{mouse-face} property value.
2859
8241495d
RS
2860@item fontified
2861@kindex fontified @r{(text property)}
2862This property, if non-@code{nil}, says that text in the buffer has
2863had faces assigned automatically by a feature such as Font-Lock mode.
2864@xref{Auto Faces}.
2865
2866@item display
2867@kindex display @r{(text property)}
2868This property activates various features that change the
2869way text is displayed. For example, it can make text appear taller
75708135 2870or shorter, higher or lower, wider or narrow, or replaced with an image.
8241495d
RS
2871@xref{Display Property}.
2872
2873@item help-echo
2874@kindex help-echo @r{(text property)}
85378c3f 2875@cindex tooltip
b6dd5963 2876@anchor{Text help-echo}
8241495d
RS
2877If text has a string as its @code{help-echo} property, then when you
2878move the mouse onto that text, Emacs displays that string in the echo
85378c3f
RS
2879area, or in the tooltip window (@pxref{Tooltips,,, emacs, The GNU Emacs
2880Manual}).
b6dd5963 2881
05cae5d0 2882If the value of the @code{help-echo} property is a function, that
b6dd5963 2883function is called with three arguments, @var{window}, @var{object} and
05cae5d0 2884@var{position} and should return a help string or @var{nil} for
b6dd5963
DL
2885none. The first argument, @var{window} is the window in which
2886the help was found. The second, @var{object}, is the buffer, overlay or
2887string which had the @code{help-echo} property. The @var{position}
2888argument is as follows:
2889
2890@itemize @bullet{}
2891@item
2892If @var{object} is a buffer, @var{pos} is the position in the buffer
2893where the @code{help-echo} text property was found.
2894@item
2895If @var{object} is an overlay, that overlay has a @code{help-echo}
2896property, and @var{pos} is the position in the overlay's buffer under
2897the mouse.
2898@item
2899If @var{object} is a string (an overlay string or a string displayed
05cae5d0 2900with the @code{display} property), @var{pos} is the position in that
b6dd5963
DL
2901string under the mouse.
2902@end itemize
2903
2904If the value of the @code{help-echo} property is neither a function nor
2905a string, it is evaluated to obtain a help string.
2906
05cae5d0
DL
2907You can alter the way help text is displayed by setting the variable
2908@code{show-help-function} (@pxref{Help display}).
b6dd5963 2909
2e46cd09 2910This feature is used in the mode line and for other active text.
8241495d 2911
0b3da4ec 2912@item keymap
1bd2023a 2913@cindex keymap of character
0b3da4ec 2914@kindex keymap @r{(text property)}
1bd2023a 2915The @code{keymap} property specifies an additional keymap for
41332983
RS
2916commands. The property's value for the character before point applies
2917if it is non-@code{nil} and rear-sticky, and the property's value for
2918the character after point applies if it is non-@code{nil} and
6fac48b3
RS
2919front-sticky. (For mouse clicks, the position of the click is used
2920instead of the position of point.) If the property value is a symbol,
2921the symbol's function definition is used as the keymap.
2922
2923When this keymap applies, it is used for key lookup before the minor
2924mode keymaps and before the buffer's local map. @xref{Active
2925Keymaps}.
1bd2023a
RS
2926
2927@item local-map
2928@kindex local-map @r{(text property)}
41332983
RS
2929This property works like @code{keymap} except that it specifies a
2930keymap to use @emph{instead of} the buffer's local map. For most
2931purposes (perhaps all purposes), the @code{keymap} is superior.
0b3da4ec 2932
f9f59935
RS
2933@item syntax-table
2934The @code{syntax-table} property overrides what the syntax table says
2935about this particular character. @xref{Syntax Properties}.
73804d4b
RS
2936
2937@item read-only
2938@cindex read-only character
2939@kindex read-only @r{(text property)}
2940If a character has the property @code{read-only}, then modifying that
2468d0c0
DL
2941character is not allowed. Any command that would do so gets an error,
2942@code{text-read-only}.
73804d4b
RS
2943
2944Insertion next to a read-only character is an error if inserting
2945ordinary text there would inherit the @code{read-only} property due to
2946stickiness. Thus, you can control permission to insert next to
2947read-only text by controlling the stickiness. @xref{Sticky Properties}.
2948
2949Since changing properties counts as modifying the buffer, it is not
2950possible to remove a @code{read-only} property unless you know the
2951special trick: bind @code{inhibit-read-only} to a non-@code{nil} value
2952and then remove the property. @xref{Read Only Buffers}.
2953
2954@item invisible
2955@kindex invisible @r{(text property)}
22697dac
KH
2956A non-@code{nil} @code{invisible} property can make a character invisible
2957on the screen. @xref{Invisible Text}, for details.
73804d4b 2958
72654a3c
RS
2959@item intangible
2960@kindex intangible @r{(text property)}
22697dac
KH
2961If a group of consecutive characters have equal and non-@code{nil}
2962@code{intangible} properties, then you cannot place point between them.
bfe721d1
KH
2963If you try to move point forward into the group, point actually moves to
2964the end of the group. If you try to move point backward into the group,
22697dac
KH
2965point actually moves to the start of the group.
2966
2967When the variable @code{inhibit-point-motion-hooks} is non-@code{nil},
2968the @code{intangible} property is ignored.
72654a3c 2969
2468d0c0
DL
2970@item field
2971@kindex field @r{(text property)}
2972Consecutive characters with the same @code{field} property constitute a
2973@dfn{field}. Some motion functions including @code{forward-word} and
2974@code{beginning-of-line} stop moving at a field boundary.
2975@xref{Fields}.
2976
73804d4b
RS
2977@item modification-hooks
2978@cindex change hooks for a character
2979@cindex hooks for changing a character
2980@kindex modification-hooks @r{(text property)}
2981If a character has the property @code{modification-hooks}, then its
2982value should be a list of functions; modifying that character calls all
2983of those functions. Each function receives two arguments: the beginning
2984and end of the part of the buffer being modified. Note that if a
2985particular modification hook function appears on several characters
2986being modified by a single primitive, you can't predict how many times
2987the function will be called.
2988
2989@item insert-in-front-hooks
2990@itemx insert-behind-hooks
2991@kindex insert-in-front-hooks @r{(text property)}
2992@kindex insert-behind-hooks @r{(text property)}
9ea65df9
RS
2993The operation of inserting text in a buffer also calls the functions
2994listed in the @code{insert-in-front-hooks} property of the following
2995character and in the @code{insert-behind-hooks} property of the
2996preceding character. These functions receive two arguments, the
2997beginning and end of the inserted text. The functions are called
2998@emph{after} the actual insertion takes place.
73804d4b
RS
2999
3000See also @ref{Change Hooks}, for other hooks that are called
3001when you change text in a buffer.
3002
3003@item point-entered
3004@itemx point-left
3005@cindex hooks for motion of point
3006@kindex point-entered @r{(text property)}
3007@kindex point-left @r{(text property)}
3008The special properties @code{point-entered} and @code{point-left}
3009record hook functions that report motion of point. Each time point
3010moves, Emacs compares these two property values:
3011
3012@itemize @bullet
3013@item
3014the @code{point-left} property of the character after the old location,
3015and
3016@item
3017the @code{point-entered} property of the character after the new
3018location.
3019@end itemize
3020
3021@noindent
3022If these two values differ, each of them is called (if not @code{nil})
3023with two arguments: the old value of point, and the new one.
3024
3025The same comparison is made for the characters before the old and new
3026locations. The result may be to execute two @code{point-left} functions
3027(which may be the same function) and/or two @code{point-entered}
61cfa852
RS
3028functions (which may be the same function). In any case, all the
3029@code{point-left} functions are called first, followed by all the
3030@code{point-entered} functions.
73804d4b 3031
2a233172
RS
3032It is possible with @code{char-after} to examine characters at various
3033buffer positions without moving point to those positions. Only an
3034actual change in the value of point runs these hook functions.
73804d4b
RS
3035@end table
3036
3037@defvar inhibit-point-motion-hooks
3038When this variable is non-@code{nil}, @code{point-left} and
22697dac 3039@code{point-entered} hooks are not run, and the @code{intangible}
f9f59935
RS
3040property has no effect. Do not set this variable globally; bind it with
3041@code{let}.
73804d4b
RS
3042@end defvar
3043
b6dd5963
DL
3044@defvar show-help-function
3045@tindex show-help-function
05cae5d0
DL
3046@anchor{Help display} If this variable is non-@code{nil}, it specifies a
3047function called to display help strings. These may be @code{help-echo}
3048properties, menu help strings (@pxref{Simple Menu Items},
3049@pxref{Extended Menu Items}), or tool bar help strings (@pxref{Tool
3050Bar}). The specified function is called with one argument, the help
0b2fb045
WL
3051string to display. Tooltip mode (@pxref{Tooltips,,, emacs, The GNU Emacs
3052Manual}) provides an example.
b6dd5963
DL
3053@end defvar
3054
22697dac 3055@node Format Properties
bfe721d1 3056@subsection Formatted Text Properties
22697dac
KH
3057
3058 These text properties affect the behavior of the fill commands. They
bfe721d1
KH
3059are used for representing formatted text. @xref{Filling}, and
3060@ref{Margins}.
22697dac 3061
bfe721d1 3062@table @code
22697dac
KH
3063@item hard
3064If a newline character has this property, it is a ``hard'' newline.
3065The fill commands do not alter hard newlines and do not move words
3066across them. However, this property takes effect only if the variable
3067@code{use-hard-newlines} is non-@code{nil}.
3068
3069@item right-margin
bfe721d1 3070This property specifies an extra right margin for filling this part of the
22697dac
KH
3071text.
3072
3073@item left-margin
bfe721d1 3074This property specifies an extra left margin for filling this part of the
22697dac
KH
3075text.
3076
3077@item justification
3078This property specifies the style of justification for filling this part
3079of the text.
3080@end table
3081
73804d4b
RS
3082@node Sticky Properties
3083@subsection Stickiness of Text Properties
3084@cindex sticky text properties
3085@cindex inheritance of text properties
3086
3087 Self-inserting characters normally take on the same properties as the
3088preceding character. This is called @dfn{inheritance} of properties.
3089
3090 In a Lisp program, you can do insertion with inheritance or without,
3091depending on your choice of insertion primitive. The ordinary text
3092insertion functions such as @code{insert} do not inherit any properties.
3093They insert text with precisely the properties of the string being
3094inserted, and no others. This is correct for programs that copy text
61cfa852
RS
3095from one context to another---for example, into or out of the kill ring.
3096To insert with inheritance, use the special primitives described in this
3097section. Self-inserting characters inherit properties because they work
3098using these primitives.
73804d4b
RS
3099
3100 When you do insertion with inheritance, @emph{which} properties are
2468d0c0
DL
3101inherited, and from where, depends on which properties are @dfn{sticky}.
3102Insertion after a character inherits those of its properties that are
73804d4b 3103@dfn{rear-sticky}. Insertion before a character inherits those of its
2468d0c0
DL
3104properties that are @dfn{front-sticky}. When both sides offer different
3105sticky values for the same property, the previous character's value
3106takes precedence.
3107
3108 By default, a text property is rear-sticky but not front-sticky; thus,
3109the default is to inherit all the properties of the preceding character,
3110and nothing from the following character.
3111
3112 You can control the stickiness of various text properties with two
3113specific text properties, @code{front-sticky} and @code{rear-nonsticky},
3114and with the variable @code{text-property-default-nonsticky}. You can
3115use the variable to specify a different default for a given property.
3116You can use those two text properties to make any specific properties
3117sticky or nonsticky in any particular part of the text.
73804d4b
RS
3118
3119 If a character's @code{front-sticky} property is @code{t}, then all
3120its properties are front-sticky. If the @code{front-sticky} property is
3121a list, then the sticky properties of the character are those whose
3122names are in the list. For example, if a character has a
3123@code{front-sticky} property whose value is @code{(face read-only)},
3124then insertion before the character can inherit its @code{face} property
3125and its @code{read-only} property, but no others.
3126
75708135
RS
3127 The @code{rear-nonsticky} property works the opposite way. Most
3128properties are rear-sticky by default, so the @code{rear-nonsticky}
3129property says which properties are @emph{not} rear-sticky. If a
3130character's @code{rear-nonsticky} property is @code{t}, then none of its
3131properties are rear-sticky. If the @code{rear-nonsticky} property is a
3132list, properties are rear-sticky @emph{unless} their names are in the
3133list.
73804d4b 3134
2468d0c0
DL
3135@defvar text-property-default-nonsticky
3136@tindex text-property-default-nonsticky
3137This variable holds an alist which defines the default rear-stickiness
3138of various text properties. Each element has the form
3139@code{(@var{property} . @var{nonstickiness})}, and it defines the
3140stickiness of a particular text property, @var{property}.
3141
3142If @var{nonstickiness} is non-@code{nil}, this means that the property
3143@var{property} is rear-nonsticky by default. Since all properties are
3144front-nonsticky by default, this makes @var{property} nonsticky in both
3145directions by default.
3146
3147The text properties @code{front-sticky} and @code{rear-nonsticky}, when
8b6c1445 3148used, take precedence over the default @var{nonstickiness} specified in
2468d0c0
DL
3149@code{text-property-default-nonsticky}.
3150@end defvar
73804d4b
RS
3151
3152 Here are the functions that insert text with inheritance of properties:
3153
3154@defun insert-and-inherit &rest strings
3155Insert the strings @var{strings}, just like the function @code{insert},
3156but inherit any sticky properties from the adjoining text.
3157@end defun
3158
3159@defun insert-before-markers-and-inherit &rest strings
3160Insert the strings @var{strings}, just like the function
3161@code{insert-before-markers}, but inherit any sticky properties from the
3162adjoining text.
3163@end defun
3164
f9f59935
RS
3165 @xref{Insertion}, for the ordinary insertion functions which do not
3166inherit.
3167
73804d4b 3168@node Saving Properties
61cfa852 3169@subsection Saving Text Properties in Files
73804d4b
RS
3170@cindex text properties in files
3171@cindex saving text properties
3172
f9f59935
RS
3173 You can save text properties in files (along with the text itself),
3174and restore the same text properties when visiting or inserting the
3175files, using these two hooks:
73804d4b 3176
bfe721d1 3177@defvar write-region-annotate-functions
73804d4b
RS
3178This variable's value is a list of functions for @code{write-region} to
3179run to encode text properties in some fashion as annotations to the text
3180being written in the file. @xref{Writing to Files}.
3181
3182Each function in the list is called with two arguments: the start and
3183end of the region to be written. These functions should not alter the
3184contents of the buffer. Instead, they should return lists indicating
3185annotations to write in the file in addition to the text in the
3186buffer.
3187
3188Each function should return a list of elements of the form
3189@code{(@var{position} . @var{string})}, where @var{position} is an
f9f59935
RS
3190integer specifying the relative position within the text to be written,
3191and @var{string} is the annotation to add there.
73804d4b
RS
3192
3193Each list returned by one of these functions must be already sorted in
3194increasing order by @var{position}. If there is more than one function,
3195@code{write-region} merges the lists destructively into one sorted list.
3196
3197When @code{write-region} actually writes the text from the buffer to the
3198file, it intermixes the specified annotations at the corresponding
3199positions. All this takes place without modifying the buffer.
3200@end defvar
3201
3202@defvar after-insert-file-functions
3203This variable holds a list of functions for @code{insert-file-contents}
3204to call after inserting a file's contents. These functions should scan
3205the inserted text for annotations, and convert them to the text
3206properties they stand for.
3207
3208Each function receives one argument, the length of the inserted text;
3209point indicates the start of that text. The function should scan that
3210text for annotations, delete them, and create the text properties that
3211the annotations specify. The function should return the updated length
3212of the inserted text, as it stands after those changes. The value
3213returned by one function becomes the argument to the next function.
3214
3215These functions should always return with point at the beginning of
3216the inserted text.
3217
3218The intended use of @code{after-insert-file-functions} is for converting
3219some sort of textual annotations into actual text properties. But other
3220uses may be possible.
3221@end defvar
3222
3223We invite users to write Lisp programs to store and retrieve text
3224properties in files, using these hooks, and thus to experiment with
177c0ea7 3225various data formats and find good ones. Eventually we hope users
73804d4b
RS
3226will produce good, general extensions we can install in Emacs.
3227
f9f59935
RS
3228We suggest not trying to handle arbitrary Lisp objects as text property
3229names or values---because a program that general is probably difficult
3230to write, and slow. Instead, choose a set of possible data types that
3231are reasonably flexible, and not too hard to encode.
73804d4b 3232
bfe721d1
KH
3233@xref{Format Conversion}, for a related feature.
3234
3235@c ??? In next edition, merge this info Format Conversion.
3236
61ee3601
RS
3237@node Lazy Properties
3238@subsection Lazy Computation of Text Properties
3239
3240 Instead of computing text properties for all the text in the buffer,
3241you can arrange to compute the text properties for parts of the text
3242when and if something depends on them.
3243
3244 The primitive that extracts text from the buffer along with its
3245properties is @code{buffer-substring}. Before examining the properties,
3246this function runs the abnormal hook @code{buffer-access-fontify-functions}.
3247
3248@defvar buffer-access-fontify-functions
3249This variable holds a list of functions for computing text properties.
3250Before @code{buffer-substring} copies the text and text properties for a
3251portion of the buffer, it calls all the functions in this list. Each of
3252the functions receives two arguments that specify the range of the
3253buffer being accessed. (The buffer itself is always the current
3254buffer.)
3255@end defvar
3256
3257 The function @code{buffer-substring-no-properties} does not call these
3258functions, since it ignores text properties anyway.
3259
3260 In order to prevent the hook functions from being called more than
3261once for the same part of the buffer, you can use the variable
3262@code{buffer-access-fontified-property}.
3263
3264@defvar buffer-access-fontified-property
3265If this value's variable is non-@code{nil}, it is a symbol which is used
3266as a text property name. A non-@code{nil} value for that text property
3267means, ``the other text properties for this character have already been
3268computed.''
3269
3270If all the characters in the range specified for @code{buffer-substring}
3271have a non-@code{nil} value for this property, @code{buffer-substring}
3272does not call the @code{buffer-access-fontify-functions} functions. It
3273assumes these characters already have the right text properties, and
3274just copies the properties they already have.
3275
3276The normal way to use this feature is that the
3277@code{buffer-access-fontify-functions} functions add this property, as
3278well as others, to the characters they operate on. That way, they avoid
3279being called over and over for the same text.
3280@end defvar
3281
f9f59935
RS
3282@node Clickable Text
3283@subsection Defining Clickable Text
3284@cindex clickable text
3285
3286 There are two ways to set up @dfn{clickable text} in a buffer.
3287There are typically two parts of this: to make the text highlight
3288when the mouse is over it, and to make a mouse button do something
3289when you click it on that part of the text.
3290
3291 Highlighting is done with the @code{mouse-face} text property.
3292Here is an example of how Dired does it:
3293
3294@smallexample
3295(condition-case nil
3296 (if (dired-move-to-filename)
3297 (put-text-property (point)
3298 (save-excursion
3299 (dired-move-to-end-of-filename)
3300 (point))
3301 'mouse-face 'highlight))
3302 (error nil))
3303@end smallexample
3304
3305@noindent
3306The first two arguments to @code{put-text-property} specify the
3307beginning and end of the text.
3308
3309 The usual way to make the mouse do something when you click it
3310on this text is to define @code{mouse-2} in the major mode's
3311keymap. The job of checking whether the click was on clickable text
3312is done by the command definition. Here is how Dired does it:
3313
3314@smallexample
3315(defun dired-mouse-find-file-other-window (event)
3316 "In dired, visit the file or directory name you click on."
3317 (interactive "e")
3318 (let (file)
3319 (save-excursion
3320 (set-buffer (window-buffer (posn-window (event-end event))))
3321 (save-excursion
969fe9b5
RS
3322 (goto-char (posn-point (event-end event)))
3323 (setq file (dired-get-filename))))
f9f59935
RS
3324 (select-window (posn-window (event-end event)))
3325 (find-file-other-window (file-name-sans-versions file t))))
3326@end smallexample
3327
3328@noindent
3329The reason for the outer @code{save-excursion} construct is to avoid
3330changing the current buffer; the reason for the inner one is to avoid
3331permanently altering point in the buffer you click on. In this case,
3332Dired uses the function @code{dired-get-filename} to determine which
3333file to visit, based on the position found in the event.
3334
3335 Instead of defining a mouse command for the major mode, you can define
c26a99e8 3336a key binding for the clickable text itself, using the @code{keymap}
ce75fd23 3337text property:
f9f59935
RS
3338
3339@example
3340(let ((map (make-sparse-keymap)))
c26a99e8 3341 (define-key map [mouse-2] 'operate-this-button)
f9f59935
RS
3342 (put-text-property (point)
3343 (save-excursion
3344 (dired-move-to-end-of-filename)
3345 (point))
c26a99e8 3346 'keymap map))
f9f59935
RS
3347@end example
3348
3349@noindent
3350This method makes it possible to define different commands for various
3351clickable pieces of text. Also, the major mode definition (or the
3352global definition) remains available for the rest of the text in the
3353buffer.
3354
2468d0c0
DL
3355@node Fields
3356@subsection Defining and Using Fields
3357@cindex fields
3358
3359 A field is a range of consecutive characters in the buffer that are
3360identified by having the same value (comparing with @code{eq}) of the
35627f72
MB
3361@code{field} property (either a text-property or an overlay property).
3362This section describes special functions that are available for
3363operating on fields.
2468d0c0
DL
3364
3365 You specify a field with a buffer position, @var{pos}. We think of
3366each field as containing a range of buffer positions, so the position
3367you specify stands for the field containing that position.
3368
3369 When the characters before and after @var{pos} are part of the same
3370field, there is no doubt which field contains @var{pos}: the one those
3371characters both belong to. When @var{pos} is at a boundary between
3372fields, which field it belongs to depends on the stickiness of the
3373@code{field} properties of the two surrounding characters (@pxref{Sticky
3374Properties}). The field whose property would be inherited by text
3375inserted at @var{pos} is the field that contains @var{pos}.
3376
3377 There is an anomalous case where newly inserted text at @var{pos}
3378would not inherit the @code{field} property from either side. This
3379happens if the previous character's @code{field} property is not
3380rear-sticky, and the following character's @code{field} property is not
3381front-sticky. In this case, @var{pos} belongs to neither the preceding
3382field nor the following field; the field functions treat it as belonging
3383to an empty field whose beginning and end are both at @var{pos}.
3384
3385 In all of these functions, if @var{pos} is omitted or @code{nil}, the
3386value of point is used by default.
3387
9c7fce05 3388@defun field-beginning &optional pos escape-from-edge limit
2468d0c0
DL
3389@tindex field-beginning
3390This function returns the beginning of the field specified by @var{pos}.
3391
35627f72
MB
3392If @var{pos} is at the beginning of its field, and
3393@var{escape-from-edge} is non-@code{nil}, then the return value is
3394always the beginning of the preceding field that @emph{ends} at @var{pos},
3395regardless of the stickiness of the @code{field} properties around
3396@var{pos}.
9c7fce05
MB
3397
3398If @var{limit} is non-@code{nil}, it is a buffer position; if the
3399beginning of the field is before @var{limit}, then @var{limit} will be
3400returned instead.
2468d0c0
DL
3401@end defun
3402
9c7fce05 3403@defun field-end &optional pos escape-from-edge limit
2468d0c0
DL
3404@tindex field-end
3405This function returns the end of the field specified by @var{pos}.
3406
35627f72
MB
3407If @var{pos} is at the end of its field, and @var{escape-from-edge} is
3408non-@code{nil}, then the return value is always the end of the following
3409field that @emph{begins} at @var{pos}, regardless of the stickiness of
3410the @code{field} properties around @var{pos}.
9c7fce05
MB
3411
3412If @var{limit} is non-@code{nil}, it is a buffer position; if the end
3413of the field is after @var{limit}, then @var{limit} will be returned
3414instead.
2468d0c0
DL
3415@end defun
3416
3417@defun field-string &optional pos
3418@tindex field-string
3419This function returns the contents of the field specified by @var{pos},
3420as a string.
3421@end defun
3422
3423@defun field-string-no-properties &optional pos
3424@tindex field-string-no-properties
3425This function returns the contents of the field specified by @var{pos},
3426as a string, discarding text properties.
3427@end defun
3428
3429@defun delete-field &optional pos
3430@tindex delete-field
3431This function deletes the text of the field specified by @var{pos}.
3432@end defun
3433
35627f72 3434@defun constrain-to-field new-pos old-pos &optional escape-from-edge only-in-line inhibit-capture-property
2468d0c0
DL
3435@tindex constrain-to-field
3436This function ``constrains'' @var{new-pos} to the field that
3437@var{old-pos} belongs to---in other words, it returns the position
3438closest to @var{new-pos} that is in the same field as @var{old-pos}.
3439
3440If @var{new-pos} is @code{nil}, then @code{constrain-to-field} uses
3441the value of point instead, and moves point to the resulting position.
3442
75708135
RS
3443If @var{old-pos} is at the boundary of two fields, then the acceptable
3444positions for @var{new-pos} depend on the value of the optional argument
3445@var{escape-from-edge}. If @var{escape-from-edge} is @code{nil}, then
3446@var{new-pos} is constrained to the field that has the same @code{field}
35627f72
MB
3447property (either a text-property or an overlay property) that new
3448characters inserted at @var{old-pos} would get. (This depends on the
3449stickiness of the @code{field} property for the characters before and
3450after @var{old-pos}.) If @var{escape-from-edge} is non-@code{nil},
3451@var{new-pos} is constrained to the union of the two adjacent fields.
3452Additionally, if two fields are separated by another field with the
3453special value @code{boundary}, then any point within this special field
3454is also considered to be ``on the boundary.''
2468d0c0
DL
3455
3456If the optional argument @var{only-in-line} is non-@code{nil}, and
3457constraining @var{new-pos} in the usual way would move it to a different
3458line, @var{new-pos} is returned unconstrained. This used in commands
3459that move by line, such as @code{next-line} and
3460@code{beginning-of-line}, so that they respect field boundaries only in
3461the case where they can still move to the right line.
35627f72
MB
3462
3463If the optional argument @var{inhibit-capture-property} is
3464non-@code{nil}, and @var{old-pos} has a non-@code{nil} property of that
3465name, then any field boundaries are ignored.
3466
3467You can cause @code{constrain-to-field} to ignore all field boundaries
3468(and so never constrain anything) by binding the variable
74eee906 3469@code{inhibit-field-text-motion} to a non-@code{nil} value.
2468d0c0
DL
3470@end defun
3471
73804d4b
RS
3472@node Not Intervals
3473@subsection Why Text Properties are not Intervals
3474@cindex intervals
3475
3476 Some editors that support adding attributes to text in the buffer do
3477so by letting the user specify ``intervals'' within the text, and adding
3478the properties to the intervals. Those editors permit the user or the
3479programmer to determine where individual intervals start and end. We
3480deliberately provided a different sort of interface in Emacs Lisp to
3481avoid certain paradoxical behavior associated with text modification.
3482
3483 If the actual subdivision into intervals is meaningful, that means you
3484can distinguish between a buffer that is just one interval with a
3485certain property, and a buffer containing the same text subdivided into
3486two intervals, both of which have that property.
3487
3488 Suppose you take the buffer with just one interval and kill part of
3489the text. The text remaining in the buffer is one interval, and the
3490copy in the kill ring (and the undo list) becomes a separate interval.
3491Then if you yank back the killed text, you get two intervals with the
3492same properties. Thus, editing does not preserve the distinction
3493between one interval and two.
3494
3495 Suppose we ``fix'' this problem by coalescing the two intervals when
3496the text is inserted. That works fine if the buffer originally was a
3497single interval. But suppose instead that we have two adjacent
3498intervals with the same properties, and we kill the text of one interval
3499and yank it back. The same interval-coalescence feature that rescues
3500the other case causes trouble in this one: after yanking, we have just
3501one interval. One again, editing does not preserve the distinction
3502between one interval and two.
3503
3504 Insertion of text at the border between intervals also raises
3505questions that have no satisfactory answer.
3506
3507 However, it is easy to arrange for editing to behave consistently for
3508questions of the form, ``What are the properties of this character?''
3509So we have decided these are the only questions that make sense; we have
3510not implemented asking questions about where intervals start or end.
3511
f9f59935 3512 In practice, you can usually use the text property search functions in
73804d4b
RS
3513place of explicit interval boundaries. You can think of them as finding
3514the boundaries of intervals, assuming that intervals are always
3515coalesced whenever possible. @xref{Property Search}.
3516
3517 Emacs also provides explicit intervals as a presentation feature; see
3518@ref{Overlays}.
3519
3520@node Substitution
3521@section Substituting for a Character Code
3522
3523 The following functions replace characters within a specified region
3524based on their character codes.
3525
3526@defun subst-char-in-region start end old-char new-char &optional noundo
3527@cindex replace characters
3528This function replaces all occurrences of the character @var{old-char}
3529with the character @var{new-char} in the region of the current buffer
3530defined by @var{start} and @var{end}.
3531
73804d4b 3532@cindex undo avoidance
bfe721d1
KH
3533If @var{noundo} is non-@code{nil}, then @code{subst-char-in-region} does
3534not record the change for undo and does not mark the buffer as modified.
2468d0c0
DL
3535This was useful for controlling the old selective display feature
3536(@pxref{Selective Display}).
73804d4b
RS
3537
3538@code{subst-char-in-region} does not move point and returns
3539@code{nil}.
3540
3541@example
3542@group
3543---------- Buffer: foo ----------
3544This is the contents of the buffer before.
3545---------- Buffer: foo ----------
3546@end group
3547
3548@group
3549(subst-char-in-region 1 20 ?i ?X)
3550 @result{} nil
3551
3552---------- Buffer: foo ----------
3553ThXs Xs the contents of the buffer before.
3554---------- Buffer: foo ----------
3555@end group
3556@end example
3557@end defun
3558
3559@defun translate-region start end table
3560This function applies a translation table to the characters in the
3561buffer between positions @var{start} and @var{end}.
3562
3563The translation table @var{table} is a string; @code{(aref @var{table}
3564@var{ochar})} gives the translated character corresponding to
3565@var{ochar}. If the length of @var{table} is less than 256, any
3566characters with codes larger than the length of @var{table} are not
3567altered by the translation.
3568
3569The return value of @code{translate-region} is the number of
61cfa852
RS
3570characters that were actually changed by the translation. This does
3571not count characters that were mapped into themselves in the
73804d4b 3572translation table.
73804d4b
RS
3573@end defun
3574
3575@node Registers
3576@section Registers
3577@cindex registers
3578
3579 A register is a sort of variable used in Emacs editing that can hold a
969fe9b5 3580variety of different kinds of values. Each register is named by a
ad800164 3581single character. All @acronym{ASCII} characters and their meta variants
75708135
RS
3582(but with the exception of @kbd{C-g}) can be used to name registers.
3583Thus, there are 255 possible registers. A register is designated in
3584Emacs Lisp by the character that is its name.
73804d4b
RS
3585
3586@defvar register-alist
3587This variable is an alist of elements of the form @code{(@var{name} .
3588@var{contents})}. Normally, there is one element for each Emacs
3589register that has been used.
3590
3591The object @var{name} is a character (an integer) identifying the
969fe9b5 3592register.
73804d4b
RS
3593@end defvar
3594
969fe9b5
RS
3595 The @var{contents} of a register can have several possible types:
3596
3597@table @asis
3598@item a number
3599A number stands for itself. If @code{insert-register} finds a number
3600in the register, it converts the number to decimal.
3601
3602@item a marker
3603A marker represents a buffer position to jump to.
3604
3605@item a string
3606A string is text saved in the register.
3607
3608@item a rectangle
3609A rectangle is represented by a list of strings.
3610
3611@item @code{(@var{window-configuration} @var{position})}
3612This represents a window configuration to restore in one frame, and a
3613position to jump to in the current buffer.
3614
3615@item @code{(@var{frame-configuration} @var{position})}
3616This represents a frame configuration to restore, and a position
3617to jump to in the current buffer.
3618
3619@item (file @var{filename})
3620This represents a file to visit; jumping to this value visits file
3621@var{filename}.
3622
3623@item (file-query @var{filename} @var{position})
3624This represents a file to visit and a position in it; jumping to this
3625value visits file @var{filename} and goes to buffer position
3626@var{position}. Restoring this type of position asks the user for
3627confirmation first.
3628@end table
3629
3630 The functions in this section return unpredictable values unless
3631otherwise stated.
3632
73804d4b
RS
3633@defun get-register reg
3634This function returns the contents of the register
3635@var{reg}, or @code{nil} if it has no contents.
3636@end defun
3637
3638@defun set-register reg value
3639This function sets the contents of register @var{reg} to @var{value}.
3640A register can be set to any value, but the other register functions
3641expect only certain data types. The return value is @var{value}.
3642@end defun
3643
3644@deffn Command view-register reg
3645This command displays what is contained in register @var{reg}.
3646@end deffn
3647
3648@ignore
3649@deffn Command point-to-register reg
3650This command stores both the current location of point and the current
3651buffer in register @var{reg} as a marker.
3652@end deffn
3653
3654@deffn Command jump-to-register reg
3655@deffnx Command register-to-point reg
3656@comment !!SourceFile register.el
3657This command restores the status recorded in register @var{reg}.
3658
3659If @var{reg} contains a marker, it moves point to the position stored in
3660the marker. Since both the buffer and the location within the buffer
3661are stored by the @code{point-to-register} function, this command can
3662switch you to another buffer.
3663
3664If @var{reg} contains a window configuration or a frame configuration.
3665@code{jump-to-register} restores that configuration.
3666@end deffn
3667@end ignore
3668
3669@deffn Command insert-register reg &optional beforep
3670This command inserts contents of register @var{reg} into the current
3671buffer.
3672
3673Normally, this command puts point before the inserted text, and the
3674mark after it. However, if the optional second argument @var{beforep}
3675is non-@code{nil}, it puts the mark before and point after.
3676You can pass a non-@code{nil} second argument @var{beforep} to this
3677function interactively by supplying any prefix argument.
3678
3679If the register contains a rectangle, then the rectangle is inserted
3680with its upper left corner at point. This means that text is inserted
3681in the current line and underneath it on successive lines.
3682
3683If the register contains something other than saved text (a string) or
3684a rectangle (a list), currently useless things happen. This may be
3685changed in the future.
3686@end deffn
3687
3688@ignore
3689@deffn Command copy-to-register reg start end &optional delete-flag
3690This command copies the region from @var{start} to @var{end} into
3691register @var{reg}. If @var{delete-flag} is non-@code{nil}, it deletes
3692the region from the buffer after copying it into the register.
3693@end deffn
3694
3695@deffn Command prepend-to-register reg start end &optional delete-flag
3696This command prepends the region from @var{start} to @var{end} into
3697register @var{reg}. If @var{delete-flag} is non-@code{nil}, it deletes
3698the region from the buffer after copying it to the register.
3699@end deffn
3700
3701@deffn Command append-to-register reg start end &optional delete-flag
3702This command appends the region from @var{start} to @var{end} to the
3703text already in register @var{reg}. If @var{delete-flag} is
3704non-@code{nil}, it deletes the region from the buffer after copying it
3705to the register.
3706@end deffn
3707
3708@deffn Command copy-rectangle-to-register reg start end &optional delete-flag
3709This command copies a rectangular region from @var{start} to @var{end}
3710into register @var{reg}. If @var{delete-flag} is non-@code{nil}, it
3711deletes the region from the buffer after copying it to the register.
3712@end deffn
3713
3714@deffn Command window-configuration-to-register reg
3715This function stores the window configuration of the selected frame in
3716register @var{reg}.
3717@end deffn
3718
3719@deffn Command frame-configuration-to-register reg
3720This function stores the current frame configuration in register
3721@var{reg}.
3722@end deffn
3723@end ignore
3724
b22f3a19
RS
3725@node Transposition
3726@section Transposition of Text
3727
3728 This subroutine is used by the transposition commands.
3729
3730@defun transpose-regions start1 end1 start2 end2 &optional leave-markers
3731This function exchanges two nonoverlapping portions of the buffer.
3732Arguments @var{start1} and @var{end1} specify the bounds of one portion
3733and arguments @var{start2} and @var{end2} specify the bounds of the
3734other portion.
3735
3736Normally, @code{transpose-regions} relocates markers with the transposed
3737text; a marker previously positioned within one of the two transposed
3738portions moves along with that portion, thus remaining between the same
3739two characters in their new position. However, if @var{leave-markers}
3740is non-@code{nil}, @code{transpose-regions} does not do this---it leaves
3741all markers unrelocated.
3742@end defun
3743
b6954afd
RS
3744@node Base 64
3745@section Base 64 Encoding
3746@cindex base 64 encoding
3747
ae9b6b4a 3748 Base 64 code is used in email to encode a sequence of 8-bit bytes as
ad800164 3749a longer sequence of @acronym{ASCII} graphic characters. It is defined in
944351c0
EZ
3750Internet RFC@footnote{
3751An RFC, an acronym for @dfn{Request for Comments}, is a numbered
3752Internet informational document describing a standard. RFCs are
3753usually written by technical experts acting on their own initiative,
3754and are traditionally written in a pragmatic, experience-driven
3755manner.
3756}2045. This section describes the functions for
ae9b6b4a 3757converting to and from this code.
b6954afd
RS
3758
3759@defun base64-encode-region beg end &optional no-line-break
3760@tindex base64-encode-region
b25e2fb5
DL
3761This function converts the region from @var{beg} to @var{end} into base
376264 code. It returns the length of the encoded text. An error is
3763signaled if a character in the region is multibyte, i.e.@: in a
3764multibyte buffer the region must contain only characters from the
3765charsets @code{ascii}, @code{eight-bit-control} and
3766@code{eight-bit-graphic}.
b6954afd
RS
3767
3768Normally, this function inserts newline characters into the encoded
3769text, to avoid overlong lines. However, if the optional argument
3770@var{no-line-break} is non-@code{nil}, these newlines are not added, so
3771the output is just one long line.
3772@end defun
3773
3774@defun base64-encode-string string &optional no-line-break
3775@tindex base64-encode-string
3776This function converts the string @var{string} into base 64 code. It
b25e2fb5
DL
3777returns a string containing the encoded text. As for
3778@code{base64-encode-region}, an error is signaled if a character in the
3779string is multibyte.
b6954afd
RS
3780
3781Normally, this function inserts newline characters into the encoded
3782text, to avoid overlong lines. However, if the optional argument
3783@var{no-line-break} is non-@code{nil}, these newlines are not added, so
3784the result string is just one long line.
3785@end defun
3786
3787@defun base64-decode-region beg end
3788@tindex base64-decode-region
3789This function converts the region from @var{beg} to @var{end} from base
379064 code into the corresponding decoded text. It returns the length of
3791the decoded text.
3792
3793The decoding functions ignore newline characters in the encoded text.
3794@end defun
3795
3796@defun base64-decode-string string
3797@tindex base64-decode-string
3798This function converts the string @var{string} from base 64 code into
54f7f2a4 3799the corresponding decoded text. It returns a unibyte string containing the
b6954afd
RS
3800decoded text.
3801
3802The decoding functions ignore newline characters in the encoded text.
3803@end defun
3804
944351c0
EZ
3805@node MD5 Checksum
3806@section MD5 Checksum
3807@cindex MD5 checksum
3808@cindex message digest computation
3809
3810 MD5 cryptographic checksums, or @dfn{message digests}, are 128-bit
3811``fingerprints'' of a document or program. They are used to verify
3812that you have an exact and unaltered copy of the data. The algorithm
3813to calculate the MD5 message digest is defined in Internet
3814RFC@footnote{
3815For an explanation of what is an RFC, see the footnote in @ref{Base
381664}.
3817}1321. This section describes the Emacs facilities for computing
3818message digests.
3819
3820@defun md5 object &optional start end coding-system noerror
3821This function returns the MD5 message digest of @var{object}, which
3822should be a buffer or a string.
3823
3824The two optional arguments @var{start} and @var{end} are character
3825positions specifying the portion of @var{object} to compute the
3826message digest for. If they are @code{nil} or omitted, the digest is
3827computed for the whole of @var{object}.
3828
3829The function @code{md5} does not compute the message digest directly
3830from the internal Emacs representation of the text (@pxref{Text
3831Representations}). Instead, it encodes the text using a coding
3832system, and computes the message digest from the encoded text. The
3833optional fourth argument @var{coding-system} specifies which coding
3834system to use for encoding the text. It should be the same coding
3835system that you used to read the text, or that you used or will use
3836when saving or sending the text. @xref{Coding Systems}, for more
3837information about coding systems.
3838
3839If @var{coding-system} is @code{nil} or omitted, the default depends
3840on @var{object}. If @var{object} is a buffer, the default for
3841@var{coding-system} is whatever coding system would be chosen by
3842default for writing this text into a file. If @var{object} is a
3843string, the user's most preferred coding system (@pxref{Recognize
3844Coding, prefer-coding-system, the description of
3845@code{prefer-coding-system}, emacs, GNU Emacs Manual}) is used.
3846
3847Normally, @code{md5} signals an error if the text can't be encoded
3848using the specified or chosen coding system. However, if
3849@var{noerror} is non-@code{nil}, it silently uses @code{raw-text}
3850coding instead.
3851@end defun
3852
d73eac4d
RS
3853@node Atomic Changes
3854@section Atomic Change Groups
3855@cindex atomic changes
3856
3857 In data base terminology, an @dfn{atomic} change is an indivisible
3858change---it can succeed entirely or it can fail entirely, but it
3859cannot partly succeed. A Lisp program can make a series of changes to
3860one or several buffers as an @dfn{atomic change group}, meaning that
3861either the entire series of changes will be installed in their buffers
3862or, in case of an error, none of them will be.
3863
3864 To do this for one buffer, the one already current, simply write a
3865call to @code{atomic-change-group} around the code that makes the
3866changes, like this:
3867
3868@example
3869(atomic-change-group
3870 (insert foo)
3871 (delete-region x y))
3872@end example
3873
3874@noindent
3875If an error (or other nonlocal exit) occurs inside the body of
3876@code{atomic-change-group}, it unmakes all the changes in that buffer
3877that were during the execution of the body. This kind of change group
4810d170 3878has no effect on any other buffers---any such changes remain.
d73eac4d
RS
3879
3880 If you need something more sophisticated, such as to make changes in
3881various buffers constitute one atomic group, you must directly call
3882lower-level functions that @code{atomic-change-group} uses.
3883
3884@defun prepare-change-group &optional buffer
3885This function sets up a change group for buffer @var{buffer}, which
3886defaults to the current buffer. It returns a ``handle'' that
3887represents the change group. You must use this handle to activate the
3888change group and subsequently to finish it.
3889@end defun
3890
3891 To use the change group, you must @dfn{activate} it. You must do
3892this before making any changes in the text of @var{buffer}.
3893
3894@defun activate-change-group handle
3895This function activates the change group that @var{handle} designates.
3896@end defun
3897
3898 After you activate the change group, any changes you make in that
3899buffer become part of it. Once you have made all the desired changes
3900in the buffer, you must @dfn{finish} the change group. There are two
3901ways to do this: you can either accept (and finalize) all the changes,
3902or cancel them all.
3903
3904@defun accept-change-group handle
3905This function accepts all the changes in the change group specified by
3906@var{handle}, making them final.
3907@end defun
3908
3909@defun cancel-change-group handle
3910This function cancels and undoes all the changes in the change group
3911specified by @var{handle}.
3912@end defun
3913
3914 Your code should use @code{unwind-protect} to make sure the group is
3915always finished. The call to @code{activate-change-group} should be
3916inside the @code{unwind-protect}, in case the user types @kbd{C-g}
3917just after it runs. (This is one reason why
3918@code{prepare-change-group} and @code{activate-change-group} are
3919separate functions, because normally you would call
3920@code{prepare-change-group} before the start of that
3921@code{unwind-protect}.) Once you finish the group, don't use the
3922handle again---in particular, don't try to finish the same group
3923twice.
3924
3925 To make a multibuffer change group, call @code{prepare-change-group}
3926once for each buffer you want to cover, then use @code{nconc} to
3927combine the returned values, like this:
3928
3929@example
3930(nconc (prepare-change-group buffer-1)
3931 (prepare-change-group buffer-2))
3932@end example
3933
3934You can then activate the multibuffer change group with a single call
3935to @code{activate-change-group}, and finish it with a single call to
3936@code{accept-change-group} or @code{cancel-change-group}.
3937
3938 Nested use of several change groups for the same buffer works as you
3939would expect. Non-nested use of change groups for the same buffer
3940will get Emacs confused, so don't let it happen; the first change
3941group you start for any given buffer should be the last one finished.
3942
73804d4b
RS
3943@node Change Hooks
3944@section Change Hooks
3945@cindex change hooks
3946@cindex hooks for text changes
3947
3948 These hook variables let you arrange to take notice of all changes in
3949all buffers (or in a particular buffer, if you make them buffer-local).
3950See also @ref{Special Properties}, for how to detect changes to specific
3951parts of the text.
3952
3953 The functions you use in these hooks should save and restore the match
3954data if they do anything that uses regular expressions; otherwise, they
3955will interfere in bizarre ways with the editing operations that call
3956them.
3957
72654a3c 3958@defvar before-change-functions
f9f59935 3959This variable holds a list of functions to call before any buffer
72654a3c
RS
3960modification. Each function gets two arguments, the beginning and end
3961of the region that is about to change, represented as integers. The
3962buffer that is about to change is always the current buffer.
3963@end defvar
3964
3965@defvar after-change-functions
f9f59935 3966This variable holds a list of functions to call after any buffer
72654a3c
RS
3967modification. Each function receives three arguments: the beginning and
3968end of the region just changed, and the length of the text that existed
584b8104
RS
3969before the change. All three arguments are integers. The buffer that's
3970about to change is always the current buffer.
3971
1911e6e5 3972The length of the old text is the difference between the buffer positions
a9f0a989
RS
3973before and after that text as it was before the change. As for the
3974changed text, its length is simply the difference between the first two
3975arguments.
72654a3c
RS
3976@end defvar
3977
af1996b5 3978 Output of messages into the @samp{*Messages*} buffer does not
74eee906
RS
3979call these functions.
3980
f9f59935
RS
3981@defmac combine-after-change-calls body...
3982The macro executes @var{body} normally, but arranges to call the
3983after-change functions just once for a series of several changes---if
3984that seems safe.
3985
3986If a program makes several text changes in the same area of the buffer,
3987using the macro @code{combine-after-change-calls} around that part of
3988the program can make it run considerably faster when after-change hooks
969fe9b5
RS
3989are in use. When the after-change hooks are ultimately called, the
3990arguments specify a portion of the buffer including all of the changes
3991made within the @code{combine-after-change-calls} body.
f9f59935
RS
3992
3993@strong{Warning:} You must not alter the values of
b6dd5963 3994@code{after-change-functions} within
f9f59935 3995the body of a @code{combine-after-change-calls} form.
969fe9b5 3996
6142d1d0 3997@strong{Warning:} if the changes you combine occur in widely scattered
969fe9b5
RS
3998parts of the buffer, this will still work, but it is not advisable,
3999because it may lead to inefficient behavior for some change hook
4000functions.
f9f59935
RS
4001@end defmac
4002
b6dd5963 4003The two variables above are temporarily bound to @code{nil} during the
72654a3c 4004time that any of these functions is running. This means that if one of
73804d4b 4005these functions changes the buffer, that change won't run these
72654a3c
RS
4006functions. If you do want a hook function to make changes that run
4007these functions, make it bind these variables back to their usual
73804d4b
RS
4008values.
4009
b22f3a19
RS
4010One inconvenient result of this protective feature is that you cannot
4011have a function in @code{after-change-functions} or
4012@code{before-change-functions} which changes the value of that variable.
4013But that's not a real limitation. If you want those functions to change
4014the list of functions to run, simply add one fixed function to the hook,
4015and code that function to look in another variable for other functions
4016to call. Here is an example:
4017
4018@example
4019(setq my-own-after-change-functions nil)
4020(defun indirect-after-change-function (beg end len)
4021 (let ((list my-own-after-change-functions))
4022 (while list
4023 (funcall (car list) beg end len)
4024 (setq list (cdr list)))))
969fe9b5
RS
4025
4026@group
b22f3a19
RS
4027(add-hooks 'after-change-functions
4028 'indirect-after-change-function)
969fe9b5 4029@end group
b22f3a19
RS
4030@end example
4031
73804d4b
RS
4032@defvar first-change-hook
4033This variable is a normal hook that is run whenever a buffer is changed
4034that was previously in the unmodified state.
4035@end defvar
8241495d
RS
4036
4037@defvar inhibit-modification-hooks
4038@tindex inhibit-modification-hooks
4039If this variable is non-@code{nil}, all of the change hooks are
4040disabled; none of them run. This affects all the hook variables
4041described above in this section, as well as the hooks attached to
4042certain special text properties (@pxref{Special Properties}) and overlay
4043properties (@pxref{Overlay Properties}).
4044
4045This variable is available starting in Emacs 21.
4046@end defvar
ab5796a9
MB
4047
4048@ignore
4049 arch-tag: 3721e738-a1cb-4085-bc1a-6cb8d8e1d32b
4050@end ignore