my-log-mode.el
author Oleksandr Gavenko <gavenkoa@gmail.com>
Wed, 09 Feb 2011 00:44:43 +0200
changeset 565 a9f4afeefe2a
child 566 5efbc78b8c41
permissions -rwxr-xr-x
Major mode for error logs.
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
;; Copyright (C) 2010 by Oleksandr Gavenko <gavenkoa@gmail.com>
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
;; You can do anything with this file without any warranty.
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
;; Author: Oleksandr Gavenko <gavenkoa@gmail.com>
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
;; Maintainer: Oleksandr Gavenko <gavenkoa@gmail.com>
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
;; Created: 2011-02-09
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
;; Version: 0.1
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
;; Keywords: logging
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
;;; Commentary:
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
;;
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
;; Very pure release.
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
;;; Code:
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
(defun my-log-goto (point)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
  ""
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    21
  (interactive "d")
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
  (let ( start stop line fname fline (fregex "^\\([^:]+\\):\\([[:digit:]]+\\):") )
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    23
    (save-excursion
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    24
      (move-beginning-of-line 1)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
      (setq start (point))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    26
      (move-end-of-line 1)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    27
      (setq stop (point))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    28
      (setq line (filter-buffer-substring start stop))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    29
      (string-match fregex line)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    30
      (setq fname (match-string 1 line))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    31
      (setq fline (string-to-int (match-string 2 line)))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    32
      )
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    33
    (when (file-exists-p fname)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    34
      (find-file-other-window fname)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    35
      (goto-line fline)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    36
      )
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
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    39
(setq my-log-mode-map (make-sparse-keymap))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    40
(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
    41
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    42
(require 'generic-x)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    43
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    44
;;;###autoload
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    45
(define-generic-mode
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    46
  'my-log-mode
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    47
  nil
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    48
  '("INT" "WM")
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    49
  '(
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    50
    ("^\\([^:]+\\):\\([[:digit:]]+\\):" (1 font-lock-constant-face) (2 font-lock-constant-face))
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    51
    )
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    52
  ;; '("\\.log$")
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    53
  nil
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    54
  (list
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    55
   (lambda nil
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    56
     ;; (setq buffer-read-only t)
a9f4afeefe2a Major mode for error logs.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    57
     (use-local-map my-log-mode-map)
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