changeset 16215:2c91cd1a660a

(vc-print-log): Set the display window so that it shows the current log entry completely.
author André Spiegel <spiegel@gnu.org>
date Mon, 16 Sep 1996 14:43:29 +0000
parents fa8dbed4d40e
children 3c6aaa4f236a
files lisp/vc.el
diffstat 1 files changed, 31 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/vc.el	Mon Sep 16 09:43:42 1996 +0000
+++ b/lisp/vc.el	Mon Sep 16 14:43:29 1996 +0000
@@ -1565,6 +1565,7 @@
 	(vc-backend-print-log file)
 	(pop-to-buffer (get-buffer-create "*vc*"))
 	(setq default-directory (file-name-directory file))
+	(goto-char (point-max)) (forward-line -1)
 	(while (looking-at "=*\n")
 	  (delete-char (- (match-end 0) (match-beginning 0)))
 	  (forward-line -1))
@@ -1573,14 +1574,36 @@
 	    (delete-char (- (match-end 0) (match-beginning 0))))
 	(shrink-window-if-larger-than-buffer)
 	;; move point to the log entry for the current version
-	(if (not (eq (vc-backend file) 'SCCS))
-	    (let ((pos (re-search-forward
-			;; also match some context, for safety
-			(concat "----\nrevision " (vc-workfile-version file)
-				"\\(\tlocked by:.*\n\\|\n\\)date: ") nil t)))
-	      (if pos (progn (goto-char pos)
-			     (beginning-of-line)
-			     (forward-line -1)))))
+	(and (not (eq (vc-backend file) 'SCCS))
+	     (re-search-forward
+	      ;; also match some context, for safety
+	      (concat "----\nrevision " (vc-workfile-version file)
+		      "\\(\tlocked by:.*\n\\|\n\\)date: ") nil t)
+	     ;; set the display window so that 
+	     ;; the whole log entry is displayed
+	     (let (start end lines)
+	       (beginning-of-line) (forward-line -1) (setq start (point))
+	       (if (not (re-search-forward "^----*\nrevision" nil t))
+		   (setq end (point-max))
+		 (beginning-of-line) (forward-line -1) (setq end (point)))
+	       (setq lines (count-lines start end))
+	       (cond
+		;; if the global information and this log entry fit
+		;; into the window, display from the beginning
+		((< (count-lines (point-min) end) (window-height))
+		 (goto-char (point-min))
+		 (recenter 0)
+		 (goto-char start))
+		;; if the whole entry fits into the window,
+		;; display it centered
+		((< (1+ lines) (window-height))
+		 (goto-char start)
+		 (recenter (1- (- (/ (window-height) 2) (/ lines 2)))))
+		;; otherwise (the entry is too large for the window),
+		;; display from the start
+		(t
+		 (goto-char start)
+		 (recenter 0)))))
 	)
     (vc-registration-error buffer-file-name)
     )