summaryrefslogtreecommitdiff
path: root/lisp/isearch.el
diff options
context:
space:
mode:
authorJuri Linkov <juri@linkov.net>2020-03-29 01:41:29 +0200
committerJuri Linkov <juri@linkov.net>2020-03-29 01:41:29 +0200
commitd1b8179f55da75fce313118502ba65444ee1dc98 (patch)
treebb08523c41a9d43fc7da2f1cbe5e9f87577e1886 /lisp/isearch.el
parent4f41188a6e1eb0ce832bd74907642f30ada344d9 (diff)
downloademacs-d1b8179f55da75fce313118502ba65444ee1dc98.tar.gz
Switch to literal mode with message when regexp is too big in char-fold search
* lisp/char-fold.el (char-fold-to-regexp): Don't use regexp-quote when the length of regexp reaches 5000. (Bug#40216) * lisp/isearch.el (isearch-search): On big regexp in char-fold mode gracefully fall back to literal mode, try to search again and display momentary-message about switching to literal mode. (isearch--momentary-message): Add optional arg SECONDS.
Diffstat (limited to 'lisp/isearch.el')
-rw-r--r--lisp/isearch.el12
1 files changed, 8 insertions, 4 deletions
diff --git a/lisp/isearch.el b/lisp/isearch.el
index ddf9190dc6d..7625ec12b58 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2011,15 +2011,16 @@ Turning on character-folding turns off regexp mode.")
(defvar isearch-message-properties minibuffer-prompt-properties
"Text properties that are added to the isearch prompt.")
-(defun isearch--momentary-message (string)
- "Print STRING at the end of the isearch prompt for 1 second."
+(defun isearch--momentary-message (string &optional seconds)
+ "Print STRING at the end of the isearch prompt for 1 second.
+The optional argument SECONDS overrides the number of seconds."
(let ((message-log-max nil))
(message "%s%s%s"
(isearch-message-prefix nil isearch-nonincremental)
isearch-message
(apply #'propertize (format " [%s]" string)
isearch-message-properties)))
- (sit-for 1))
+ (sit-for (or seconds 1)))
(isearch-define-mode-toggle lax-whitespace " " nil
"In ordinary search, toggles the value of the variable
@@ -3443,7 +3444,10 @@ Optional third argument, if t, means if fail just return nil (no error).
(string-match "\\`Regular expression too big" isearch-error))
(cond
(isearch-regexp-function
- (setq isearch-error "Too many words"))
+ (setq isearch-error nil)
+ (setq isearch-regexp-function nil)
+ (isearch-search-and-update)
+ (isearch--momentary-message "Too many words; switched to literal mode" 2))
((and isearch-lax-whitespace search-whitespace-regexp)
(setq isearch-error "Too many spaces for whitespace matching"))))))