changeset 56355:ac4a6e4361cf

(query-replace-descr): New fun. (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.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 06 Jul 2004 00:06:05 +0000
parents 000c36fb46cd
children fb855b187fa5
files lisp/ChangeLog lisp/replace.el
diffstat 2 files changed, 78 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Mon Jul 05 23:38:43 2004 +0000
+++ b/lisp/ChangeLog	Tue Jul 06 00:06:05 2004 +0000
@@ -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
--- a/lisp/replace.el	Mon Jul 05 23:38:43 2004 +0000
+++ b/lisp/replace.el	Tue Jul 06 00:06:05 2004 +0000
@@ -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 @@
   :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 @@
   (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 @@
 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 @@
 					'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 @@
 		(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 @@
 		      (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