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