changeset 88036:f58e88e8d9cb

(change-log-search-file-name): Work harder to find the correct file name. (change-log-find-file): Fix typo. (change-log-start-entry-re): Move definition earlier.
author Dan Nicolaescu <dann@ics.uci.edu>
date Sun, 27 Jan 2008 19:52:46 +0000
parents edcfc11338ad
children 35cce79c1900
files lisp/ChangeLog lisp/add-log.el
diffstat 2 files changed, 33 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sun Jan 27 19:48:44 2008 +0000
+++ b/lisp/ChangeLog	Sun Jan 27 19:52:46 2008 +0000
@@ -1,3 +1,10 @@
+2008-01-27  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* add-log.el (change-log-search-file-name): Work harder to find
+	the correct file name.
+	(change-log-find-file): Fix typo.
+	(change-log-start-entry-re): Move definition earlier.
+
 2007-01-27  Jan Nieuwenhuizen  <janneke@gnu.org>
 
         * add-log.el (change-log-search-file-name, change-log-find-file):
--- a/lisp/add-log.el	Sun Jan 27 19:48:44 2008 +0000
+++ b/lisp/add-log.el	Sun Jan 27 19:52:46 2008 +0000
@@ -241,6 +241,7 @@
 (put 'change-log-acknowledgement-face 'face-alias 'change-log-acknowledgement)
 
 (defconst change-log-file-names-re "^\\( +\\|\t\\)\\* \\([^ ,:([\n]+\\)")
+(defconst change-log-start-entry-re "^\\sw.........[0-9:+ ]*")
 
 (defvar change-log-font-lock-keywords
   `(;;
@@ -294,8 +295,30 @@
   (save-excursion
     (goto-char where)
     (beginning-of-line 1)
-    (re-search-forward change-log-file-names-re)
-    (match-string 2)))
+    (if (looking-at change-log-start-entry-re)
+	;; We are at the start of an entry, search forward for a file
+	;; name.
+	(progn
+	  (re-search-forward change-log-file-names-re nil t)
+	  (match-string 2))
+      (if (looking-at change-log-file-names-re)
+	  ;; We found a file name.
+	  (match-string 2)
+	;; Look backwards for either a file name or the log entry start.
+	(if (re-search-backward
+	     (concat "\\(" change-log-start-entry-re 
+		     "\\)\\|\\("
+		     change-log-file-names-re "\\)") nil t)
+	    (if (match-beginning 1)
+		;; We got the start of the entry, look forward for a
+		;; file name.
+		(progn
+		  (re-search-forward change-log-file-names-re nil t)
+		  (match-string 2))
+	      (match-string 4))
+	  ;; We must be before any file name, look forward.
+	  (re-search-forward change-log-file-names-re nil t)
+	  (match-string 2))))))
 
 (defun change-log-find-file ()
   "Visit the file for the change under point."
@@ -303,7 +326,7 @@
   (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))))
+      (message "No such file or directory: %s" file))))
 
 (defvar change-log-mode-map
   (let ((map (make-sparse-keymap)))
@@ -1120,8 +1143,6 @@
 	  (change-log-get-method-definition-1 ""))
 	(concat change-log-get-method-definition-md "]"))))))
 
-(defconst change-log-start-entry-re "^\\sw.........[0-9:+ ]*")
-
 (defun change-log-sortable-date-at ()
   "Return date of log entry in a consistent form for sorting.
 Point is assumed to be at the start of the entry."