diff lisp/replace.el @ 90428:a8190f7e546e

Merge from emacs--devo--0 Patches applied: * emacs--devo--0 (patch 285-296) - Update from CVS - Merge from gnus--rel--5.10 - Update from CVS: admin/FOR-RELEASE: Update refcard section. * gnus--rel--5.10 (patch 102-104) - Update from CVS Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-64
author Miles Bader <miles@gnu.org>
date Wed, 07 Jun 2006 18:05:10 +0000
parents 146cd8369025 21306dd42b3c
children 858cb33ae39d
line wrap: on
line diff
--- a/lisp/replace.el	Wed Jun 07 11:41:58 2006 +0000
+++ b/lisp/replace.el	Wed Jun 07 18:05:10 2006 +0000
@@ -36,6 +36,11 @@
 
 (defvar query-replace-history nil)
 
+(defvar query-replace-defaults nil
+  "Default values of FROM-STRING and TO-STRING for `query-replace'.
+This is a cons cell (FROM-STRING . TO-STRING), or nil if there is
+no default value.")
+
 (defvar query-replace-interactive nil
   "Non-nil means `query-replace' uses the last search string.
 That becomes the \"string to replace\".")
@@ -94,32 +99,26 @@
 wants to replace FROM with TO."
   (if query-replace-interactive
       (car (if regexp-flag regexp-search-ring search-ring))
-    (let* ((lastfrom (car (symbol-value query-replace-from-history-variable)))
-	   (lastto (car (symbol-value query-replace-to-history-variable)))
+    (let* ((history-add-new-input nil)
 	   (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
-	       (if (and lastto lastfrom)
+	       (if query-replace-defaults
 		   (format "%s (default %s -> %s): " prompt
-			   (query-replace-descr lastfrom)
-			   (query-replace-descr lastto))
+			   (query-replace-descr (car query-replace-defaults))
+			   (query-replace-descr (cdr query-replace-defaults)))
 		 (format "%s: " prompt))
 	       nil nil nil
 	       query-replace-from-history-variable
-	       nil t t))))
-      (if (and (zerop (length from)) lastto lastfrom)
-	  (progn
-	    (set query-replace-from-history-variable
-		 (cdr (symbol-value query-replace-from-history-variable)))
-	    (cons lastfrom
-		  (query-replace-compile-replacement lastto regexp-flag)))
+	       nil t))))
+      (if (and (zerop (length from)) query-replace-defaults)
+	  (cons (car query-replace-defaults)
+		(query-replace-compile-replacement
+		 (cdr query-replace-defaults) regexp-flag))
+	(add-to-history query-replace-from-history-variable from nil t)
 	;; Warn if user types \n or \t, but don't reject the input.
 	(and regexp-flag
 	     (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\[nt]\\)" from)
@@ -177,10 +176,14 @@
   "Query and return the `to' argument of a query-replace operation."
   (query-replace-compile-replacement
    (save-excursion
-     (read-from-minibuffer
-      (format "%s %s with: " prompt (query-replace-descr from))
-      nil nil nil
-      query-replace-to-history-variable from t t))
+     (let* ((history-add-new-input nil)
+	    (to (read-from-minibuffer
+		 (format "%s %s with: " prompt (query-replace-descr from))
+		 nil nil nil
+		 query-replace-to-history-variable from t)))
+       (add-to-history query-replace-to-history-variable to nil t)
+       (setq query-replace-defaults (cons from to))
+       to))
    regexp-flag))
 
 (defun query-replace-read-args (prompt regexp-flag &optional noerror)