From 98226106351e2edba99ea647abf1fcd059e2e79d Mon Sep 17 00:00:00 2001 From: Augusto Stoffel Date: Fri, 14 May 2021 11:58:35 +0200 Subject: [PATCH] Don't give special treatment to the isearch-message function * lisp/isearch.el (isearch-message-function): new default value. (isearch-message): just defer to isearch-message-function, if non-nil. (isearch-standard-message): new function, corresponds to the old `isearch-message'. (isearch-mode-end-hook-quit, isearch-update, with-isearch-suspended, isearch-del-char, isearch-search-and-update, isearch-ring-adjust, isearch-lazy-highlight-new-loop, isearch-lazy-highlight-buffer-update): just call `isearch-message', no need to check isearch-message-function anymore. * lisp/comint.el (comint-history-isearch-setup): disable lazy count, since this only counts matches in the current line. (comint-history-isearch-end): kill local variables instead of setting them to the presumed previous value. (comint-history-isearch-message): call isearch-standard-message explicitly where needed. * lisp/simple.el (minibuffer-history-isearch-setup): disable lazy count, since this only counts matches in the current line. (minibuffer-history-isearch-message): call `isearch-standard-message' explicitly where needed. --- lisp/comint.el | 18 ++++++++++-------- lisp/isearch.el | 30 +++++++++++++++++------------- lisp/simple.el | 5 +++-- 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/lisp/comint.el b/lisp/comint.el index ef34174305..cc062e3e5a 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -1487,7 +1487,7 @@ comint-history-isearch-setup (and (eq comint-history-isearch 'dwim) ;; Point is at command line. (comint-after-pmark-p)))) - (setq isearch-message-prefix-add "history ") + (setq-local isearch-message-prefix-add "history ") (setq-local isearch-search-fun-function #'comint-history-isearch-search) (setq-local isearch-message-function @@ -1496,17 +1496,19 @@ comint-history-isearch-setup #'comint-history-isearch-wrap) (setq-local isearch-push-state-function #'comint-history-isearch-push-state) + (setq-local isearch-lazy-count nil) (add-hook 'isearch-mode-end-hook 'comint-history-isearch-end nil t))) (defun comint-history-isearch-end () "Clean up the comint after terminating Isearch in comint." (if comint-history-isearch-message-overlay (delete-overlay comint-history-isearch-message-overlay)) - (setq isearch-message-prefix-add nil) - (setq isearch-search-fun-function 'isearch-search-fun-default) - (setq isearch-message-function nil) - (setq isearch-wrap-function nil) - (setq isearch-push-state-function nil) + (kill-local-variable 'isearch-message-prefix-add) + (kill-local-variable 'isearch-search-fun-function) + (kill-local-variable 'isearch-message-function) + (kill-local-variable 'isearch-wrap-function) + (kill-local-variable 'isearch-push-state-function) + (kill-local-variable 'isearch-lazy-count) (remove-hook 'isearch-mode-end-hook 'comint-history-isearch-end t) (unless isearch-suspended (custom-reevaluate-setting 'comint-history-isearch))) @@ -1588,11 +1590,11 @@ comint-history-isearch-message Otherwise, it displays the standard Isearch message returned from the function `isearch-message'." (if (not (and isearch-success (not isearch-error))) - ;; Use standard function `isearch-message' when not in comint prompt, + ;; Use `isearch-standard-message' when not in comint prompt, ;; or search fails, or has an error (like incomplete regexp). ;; This function displays isearch message in the echo area, ;; so it's possible to see what is wrong in the search string. - (isearch-message c-q-hack ellipsis) + (isearch-standard-message c-q-hack ellipsis) ;; Otherwise, put the overlay with the standard isearch prompt over ;; the initial comint prompt. (if (overlayp comint-history-isearch-message-overlay) diff --git a/lisp/isearch.el b/lisp/isearch.el index 536c76ea5d..f545bf5558 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -209,9 +209,10 @@ isearch-mode-end-hook (defvar isearch-mode-end-hook-quit nil "Non-nil while running `isearch-mode-end-hook' if the user quits the search.") -(defvar isearch-message-function nil - "Function to call to display the search prompt. -If nil, use function `isearch-message'.") +(defvar isearch-message-function #'isearch-standard-message + "Function called by `isearch-message' to display the search prompt. +This should be nil to supress printing messages, or a function +taking the same arguments as `isearch-standard-message'.") (defvar isearch-wrap-function nil "Function to call to wrap the search when search is failed. @@ -1343,7 +1344,7 @@ isearch-update (null executing-kbd-macro)) (progn (if (not (input-pending-p)) - (funcall (or isearch-message-function #'isearch-message))) + (isearch-message)) (if (and isearch-slow-terminal-mode (not (or isearch-small-window (pos-visible-in-window-group-p)))) @@ -1731,7 +1732,7 @@ with-isearch-suspended (isearch-update-from-string-properties isearch-string) ;; Restore the minibuffer message before moving point. - (funcall (or isearch-message-function #'isearch-message) nil t) + (isearch-message nil t) ;; Set point at the start (end) of old match if forward (backward), ;; so after exiting minibuffer isearch resumes at the start (end) @@ -2504,7 +2505,7 @@ isearch-del-char isearch-message (mapconcat 'isearch-text-char-description isearch-string ""))) ;; Do the following before moving point. - (funcall (or isearch-message-function #'isearch-message) nil t) + (isearch-message nil t) ;; Use the isearch-other-end as new starting point to be able ;; to find the remaining part of the search string again. ;; This is like what `isearch-search-and-update' does, @@ -2765,7 +2766,7 @@ isearch-search-and-update (isearch-no-upper-case-p isearch-string isearch-regexp)))) ;; Not regexp, not reverse, or no match at point. ;; Do the following before moving point. - (funcall (or isearch-message-function #'isearch-message) nil t) + (isearch-message nil t) (if (and isearch-other-end (not isearch-adjusted)) (goto-char (if isearch-forward isearch-other-end (min isearch-opoint @@ -3187,7 +3188,7 @@ isearch-ring-adjust (isearch-ring-adjust1 advance) (if search-ring-update (progn - (funcall (or isearch-message-function #'isearch-message) nil t) + (isearch-message nil t) (isearch-search) (isearch-push-state) (isearch-update)) @@ -3260,6 +3261,11 @@ isearch-complete-edit (defun isearch-message (&optional c-q-hack ellipsis) "Generate and print the message string." + (when isearch-message-function + (funcall isearch-message-function c-q-hack ellipsis))) + +(defun isearch-standard-message (&optional c-q-hack ellipsis) + "Generate and print the standard Isearch message string." ;; N.B.: This function should always be called with point at the ;; search point, because in certain (rare) circumstances, undesired @@ -3940,7 +3946,7 @@ isearch-lazy-highlight-new-loop isearch-lazy-highlight-window-end)))))) ;; something important did indeed change (lazy-highlight-cleanup t (not (equal isearch-string ""))) ;stop old timer - (when (and isearch-lazy-count isearch-mode (null isearch-message-function)) + (when isearch-lazy-count (when (or (equal isearch-string "") ;; Check if this place was reached by a condition above ;; other than changed window boundaries (that shouldn't @@ -4010,9 +4016,7 @@ isearch-lazy-highlight-new-loop lazy-highlight-initial-delay) nil 'isearch-lazy-highlight-start)))) - ;; Update the current match number only in isearch-mode and - ;; unless isearch-mode is used specially with isearch-message-function - (when (and isearch-lazy-count isearch-mode (null isearch-message-function)) + (when isearch-lazy-count ;; Update isearch-lazy-count-current only when it was already set ;; at the end of isearch-lazy-highlight-buffer-update (when isearch-lazy-count-current @@ -4220,7 +4224,7 @@ isearch-lazy-highlight-buffer-update (setq looping nil nomore t)))) (if nomore - (when (and isearch-lazy-count isearch-mode (null isearch-message-function)) + (when isearch-lazy-count (unless isearch-lazy-count-total (setq isearch-lazy-count-total 0)) (setq isearch-lazy-count-current diff --git a/lisp/simple.el b/lisp/simple.el index 0255f69e42..8deb07b31a 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -2733,6 +2733,7 @@ minibuffer-history-isearch-setup #'minibuffer-history-isearch-wrap) (setq-local isearch-push-state-function #'minibuffer-history-isearch-push-state) + (setq-local isearch-lazy-count nil) (add-hook 'isearch-mode-end-hook 'minibuffer-history-isearch-end nil t)) (defun minibuffer-history-isearch-end () @@ -2794,11 +2795,11 @@ minibuffer-history-isearch-message Otherwise, it displays the standard isearch message returned from the function `isearch-message'." (if (not (and (minibufferp) isearch-success (not isearch-error))) - ;; Use standard function `isearch-message' when not in the minibuffer, + ;; Use `isearch-standard-message' when not in the minibuffer, ;; or search fails, or has an error (like incomplete regexp). ;; This function overwrites minibuffer text with isearch message, ;; so it's possible to see what is wrong in the search string. - (isearch-message c-q-hack ellipsis) + (isearch-standard-message c-q-hack ellipsis) ;; Otherwise, put the overlay with the standard isearch prompt over ;; the initial minibuffer prompt. (if (overlayp minibuffer-history-isearch-message-overlay) -- 2.31.1