summaryrefslogtreecommitdiff
path: root/lisp/replace.el
diff options
context:
space:
mode:
authorJuri Linkov <juri@jurta.org>2008-07-23 01:18:39 +0000
committerJuri Linkov <juri@jurta.org>2008-07-23 01:18:39 +0000
commitb591f3387a5b01d0419a5263cdba88193cdde0db (patch)
treeaeab1149d8282e4705f9808d0e4492872a887435 /lisp/replace.el
parent4542adfb1f4138bf355eb8c90d655023375064b1 (diff)
downloademacs-b591f3387a5b01d0419a5263cdba88193cdde0db.tar.gz
(multi-query-replace-map): New variable.
(perform-replace): Add processing of new multi-buffer keys bound to `automatic-all' and `exit-current'. Set `query-flag' to nil if last input char was `automatic-all'. Set new local variable `multi-buffer' to t when one of new two keys were typed. Return non-nil value of `multi-buffer' that tells to calling functions to continue replacement on the next file.
Diffstat (limited to 'lisp/replace.el')
-rw-r--r--lisp/replace.el29
1 files changed, 26 insertions, 3 deletions
diff --git a/lisp/replace.el b/lisp/replace.el
index 8a83ca62b31..2572125b052 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -1372,6 +1372,20 @@ The valid answers include `act', `skip', `act-and-show',
`exit', `act-and-exit', `edit', `delete-and-edit', `recenter',
`automatic', `backup', `exit-prefix', and `help'.")
+(defvar multi-query-replace-map
+ (let ((map (make-sparse-keymap)))
+ (set-keymap-parent map query-replace-map)
+ (define-key map "Y" 'automatic-all)
+ (define-key map "N" 'exit-current)
+ map)
+ "Keymap that defines additional bindings for multi-buffer replacements.
+It extends its parent map `query-replace-map' with new bindings to
+operate on a set of buffers/files. The difference with its parent map
+is the additional answers `automatic-all' to replace all remaining
+matches in all remaining buffers with no more questions, and
+`exit-current' to skip remaining matches in the current buffer
+and to continue with the next buffer in the sequence.")
+
(defun replace-match-string-symbols (n)
"Process a list (and any sub-lists), expanding certain symbols.
Symbol Expands To
@@ -1527,6 +1541,7 @@ make, or the user didn't cancel the call."
(stack nil)
(replace-count 0)
(nonempty-match nil)
+ (multi-buffer nil)
;; If non-nil, it is marker saying where in the buffer to stop.
(limit nil)
@@ -1548,6 +1563,11 @@ make, or the user didn't cancel the call."
(goto-char (min start end))
(deactivate-mark))
+ ;; If last typed key in previous call of multi-buffer perform-replace
+ ;; was `automatic-all', don't ask more questions in next files
+ (when (eq (lookup-key map (vector last-input-char)) 'automatic-all)
+ (setq query-flag nil multi-buffer t))
+
;; REPLACEMENTS is either a string, a list of strings, or a cons cell
;; containing a function and its first argument. The function is
;; called to generate each replacement like this:
@@ -1705,6 +1725,8 @@ make, or the user didn't cancel the call."
((eq def 'exit)
(setq keep-going nil)
(setq done t))
+ ((eq def 'exit-current)
+ (setq multi-buffer t keep-going nil done t))
((eq def 'backup)
(if stack
(let ((elt (pop stack)))
@@ -1744,14 +1766,15 @@ make, or the user didn't cancel the call."
real-match-data (replace-match-data
t real-match-data)
replaced t)))
- ((eq def 'automatic)
+ ((or (eq def 'automatic) (eq def 'automatic-all))
(or replaced
(setq noedit
(replace-match-maybe-edit
next-replacement nocasify literal
noedit real-match-data)
replace-count (1+ replace-count)))
- (setq done t query-flag nil replaced t))
+ (setq done t query-flag nil replaced t)
+ (if (eq def 'automatic-all) (setq multi-buffer t)))
((eq def 'skip)
(setq done t))
((eq def 'recenter)
@@ -1838,7 +1861,7 @@ make, or the user didn't cancel the call."
(message "Replaced %d occurrence%s"
replace-count
(if (= replace-count 1) "" "s")))
- (and keep-going stack)))
+ (or (and keep-going stack) multi-buffer)))
(defvar replace-overlay nil)