+2010-01-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Avoid dubious uses of save-excursions.
+ * positions.texi (Excursions): Recommend the use of
+ save-current-buffer if applicable.
+ * text.texi (Clickable Text): Fix the example code which used
+ save-excursion in a naive way which sometimes preserves point and
+ sometimes not.
+ * variables.texi (Creating Buffer-Local):
+ * os.texi (Session Management):
+ * display.texi (GIF Images):
+ * control.texi (Cleanups): Use (save|with)-current-buffer.
+
2010-01-02 Eli Zaretskii <eliz@gnu.org>
* modes.texi (Example Major Modes): Fix indentation. (Bug#5195)
;; End:
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009 Free Software Foundation, Inc.
+ 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@smallexample
@group
-(save-excursion
- (let ((buffer (get-buffer-create " *temp*")))
- (set-buffer buffer)
+(let ((buffer (get-buffer-create " *temp*")))
+ (with-current-buffer buffer
(unwind-protect
@var{body-form}
(kill-buffer buffer))))
(current-buffer))} and dispense with the variable @code{buffer}.
However, the way shown above is safer, if @var{body-form} happens to
get an error after switching to a different buffer! (Alternatively,
-you could write another @code{save-excursion} around @var{body-form},
+you could write a @code{save-current-buffer} around @var{body-form},
to ensure that the temporary buffer becomes current again in time to
kill it.)
(when (= idx max)
(setq idx 0))
(let ((img (create-image file nil :image idx)))
- (save-excursion
- (set-buffer buffer)
+ (with-current-buffer buffer
(goto-char (point-min))
(unless first-time (delete-char 1))
(insert-image img))
@group
(defun save-yourself-test ()
- (insert "(save-excursion
+ (insert "(save-current-buffer
(switch-to-buffer \"*scratch*\")
(insert \"I am restored\"))")
nil)
The forms for saving and restoring the configuration of windows are
described elsewhere (see @ref{Window Configurations}, and @pxref{Frame
-Configurations}).
+Configurations}). When only the identity of the current buffer needs
+to be saved and restored, it is preferable to use
+@code{save-current-buffer} instead.
@defspec save-excursion body@dots{}
@cindex mark excursion
point and the mark. All three saved values are restored even in case of
an abnormal exit via @code{throw} or error (@pxref{Nonlocal Exits}).
-The @code{save-excursion} special form is the standard way to switch
-buffers or move point within one part of a program and avoid affecting
-the rest of the program. It is used more than 4000 times in the Lisp
-sources of Emacs.
+The @code{save-excursion} special form is the standard way to move
+point within one part of a program and avoid affecting the rest of the
+program. It is used more than 4000 times in the Lisp sources
+of Emacs.
@code{save-excursion} does not save the values of point and the mark for
other buffers, so changes in other buffers remain in effect after
(defun dired-mouse-find-file-other-window (event)
"In Dired, visit the file or directory name you click on."
(interactive "e")
- (let (window pos file)
- (save-excursion
- (setq window (posn-window (event-end event))
- pos (posn-point (event-end event)))
- (if (not (windowp window))
- (error "No file chosen"))
- (set-buffer (window-buffer window))
+ (let ((window (posn-window (event-end event)))
+ (pos (posn-point (event-end event)))
+ file)
+ (if (not (windowp window))
+ (error "No file chosen"))
+ (with-current-buffer (window-buffer window)
(goto-char pos)
(setq file (dired-get-file-for-visit)))
(if (file-directory-p file)
@group
;; @r{In buffer @samp{b2}, the value hasn't changed.}
-(save-excursion
- (set-buffer "b2")
+(with-current-buffer "b2"
foo)
@result{} 5
@end group
+2010-01-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * gnus.texi (Posting Styles): Use with-current-buffer.
+ * calc.texi (Defining Simple Commands): Prefer save-current-buffer.
+
2010-01-02 Kevin Ryde <user42@zip.com.au>
* eieio.texi (Naming Conventions): Correction to xref on elisp
;; End:
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+ 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@smallexample
(let ((calc-command-flags nil))
(unwind-protect
- (save-excursion
+ (save-current-buffer
(calc-select-buffer)
@emph{body of function}
@emph{renumber stack}
@copying
Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
(body "You are fired.\n\nSincerely, your boss.")
(organization "Important Work, Inc"))
("nnml:.*"
- (From (save-excursion
- (set-buffer gnus-article-buffer)
+ (From (with-current-buffer gnus-article-buffer
(message-fetch-field "to"))))
("^nn.+:"
(signature-file "~/.mail-signature"))))