]> git.eshelyaron.com Git - emacs.git/commitdiff
(perform-replace): Calculate match-again
authorRichard M. Stallman <rms@gnu.org>
Tue, 27 Dec 2005 04:31:21 +0000 (04:31 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 27 Dec 2005 04:31:21 +0000 (04:31 +0000)
before skipping read-only matches.

lisp/ChangeLog
lisp/replace.el

index 2798afaaf358749aa8a953ddcde7c35759071066..2cb816e451313f9e58febe1dc7ea8c02f114723e 100644 (file)
@@ -1,5 +1,8 @@
 2005-12-26  Richard M. Stallman  <rms@gnu.org>
 
+       * replace.el (perform-replace): Calculate match-again
+       before skipping read-only matches.
+
        * paren.el (paren-showing-faces): New group.
        (show-paren-match, show-paren-mismatch): Move to that group.
 
index 8229eda85a469b8e9e253a7e76b498796998da8c..46f672a8d1a761791ba806cb891ab76418812609 100644 (file)
@@ -1474,32 +1474,33 @@ make, or the user didn't cancel the call."
                                 ;; For speed, use only integers and
                                 ;; reuse the list used last time.
                                 (replace-match-data t real-match-data)))))
+         
+         ;; Record whether the match is nonempty, to avoid an infinite loop
+         ;; repeatedly matching the same empty string.
+         (setq nonempty-match
+               (/= (nth 0 real-match-data) (nth 1 real-match-data)))
+
+         ;; If the match is empty, record that the next one can't be
+         ;; adjacent.
+
+         ;; Otherwise, if matching a regular expression, do the next
+         ;; match now, since the replacement for this match may
+         ;; affect whether the next match is adjacent to this one.
+         ;; If that match is empty, don't use it.
+         (setq match-again
+               (and nonempty-match
+                    (or (not regexp-flag)
+                        (and (looking-at search-string)
+                             (let ((match (match-data)))
+                               (and (/= (nth 0 match) (nth 1 match))
+                                    match))))))
+
          ;; Optionally ignore matches that have a read-only property.
          (unless (and query-replace-skip-read-only
                       (text-property-not-all
-                       (match-beginning 0) (match-end 0)
+                       (nth 0 real-match-data) (nth 1 real-match-data)
                        'read-only nil))
 
-           ;; Record whether the match is nonempty, to avoid an infinite loop
-           ;; repeatedly matching the same empty string.
-           (setq nonempty-match
-                 (/= (nth 0 real-match-data) (nth 1 real-match-data)))
-
-           ;; If the match is empty, record that the next one can't be
-           ;; adjacent.
-
-           ;; Otherwise, if matching a regular expression, do the next
-           ;; match now, since the replacement for this match may
-           ;; affect whether the next match is adjacent to this one.
-           ;; If that match is empty, don't use it.
-           (setq match-again
-                 (and nonempty-match
-                      (or (not regexp-flag)
-                          (and (looking-at search-string)
-                               (let ((match (match-data)))
-                                 (and (/= (nth 0 match) (nth 1 match))
-                                      match))))))
-
            ;; Calculate the replacement string, if necessary.
            (when replacements
              (set-match-data real-match-data)