aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorStefan Monnier2015-03-25 09:47:12 -0400
committerStefan Monnier2015-03-25 09:47:12 -0400
commit599ca626d760215b090012c69c749d391cfd6fbe (patch)
tree6cc2d4c57d53e317d33bfc7fb2012908c14316c2 /doc
parent76040ddd8a4142e2933f1c24940d9e20c206ee6f (diff)
downloademacs-599ca626d760215b090012c69c749d391cfd6fbe.tar.gz
emacs-599ca626d760215b090012c69c749d391cfd6fbe.zip
`save-excursion' does not save&restore the mark any more
* src/editfns.c (save_excursion_save): Don't save the mark. (save_excursion_restore): Don't restore the mark. (Fsave_excursion): Fix docstring accordingly. * doc/lispintro/emacs-lisp-intro.texi: * doc/lispref/positions.texi (Excursions, Narrowing): `save-excursion' does not save&restore the mark any more.
Diffstat (limited to 'doc')
-rw-r--r--doc/lispintro/ChangeLog4
-rw-r--r--doc/lispintro/emacs-lisp-intro.texi44
-rw-r--r--doc/lispref/ChangeLog5
-rw-r--r--doc/lispref/positions.texi21
4 files changed, 39 insertions, 35 deletions
diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog
index 57ab03b1155..c54c165d22c 100644
--- a/doc/lispintro/ChangeLog
+++ b/doc/lispintro/ChangeLog
@@ -1,3 +1,7 @@
12015-03-25 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * emacs-lisp-intro.texi: `save-excursion' doesn't save&restore the mark.
4
12014-12-31 Paul Eggert <eggert@cs.ucla.edu> 52014-12-31 Paul Eggert <eggert@cs.ucla.edu>
2 6
3 Less 'make' chatter for Emacs doc 7 Less 'make' chatter for Emacs doc
diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index c67623d89cb..ed125bb3747 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -352,7 +352,7 @@ How To Write Function Definitions
352* if:: What if? 352* if:: What if?
353* else:: If--then--else expressions. 353* else:: If--then--else expressions.
354* Truth & Falsehood:: What Lisp considers false and true. 354* Truth & Falsehood:: What Lisp considers false and true.
355* save-excursion:: Keeping track of point, mark, and buffer. 355* save-excursion:: Keeping track of point and buffer.
356* Review:: 356* Review::
357* defun Exercises:: 357* defun Exercises::
358 358
@@ -2966,7 +2966,7 @@ symbol refers to it.)
2966* if:: What if? 2966* if:: What if?
2967* else:: If--then--else expressions. 2967* else:: If--then--else expressions.
2968* Truth & Falsehood:: What Lisp considers false and true. 2968* Truth & Falsehood:: What Lisp considers false and true.
2969* save-excursion:: Keeping track of point, mark, and buffer. 2969* save-excursion:: Keeping track of point and buffer.
2970* Review:: 2970* Review::
2971* defun Exercises:: 2971* defun Exercises::
2972@end menu 2972@end menu
@@ -4159,11 +4159,11 @@ The @code{save-excursion} function is the third and final special form
4159that we will discuss in this chapter. 4159that we will discuss in this chapter.
4160 4160
4161In Emacs Lisp programs used for editing, the @code{save-excursion} 4161In Emacs Lisp programs used for editing, the @code{save-excursion}
4162function is very common. It saves the location of point and mark, 4162function is very common. It saves the location of point,
4163executes the body of the function, and then restores point and mark to 4163executes the body of the function, and then restores point to
4164their previous positions if their locations were changed. Its primary 4164its previous position if its location was changed. Its primary
4165purpose is to keep the user from being surprised and disturbed by 4165purpose is to keep the user from being surprised and disturbed by
4166unexpected movement of point or mark. 4166unexpected movement of point.
4167 4167
4168@menu 4168@menu
4169* Point and mark:: A review of various locations. 4169* Point and mark:: A review of various locations.
@@ -4201,7 +4201,7 @@ region}. Numerous commands work on the region, including
4201@code{print-region}. 4201@code{print-region}.
4202 4202
4203The @code{save-excursion} special form saves the locations of point and 4203The @code{save-excursion} special form saves the locations of point and
4204mark and restores those positions after the code within the body of the 4204restores this position after the code within the body of the
4205special form is evaluated by the Lisp interpreter. Thus, if point were 4205special form is evaluated by the Lisp interpreter. Thus, if point were
4206in the beginning of a piece of text and some code moved point to the end 4206in the beginning of a piece of text and some code moved point to the end
4207of the buffer, the @code{save-excursion} would put point back to where 4207of the buffer, the @code{save-excursion} would put point back to where
@@ -4212,16 +4212,16 @@ In Emacs, a function frequently moves point as part of its internal
4212workings even though a user would not expect this. For example, 4212workings even though a user would not expect this. For example,
4213@code{count-lines-region} moves point. To prevent the user from being 4213@code{count-lines-region} moves point. To prevent the user from being
4214bothered by jumps that are both unexpected and (from the user's point of 4214bothered by jumps that are both unexpected and (from the user's point of
4215view) unnecessary, @code{save-excursion} is often used to keep point and 4215view) unnecessary, @code{save-excursion} is often used to keep point in
4216mark in the location expected by the user. The use of 4216the location expected by the user. The use of
4217@code{save-excursion} is good housekeeping. 4217@code{save-excursion} is good housekeeping.
4218 4218
4219To make sure the house stays clean, @code{save-excursion} restores the 4219To make sure the house stays clean, @code{save-excursion} restores the
4220values of point and mark even if something goes wrong in the code inside 4220value of point even if something goes wrong in the code inside
4221of it (or, to be more precise and to use the proper jargon, ``in case of 4221of it (or, to be more precise and to use the proper jargon, ``in case of
4222abnormal exit''). This feature is very helpful. 4222abnormal exit''). This feature is very helpful.
4223 4223
4224In addition to recording the values of point and mark, 4224In addition to recording the value of point,
4225@code{save-excursion} keeps track of the current buffer, and restores 4225@code{save-excursion} keeps track of the current buffer, and restores
4226it, too. This means you can write code that will change the buffer and 4226it, too. This means you can write code that will change the buffer and
4227have @code{save-excursion} switch you back to the original buffer. 4227have @code{save-excursion} switch you back to the original buffer.
@@ -4386,9 +4386,9 @@ For example,
4386@end smallexample 4386@end smallexample
4387 4387
4388@item save-excursion 4388@item save-excursion
4389Record the values of point and mark and the current buffer before 4389Record the values of point and the current buffer before
4390evaluating the body of this special form. Restore the values of point 4390evaluating the body of this special form. Restore the value of point and
4391and mark and buffer afterward. 4391buffer afterward.
4392 4392
4393@need 1250 4393@need 1250
4394For example, 4394For example,
@@ -5201,8 +5201,8 @@ of the two-element list, @code{(oldbuf (current-buffer))}.
5201The body of the @code{let} expression in @code{append-to-buffer} 5201The body of the @code{let} expression in @code{append-to-buffer}
5202consists of a @code{save-excursion} expression. 5202consists of a @code{save-excursion} expression.
5203 5203
5204The @code{save-excursion} function saves the locations of point and 5204The @code{save-excursion} function saves the location of point, and restores it
5205mark, and restores them to those positions after the expressions in the 5205to that position after the expressions in the
5206body of the @code{save-excursion} complete execution. In addition, 5206body of the @code{save-excursion} complete execution. In addition,
5207@code{save-excursion} keeps track of the original buffer, and 5207@code{save-excursion} keeps track of the original buffer, and
5208restores it. This is how @code{save-excursion} is used in 5208restores it. This is how @code{save-excursion} is used in
@@ -5390,7 +5390,7 @@ Conventionally bound to @kbd{M-.} (that's a period following the
5390@key{META} key). 5390@key{META} key).
5391 5391
5392@item save-excursion 5392@item save-excursion
5393Save the location of point and mark and restore their values after the 5393Save the location of point and restore its value after the
5394arguments to @code{save-excursion} have been evaluated. Also, remember 5394arguments to @code{save-excursion} have been evaluated. Also, remember
5395the current buffer and return to it. 5395the current buffer and return to it.
5396 5396
@@ -5896,7 +5896,7 @@ the value of point, which will be at the end of the inserted text, is
5896recorded in the variable @code{newmark}. 5896recorded in the variable @code{newmark}.
5897 5897
5898After the body of the outer @code{save-excursion} is evaluated, point 5898After the body of the outer @code{save-excursion} is evaluated, point
5899and mark are relocated to their original places. 5899is relocated to its original place.
5900 5900
5901However, it is convenient to locate a mark at the end of the newly 5901However, it is convenient to locate a mark at the end of the newly
5902inserted text and locate point at its beginning. The @code{newmark} 5902inserted text and locate point at its beginning. The @code{newmark}
@@ -6685,8 +6685,8 @@ restored just before the completion of the function by the
6685@code{save-restriction} special form. 6685@code{save-restriction} special form.
6686 6686
6687The call to @code{widen} is followed by @code{save-excursion}, which 6687The call to @code{widen} is followed by @code{save-excursion}, which
6688saves the location of the cursor (i.e., of point) and of the mark, and 6688saves the location of the cursor (i.e., of point), and
6689restores them after the code in the body of the @code{save-excursion} 6689restores it after the code in the body of the @code{save-excursion}
6690uses the @code{beginning-of-line} function to move point. 6690uses the @code{beginning-of-line} function to move point.
6691 6691
6692(Note that the @code{(widen)} expression comes between the 6692(Note that the @code{(widen)} expression comes between the
@@ -6757,8 +6757,8 @@ it, and @code{count-lines} counts only the lines @emph{before} the
6757current line. 6757current line.
6758 6758
6759After @code{count-lines} has done its job, and the message has been 6759After @code{count-lines} has done its job, and the message has been
6760printed in the echo area, the @code{save-excursion} restores point and 6760printed in the echo area, the @code{save-excursion} restores point to
6761mark to their original positions; and @code{save-restriction} restores 6761its original position; and @code{save-restriction} restores
6762the original narrowing, if any. 6762the original narrowing, if any.
6763 6763
6764@node narrow Exercise 6764@node narrow Exercise
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 9b1bbb357a5..9e1b7b074e2 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,8 @@
12015-03-25 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * positions.texi (Excursions, Narrowing): `save-excursion' does not
4 save&restore the mark any more.
5
12015-03-24 Paul Eggert <eggert@cs.ucla.edu> 62015-03-24 Paul Eggert <eggert@cs.ucla.edu>
2 7
3 * numbers.texi (Float Basics): Improve ldexp documentation. 8 * numbers.texi (Float Basics): Improve ldexp documentation.
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index b74116ebf1d..103161c7ae2 100644
--- a/doc/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -825,8 +825,8 @@ is zero or less.
825 It is often useful to move point ``temporarily'' within a localized 825 It is often useful to move point ``temporarily'' within a localized
826portion of the program. This is called an @dfn{excursion}, and it is 826portion of the program. This is called an @dfn{excursion}, and it is
827done with the @code{save-excursion} special form. This construct 827done with the @code{save-excursion} special form. This construct
828remembers the initial identity of the current buffer, and its values 828remembers the initial identity of the current buffer, and its value
829of point and the mark, and restores them after the excursion 829of point, and restores them after the excursion
830completes. It is the standard way to move point within one part of a 830completes. It is the standard way to move point within one part of a
831program and avoid affecting the rest of the program, and is used 831program and avoid affecting the rest of the program, and is used
832thousands of times in the Lisp sources of Emacs. 832thousands of times in the Lisp sources of Emacs.
@@ -841,18 +841,18 @@ Configurations} and in @ref{Frame Configurations}. @c frameset?
841@cindex mark excursion 841@cindex mark excursion
842@cindex point excursion 842@cindex point excursion
843This special form saves the identity of the current buffer and the 843This special form saves the identity of the current buffer and the
844values of point and the mark in it, evaluates @var{body}, and finally 844value of point in it, evaluates @var{body}, and finally
845restores the buffer and its saved values of point and the mark. All 845restores the buffer and its saved value of point. both saved values are
846three saved values are restored even in case of an abnormal exit via 846restored even in case of an abnormal exit via
847@code{throw} or error (@pxref{Nonlocal Exits}). 847@code{throw} or error (@pxref{Nonlocal Exits}).
848 848
849The value returned by @code{save-excursion} is the result of the last 849The value returned by @code{save-excursion} is the result of the last
850form in @var{body}, or @code{nil} if no body forms were given. 850form in @var{body}, or @code{nil} if no body forms were given.
851@end defspec 851@end defspec
852 852
853 Because @code{save-excursion} only saves point and mark for the 853 Because @code{save-excursion} only saves point for the
854buffer that was current at the start of the excursion, any changes 854buffer that was current at the start of the excursion, any changes
855made to point and/or mark in other buffers, during the excursion, will 855made to point in other buffers, during the excursion, will
856remain in effect afterward. This frequently leads to unintended 856remain in effect afterward. This frequently leads to unintended
857consequences, so the byte compiler warns if you call @code{set-buffer} 857consequences, so the byte compiler warns if you call @code{set-buffer}
858during an excursion: 858during an excursion:
@@ -888,11 +888,6 @@ type @code{nil}. @xref{Marker Insertion Types}. Therefore, when the
888saved point value is restored, it normally comes before the inserted 888saved point value is restored, it normally comes before the inserted
889text. 889text.
890 890
891 Although @code{save-excursion} saves the location of the mark, it does
892not prevent functions which modify the buffer from setting
893@code{deactivate-mark}, and thus causing the deactivation of the mark
894after the command finishes. @xref{The Mark}.
895
896@node Narrowing 891@node Narrowing
897@section Narrowing 892@section Narrowing
898@cindex narrowing 893@cindex narrowing
@@ -980,7 +975,7 @@ restores the restrictions on the original buffer (the buffer whose
980restrictions it saved from), but it does not restore the identity of the 975restrictions it saved from), but it does not restore the identity of the
981current buffer. 976current buffer.
982 977
983@code{save-restriction} does @emph{not} restore point and the mark; use 978@code{save-restriction} does @emph{not} restore point; use
984@code{save-excursion} for that. If you use both @code{save-restriction} 979@code{save-excursion} for that. If you use both @code{save-restriction}
985and @code{save-excursion} together, @code{save-excursion} should come 980and @code{save-excursion} together, @code{save-excursion} should come
986first (on the outside). Otherwise, the old point value would be 981first (on the outside). Otherwise, the old point value would be