]> git.eshelyaron.com Git - emacs.git/commitdiff
(perform-replace): Let-bind recenter-last-op to nil.
authorJuri Linkov <juri@jurta.org>
Mon, 30 Nov 2009 16:05:47 +0000 (16:05 +0000)
committerJuri Linkov <juri@jurta.org>
Mon, 30 Nov 2009 16:05:47 +0000 (16:05 +0000)
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)

lisp/ChangeLog
lisp/replace.el

index f53049dc5389e92360484fdad928b70799da1f37..568f1d30c86a3d01e03701d99042998bd6cc9095 100644 (file)
@@ -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.
index 7e14895d1e61259ea73302e8066c7bfdca183d76..e9ff4ff47e873581bd463f978bbf7642a40f5e74 100644 (file)
@@ -1549,6 +1549,7 @@ make, or the user didn't cancel the call."
          (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 @@ make, or the user didn't cancel the call."
                        ((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 @@ make, or the user didn't cancel the call."
                                       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.