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