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