mylisp/my-log-mode.el
author Oleksandr Gavenko <gavenkoa@gmail.com>
Sat, 24 Dec 2022 21:43:47 +0200
changeset 1769 1a21553009b7
parent 1718 9d72f4424570
permissions -rw-r--r--
Fixed typo (imbalanced parentheses).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
565
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
;;; my-log-mode.el --- major mode for error logs
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
;;; Commentary:
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
;;
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
;;; Code:
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
(defun my-log-goto (point)
1260
47bc80daa918 Fix checkdoc warnings.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1249
diff changeset
     9
  "Visit file according to error specification at POINT."
565
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
  (interactive "d")
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
  (let ( start stop line fname fline (fregex "^\\([^:]+\\):\\([[:digit:]]+\\):") )
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
    (save-excursion
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
      (move-beginning-of-line 1)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
      (setq start (point))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
      (move-end-of-line 1)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
      (setq stop (point))
1246
abd80227aa4b Fix: Warning: filter-buffer-substring called with 4 arguments, but accepts only 2-3.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 572
diff changeset
    17
      (setq line (filter-buffer-substring start stop))
565
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
      (string-match fregex line)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
      (setq fname (match-string 1 line))
566
5efbc78b8c41 Fix error when fline is nil. Optimize regex for highlighting. Set quotes as
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 565
diff changeset
    20
      (when fname
1247
6de0de0a4033 Fix: Warning: `string-to-int' is an obsolete function (as of 22.1); use `string-to-number' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1246
diff changeset
    21
        (setq fline (string-to-number (match-string 2 line))))
565
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
      )
572
ead98b9f85c3 Fix trailing spaces.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 571
diff changeset
    23
    (cond
570
53f62308c963 Report error if file not found.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
    24
     ( (and fname (file-exists-p fname))
53f62308c963 Report error if file not found.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
    25
       (find-file-other-window fname)
1248
19234649ba68 Fix: Warning: `goto-line' is for interactive use only; use `forward-line' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1247
diff changeset
    26
       (goto-char (point-min))
19234649ba68 Fix: Warning: `goto-line' is for interactive use only; use `forward-line' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1247
diff changeset
    27
       (forward-line (1- fline)) )
570
53f62308c963 Report error if file not found.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
    28
     ( t
571
012f4c694435 Fix error reporting.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
    29
       (if fname
012f4c694435 Fix error reporting.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 570
diff changeset
    30
           (message "File '%s' is not found (default directory is '%s')." fname default-directory)
1248
19234649ba68 Fix: Warning: `goto-line' is for interactive use only; use `forward-line' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1247
diff changeset
    31
         (message "No file under current line.") ) )
570
53f62308c963 Report error if file not found.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 569
diff changeset
    32
     )
565
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    33
    ))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    34
1249
edb7f9210892 Fix: Warning: assignment to free variable `my-log-mode-map'.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1248
diff changeset
    35
(defvar my-log-mode-map (make-sparse-keymap))
565
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    36
(define-key my-log-mode-map (kbd "RET") 'my-log-goto)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    37
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    38
(require 'generic-x)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    39
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    40
;;;###autoload
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    41
(define-generic-mode
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    42
  'my-log-mode
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    43
  nil
566
5efbc78b8c41 Fix error when fline is nil. Optimize regex for highlighting. Set quotes as
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 565
diff changeset
    44
  nil
565
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    45
  '(
566
5efbc78b8c41 Fix error when fline is nil. Optimize regex for highlighting. Set quotes as
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 565
diff changeset
    46
    ("^\\([^:]+\\):\\([[:digit:]]+\\):[^
567
83b075682c97 Fix colors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 566
diff changeset
    47
]+$" (1 font-lock-function-name-face) (2 font-lock-type-face))
566
5efbc78b8c41 Fix error when fline is nil. Optimize regex for highlighting. Set quotes as
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 565
diff changeset
    48
    ("^\\([^:]\\{1,10\\}\\):[^
567
83b075682c97 Fix colors.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 566
diff changeset
    49
]+$" (1 font-lock-keyword-face))
565
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    50
    )
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    51
  ;; '("\\.log$")
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    52
  nil
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    53
  (list
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    54
   (lambda nil
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    55
     (use-local-map my-log-mode-map)
566
5efbc78b8c41 Fix error when fline is nil. Optimize regex for highlighting. Set quotes as
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 565
diff changeset
    56
     (modify-syntax-entry ?' ".")
5efbc78b8c41 Fix error when fline is nil. Optimize regex for highlighting. Set quotes as
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 565
diff changeset
    57
     (modify-syntax-entry ?\" ".")
565
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    58
     ))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    59
  )
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    60
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    61
;;; my-log-mode.el ends here