mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
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.
This commit is contained in:
parent
4f41188a6e
commit
d1b8179f55
2 changed files with 9 additions and 9 deletions
|
|
@ -370,11 +370,7 @@ from which to start."
|
|||
(setq i (1+ i)))
|
||||
(when (> spaces 0)
|
||||
(push (char-fold--make-space-string spaces) out))
|
||||
(let ((regexp (apply #'concat (nreverse out))))
|
||||
;; Limited by `MAX_BUF_SIZE' in `regex-emacs.c'.
|
||||
(if (> (length regexp) 5000)
|
||||
(regexp-quote string)
|
||||
regexp))))
|
||||
(apply #'concat (nreverse out))))
|
||||
|
||||
|
||||
;;; Commands provided for completeness.
|
||||
|
|
|
|||
|
|
@ -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"))))))
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue