# HG changeset patch # User Dan Nicolaescu # Date 1201463324 0 # Node ID edcfc11338add8137faf9fe0cbbd065a4b27cea8 # Parent 24e60a5c631c81e4b08eb2bd8b68835e750e69fd * add-log.el (change-log-search-file-name, change-log-find-file): New function. (change-log-font-lock-keywords): Move file name matching ... (change-log-file-names-re): ... here. New defconst. (change-log-mode-map): New binding C-c C-f to change-log-find-file. diff -r 24e60a5c631c -r edcfc11338ad lisp/ChangeLog --- a/lisp/ChangeLog Sun Jan 27 18:42:21 2008 +0000 +++ b/lisp/ChangeLog Sun Jan 27 19:48:44 2008 +0000 @@ -1,3 +1,11 @@ +2007-01-27 Jan Nieuwenhuizen + + * add-log.el (change-log-search-file-name, change-log-find-file): + New function. + (change-log-font-lock-keywords): Move file name matching ... + (change-log-file-names-re): ... here. New defconst. + (change-log-mode-map): New binding C-c C-f to change-log-find-file. + 2008-01-27 Alan Mackenzie * progmodes/cc-awk.el, progmodes/cc-engine.el: Correct typos, diff -r 24e60a5c631c -r edcfc11338ad lisp/add-log.el --- a/lisp/add-log.el Sun Jan 27 18:42:21 2008 +0000 +++ b/lisp/add-log.el Sun Jan 27 19:48:44 2008 +0000 @@ -240,8 +240,10 @@ ;; backward-compatibility alias (put 'change-log-acknowledgement-face 'face-alias 'change-log-acknowledgement) +(defconst change-log-file-names-re "^\\( +\\|\t\\)\\* \\([^ ,:([\n]+\\)") + (defvar change-log-font-lock-keywords - '(;; + `(;; ;; Date lines, new (2000-01-01) and old (Sat Jan 1 00:00:00 2000) styles. ;; Fixme: this regepx is just an approximate one and may match ;; wrongly with a non-date line existing as a random note. In @@ -255,7 +257,7 @@ (2 'change-log-email))) ;; ;; File names. - ("^\\( +\\|\t\\)\\* \\([^ ,:([\n]+\\)" + (,change-log-file-names-re (2 'change-log-file) ;; Possibly further names in a list: ("\\=, \\([^ ,:([\n]+\\)" nil nil (1 'change-log-file)) @@ -287,10 +289,27 @@ 3 'change-log-acknowledgement)) "Additional expressions to highlight in Change Log mode.") +(defun change-log-search-file-name (where) + "Return the file-name for the change under point." + (save-excursion + (goto-char where) + (beginning-of-line 1) + (re-search-forward change-log-file-names-re) + (match-string 2))) + +(defun change-log-find-file () + "Visit the file for the change under point." + (interactive) + (let ((file (change-log-search-file-name (point)))) + (if (and file (file-exists-p file)) + (find-file file) + (message "No such file or directory: ~s" file)))) + (defvar change-log-mode-map (let ((map (make-sparse-keymap))) (define-key map [?\C-c ?\C-p] 'add-log-edit-prev-comment) (define-key map [?\C-c ?\C-n] 'add-log-edit-next-comment) + (define-key map [?\C-c ?\C-f] 'change-log-find-file) map) "Keymap for Change Log major mode.")