(query-replace-descr): New fun.
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 6 Jul 2004 00:06:05 +0000 (00:06 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 6 Jul 2004 00:06:05 +0000 (00:06 +0000)
(query-replace-read-from, query-replace-read-args): Default to the last from&to.
(query-replace-read-to): Quote the `from' string when displaying it.
(query-replace-regexp-eval): Immediately check read-only status.
Use query-replace-read-from to get the \n checking.
Quote the `from' string when displaying it.
(map-query-replace-regexp, occur-read-primary-args):
Quote the `from' string when displaying it.

lisp/ChangeLog
lisp/replace.el

index c379465..92552de 100644 (file)
@@ -1,7 +1,34 @@
+2004-07-05  Stefan  <monnier@iro.umontreal.ca>
+
+       * replace.el (query-replace-descr): New fun.
+       (query-replace-read-from, query-replace-read-args): Default to the
+       previous from&to.
+       (query-replace-read-to): Quote the `from' string when displaying it.
+       (query-replace-regexp-eval): Immediately check read-only status.
+       Use query-replace-read-from to get the \n checking.
+       Quote the `from' string when displaying it.
+       (map-query-replace-regexp, occur-read-primary-args):
+       Quote the `from' string when displaying it.
+
+       * isearch.el (isearch-query-replace): Pass the regexp-ness and
+       delimited-ness of the search to query-replace.
+
+       * replace.el (query-replace-read-from, query-replace-read-to):
+       New funs extracted from query-replace-read-args.
+       (query-replace-read-args): Use them.
+
+       * replace.el (query-replace-interactive, query-replace-read-args):
+       Remove the `initial' special value.
+       (query-replace-regexp-eval, map-query-replace-regexp): Simplify.
+       (occur-engine): Remove unused var `matchend'.
+
+       * isearch.el (isearch-query-replace, isearch-query-replace-regexp):
+       Use the search string without prompting.
+
 2004-07-05  Kenichi Handa  <handa@m17n.org>
 
-       * international/mule.el (decode-coding-inserted-region): Set
-       last-coding-system-used only when coding is nil.
+       * international/mule.el (decode-coding-inserted-region):
+       Set last-coding-system-used only when coding is nil.
 
 2004-07-03  Eli Zaretskii  <eliz@gnu.org>
 
@@ -14,8 +41,7 @@
 
 2004-07-03  KOSEKI Yoshinori  <kose@meadowy.org>
 
-       * iimage.el (turn-on-iimage-mode, iimage-mode): Add autoload
-       cookies.
+       * iimage.el (turn-on-iimage-mode, iimage-mode): Add autoload cookies.
        (iimage-mode-image-search-path): New user option to search the
        image file.
        (iimage-locate-file): New funcion.  Emacs21.3 or earlier does not
index 380dd83..a7c8b85 100644 (file)
@@ -1,7 +1,7 @@
 ;;; replace.el --- replace commands for Emacs
 
-;; Copyright (C) 1985, 86, 87, 92, 94, 96, 1997, 2000, 2001, 2002,
-;;   2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1996, 1997, 2000, 2001, 2002,
+;;   2003, 2004  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 
@@ -64,37 +64,54 @@ strings or patterns."
   :group 'matching
   :version "21.4")
 
+(defun query-replace-descr (string)
+  (mapconcat 'isearch-text-char-description string ""))
+
 (defun query-replace-read-from (string regexp-flag)
-  "Query and return the `from' argument of a query-replace operation."
+  "Query and return the `from' argument of a query-replace operation.
+The return value can also be a pair (FROM . TO) indicating that the user
+wants to replace FROM with TO."
   (if query-replace-interactive
       (car (if regexp-flag regexp-search-ring search-ring))
-    (let* ((from
+    (let* ((lastfrom (car (symbol-value query-replace-from-history-variable)))
+          (lastto (car (symbol-value query-replace-to-history-variable)))
+          (from
            ;; The save-excursion here is in case the user marks and copies
            ;; a region in order to specify the minibuffer input.
            ;; That should not clobber the region for the query-replace itself.
            (save-excursion
+             (when (equal lastfrom lastto)
+               ;; Typically, this is because the two histlists are shared.
+               (setq lastfrom (cadr (symbol-value
+                                     query-replace-from-history-variable))))
              (read-from-minibuffer
-              (format "%s: " string)
+              (if (and lastto lastfrom)
+                  (format "%s (default %s -> %s): " string
+                          (query-replace-descr lastfrom)
+                          (query-replace-descr lastto))
+                (format "%s: " string))
               nil nil nil
               query-replace-from-history-variable
               nil t))))
-      ;; Warn if user types \n or \t, but don't reject the input.
-      (and regexp-flag
-          (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\[nt]\\)" from)
-          (let ((match (match-string 3 from)))
-            (cond
-             ((string= match "\\n")
-              (message "Note: `\\n' here doesn't match a newline; to do that, type C-q C-j instead"))
-             ((string= match "\\t")
-              (message "Note: `\\t' here doesn't match a tab; to do that, just type TAB")))
-            (sit-for 2)))
-      from)))
+      (if (and (zerop (length from)) lastto lastfrom)
+         (cons lastfrom lastto)
+       ;; Warn if user types \n or \t, but don't reject the input.
+       (and regexp-flag
+            (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\[nt]\\)" from)
+            (let ((match (match-string 3 from)))
+              (cond
+               ((string= match "\\n")
+                (message "Note: `\\n' here doesn't match a newline; to do that, type C-q C-j instead"))
+               ((string= match "\\t")
+                (message "Note: `\\t' here doesn't match a tab; to do that, just type TAB")))
+              (sit-for 2)))
+       from))))
 
 (defun query-replace-read-to (from string regexp-flag)
   "Query and return the `from' argument of a query-replace operation."
   (let ((to (save-excursion
              (read-from-minibuffer
-              (format "%s %s with: " string from)
+              (format "%s %s with: " string (query-replace-descr from))
               nil nil nil
               query-replace-to-history-variable from t))))
     (when (and regexp-flag
@@ -137,7 +154,8 @@ strings or patterns."
   (unless noerror
     (barf-if-buffer-read-only))
   (let* ((from (query-replace-read-from string regexp-flag))
-        (to (query-replace-read-to from string regexp-flag)))
+        (to (if (consp from) (prog1 (cdr from) (setq from (car from)))
+              (query-replace-read-to from string regexp-flag))))
     (list from to current-prefix-arg)))
 
 (defun query-replace (from-string to-string &optional delimited start end)
@@ -269,14 +287,16 @@ Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
 only matches that are surrounded by word boundaries.
 Fourth and fifth arg START and END specify the region to operate on."
   (interactive
-   (let* ((from (if query-replace-interactive
-                   (car regexp-search-ring)
-                 (read-from-minibuffer "Query replace regexp: "
-                                       nil nil nil
-                                       query-replace-from-history-variable
-                                       nil t)))
+   (barf-if-buffer-read-only)
+   (let* ((from
+          ;; Let-bind the history var to disable the "foo -> bar" default.
+          ;; Maybe we shouldn't disable this default, but for now I'll
+          ;; leave it off.  --Stef
+          (let ((query-replace-to-history-variable nil))
+            (query-replace-read-from "Query replace regexp" t)))
          (to (list (read-from-minibuffer
-                    (format "Query replace regexp %s with eval: " from)
+                    (format "Query replace regexp %s with eval: "
+                            (query-replace-descr from))
                     nil nil t query-replace-to-history-variable from t))))
      ;; We make TO a list because replace-match-string-symbols requires one,
      ;; and the user might enter a single token.
@@ -317,7 +337,7 @@ Fourth and fifth arg START and END specify the region to operate on."
                                        'query-replace-history nil t)))
          (to (read-from-minibuffer
               (format "Query replace %s with (space-separated strings): "
-                      from)
+                      (query-replace-descr from))
               nil nil nil
               'query-replace-history from t)))
      (list from to
@@ -760,7 +780,7 @@ If the value is nil, don't highlight the buffer names specially."
                (read-from-minibuffer
                 (if default
                     (format "List lines matching regexp (default `%s'): "
-                            default)
+                            (query-replace-descr default))
                   "List lines matching regexp: ")
                 nil
                 nil
@@ -1538,5 +1558,5 @@ make, or the user didn't cancel the call."
                      (if (facep 'query-replace)
                          'query-replace 'region)))))
 
-;;; arch-tag: 16b4cd61-fd40-497b-b86f-b667c4cf88e4
+;; arch-tag: 16b4cd61-fd40-497b-b86f-b667c4cf88e4
 ;;; replace.el ends here