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.