changeset 106325:d1953939048b

(perform-replace): Let-bind recenter-last-op to nil. For def=recenter, replace `recenter' with `recenter-top-bottom' that is called with `this-command' and `last-command' let-bound to `recenter-top-bottom'. When the last `def' was not `recenter', set `recenter-last-op' to nil. (Bug#4981)
author Juri Linkov <juri@jurta.org>
date Mon, 30 Nov 2009 16:05:47 +0000
parents 279e568f6ec1
children b7dca98d92a9
files lisp/ChangeLog lisp/replace.el
diffstat 2 files changed, 20 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Mon Nov 30 13:49:13 2009 +0000
+++ b/lisp/ChangeLog	Mon Nov 30 16:05:47 2009 +0000
@@ -1,3 +1,11 @@
+2009-11-30  Juri Linkov  <juri@jurta.org>
+
+	* replace.el (perform-replace): Let-bind recenter-last-op to nil.
+	For def=recenter, replace `recenter' with `recenter-top-bottom'
+	that is called with `this-command' and `last-command' let-bound
+	to `recenter-top-bottom'.  When the last `def' was not `recenter',
+	set `recenter-last-op' to nil.  (Bug#4981)
+
 2009-11-30  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	Minor cleanup and simplification.
--- a/lisp/replace.el	Mon Nov 30 13:49:13 2009 +0000
+++ b/lisp/replace.el	Mon Nov 30 16:05:47 2009 +0000
@@ -1549,6 +1549,7 @@
          (replace-count 0)
          (nonempty-match nil)
 	 (multi-buffer nil)
+	 (recenter-last-op nil)	; Start cycling order with initial position.
 
          ;; If non-nil, it is marker saying where in the buffer to stop.
          (limit nil)
@@ -1785,7 +1786,12 @@
 			((eq def 'skip)
 			 (setq done t))
 			((eq def 'recenter)
-			 (recenter nil))
+			 ;; `this-command' has the value `query-replace',
+			 ;; so we need to bind it to `recenter-top-bottom'
+			 ;; to allow it to detect a sequence of `C-l'.
+			 (let ((this-command 'recenter-top-bottom)
+			       (last-command 'recenter-top-bottom))
+			   (recenter-top-bottom)))
 			((eq def 'edit)
 			 (let ((opos (point-marker)))
 			   (setq real-match-data (replace-match-data
@@ -1839,9 +1845,12 @@
 				       unread-command-events))
 			 (setq done t)))
 		  (when query-replace-lazy-highlight
-		    ;; Force lazy rehighlighting only after replacements
+		    ;; Force lazy rehighlighting only after replacements.
 		    (if (not (memq def '(skip backup)))
-			(setq isearch-lazy-highlight-last-string nil))))
+			(setq isearch-lazy-highlight-last-string nil)))
+		  (unless (eq def 'recenter)
+		    ;; Reset recenter cycling order to initial position.
+		    (setq recenter-last-op nil)))
 		;; Record previous position for ^ when we move on.
 		;; Change markers to numbers in the match data
 		;; since lots of markers slow down editing.