Added mode for recognition of Windows paths in Cygwin Emacs.
;;; my-log-mode.el --- major mode for error logs
;;; Commentary:
;;
;;; Code:
(defun my-log-goto (point)
"Visit file according to error specification at 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))
(when fname
(setq fline (string-to-number (match-string 2 line))))
)
(cond
( (and fname (file-exists-p fname))
(find-file-other-window fname)
(goto-char (point-min))
(forward-line (1- fline)) )
( t
(if fname
(message "File '%s' is not found (default directory is '%s')." fname default-directory)
(message "No file under current line.") ) )
)
))
(defvar 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
nil
'(
("^\\([^:]+\\):\\([[:digit:]]+\\):[^
]+$" (1 font-lock-function-name-face) (2 font-lock-type-face))
("^\\([^:]\\{1,10\\}\\):[^
]+$" (1 font-lock-keyword-face))
)
;; '("\\.log$")
nil
(list
(lambda nil
(use-local-map my-log-mode-map)
(modify-syntax-entry ?' ".")
(modify-syntax-entry ?\" ".")
))
)
;;; my-log-mode.el ends here