# HG changeset patch # User Juri Linkov # Date 1216775919 0 # Node ID 531d21ce5cca4b9bc0930b997af684f66f8ec318 # Parent c80b0289ddf5c7794c73c5d7b3aef8a2963374ec (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. diff -r c80b0289ddf5 -r 531d21ce5cca lisp/replace.el --- a/lisp/replace.el Tue Jul 22 20:55:30 2008 +0000 +++ b/lisp/replace.el Wed Jul 23 01:18:39 2008 +0000 @@ -1372,6 +1372,20 @@ `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 @@ (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 @@ (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 @@ ((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 @@ 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 @@ (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)