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