branch: elpa/logview commit a2dedfa718471ce9379b120840a2d110bbd0ce14 Author: Paul Pogonyshev <pogonys...@gmail.com> Commit: Paul Pogonyshev <pogonys...@gmail.com>
A usability improvement for commit d0f861f: refontify earlier, dodging the delay from `isearch--momentary-message`; add a test. --- Eldev | 2 ++ logview.el | 13 +++++++++---- test/logview.el | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Eldev b/Eldev index 58f50934f3..6b40ee3802 100644 --- a/Eldev +++ b/Eldev @@ -9,5 +9,7 @@ (let ((eldev-release-min-version-size 3)) (eldev-release-next-snapshot-version-unless-already-snapshot version)))) +(eldev-add-extra-dependencies 'test 'with-simulated-input) + ;; Only care about regular expression validity. (setf eldev-lint-default '(re)) diff --git a/logview.el b/logview.el index 3947659aef..13531ceacc 100644 --- a/logview.el +++ b/logview.el @@ -2681,9 +2681,10 @@ the search is ended. This is for consistency with e.g. `M-s' or (interactive (list (or current-prefix-arg 'toggle))) (logview--toggle-option-locally 'logview-search-only-in-messages arg (called-interactively-p 'interactive) "Incremental search will find matches only in messages" - "Incremental search will behave normally") - (logview--refontify-buffer) - (logview--isearch-update-if-running)) + "Incremental search will behave normally" + (lambda () + (logview--refontify-buffer) + (logview--isearch-update-if-running)))) (defun logview-toggle-filter-preview (&optional arg) "Toggle `logview-preview-filter-changes' just for this buffer. @@ -2764,12 +2765,16 @@ These are: (logview-additional-timestamp-formats custom-variable)) "*Customize Logview Submodes*")) -(defun logview--toggle-option-locally (variable arg &optional show-message message-if-true message-if-false) +(defun logview--toggle-option-locally (variable arg &optional show-message message-if-true message-if-false callback) (let ((new-value (if (eq arg 'toggle) (not (symbol-value variable)) (> (prefix-numeric-value arg) 0)))) (unless (eq new-value (symbol-value variable)) (set (make-local-variable variable) new-value) + ;; The purpose of `callback' is to be invoked after updating the variable, but before showing the + ;; message, as e.g. `isearch--momentary-message' sucks in that it effectively freezes Emacs. + (when callback + (funcall callback)) (when show-message (let ((message (if (symbol-value variable) message-if-true message-if-false))) (if (and isearch-mode diff --git a/test/logview.el b/test/logview.el index c556f8845d..3eb48ab169 100644 --- a/test/logview.el +++ b/test/logview.el @@ -20,6 +20,7 @@ (require 'ert) (require 'cus-edit) (require 'subr-x) +(require 'with-simulated-input) (define-error 'logview-test-expected-error "Must be caught") @@ -761,6 +762,23 @@ LV ERROR (should logview--views-need-saving)) +(ert-deftest logview-search-only-in-messages () + (logview--test-with-file "log4j/navigation-1.log" + (goto-char 1) + (with-simulated-input "2 RET" + (isearch-forward)) + (should (and (looking-back "^2" 1) (looking-at "010-01-01"))) + ;; Now the same with temporarily setting `logview-search-only-in-messages' via our + ;; extension, see `logview-isearch-map'. Must produce a visibly different result. + (goto-char 1) + (with-simulated-input ("M-m 2 RET") + (isearch-forward)) + (should (and (looking-back "message 2" 1) (looking-at "$"))) + ;; `M-m' must not have a "lasting effect", only without the search itself, similar to + ;; how e.g. `M-c' inside search behaves. + (should-not logview-search-only-in-messages))) + + (define-derived-mode logview--test-derived-mode logview-mode "Logview-derived" (font-lock-add-keywords nil `((,(rx bow "Class" eow) (0 'bold prepend))) t))