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))

Reply via email to