[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#40216: 28.0.50; Misinformation in isearch char-fold
From: |
Juri Linkov |
Subject: |
bug#40216: 28.0.50; Misinformation in isearch char-fold |
Date: |
Wed, 25 Mar 2020 01:00:18 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) |
Tags: patch
When the size of the generated regexp in char-fold isearch mode reaches
a certain limit, it silently falls back to literal search without notifying
the user about this fact. Thus uninformed users might miss some search hits.
Here is the patch that instead of returning a quoted string in
char-fold-to-regexp when it reaches some arbitrary limit,
instead of this it toggles the literal search mode explicitly,
tries to find the next occurrence in literal mode, and displays
the message about switching search mode for 2 seconds:
diff --git a/lisp/char-fold.el b/lisp/char-fold.el
index f8a303956e..34561a2efe 100644
--- a/lisp/char-fold.el
+++ b/lisp/char-fold.el
@@ -370,11 +377,7 @@ char-fold-to-regexp
(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.
diff --git a/lisp/isearch.el b/lisp/isearch.el
index ddf9190dc6..7625ec12b5 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2011,15 +2011,16 @@ regexp
(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 @@ isearch-search
(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"))))))
- bug#40216: 28.0.50; Misinformation in isearch char-fold,
Juri Linkov <=
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Robert Pluim, 2020/03/25
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Juri Linkov, 2020/03/25
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Robert Pluim, 2020/03/26
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Eli Zaretskii, 2020/03/26
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Robert Pluim, 2020/03/26
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Juri Linkov, 2020/03/26
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Eli Zaretskii, 2020/03/27
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Robert Pluim, 2020/03/27
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Juri Linkov, 2020/03/29
- bug#40216: 28.0.50; Misinformation in isearch char-fold, Juri Linkov, 2020/03/26