author | Oleksandr Gavenko <gavenkoa@gmail.com> |
Sun, 31 Jan 2021 12:20:16 +0200 | |
changeset 1721 | f9fb82deb6b7 |
parent 1718 | 9d72f4424570 |
permissions | -rw-r--r-- |
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 | 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 | 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 |