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

Reply via email to