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.

;;; my-log-mode.el --- major mode for error logs

;; Copyright (C) 2010 by Oleksandr Gavenko <gavenkoa@gmail.com>

;; You can do anything with this file without any warranty.

;; Author: Oleksandr Gavenko <gavenkoa@gmail.com>
;; Maintainer: Oleksandr Gavenko <gavenkoa@gmail.com>
;; Created: 2011-02-09
;; Version: 0.1
;; Keywords: logging

;;; Commentary:
;;
;; Very pure release.

;;; Code:

(defun my-log-goto (point)
  ""
  (interactive "d")
  (let ( start stop line fname fline (fregex "^\\([^:]+\\):\\([[:digit:]]+\\):") )
    (save-excursion
      (move-beginning-of-line 1)
      (setq start (point))
      (move-end-of-line 1)
      (setq stop (point))
      (setq line (filter-buffer-substring start stop))
      (string-match fregex line)
      (setq fname (match-string 1 line))
      (setq fline (string-to-int (match-string 2 line)))
      )
    (when (file-exists-p fname)
      (find-file-other-window fname)
      (goto-line fline)
      )
    ))

(setq my-log-mode-map (make-sparse-keymap))
(define-key my-log-mode-map (kbd "RET") 'my-log-goto)

(require 'generic-x)

;;;###autoload
(define-generic-mode
  'my-log-mode
  nil
  '("INT" "WM")
  '(
    ("^\\([^:]+\\):\\([[:digit:]]+\\):" (1 font-lock-constant-face) (2 font-lock-constant-face))
    )
  ;; '("\\.log$")
  nil
  (list
   (lambda nil
     ;; (setq buffer-read-only t)
     (use-local-map my-log-mode-map)
     ))
  )

;;; my-log-mode.el ends here