mylisp/my-log-mode.el
author Oleksandr Gavenko <gavenkoa@gmail.com>
Wed, 16 Jun 2021 12:50:08 +0300
changeset 1734 ae2c6a001464
parent 1718 9d72f4424570
permissions -rw-r--r--
Add some standard places to PATH if they are not set by login script. Rearrange the order of paths so system's are first, user's are last. For Cygwin this helps with Cygwin's paths to be situated before "C:/Windows" (Emacs is not started from a login shell on Windows!).
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