summaryrefslogtreecommitdiff
path: root/lisp/replace.el
diff options
context:
space:
mode:
authorDavid Kastrup <dak@gnu.org>2004-08-01 12:59:09 +0000
committerDavid Kastrup <dak@gnu.org>2004-08-01 12:59:09 +0000
commit78629844c64aab60083d74c5625d34a84970a14a (patch)
tree30a832762cae3678dc178e110bab66b9d7de5b14 /lisp/replace.el
parentfdeadcd1f6182517df0fcd908513b3f7207b1b55 (diff)
downloademacs-78629844c64aab60083d74c5625d34a84970a14a.tar.gz
(query-replace-read-from): Use
`query-replace-compile-replacement'. (query-replace-compile-replacement): New function. (query-replace-read-to): Use `query-replace-compile-replacement' for repeating the last command.
Diffstat (limited to 'lisp/replace.el')
-rw-r--r--lisp/replace.el41
1 files changed, 25 insertions, 16 deletions
diff --git a/lisp/replace.el b/lisp/replace.el
index f09868cc6d3..47437659923 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -94,7 +94,8 @@ wants to replace FROM with TO."
query-replace-from-history-variable
nil t))))
(if (and (zerop (length from)) lastto lastfrom)
- (cons lastfrom lastto)
+ (cons lastfrom
+ (query-replace-compile-replacement lastto regexp-flag))
;; Warn if user types \n or \t, but don't reject the input.
(and regexp-flag
(string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\[nt]\\)" from)
@@ -107,15 +108,12 @@ wants to replace FROM with TO."
(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 (query-replace-descr from))
- nil nil nil
- query-replace-to-history-variable from t))))
- (when (and regexp-flag
- (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\\\[,#]" to))
+(defun query-replace-compile-replacement (to regexp-flag)
+ "Maybe convert a regexp replacement TO to Lisp.
+Returns a list suitable for `perform-replace' if necessary,
+the original string if not."
+ (if (and regexp-flag
+ (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\\\[,#]" to))
(let (pos list char)
(while
(progn
@@ -142,14 +140,25 @@ wants to replace FROM with TO."
(cdr pos))))
(setq to (substring to end)))))
(string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\\\[,#]" to)))
- (setq to (nreverse (delete "" (cons to list)))))
- (replace-match-string-symbols to)
- (setq to (cons 'replace-eval-replacement
- (if (> (length to) 1)
- (cons 'concat to)
- (car to)))))
+ (setq to (nreverse (delete "" (cons to list))))
+ (replace-match-string-symbols to)
+ (cons 'replace-eval-replacement
+ (if (cdr to)
+ (cons 'concat to)
+ (car to))))
to))
+
+(defun query-replace-read-to (from string regexp-flag)
+ "Query and return the `to' argument of a query-replace operation."
+ (query-replace-compile-replacement
+ (save-excursion
+ (read-from-minibuffer
+ (format "%s %s with: " string (query-replace-descr from))
+ nil nil nil
+ query-replace-to-history-variable from t))
+ regexp-flag))
+
(defun query-replace-read-args (string regexp-flag &optional noerror)
(unless noerror
(barf-if-buffer-read-only))