annotate lispref/positions.texi @ 24225:985eb547550f

Document scoring functionality. (gametree-score-regexp): Add optional plus sign. (gametree-score-opener): Replace `:' with `=' as the former conflicts with gametree-half-ply-regexp. (gametree-transpose-following-leaves): Add. (gametree-insert-new-leaf): Make modifying commands barf in read-only buffers. (gametree-break-line-here): Add a call to `gametree-transpose-following-leaves'. This maintains the necessary invariant that on each level all leaf children precede all nonleaf children. This has always been implied, but left to the user, and, unfortunately, undocumented.
author Richard M. Stallman <rms@gnu.org>
date Sat, 30 Jan 1999 07:20:18 +0000
parents f0cd03a7dac9
children 95815bc1f83b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 @c -*-texinfo-*-
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 @c This is part of the GNU Emacs Lisp Reference Manual.
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998 Free Software Foundation, Inc.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 @c See the file elisp.texi for copying conditions.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 @setfilename ../info/positions
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 @node Positions, Markers, Frames, Top
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 @chapter Positions
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 @cindex position (in buffer)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
10 A @dfn{position} is the index of a character in the text of a buffer.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 More precisely, a position identifies the place between two characters
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 (or before the first character, or after the last character), so we can
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
13 speak of the character before or after a given position. However, we
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
14 often speak of the character ``at'' a position, meaning the character
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 after that position.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 Positions are usually represented as integers starting from 1, but can
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
18 also be represented as @dfn{markers}---special objects that relocate
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 automatically when text is inserted or deleted so they stay with the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 surrounding characters. @xref{Markers}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 @menu
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 * Point:: The special position where editing takes place.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 * Motion:: Changing point.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 * Excursions:: Temporary motion and buffer changes.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 * Narrowing:: Restricting editing to a portion of the buffer.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 @end menu
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 @node Point
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 @section Point
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 @cindex point
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 @dfn{Point} is a special buffer position used by many editing
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 commands, including the self-inserting typed characters and text
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 insertion functions. Other commands move point through the text
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 to allow editing and insertion at different places.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 Like other positions, point designates a place between two characters
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 (or before the first character, or after the last character), rather
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 9401
diff changeset
40 than a particular character. Usually terminals display the cursor over
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 9401
diff changeset
41 the character that immediately follows point; point is actually before
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 9401
diff changeset
42 the character on which the cursor sits.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 @cindex point with narrowing
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 The value of point is a number between 1 and the buffer size plus 1.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 If narrowing is in effect (@pxref{Narrowing}), then point is constrained
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 to fall within the accessible portion of the buffer (possibly at one end
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 of it).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 Each buffer has its own value of point, which is independent of the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 value of point in other buffers. Each window also has a value of point,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 which is independent of the value of point in other windows on the same
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 buffer. This is why point can have different values in various windows
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 that display the same buffer. When a buffer appears in only one window,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 the buffer's point and the window's point normally have the same value,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 so the distinction is rarely important. @xref{Window Point}, for more
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 details.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 @defun point
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 @cindex current buffer position
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
61 This function returns the value of point in the current buffer,
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 as an integer.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 @need 700
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 (point)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 @result{} 175
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 @defun point-min
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
74 This function returns the minimum accessible value of point in the
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
75 current buffer. This is normally 1, but if narrowing is in effect, it
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
76 is the position of the start of the region that you narrowed to.
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
77 (@xref{Narrowing}.)
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 @defun point-max
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
81 This function returns the maximum accessible value of point in the
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 current buffer. This is @code{(1+ (buffer-size))}, unless narrowing is
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 in effect, in which case it is the position of the end of the region
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 that you narrowed to. (@xref{Narrowing}).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 @defun buffer-end flag
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
88 This function returns @code{(point-min)} if @var{flag} is less than 1,
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 @code{(point-max)} otherwise. The argument @var{flag} must be a number.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 @defun buffer-size
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
93 This function returns the total number of characters in the current
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 buffer. In the absence of any narrowing (@pxref{Narrowing}),
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 @code{point-max} returns a value one larger than this.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 (buffer-size)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 @result{} 35
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 (point-max)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 @result{} 36
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 @node Motion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 @section Motion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 Motion functions change the value of point, either relative to the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 current value of point, relative to the beginning or end of the buffer,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 or relative to the edges of the selected window. @xref{Point}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 @menu
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 * Character Motion:: Moving in terms of characters.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 * Word Motion:: Moving in terms of words.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 * Buffer End Motion:: Moving to the beginning or end of the buffer.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 * Text Lines:: Moving in terms of lines of text.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 * Screen Lines:: Moving in terms of lines as displayed.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 * List Motion:: Moving by parsing lists and sexps.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 * Skipping Characters:: Skipping characters belonging to a certain set.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 @end menu
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 @node Character Motion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 @subsection Motion by Characters
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 These functions move point based on a count of characters.
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
130 @code{goto-char} is the fundamental primitive; the other functions use
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 that.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 @deffn Command goto-char position
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 This function sets point in the current buffer to the value
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 @var{position}. If @var{position} is less than 1, it moves point to the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 beginning of the buffer. If @var{position} is greater than the length
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 of the buffer, it moves point to the end.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 If narrowing is in effect, @var{position} still counts from the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 beginning of the buffer, but point cannot go outside the accessible
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 portion. If @var{position} is out of range, @code{goto-char} moves
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 point to the beginning or the end of the accessible portion.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 When this function is called interactively, @var{position} is the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 numeric prefix argument, if provided; otherwise it is read from the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 minibuffer.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 @code{goto-char} returns @var{position}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 @deffn Command forward-char &optional count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 @c @kindex beginning-of-buffer
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 @c @kindex end-of-buffer
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 This function moves point @var{count} characters forward, towards the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 end of the buffer (or backward, towards the beginning of the buffer, if
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 @var{count} is negative). If the function attempts to move point past
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 the beginning or end of the buffer (or the limits of the accessible
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 portion, when narrowing is in effect), an error is signaled with error
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 code @code{beginning-of-buffer} or @code{end-of-buffer}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 In an interactive call, @var{count} is the numeric prefix argument.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 @deffn Command backward-char &optional count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 This function moves point @var{count} characters backward, towards the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 beginning of the buffer (or forward, towards the end of the buffer, if
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 @var{count} is negative). If the function attempts to move point past
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 the beginning or end of the buffer (or the limits of the accessible
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 portion, when narrowing is in effect), an error is signaled with error
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 code @code{beginning-of-buffer} or @code{end-of-buffer}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 In an interactive call, @var{count} is the numeric prefix argument.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 @node Word Motion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 @subsection Motion by Words
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 These functions for parsing words use the syntax table to decide
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 whether a given character is part of a word. @xref{Syntax Tables}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 @deffn Command forward-word count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 This function moves point forward @var{count} words (or backward if
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
183 @var{count} is negative). ``Moving one word'' means moving until point
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
184 crosses a word-constituent character and then encounters a
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
185 word-separator character (or the boundary of the accessible part of the
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
186 buffer).
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
187
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
188 If it is possible to move @var{count} words, without being stopped by
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
189 the buffer boundary (except perhaps after the last word), the value is
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
190 @code{t}. Otherwise, the return value is @code{nil} and point stops
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
191 at the buffer boundary.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 In an interactive call, @var{count} is set to the numeric prefix
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 argument.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 @deffn Command backward-word count
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
198 This function is just like @code{forward-word}, except that it moves
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 backward until encountering the front of a word, rather than forward.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 In an interactive call, @var{count} is set to the numeric prefix
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 argument.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 This function is rarely used in programs, as it is more efficient to
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
205 call @code{forward-word} with a negative argument.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 @defvar words-include-escapes
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 @c Emacs 19 feature
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 This variable affects the behavior of @code{forward-word} and everything
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 that uses it. If it is non-@code{nil}, then characters in the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 ``escape'' and ``character quote'' syntax classes count as part of
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 words. Otherwise, they do not.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 @end defvar
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 @node Buffer End Motion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 @subsection Motion to an End of the Buffer
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 To move point to the beginning of the buffer, write:
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (goto-char (point-min))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 @noindent
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 Likewise, to move to the end of the buffer, use:
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 (goto-char (point-max))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
236 Here are two commands that users use to do these things. They are
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 documented here to warn you not to use them in Lisp programs, because
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 they set the mark and display messages in the echo area.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 @deffn Command beginning-of-buffer &optional n
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 This function moves point to the beginning of the buffer (or the limits
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 of the accessible portion, when narrowing is in effect), setting the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 mark at the previous position. If @var{n} is non-@code{nil}, then it
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 puts point @var{n} tenths of the way from the beginning of the buffer.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 In an interactive call, @var{n} is the numeric prefix argument,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 if provided; otherwise @var{n} defaults to @code{nil}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
249 @strong{Warning:} Don't use this function in Lisp programs!
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 @deffn Command end-of-buffer &optional n
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 This function moves point to the end of the buffer (or the limits of
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 the accessible portion, when narrowing is in effect), setting the mark
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 at the previous position. If @var{n} is non-@code{nil}, then it puts
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
256 point @var{n} tenths of the way from the end of the buffer.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 In an interactive call, @var{n} is the numeric prefix argument,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 if provided; otherwise @var{n} defaults to @code{nil}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
261 @strong{Warning:} Don't use this function in Lisp programs!
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 @node Text Lines
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 @subsection Motion by Text Lines
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 @cindex lines
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 Text lines are portions of the buffer delimited by newline characters,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 which are regarded as part of the previous line. The first text line
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 begins at the beginning of the buffer, and the last text line ends at
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 the end of the buffer whether or not the last character is a newline.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 The division of the buffer into text lines is not affected by the width
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 of the window, by line continuation in display, or by how tabs and
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 control characters are displayed.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 @deffn Command goto-line line
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 This function moves point to the front of the @var{line}th line,
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
278 counting from line 1 at beginning of the buffer. If @var{line} is less
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
279 than 1, it moves point to the beginning of the buffer. If @var{line} is
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 greater than the number of lines in the buffer, it moves point to the
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
281 end of the buffer---that is, the @emph{end of the last line} of the
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
282 buffer. This is the only case in which @code{goto-line} does not
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
283 necessarily move to the beginning of a line.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 If narrowing is in effect, then @var{line} still counts from the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 beginning of the buffer, but point cannot go outside the accessible
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 portion. So @code{goto-line} moves point to the beginning or end of the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 accessible portion, if the line number specifies an inaccessible
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 position.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 The return value of @code{goto-line} is the difference between
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 @var{line} and the line number of the line to which point actually was
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
293 able to move (in the full buffer, before taking account of narrowing).
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
294 Thus, the value is positive if the scan encounters the real end of the
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
295 buffer before finding the specified line. The value is zero if scan
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
296 encounters the end of the accessible portion but not the real end of the
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
297 buffer.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 In an interactive call, @var{line} is the numeric prefix argument if
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 one has been provided. Otherwise @var{line} is read in the minibuffer.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 @deffn Command beginning-of-line &optional count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 This function moves point to the beginning of the current line. With an
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 argument @var{count} not @code{nil} or 1, it moves forward
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 @var{count}@minus{}1 lines and then to the beginning of the line.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 If this function reaches the end of the buffer (or of the accessible
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
309 portion, if narrowing is in effect), it positions point there. No error
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
310 is signaled.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 @deffn Command end-of-line &optional count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 This function moves point to the end of the current line. With an
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 argument @var{count} not @code{nil} or 1, it moves forward
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 @var{count}@minus{}1 lines and then to the end of the line.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 If this function reaches the end of the buffer (or of the accessible
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
319 portion, if narrowing is in effect), it positions point there. No error
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
320 is signaled.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 @deffn Command forward-line &optional count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 @cindex beginning of line
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 This function moves point forward @var{count} lines, to the beginning of
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 the line. If @var{count} is negative, it moves point
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
327 @minus{}@var{count} lines backward, to the beginning of a line. If
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
328 @var{count} is zero, it moves point to the beginning of the current
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
329 line.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 If @code{forward-line} encounters the beginning or end of the buffer (or
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 of the accessible portion) before finding that many lines, it sets point
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 there. No error is signaled.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 @code{forward-line} returns the difference between @var{count} and the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 number of lines actually moved. If you attempt to move down five lines
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 from the beginning of a buffer that has only three lines, point stops at
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 the end of the last line, and the value will be 2.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 In an interactive call, @var{count} is the numeric prefix argument.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 @defun count-lines start end
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 @cindex lines in region
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 This function returns the number of lines between the positions
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 @var{start} and @var{end} in the current buffer. If @var{start} and
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 @var{end} are equal, then it returns 0. Otherwise it returns at least
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 1, even if @var{start} and @var{end} are on the same line. This is
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 because the text between them, considered in isolation, must contain at
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 least one line unless it is empty.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 Here is an example of using @code{count-lines}:
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (defun current-line ()
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 "Return the vertical position of point@dots{}"
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (+ (count-lines (window-start) (point))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (if (= (current-column) 0) 1 0)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 -1))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 @ignore
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 @c ================
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 The @code{previous-line} and @code{next-line} commands are functions
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 that should not be used in programs. They are for users and are
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 mentioned here only for completeness.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 @deffn Command previous-line count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 @cindex goal column
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 This function moves point up @var{count} lines (down if @var{count}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 is negative). In moving, it attempts to keep point in the ``goal column''
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (normally the same column that it was at the beginning of the move).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 If there is no character in the target line exactly under the current
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 column, point is positioned after the character in that line which
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 spans this column, or at the end of the line if it is not long enough.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 If it attempts to move beyond the top or bottom of the buffer (or clipped
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 region), then point is positioned in the goal column in the top or
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 bottom line. No error is signaled.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 In an interactive call, @var{count} will be the numeric
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 prefix argument.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 The command @code{set-goal-column} can be used to create a semipermanent
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 goal column to which this command always moves. Then it does not try to
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 move vertically.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 If you are thinking of using this in a Lisp program, consider using
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 @code{forward-line} with a negative argument instead. It is usually easier
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 to use and more reliable (no dependence on goal column, etc.).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 @deffn Command next-line count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 This function moves point down @var{count} lines (up if @var{count}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 is negative). In moving, it attempts to keep point in the ``goal column''
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 (normally the same column that it was at the beginning of the move).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 If there is no character in the target line exactly under the current
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 column, point is positioned after the character in that line which
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 spans this column, or at the end of the line if it is not long enough.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 If it attempts to move beyond the top or bottom of the buffer (or clipped
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 region), then point is positioned in the goal column in the top or
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 bottom line. No error is signaled.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 In the case where the @var{count} is 1, and point is on the last
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 line of the buffer (or clipped region), a new empty line is inserted at the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 end of the buffer (or clipped region) and point moved there.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 In an interactive call, @var{count} will be the numeric
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 prefix argument.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 The command @code{set-goal-column} can be used to create a semipermanent
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 goal column to which this command always moves. Then it does not try to
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 move vertically.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 If you are thinking of using this in a Lisp program, consider using
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 @code{forward-line} instead. It is usually easier
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 to use and more reliable (no dependence on goal column, etc.).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 @c ================
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 @end ignore
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 Also see the functions @code{bolp} and @code{eolp} in @ref{Near Point}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 These functions do not move point, but test whether it is already at the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 beginning or end of a line.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 @node Screen Lines
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 @subsection Motion by Screen Lines
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 The line functions in the previous section count text lines, delimited
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 only by newline characters. By contrast, these functions count screen
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 lines, which are defined by the way the text appears on the screen. A
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 text line is a single screen line if it is short enough to fit the width
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 of the selected window, but otherwise it may occupy several screen
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 lines.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 In some cases, text lines are truncated on the screen rather than
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 continued onto additional screen lines. In these cases,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 @code{vertical-motion} moves point much like @code{forward-line}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 @xref{Truncation}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
448 Because the width of a given string depends on the flags that control
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 the appearance of certain characters, @code{vertical-motion} behaves
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 differently, for a given piece of text, depending on the buffer it is
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 in, and even on the selected window (because the width, the truncation
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 flag, and display table may vary between windows). @xref{Usual
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 Display}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454
9401
32ae92d81323 Document cache-long-line-scans in @node Text Lines.
Jim Blandy <jimb@redhat.com>
parents: 7734
diff changeset
455 These functions scan text to determine where screen lines break, and
32ae92d81323 Document cache-long-line-scans in @node Text Lines.
Jim Blandy <jimb@redhat.com>
parents: 7734
diff changeset
456 thus take time proportional to the distance scanned. If you intend to
32ae92d81323 Document cache-long-line-scans in @node Text Lines.
Jim Blandy <jimb@redhat.com>
parents: 7734
diff changeset
457 use them heavily, Emacs provides caches which may improve the
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
458 performance of your code. @xref{Truncation, cache-long-line-scans}.
9401
32ae92d81323 Document cache-long-line-scans in @node Text Lines.
Jim Blandy <jimb@redhat.com>
parents: 7734
diff changeset
459
32ae92d81323 Document cache-long-line-scans in @node Text Lines.
Jim Blandy <jimb@redhat.com>
parents: 7734
diff changeset
460
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
461 @defun vertical-motion count &optional window
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 This function moves point to the start of the screen line @var{count}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 screen lines down from the screen line containing point. If @var{count}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 is negative, it moves up instead.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
466 @code{vertical-motion} returns the number of screen lines over which it
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
467 moved point. The value may be less in absolute value than @var{count}
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
468 if the beginning or end of the buffer was reached.
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
469
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
470 The window @var{window} is used for obtaining parameters such as the
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
471 width, the horizontal scrolling, and the display table. But
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
472 @code{vertical-motion} always operates on the current buffer, even if
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
473 @var{window} currently displays some other buffer.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 @deffn Command move-to-window-line count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 This function moves point with respect to the text currently displayed
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 in the selected window. It moves point to the beginning of the screen
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 line @var{count} screen lines from the top of the window. If
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 @var{count} is negative, that specifies a position
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
481 @w{@minus{}@var{count}} lines from the bottom (or the last line of the
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
482 buffer, if the buffer ends above the specified screen position).
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 If @var{count} is @code{nil}, then point moves to the beginning of the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 line in the middle of the window. If the absolute value of @var{count}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 is greater than the size of the window, then point moves to the place
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
487 that would appear on that screen line if the window were tall enough.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 This will probably cause the next redisplay to scroll to bring that
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 location onto the screen.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 In an interactive call, @var{count} is the numeric prefix argument.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
493 The value returned is the window line number point has moved to, with
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
494 the top line in the window numbered 0.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
497 @defun compute-motion from frompos to topos width offsets window
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
498 This function scans the current buffer, calculating screen positions.
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
499 It scans the buffer forward from position @var{from}, assuming that is
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
500 at screen coordinates @var{frompos}, to position @var{to} or coordinates
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
501 @var{topos}, whichever comes first. It returns the ending buffer
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
502 position and screen coordinates.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 The coordinate arguments @var{frompos} and @var{topos} are cons cells of
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 the form @code{(@var{hpos} . @var{vpos})}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 The argument @var{width} is the number of columns available to display
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 text; this affects handling of continuation lines. Use the value
12098
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 9401
diff changeset
509 returned by @code{window-width} for the window of your choice;
a6eb5f12b0f3 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 9401
diff changeset
510 normally, use @code{(window-width @var{window})}.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 The argument @var{offsets} is either @code{nil} or a cons cell of the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 form @code{(@var{hscroll} . @var{tab-offset})}. Here @var{hscroll} is
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
514 the number of columns not being displayed at the left margin; most
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
515 callers get this by calling @code{window-hscroll}. Meanwhile,
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
516 @var{tab-offset} is the offset between column numbers on the screen and
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
517 column numbers in the buffer. This can be nonzero in a continuation
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
518 line, when the previous screen lines' widths do not add up to a multiple
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
519 of @code{tab-width}. It is always zero in a non-continuation line.
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
520
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
521 The window @var{window} serves only to specify which display table to
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
522 use. @code{compute-motion} always operates on the current buffer,
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
523 regardless of what buffer is displayed in @var{window}.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 The return value is a list of five elements:
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 (@var{pos} @var{vpos} @var{hpos} @var{prevhpos} @var{contin})
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 @noindent
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 Here @var{pos} is the buffer position where the scan stopped, @var{vpos}
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
533 is the vertical screen position, and @var{hpos} is the horizontal screen
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
534 position.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 The result @var{prevhpos} is the horizontal position one character back
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
537 from @var{pos}. The result @var{contin} is @code{t} if the last line
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
538 was continued after (or within) the previous character.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
540 For example, to find the buffer position of column @var{col} of screen line
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 @var{line} of a certain window, pass the window's display start location
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 as @var{from} and the window's upper-left coordinates as @var{frompos}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 Pass the buffer's @code{(point-max)} as @var{to}, to limit the scan to
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
544 the end of the accessible portion of the buffer, and pass @var{line} and
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 @var{col} as @var{topos}. Here's a function that does this:
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 (defun coordinates-of-position (col line)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 (car (compute-motion (window-start)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 '(0 . 0)
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
551 (point-max)
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 (cons col line)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 (window-width)
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
554 (cons (window-hscroll) 0)
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
555 (selected-window))))
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 @end example
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
557
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
558 When you use @code{compute-motion} for the minibuffer, you need to use
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
559 @code{minibuffer-prompt-width} to get the horizontal position of the
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
560 beginning of the first screen line. @xref{Minibuffer Misc}.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 @node List Motion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 @comment node-name, next, previous, up
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 @subsection Moving over Balanced Expressions
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 @cindex sexp motion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 @cindex Lisp expression motion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 @cindex list motion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 Here are several functions concerned with balanced-parenthesis
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 expressions (also called @dfn{sexps} in connection with moving across
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 them in Emacs). The syntax table controls how these functions interpret
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 various characters; see @ref{Syntax Tables}. @xref{Parsing
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 Expressions}, for lower-level primitives for scanning sexps or parts of
14504
680aa532d697 (List Motion): Fix xref to Emacs manual.
Richard M. Stallman <rms@gnu.org>
parents: 13074
diff changeset
575 sexps. For user-level commands, see @ref{Lists Commands,,, emacs, GNU
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 Emacs Manual}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 @deffn Command forward-list arg
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
579 This function moves forward across @var{arg} balanced groups of
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
580 parentheses. (Other syntactic entities such as words or paired string
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
581 quotes are ignored.)
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 @deffn Command backward-list arg
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
585 This function moves backward across @var{arg} balanced groups of
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
586 parentheses. (Other syntactic entities such as words or paired string
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
587 quotes are ignored.)
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 @deffn Command up-list arg
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
591 This function moves forward out of @var{arg} levels of parentheses.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 A negative argument means move backward but still to a less deep spot.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 @deffn Command down-list arg
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
596 This function moves forward into @var{arg} levels of parentheses. A
7734
2d4db32cccd5 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7729
diff changeset
597 negative argument means move backward but still go
2d4db32cccd5 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 7729
diff changeset
598 deeper in parentheses (@minus{}@var{arg} levels).
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 @deffn Command forward-sexp arg
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
602 This function moves forward across @var{arg} balanced expressions.
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
603 Balanced expressions include both those delimited by parentheses and
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
604 other kinds, such as words and string constants. For example,
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 (concat@point{} "foo " (car x) y z)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 (forward-sexp 3)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 @result{} nil
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 (concat "foo " (car x) y@point{} z)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 @deffn Command backward-sexp arg
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
625 This function moves backward across @var{arg} balanced expressions.
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
626 @end deffn
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
627
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
628 @deffn Command beginning-of-defun arg
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
629 This function moves back to the @var{arg}th beginning of a defun. If
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
630 @var{arg} is negative, this actually moves forward, but it still moves
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
631 to the beginning of a defun, not to the end of one.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
634 @deffn Command end-of-defun arg
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
635 This function moves forward to the @var{arg}th end of a defun. If
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
636 @var{arg} is negative, this actually moves backward, but it still moves
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
637 to the end of a defun, not to the beginning of one.
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
638 @end deffn
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
639
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
640 @defopt defun-prompt-regexp
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
641 If non-@code{nil}, this variable holds a regular expression that
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
642 specifies what text can appear before the open-parenthesis that starts a
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
643 defun. That is to say, a defun begins on a line that starts with a
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
644 match for this regular expression, followed by a character with
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
645 open-parenthesis syntax.
7086
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
646 @end defopt
075343a6b32b *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 6552
diff changeset
647
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 @node Skipping Characters
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 @comment node-name, next, previous, up
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 @subsection Skipping Characters
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 @cindex skipping characters
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 The following two functions move point over a specified set of
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 characters. For example, they are often used to skip whitespace. For
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 related functions, see @ref{Motion and Syntax}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 @defun skip-chars-forward character-set &optional limit
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 This function moves point in the current buffer forward, skipping over a
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 given set of characters. It examines the character following point,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 then advances point if the character matches @var{character-set}. This
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 continues until it reaches a character that does not match. The
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
662 function returns the number of characters moved over.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 The argument @var{character-set} is like the inside of a
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 @samp{[@dots{}]} in a regular expression except that @samp{]} is never
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 special and @samp{\} quotes @samp{^}, @samp{-} or @samp{\}. Thus,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 @code{"a-zA-Z"} skips over all letters, stopping before the first
13074
c361ef50ec0f Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 12098
diff changeset
668 nonletter, and @code{"^a-zA-Z"} skips nonletters stopping before the
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 first letter. @xref{Regular Expressions}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 If @var{limit} is supplied (it must be a number or a marker), it
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 specifies the maximum position in the buffer that point can be skipped
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 to. Point will stop at or before @var{limit}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 In the following example, point is initially located directly before the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 @samp{T}. After the form is evaluated, point is located at the end of
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 that line (between the @samp{t} of @samp{hat} and the newline). The
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 function skips all letters and spaces, but not newlines.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 I read "@point{}The cat in the hat
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 comes back" twice.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (skip-chars-forward "a-zA-Z ")
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 @result{} nil
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 I read "The cat in the hat@point{}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 comes back" twice.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 @defun skip-chars-backward character-set &optional limit
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 This function moves point backward, skipping characters that match
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
702 @var{character-set}, until @var{limit}. It is just like
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 @code{skip-chars-forward} except for the direction of motion.
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
704
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
705 The return value indicates the distance traveled. It is an integer that
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
706 is zero or less.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 @end defun
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 @node Excursions
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 @section Excursions
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 @cindex excursion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 It is often useful to move point ``temporarily'' within a localized
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 portion of the program, or to switch buffers temporarily. This is
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 called an @dfn{excursion}, and it is done with the @code{save-excursion}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 special form. This construct saves the current buffer and its values of
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 point and the mark so they can be restored after the completion of the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 excursion.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 The forms for saving and restoring the configuration of windows are
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 described elsewhere (see @ref{Window Configurations}, and @pxref{Frame
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 Configurations}).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 @defspec save-excursion forms@dots{}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 @cindex mark excursion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 @cindex point excursion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 @cindex current buffer excursion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 The @code{save-excursion} special form saves the identity of the current
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
729 buffer and the values of point and the mark in it, evaluates
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
730 @var{forms}, and finally restores the buffer and its saved values of
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
731 point and the mark. All three saved values are restored even in case of
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
732 an abnormal exit via @code{throw} or error (@pxref{Nonlocal Exits}).
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 The @code{save-excursion} special form is the standard way to switch
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 buffers or move point within one part of a program and avoid affecting
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
736 the rest of the program. It is used more than 4000 times in the Lisp
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 sources of Emacs.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 @code{save-excursion} does not save the values of point and the mark for
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 other buffers, so changes in other buffers remain in effect after
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 @code{save-excursion} exits.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 @cindex window excursions
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 Likewise, @code{save-excursion} does not restore window-buffer
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 correspondences altered by functions such as @code{switch-to-buffer}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 One way to restore these correspondences, and the selected window, is to
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 use @code{save-window-excursion} inside @code{save-excursion}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (@pxref{Window Configurations}).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 The value returned by @code{save-excursion} is the result of the last of
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 @var{forms}, or @code{nil} if no @var{forms} are given.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 @group
22274
f0cd03a7dac9 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
755 (save-excursion @var{forms})
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 @equiv{}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 (let ((old-buf (current-buffer))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (old-pnt (point-marker))
22274
f0cd03a7dac9 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
759 @end group
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 (old-mark (copy-marker (mark-marker))))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 (unwind-protect
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 (progn @var{forms})
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 (set-buffer old-buf)
22274
f0cd03a7dac9 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
764 @group
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 (goto-char old-pnt)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 (set-marker (mark-marker) old-mark)))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 @end defspec
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
771 @strong{Warning:} Ordinary insertion of text adjacent to the saved
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
772 point value relocates the saved value, just as it relocates all markers.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
773 Therefore, when the saved point value is restored, it normally comes
22252
40089afa2b1d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22138
diff changeset
774 before the inserted text.
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
775
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
776 Although @code{save-excursion} saves the location of the mark, it does
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
777 not prevent functions which modify the buffer from setting
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
778 @code{deactivate-mark}, and thus causing the deactivation of the mark
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
779 after the command finishes. @xref{The Mark}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21007
diff changeset
780
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 @node Narrowing
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 @section Narrowing
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 @cindex narrowing
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 @cindex restriction (in a buffer)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 @cindex accessible portion (of a buffer)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 @dfn{Narrowing} means limiting the text addressable by Emacs editing
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 commands to a limited range of characters in a buffer. The text that
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 remains addressable is called the @dfn{accessible portion} of the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 buffer.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 Narrowing is specified with two buffer positions which become the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 beginning and end of the accessible portion. For most editing commands
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 and most Emacs primitives, these positions replace the values of the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 beginning and end of the buffer. While narrowing is in effect, no text
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 outside the accessible portion is displayed, and point cannot move
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 outside the accessible portion.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
799 Values such as positions or line numbers, which usually count from the
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 beginning of the buffer, do so despite narrowing, but the functions
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 which use them refuse to operate on text that is inaccessible.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 The commands for saving buffers are unaffected by narrowing; they save
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
804 the entire buffer regardless of any narrowing.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 @deffn Command narrow-to-region start end
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 This function sets the accessible portion of the current buffer to start
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 at @var{start} and end at @var{end}. Both arguments should be character
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 positions.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 In an interactive call, @var{start} and @var{end} are set to the bounds
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 of the current region (point and the mark, with the smallest first).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 @deffn Command narrow-to-page move-count
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 This function sets the accessible portion of the current buffer to
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 include just the current page. An optional first argument
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 @var{move-count} non-@code{nil} means to move forward or backward by
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
819 @var{move-count} pages and then narrow to one page. The variable
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 @code{page-delimiter} specifies where pages start and end
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 (@pxref{Standard Regexps}).
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 In an interactive call, @var{move-count} is set to the numeric prefix
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 argument.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 @deffn Command widen
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 @cindex widening
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 This function cancels any narrowing in the current buffer, so that the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 entire contents are accessible. This is called @dfn{widening}.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 It is equivalent to the following expression:
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 (narrow-to-region 1 (1+ (buffer-size)))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 @end deffn
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 @defspec save-restriction body@dots{}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 This special form saves the current bounds of the accessible portion,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 evaluates the @var{body} forms, and finally restores the saved bounds,
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 thus restoring the same state of narrowing (or absence thereof) formerly
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 in effect. The state of narrowing is restored even in the event of an
7729
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
843 abnormal exit via @code{throw} or error (@pxref{Nonlocal Exits}).
a1c07008521d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 7086
diff changeset
844 Therefore, this construct is a clean way to narrow a buffer temporarily.
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 The value returned by @code{save-restriction} is that returned by the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 last form in @var{body}, or @code{nil} if no body forms were given.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 @c Wordy to avoid overfull hbox. --rjc 16mar92
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 @strong{Caution:} it is easy to make a mistake when using the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 @code{save-restriction} construct. Read the entire description here
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 before you try it.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 If @var{body} changes the current buffer, @code{save-restriction} still
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 restores the restrictions on the original buffer (the buffer whose
21007
66d807bdc5b4 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 14504
diff changeset
856 restrictions it saved from), but it does not restore the identity of the
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 current buffer.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 @code{save-restriction} does @emph{not} restore point and the mark; use
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 @code{save-excursion} for that. If you use both @code{save-restriction}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 and @code{save-excursion} together, @code{save-excursion} should come
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 first (on the outside). Otherwise, the old point value would be
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 restored with temporary narrowing still in effect. If the old point
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 value were outside the limits of the temporary narrowing, this would
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 fail to restore it accurately.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 The @code{save-restriction} special form records the values of the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 beginning and end of the accessible portion as distances from the
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 beginning and end of the buffer. In other words, it records the amount
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 of inaccessible text before and after the accessible portion.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 This method yields correct results if @var{body} does further narrowing.
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 However, @code{save-restriction} can become confused if the body widens
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
874 and then makes changes outside the range of the saved narrowing. When
6552
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 this is what you want to do, @code{save-restriction} is not the right
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 tool for the job. Here is what you must use instead:
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 (let ((beg (point-min-marker))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 (end (point-max-marker)))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 (unwind-protect
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 (progn @var{body})
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 (save-excursion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 (set-buffer (marker-buffer beg))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 (narrow-to-region beg end))))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 Here is a simple example of correct use of @code{save-restriction}:
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 @example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 This is the contents of foo
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 This is the contents of foo
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 This is the contents of foo@point{}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 @group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 (save-excursion
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 (save-restriction
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 (goto-char 1)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 (forward-line 2)
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 (narrow-to-region 1 (point))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 (goto-char (point-min))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 (replace-string "foo" "bar")))
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 This is the contents of bar
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 This is the contents of bar
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 This is the contents of foo@point{}
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 ---------- Buffer: foo ----------
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 @end group
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 @end example
3b84ed22f747 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 @end defspec