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