From 826b32357739a0ce755a5a2cadb3552b6914f4b3 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Thu, 6 Sep 2012 11:49:40 +0300 Subject: [PATCH] * lisp/replace.el (replace-lax-whitespace): New defcustom. (query-replace, query-replace-regexp, query-replace-regexp-eval) (replace-string, replace-regexp): Mention it in docstrings. (perform-replace, replace-highlight): Let-bind isearch-lax-whitespace and isearch-regexp-lax-whitespace according to the values of replace-lax-whitespace and regexp-flag. Don't let-bind search-whitespace-regexp. * lisp/isearch.el (isearch-query-replace): Let-bind replace-lax-whitespace instead of let-binding replace-search-function and replace-re-search-function. (isearch-lazy-highlight-search): Let-bind isearch-lax-whitespace and isearch-regexp-lax-whitespace to lazy-highlight variables. (isearch-toggle-symbol): Set isearch-regexp to nil in isearch-word mode (like in isearch-toggle-word). Fixes: debbugs:10885 --- etc/NEWS | 7 +++++++ lisp/ChangeLog | 18 ++++++++++++++++++ lisp/isearch.el | 20 +++++++++++--------- lisp/replace.el | 37 ++++++++++++++++++++++++++++++++++++- 4 files changed, 72 insertions(+), 10 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 5ddb4ed4a1e..ed59f3264ab 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -197,6 +197,13 @@ of one or more whitespace characters defined by the variable `isearch-lax-whitespace'. In regexp incremental search, it toggles the value of the variable `isearch-regexp-lax-whitespace'. +** query-replace changes + +*** When new option `replace-lax-whitespace' is non-nil, +and you enter a space or spaces in the strings or regexps +to be replaced, `query-replace' will match any sequence matched +by the regexp `search-whitespace-regexp'. + ** M-x move-to-column, if called interactively with no prefix arg, now prompts for a column number. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b1dff7e5dc4..ccc517973b3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,23 @@ 2012-09-06 Juri Linkov + * replace.el (replace-lax-whitespace): New defcustom. + (query-replace, query-replace-regexp, query-replace-regexp-eval) + (replace-string, replace-regexp): Mention it in docstrings. + (perform-replace, replace-highlight): Let-bind + isearch-lax-whitespace and isearch-regexp-lax-whitespace according + to the values of replace-lax-whitespace and regexp-flag. + Don't let-bind search-whitespace-regexp. (Bug#10885) + + * isearch.el (isearch-query-replace): Let-bind + replace-lax-whitespace instead of let-binding + replace-search-function and replace-re-search-function. + (isearch-lazy-highlight-search): Let-bind isearch-lax-whitespace + and isearch-regexp-lax-whitespace to lazy-highlight variables. + (isearch-toggle-symbol): Set isearch-regexp to nil + in isearch-word mode (like in isearch-toggle-word). + +2012-09-06 Juri Linkov + * replace.el (replace-search-function) (replace-re-search-function): Set default values to nil. (perform-replace): Let-bind isearch-related variables based on diff --git a/lisp/isearch.el b/lisp/isearch.el index e6e0a01566a..328e4eb447f 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1405,6 +1405,7 @@ Use `isearch-exit' to quit without signaling." (interactive) (setq isearch-word (unless (eq isearch-word 'isearch-symbol-regexp) 'isearch-symbol-regexp)) + (if isearch-word (setq isearch-regexp nil)) (setq isearch-success t isearch-adjusted t) (isearch-update)) @@ -1579,14 +1580,11 @@ way to run word replacements from Isearch is `M-s w ... M-%'." ;; set `search-upper-case' to nil to not call ;; `isearch-no-upper-case-p' in `perform-replace' (search-upper-case nil) - (replace-search-function - (if (and isearch-lax-whitespace (not regexp-flag)) - #'search-forward-lax-whitespace - replace-search-function)) - (replace-re-search-function - (if (and isearch-regexp-lax-whitespace regexp-flag) - #'re-search-forward-lax-whitespace - replace-re-search-function)) + (replace-lax-whitespace + (and search-whitespace-regexp + (if isearch-regexp + isearch-regexp-lax-whitespace + isearch-lax-whitespace))) ;; Set `isearch-recursive-edit' to nil to prevent calling ;; `exit-recursive-edit' in `isearch-done' that terminates ;; the execution of this command when it is non-nil. @@ -2956,10 +2954,14 @@ Attempt to do the search exactly the way the pending Isearch would." (let ((case-fold-search isearch-lazy-highlight-case-fold-search) (isearch-regexp isearch-lazy-highlight-regexp) (isearch-word isearch-lazy-highlight-word) + (isearch-lax-whitespace + isearch-lazy-highlight-lax-whitespace) + (isearch-regexp-lax-whitespace + isearch-lazy-highlight-regexp-lax-whitespace) + (isearch-forward isearch-lazy-highlight-forward) (search-invisible nil) ; don't match invisible text (retry t) (success nil) - (isearch-forward isearch-lazy-highlight-forward) (bound (if isearch-lazy-highlight-forward (min (or isearch-lazy-highlight-end-limit (point-max)) (if isearch-lazy-highlight-wrapped diff --git a/lisp/replace.el b/lisp/replace.el index f9f97dfe485..194805a8f3e 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -33,6 +33,14 @@ :type 'boolean :group 'matching) +(defcustom replace-lax-whitespace nil + "Non-nil means `query-replace' matches a sequence of whitespace chars. +When you enter a space or spaces in the strings or regexps to be replaced, +it will match any sequence matched by the regexp `search-whitespace-regexp'." + :type 'boolean + :group 'matching + :version "24.3") + (defvar query-replace-history nil "Default history list for query-replace commands. See `query-replace-from-history-variable' and @@ -226,6 +234,10 @@ letters. \(Transferring the case pattern means that if the old text matched is all caps, or capitalized, then its replacement is upcased or capitalized.) +If `replace-lax-whitespace' is non-nil, a space or spaces in the string +to be replaced will match a sequence of whitespace chars defined by the +regexp in `search-whitespace-regexp'. + Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace only matches surrounded by word boundaries. Fourth and fifth arg START and END specify the region to operate on. @@ -270,6 +282,10 @@ pattern of the old text to the new text, if `case-replace' and all caps, or capitalized, then its replacement is upcased or capitalized.) +If `replace-lax-whitespace' is non-nil, a space or spaces in the regexp +to be replaced will match a sequence of whitespace chars defined by the +regexp in `search-whitespace-regexp'. + Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace only matches surrounded by word boundaries. Fourth and fifth arg START and END specify the region to operate on. @@ -346,6 +362,10 @@ minibuffer. Preserves case in each replacement if `case-replace' and `case-fold-search' are non-nil and REGEXP has no uppercase letters. +If `replace-lax-whitespace' is non-nil, a space or spaces in the regexp +to be replaced will match a sequence of whitespace chars defined by the +regexp in `search-whitespace-regexp'. + Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace only matches that are surrounded by word boundaries. Fourth and fifth arg START and END specify the region to operate on." @@ -437,6 +457,10 @@ are non-nil and FROM-STRING has no uppercase letters. \(Preserving case means that if the string matched is all caps, or capitalized, then its replacement is upcased or capitalized.) +If `replace-lax-whitespace' is non-nil, a space or spaces in the string +to be replaced will match a sequence of whitespace chars defined by the +regexp in `search-whitespace-regexp'. + In Transient Mark mode, if the mark is active, operate on the contents of the region. Otherwise, operate from point to the end of the buffer. @@ -475,6 +499,10 @@ and TO-STRING is also null.)" Preserve case in each match if `case-replace' and `case-fold-search' are non-nil and REGEXP has no uppercase letters. +If `replace-lax-whitespace' is non-nil, a space or spaces in the regexp +to be replaced will match a sequence of whitespace chars defined by the +regexp in `search-whitespace-regexp'. + In Transient Mark mode, if the mark is active, operate on the contents of the region. Otherwise, operate from point to the end of the buffer. @@ -1760,6 +1788,10 @@ make, or the user didn't cancel the call." replace-search-function) (let ((isearch-regexp regexp-flag) (isearch-word delimited-flag) + (isearch-lax-whitespace + (and replace-lax-whitespace (not regexp-flag))) + (isearch-regexp-lax-whitespace + (and replace-lax-whitespace regexp-flag)) (isearch-case-fold-search case-fold-search) (isearch-forward t)) (isearch-search-fun)))) @@ -2113,7 +2145,10 @@ make, or the user didn't cancel the call." (let ((isearch-string search-string) (isearch-regexp regexp-flag) (isearch-word delimited-flag) - (search-whitespace-regexp nil) + (isearch-lax-whitespace + (and replace-lax-whitespace (not regexp-flag))) + (isearch-regexp-lax-whitespace + (and replace-lax-whitespace regexp-flag)) (isearch-case-fold-search case-fold-search) (isearch-forward t) (isearch-error nil)) -- 2.11.4.GIT