branch: elpa/logview
commit 4f18720c8a7b6ca19e9e0f3e2d9444b82f7b6151
Author: Paul Pogonyshev <pogonys...@gmail.com>
Commit: Paul Pogonyshev <pogonys...@gmail.com>

    Restore automatic buffer part reparsing after all changes that got lost 
with the lazy highlighting change.
---
 logview.el | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/logview.el b/logview.el
index c48a07536f..141ee36bab 100644
--- a/logview.el
+++ b/logview.el
@@ -899,6 +899,7 @@ successfully.")
   (set (make-local-variable 'font-lock-fontify-region-function) 
#'logview--fontify-region)
   (set (make-local-variable 'filter-buffer-substring-function)  
#'logview--buffer-substring-filter)
   (set (make-local-variable 'isearch-filter-predicate)          
#'logview--isearch-filter-predicate)
+  (add-hook 'after-change-functions #'logview--invalidate-region-entries nil t)
   (add-hook 'change-major-mode-hook #'logview--exiting-mode nil t)
   (logview--guess-submode)
   (logview--update-invisibility-spec)
@@ -913,7 +914,7 @@ successfully.")
 (defun logview--exiting-mode ()
   (logview--std-temporarily-widening
     (logview--std-altering
-      (remove-text-properties (point-min) (point-max) '(invisible nil 
logview-entry nil)))))
+      (remove-list-of-text-properties (point-min) (point-max) '(invisible 
logview-entry)))))
 
 (defun logview-initialized-p ()
   (not (null logview--entry-regexp)))
@@ -2618,6 +2619,25 @@ This list is preserved across Emacs session in
 
 ;;; Internal commands meant as hooks.
 
+(defun logview--invalidate-region-entries (region-start region-end &optional 
_old-length)
+  (logview--std-temporarily-widening
+    (logview--std-altering
+      (when (> region-start (point-min))
+        ;; Here we need to go to the entry beginning and then one more entry 
back: it is
+        ;; possible that after the change current text has to be merged into 
the previous
+        ;; entry as details.
+        (let ((entry (get-text-property region-start 'logview-entry)))
+          (when entry
+            (when (eq (get-text-property (1- region-start) 'logview-entry) 
entry)
+              (setq region-start (or (previous-single-property-change 
region-start 'logview-entry) (point-min))))))
+        (when (and (> region-start (point-min)) (get-text-property (1- 
region-start) 'logview-entry))
+          (setq region-start (or (previous-single-property-change (1- 
region-start) 'logview-entry) (point-min)))))
+      (when (< region-end (point-max))
+        (let ((entry (get-text-property region-end 'logview-entry)))
+          (when (and entry (eq (get-text-property (1+ region-end) 
'logview-entry) entry))
+            (setq region-end (or (next-single-property-change region-end 
'logview-entry) (point-max))))))
+      (remove-list-of-text-properties region-start region-end '(logview-entry 
fontified)))))
+
 (defun logview--fontify-region (region-start region-end _loudly)
   (logview--std-temporarily-widening
     ;; We are very fast.  Don't fontify too little to avoid overhead.

Reply via email to