branch: elpa/logview commit 2dcc17677896bee3f79eeca9ac142a301c0e407b Author: Paul Pogonyshev <pogonys...@gmail.com> Commit: Paul Pogonyshev <pogonys...@gmail.com>
Experimentally try to guess buffer submode using first `logview-guess-lines' (defaults to 10), not just one (issue #40). --- logview.el | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/logview.el b/logview.el index 1750a7b829..39216463e7 100644 --- a/logview.el +++ b/logview.el @@ -340,6 +340,14 @@ work just as the name." :set 'logview--set-submode-affecting-variable) +(defcustom logview-guess-lines 10 + "When guessing submodes, consider this many lines at the top. +If any line corresponds to a defined submode, all the others are +not even looked at. If this number is very large, Logview might +be slow when opening buffers in submodes it doesn't know about." + :group 'logview + :type 'integer) + (defcustom logview-auto-revert-mode nil "Automatically put recognized buffers into Auto-Revert mode. Buffers for which no appropriate submode can be guessed are not @@ -2357,9 +2365,7 @@ returns non-nil." (save-excursion (save-restriction (widen) - (goto-char 1) - (end-of-line) - (let ((first-line (buffer-substring 1 (point))) + (let ((n 0) standard-timestamps) (logview--iterate-split-alists (lambda (_timestamp-name timestamp) (push timestamp standard-timestamps)) logview-additional-timestamp-formats logview-std-timestamp-formats) @@ -2367,11 +2373,17 @@ returns non-nil." (push (cdr format) standard-timestamps)) (setq standard-timestamps (nreverse standard-timestamps)) (catch 'success - (logview--iterate-split-alists (lambda (name definition) - (condition-case error - (logview--initialize-submode name definition standard-timestamps first-line) - (error (warn (error-message-string error))))) - logview-additional-submodes logview-std-submodes)))))) + (goto-char 1) + (while (and (< n (max logview-guess-lines 1)) (not (eobp))) + (let ((line (buffer-substring-no-properties (point) (progn (end-of-line) (point))))) + (when (> (length line) 0) + (logview--iterate-split-alists (lambda (name definition) + (condition-case error + (logview--initialize-submode name definition standard-timestamps line) + (error (warn (error-message-string error))))) + logview-additional-submodes logview-std-submodes)) + (forward-line 1) + (setq n (1+ n))))))))) (defun logview--initialize-submode (name definition standard-timestamps &optional test-line) (let* ((format (cdr (assq 'format definition)))