emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r112773: * lisp/replace.el (perform-r


From: Juri Linkov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r112773: * lisp/replace.el (perform-replace): Add `skip-read-only-count',
Date: Thu, 30 May 2013 02:11:41 +0300
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 112773
fixes bug: http://debbugs.gnu.org/11746
committer: Juri Linkov <address@hidden>
branch nick: trunk
timestamp: Thu 2013-05-30 02:11:41 +0300
message:
  * lisp/replace.el (perform-replace): Add `skip-read-only-count',
  `skip-filtered-count', `skip-invisible-count' let-bound to 0.
  Increment them for corresponding conditions and report the number
  of skipped occurrences in the final message. 
  (query-replace, query-replace-regexp, query-replace-regexp-eval)
  (replace-string, replace-regexp): Doc fix.
modified:
  lisp/ChangeLog
  lisp/replace.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-05-29 15:17:12 +0000
+++ b/lisp/ChangeLog    2013-05-29 23:11:41 +0000
@@ -1,3 +1,12 @@
+2013-05-29  Juri Linkov  <address@hidden>
+
+       * replace.el (perform-replace): Add `skip-read-only-count',
+       `skip-filtered-count', `skip-invisible-count' let-bound to 0.
+       Increment them for corresponding conditions and report the number
+       of skipped occurrences in the final message.  (Bug#11746)
+       (query-replace, query-replace-regexp, query-replace-regexp-eval)
+       (replace-string, replace-regexp): Doc fix.
+
 2013-05-29  Stefan Monnier  <address@hidden>
 
        * emacs-lisp/trace.el (trace--read-args): Provide a default.

=== modified file 'lisp/replace.el'
--- a/lisp/replace.el   2013-05-27 23:38:56 +0000
+++ b/lisp/replace.el   2013-05-29 23:11:41 +0000
@@ -250,6 +250,10 @@
 matched is all caps, or capitalized, then its replacement is upcased
 or capitalized.)
 
+Ignore read-only matches if `query-replace-skip-read-only' is non-nil,
+ignore hidden matches if `search-invisible' is nil, and ignore more
+matches using a non-nil `isearch-filter-predicates'.
+
 If `replace-lax-whitespace' is non-nil, a space or spaces in the string
 to be replaced will match a sequence of whitespace chars defined by the
 regexp in `search-whitespace-regexp'.
@@ -300,6 +304,10 @@
 all caps, or capitalized, then its replacement is upcased or
 capitalized.)
 
+Ignore read-only matches if `query-replace-skip-read-only' is non-nil,
+ignore hidden matches if `search-invisible' is nil, and ignore more
+matches using a non-nil `isearch-filter-predicates'.
+
 If `replace-regexp-lax-whitespace' is non-nil, a space or spaces in the regexp
 to be replaced will match a sequence of whitespace chars defined by the
 regexp in `search-whitespace-regexp'.
@@ -380,6 +388,10 @@
 Preserves case in each replacement if `case-replace' and `case-fold-search'
 are non-nil and REGEXP has no uppercase letters.
 
+Ignore read-only matches if `query-replace-skip-read-only' is non-nil,
+ignore hidden matches if `search-invisible' is nil, and ignore more
+matches using a non-nil `isearch-filter-predicates'.
+
 If `replace-regexp-lax-whitespace' is non-nil, a space or spaces in the regexp
 to be replaced will match a sequence of whitespace chars defined by the
 regexp in `search-whitespace-regexp'.
@@ -470,6 +482,10 @@
 \(Preserving case means that if the string matched is all caps, or capitalized,
 then its replacement is upcased or capitalized.)
 
+Ignore read-only matches if `query-replace-skip-read-only' is non-nil,
+ignore hidden matches if `search-invisible' is nil, and ignore more
+matches using a non-nil `isearch-filter-predicates'.
+
 If `replace-lax-whitespace' is non-nil, a space or spaces in the string
 to be replaced will match a sequence of whitespace chars defined by the
 regexp in `search-whitespace-regexp'.
@@ -512,6 +528,10 @@
 Preserve case in each match if `case-replace' and `case-fold-search'
 are non-nil and REGEXP has no uppercase letters.
 
+Ignore read-only matches if `query-replace-skip-read-only' is non-nil,
+ignore hidden matches if `search-invisible' is nil, and ignore more
+matches using a non-nil `isearch-filter-predicates'.
+
 If `replace-regexp-lax-whitespace' is non-nil, a space or spaces in the regexp
 to be replaced will match a sequence of whitespace chars defined by the
 regexp in `search-whitespace-regexp'.
@@ -1934,6 +1954,9 @@
          (keep-going t)
          (stack nil)
          (replace-count 0)
+         (skip-read-only-count 0)
+         (skip-filtered-count 0)
+         (skip-invisible-count 0)
          (nonempty-match nil)
         (multi-buffer nil)
         (recenter-last-op nil) ; Start cycling order with initial position.
@@ -2042,20 +2065,24 @@
                                (and (/= (nth 0 match) (nth 1 match))
                                     match))))))
 
-         ;; Optionally ignore matches that have a read-only property.
-         (when (and (or (not query-replace-skip-read-only)
-                        (not (text-property-not-all
-                              (nth 0 real-match-data) (nth 1 real-match-data)
-                              'read-only nil)))
-                    ;; Optionally filter out matches.
-                    (run-hook-with-args-until-failure
-                     'isearch-filter-predicates
-                     (nth 0 real-match-data) (nth 1 real-match-data))
-                    ;; Optionally ignore invisible matches.
-                    (or (eq search-invisible t)
-                        (not (isearch-range-invisible
-                              (nth 0 real-match-data) (nth 1 
real-match-data)))))
-
+         (cond
+          ;; Optionally ignore matches that have a read-only property.
+          ((not (or (not query-replace-skip-read-only)
+                    (not (text-property-not-all
+                          (nth 0 real-match-data) (nth 1 real-match-data)
+                          'read-only nil))))
+           (setq skip-read-only-count (1+ skip-read-only-count)))
+          ;; Optionally filter out matches.
+          ((not (run-hook-with-args-until-failure
+                 'isearch-filter-predicates
+                 (nth 0 real-match-data) (nth 1 real-match-data)))
+           (setq skip-filtered-count (1+ skip-filtered-count)))
+          ;; Optionally ignore invisible matches.
+          ((not (or (eq search-invisible t)
+                    (not (isearch-range-invisible
+                          (nth 0 real-match-data) (nth 1 real-match-data)))))
+           (setq skip-invisible-count (1+ skip-invisible-count)))
+          (t
            ;; Calculate the replacement string, if necessary.
            (when replacements
              (set-match-data real-match-data)
@@ -2260,13 +2287,31 @@
                                 (match-end 0)
                                 (current-buffer))
                              (match-data t)))
-                     stack)))))
+                     stack))))))
 
       (replace-dehighlight))
     (or unread-command-events
-       (message "Replaced %d occurrence%s"
+       (message "Replaced %d occurrence%s%s"
                 replace-count
-                (if (= replace-count 1) "" "s")))
+                (if (= replace-count 1) "" "s")
+                (if (> (+ skip-read-only-count
+                          skip-filtered-count
+                          skip-invisible-count) 0)
+                    (format " (skipped %s)"
+                            (mapconcat
+                             'identity
+                             (delq nil (list
+                                        (if (> skip-read-only-count 0)
+                                            (format "%s read-only"
+                                                    skip-read-only-count))
+                                        (if (> skip-invisible-count 0)
+                                            (format "%s invisible"
+                                                    skip-invisible-count))
+                                        (if (> skip-filtered-count 0)
+                                            (format "%s filtered out"
+                                                    skip-filtered-count))))
+                             ", "))
+                  "")))
     (or (and keep-going stack) multi-buffer)))
 
 ;;; replace.el ends here


reply via email to

[Prev in Thread] Current Thread [Next in Thread]