# HG changeset patch # User Jan D. # Date 1262702559 -3600 # Node ID 861edc07f3ea159eaf89697ab4c84ee4c89e9374 # Parent 9dcca543c2aac20e0e43b92ea78ef612e1e2c83c# Parent 04c6036b94377970478321fc671792a1c53ab128 Merge from mainline. diff -r 9dcca543c2aa -r 861edc07f3ea doc/lispref/ChangeLog --- a/doc/lispref/ChangeLog Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/lispref/ChangeLog Tue Jan 05 15:42:39 2010 +0100 @@ -1,3 +1,16 @@ +2010-01-04 Stefan Monnier + + 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 * modes.texi (Example Major Modes): Fix indentation. (Bug#5195) @@ -8375,7 +8388,7 @@ ;; 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. diff -r 9dcca543c2aa -r 861edc07f3ea doc/lispref/control.texi --- a/doc/lispref/control.texi Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/lispref/control.texi Tue Jan 05 15:42:39 2010 +0100 @@ -1255,9 +1255,8 @@ @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)))) @@ -1269,7 +1268,7 @@ (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.) diff -r 9dcca543c2aa -r 861edc07f3ea doc/lispref/display.texi --- a/doc/lispref/display.texi Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/lispref/display.texi Tue Jan 05 15:42:39 2010 +0100 @@ -4394,8 +4394,7 @@ (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)) diff -r 9dcca543c2aa -r 861edc07f3ea doc/lispref/os.texi --- a/doc/lispref/os.texi Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/lispref/os.texi Tue Jan 05 15:42:39 2010 +0100 @@ -2182,7 +2182,7 @@ @group (defun save-yourself-test () - (insert "(save-excursion + (insert "(save-current-buffer (switch-to-buffer \"*scratch*\") (insert \"I am restored\"))") nil) diff -r 9dcca543c2aa -r 861edc07f3ea doc/lispref/positions.texi --- a/doc/lispref/positions.texi Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/lispref/positions.texi Tue Jan 05 15:42:39 2010 +0100 @@ -806,7 +806,9 @@ 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 @@ -817,10 +819,10 @@ 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 diff -r 9dcca543c2aa -r 861edc07f3ea doc/lispref/text.texi --- a/doc/lispref/text.texi Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/lispref/text.texi Tue Jan 05 15:42:39 2010 +0100 @@ -3524,13 +3524,12 @@ (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) diff -r 9dcca543c2aa -r 861edc07f3ea doc/lispref/variables.texi --- a/doc/lispref/variables.texi Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/lispref/variables.texi Tue Jan 05 15:42:39 2010 +0100 @@ -1240,8 +1240,7 @@ @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 diff -r 9dcca543c2aa -r 861edc07f3ea doc/misc/ChangeLog --- a/doc/misc/ChangeLog Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/misc/ChangeLog Tue Jan 05 15:42:39 2010 +0100 @@ -1,3 +1,8 @@ +2010-01-04 Stefan Monnier + + * gnus.texi (Posting Styles): Use with-current-buffer. + * calc.texi (Defining Simple Commands): Prefer save-current-buffer. + 2010-01-02 Kevin Ryde * eieio.texi (Naming Conventions): Correction to xref on elisp @@ -6512,7 +6517,7 @@ ;; 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. diff -r 9dcca543c2aa -r 861edc07f3ea doc/misc/calc.texi --- a/doc/misc/calc.texi Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/misc/calc.texi Tue Jan 05 15:42:39 2010 +0100 @@ -31968,7 +31968,7 @@ @smallexample (let ((calc-command-flags nil)) (unwind-protect - (save-excursion + (save-current-buffer (calc-select-buffer) @emph{body of function} @emph{renumber stack} diff -r 9dcca543c2aa -r 861edc07f3ea doc/misc/gnus.texi --- a/doc/misc/gnus.texi Tue Jan 05 15:30:22 2010 +0100 +++ b/doc/misc/gnus.texi Tue Jan 05 15:42:39 2010 +0100 @@ -10,7 +10,7 @@ @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 @@ -13449,8 +13449,7 @@ (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")))) diff -r 9dcca543c2aa -r 861edc07f3ea lisp/ChangeLog --- a/lisp/ChangeLog Tue Jan 05 15:30:22 2010 +0100 +++ b/lisp/ChangeLog Tue Jan 05 15:42:39 2010 +0100 @@ -1,3 +1,22 @@ +2010-01-05 Kenichi Handa + + * language/indian.el (malayalam-composable-pattern): Fix ZWNJ and + ZWJ. + +2010-01-05 Dan Nicolaescu + + * vc-bzr.el (vc-bzr-diff): Obey vc-disable-async-diff. + +2010-01-04 Dan Nicolaescu + + * vc-bzr.el (vc-bzr-state-heuristic): Make it work for lightweight + checkouts. (Bug#618) + (vc-bzr-log-view-mode): Also highlight the author. + (vc-bzr-shelve-map): Change binding for vc-bzr-shelve-apply-at-point. + (vc-bzr-shelve-menu-map): + (vc-bzr-dir-extra-headers): Improve menu and tooltip text. + (vc-bzr-shelve-apply): Make prompt more explicit. + 2010-01-02 Chong Yidong * net/browse-url.el (browse-url-encode-url): Don't escape commas. diff -r 9dcca543c2aa -r 861edc07f3ea lisp/language/indian.el --- a/lisp/language/indian.el Tue Jan 05 15:30:22 2010 +0100 +++ b/lisp/language/indian.el Tue Jan 05 15:42:39 2010 +0100 @@ -153,8 +153,8 @@ ("a" . "\u0903") ; vowel modifier (post) ("S" . "\u0951") ; stress sign (above) ("s" . "\u0952") ; stress sign (below) + ("N" . "\u200C") ; ZWNJ ("J" . "\u200D") ; ZWJ - ("N" . "\u200C") ; ZWNJ ("X" . "[\u0900-\u097F]")))) ; all coverage (indian-compose-regexp (concat @@ -195,8 +195,8 @@ ("b" . "[\u0D62-\u0D63]") ; belowbase matra ("a" . "[\u0D02-\u0D03]") ; abovebase sign ("H" . "\u0D4D") ; virama sign - ("N" . "\u200D") ; ZWJ - ("J" . "\u200C") ; ZWNJ + ("N" . "\u200C") ; ZWNJ + ("J" . "\u200D") ; ZWJ ("X" . "[\u0D00-\u0D7F]")))) ; all coverage (indian-compose-regexp (concat diff -r 9dcca543c2aa -r 861edc07f3ea lisp/vc-bzr.el --- a/lisp/vc-bzr.el Tue Jan 05 15:30:22 2010 +0100 +++ b/lisp/vc-bzr.el Tue Jan 05 15:42:39 2010 +0100 @@ -176,13 +176,13 @@ "\0" "[^\0]*\0" ;id? "\\([^\0]*\\)\0" ;"a/f/d", a=removed? - "[^\0]*\0" ;sha1 (empty if conflicted)? - "\\([^\0]*\\)\0" ;size? + "\\([^\0]*\\)\0" ;sha1 (empty if conflicted)? + "\\([^\0]*\\)\0" ;size?p "[^\0]*\0" ;"y/n", executable? "[^\0]*\0" ;? "\\([^\0]*\\)\0" ;"a/f/d" a=added? "\\([^\0]*\\)\0" ;sha1 again? - "[^\0]*\0" ;size again? + "\\([^\0]*\\)\0" ;size again? "[^\0]*\0" ;"y/n", executable again? "[^\0]*\0" ;last revid? ;; There are more fields when merges are pending. @@ -194,11 +194,20 @@ ;; conflict markers). (cond ((eq (char-after (match-beginning 1)) ?a) 'removed) - ((eq (char-after (match-beginning 3)) ?a) 'added) - ((and (eq (string-to-number (match-string 2)) + ((eq (char-after (match-beginning 4)) ?a) 'added) + ((or (and (eq (string-to-number (match-string 3)) (nth 7 (file-attributes file))) - (equal (match-string 4) + (equal (match-string 5) (vc-bzr-sha1 file))) + (and + ;; It looks like for lightweight + ;; checkouts \2 is empty and we need to + ;; look for size in \6. + (eq (match-beginning 2) (match-end 2)) + (eq (string-to-number (match-string 6)) + (nth 7 (file-attributes file))) + (equal (match-string 5) + (vc-bzr-sha1 file)))) 'up-to-date) (t 'edited)) 'unregistered)))) @@ -475,7 +484,7 @@ (4 'change-log-list nil lax)))) (append `((,log-view-message-re . 'log-view-message-face)) ;; log-view-font-lock-keywords - '(("^ *committer: \ + '(("^ *\\(?:committer\\|author\\): \ \\([^<(]+?\\)[ ]*[(<]\\([[:alnum:]_.+-]+@[[:alnum:]_.-]+\\)[>)]" (1 'change-log-name) (2 'change-log-email)) @@ -523,7 +532,8 @@ (defun vc-bzr-diff (files &optional rev1 rev2 buffer) "VC bzr backend for diff." ;; `bzr diff' exits with code 1 if diff is non-empty. - (apply #'vc-bzr-command "diff" (or buffer "*vc-diff*") 'async files + (apply #'vc-bzr-command "diff" (or buffer "*vc-diff*") + (if vc-disable-async-diff 1 'async) files "--diff-options" (mapconcat 'identity (vc-switches 'bzr 'diff) " ") @@ -732,7 +742,7 @@ (define-key map "\C-k" 'vc-bzr-shelve-delete-at-point) ;; (define-key map "=" 'vc-bzr-shelve-show-at-point) ;; (define-key map "\C-m" 'vc-bzr-shelve-show-at-point) - (define-key map "A" 'vc-bzr-shelve-apply-at-point) + (define-key map "P" 'vc-bzr-shelve-apply-at-point) map)) (defvar vc-bzr-shelve-menu-map @@ -740,9 +750,9 @@ (define-key map [de] '(menu-item "Delete shelf" vc-bzr-shelve-delete-at-point :help "Delete the current shelf")) - (define-key map [ap] - '(menu-item "Apply shelf" vc-bzr-shelve-apply-at-point - :help "Apply the current shelf")) + (define-key map [po] + '(menu-item "Apply and remove shelf (pop)" vc-bzr-shelve-apply-at-point + :help "Apply the current shelf and remove it")) ;; (define-key map [sh] ;; '(menu-item "Show shelve" vc-bzr-shelve-show-at-point ;; :help "Show the contents of the current shelve")) @@ -800,7 +810,7 @@ (propertize x 'face 'font-lock-variable-name-face 'mouse-face 'highlight - 'help-echo "mouse-3: Show shelve menu\nA: Apply shelf\nC-k: Delete shelf" + 'help-echo "mouse-3: Show shelve menu\nP: Apply and remove shelf (pop)\nC-k: Delete shelf" 'keymap vc-bzr-shelve-map)) shelve "\n")) (concat @@ -830,8 +840,8 @@ ;; (pop-to-buffer (current-buffer))) (defun vc-bzr-shelve-apply (name) - "Apply shelve NAME." - (interactive "sApply shelf: ") + "Apply shelve NAME and remove it afterwards." + (interactive "sApply (and remove) shelf: ") (vc-bzr-command "unshelve" "*vc-bzr-shelve*" 0 nil "--apply" name) (vc-resynch-buffer (vc-bzr-root default-directory) t t)) diff -r 9dcca543c2aa -r 861edc07f3ea src/ChangeLog --- a/src/ChangeLog Tue Jan 05 15:30:22 2010 +0100 +++ b/src/ChangeLog Tue Jan 05 15:42:39 2010 +0100 @@ -8,6 +8,28 @@ (xg_frame_resized, xg_frame_set_char_size): Call xg_clear_under_internal_border. (xg_update_scrollbar_pos): Clear under old scroll bar position. +2010-01-05 Chong Yidong + + * keyboard.c (read_key_sequence): Catch keyboard switch after + making a new tty frame (Bug#5095). + +2010-01-05 Kenichi Handa + + * fontset.c (fontset_find_font): Fix getting the frame pointer. + +2010-01-04 Stefan Monnier + + * dbusbind.c (xd_remove_watch): Avoid trying to convert a void* to + Lisp_Object, preferring to convert a lisp_Object to a void* instead. + (Fdbus_init_bus): Use XHASH to get a scalar value from a Lisp_Object. + +2010-01-03 Michael Albinus + + * dbusbind.c (xd_add_watch): Improve debug message. + (xd_remove_watch): Improve debug message. If DATA is the session + bus, unset D-Bus session environment. + (Fdbus_init_bus): Pass the bus as argument to + dbus_connection_set_watch_functions. (Bug#5283) 2010-01-01 Chong Yidong @@ -155,7 +177,7 @@ 2009-12-15 Michael Albinus * dbusbind.c (xd_retrieve_arg): Reorder declarations in order to - avoid compiler warnings. (Bug #5217). + avoid compiler warnings. (Bug #5217) 2009-12-14 Kenichi Handa @@ -5330,7 +5352,7 @@ (XD_SIGNAL1, XD_SIGNAL2, XD_SIGNAL3): New macros. Throw Qdbus_error. (xd_read_queued_messages): Catch Qdbus_error from the macros. (all): Replace xsignal1, xsignal2, xsignal3 by the respective - macro. (Bug#1186). + macro. (Bug#1186) 2008-10-23 Ali Bahrami (tiny change) @@ -21224,7 +21246,7 @@ ;; add-log-time-zone-rule: t ;; End: - Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GNU Emacs. diff -r 9dcca543c2aa -r 861edc07f3ea src/dbusbind.c --- a/src/dbusbind.c Tue Jan 05 15:30:22 2010 +0100 +++ b/src/dbusbind.c Tue Jan 05 15:42:39 2010 +0100 @@ -761,14 +761,14 @@ if (dbus_watch_get_flags (watch) & DBUS_WATCH_READABLE) { #if HAVE_DBUS_WATCH_GET_UNIX_FD - /* TODO: Reverse these on Win32, which prefers the opposite. */ + /* TODO: Reverse these on Win32, which prefers the opposite. */ int fd = dbus_watch_get_unix_fd(watch); if (fd == -1) fd = dbus_watch_get_socket(watch); #else int fd = dbus_watch_get_fd(watch); #endif - XD_DEBUG_MESSAGE ("%d", fd); + XD_DEBUG_MESSAGE ("fd %d", fd); if (fd == -1) return FALSE; @@ -781,7 +781,8 @@ return TRUE; } -/* Remove connection file descriptor from input_wait_mask. */ +/* Remove connection file descriptor from input_wait_mask. DATA is + the used bus, either QCdbus_system_bus or QCdbus_session_bus. */ void xd_remove_watch (watch, data) DBusWatch *watch; @@ -791,18 +792,25 @@ if (dbus_watch_get_flags (watch) & DBUS_WATCH_READABLE) { #if HAVE_DBUS_WATCH_GET_UNIX_FD - /* TODO: Reverse these on Win32, which prefers the opposite. */ + /* TODO: Reverse these on Win32, which prefers the opposite. */ int fd = dbus_watch_get_unix_fd(watch); if (fd == -1) fd = dbus_watch_get_socket(watch); #else int fd = dbus_watch_get_fd(watch); #endif - XD_DEBUG_MESSAGE ("%d", fd); + XD_DEBUG_MESSAGE ("fd %d", fd); if (fd == -1) return; + /* Unset session environment. */ + if ((data != NULL) && (data == (void*) XHASH (QCdbus_session_bus))) + { + XD_DEBUG_MESSAGE ("unsetenv DBUS_SESSION_BUS_ADDRESS"); + unsetenv ("DBUS_SESSION_BUS_ADDRESS"); + } + /* Remove the file descriptor from input_wait_mask. */ delete_keyboard_wait_descriptor (fd); } @@ -825,11 +833,12 @@ /* Open a connection to the bus. */ connection = xd_initialize (bus); - /* Add the watch functions. */ + /* Add the watch functions. We pass also the bus as data, in order + to distinguish between the busses in xd_remove_watch. */ if (!dbus_connection_set_watch_functions (connection, xd_add_watch, xd_remove_watch, - NULL, NULL, NULL)) + NULL, (void*) XHASH (bus), NULL)) XD_SIGNAL1 (build_string ("Cannot add watch functions")); /* Return. */ diff -r 9dcca543c2aa -r 861edc07f3ea src/fontset.c --- a/src/fontset.c Tue Jan 05 15:30:22 2010 +0100 +++ b/src/fontset.c Tue Jan 05 15:42:39 2010 +0100 @@ -533,8 +533,8 @@ { Lisp_Object vec, font_group; int i, charset_matched = 0, found_index; - FRAME_PTR f = (FRAMEP (FONTSET_FRAME (fontset))) - ? XFRAME (selected_frame) : XFRAME (FONTSET_FRAME (fontset)); + FRAME_PTR f = (FRAMEP (FONTSET_FRAME (fontset)) + ? XFRAME (FONTSET_FRAME (fontset)) : XFRAME (selected_frame)); Lisp_Object rfont_def; font_group = fontset_get_font_group (fontset, fallback ? -1 : c); diff -r 9dcca543c2aa -r 861edc07f3ea src/keyboard.c --- a/src/keyboard.c Tue Jan 05 15:30:22 2010 +0100 +++ b/src/keyboard.c Tue Jan 05 15:42:39 2010 +0100 @@ -9502,7 +9502,13 @@ key = read_char (NILP (prompt), nmaps, (Lisp_Object *) submaps, last_nonmenu_event, &used_mouse_menu, NULL); - if (INTEGERP (key) && XINT (key) == -2) /* wrong_kboard_jmpbuf */ + if ((INTEGERP (key) && XINT (key) == -2) /* wrong_kboard_jmpbuf */ + /* When switching to a new tty (with a new keyboard), + read_char returns the new buffer, rather than -2 + (Bug#5095). This is because `terminal-init-xterm' + calls read-char, which eats the wrong_kboard_jmpbuf + return. Any better way to fix this? -- cyd */ + || (interrupted_kboard != current_kboard)) { int found = 0; struct kboard *k;