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