Subject: VC annotate mode places point on wrong line number when narrowing is in effect

From: Alexander Becher <[email-masked]>
Date: Mon, 09 Mar 2009 15:28:12 +0100

Actual Behaviour:

The VC annotate mode automatically places point on the same line as it 
is in the buffer of the corresponding file. Thus, one sees the same line 
in the annotated buffer as in the file buffer. However, when narrowing 
is in effect in the file buffer when vc-annotate is called, point is 
placed on the wrong line.

How to Reproduce:

  * Visit a version-controlled file with at least 2 lines.
  * Narrow to a region that does not start on line 1 (say, on line 2).
  * Place point on say, line 1 of the narrowed portion (i.e., line 2 of 
the file).
  * Call vc-annotate (C-x v g)
  * Note how point is on line 1 of the file instead of the expected line 2.

Patch:

In vc.el, surround the call to (line-number-at-pos) by a 
(save-restriction (widen) ...):

diff -u "c:/Programme/emacs/emacs-22.2/lisp/vc.el~" 
"c:/Programme/emacs/emacs-22.2/lisp/vc.el"
--- c:/Programme/emacs/emacs-22.2/lisp/vc.el~	2008-02-04 
03:32:56.000000000 +0100
+++ c:/Programme/emacs/emacs-22.2/lisp/vc.el	2009-03-04 
17:57:40.078000000 +0100
@@ -3194,7 +3194,7 @@
           ;; If BUF is specified, we presume the caller maintains 
current line,
           ;; so we don't need to do it here.  This implementation may give
           ;; strange results occasionally in the case of REV != 
WORKFILE-REV.
-         (current-line (unless buf (line-number-at-pos))))
+         (current-line (unless buf (save-restriction (widen) 
(line-number-at-pos)))))
      (message "Annotating...")
      ;; If BUF is specified it tells in which buffer we should put the
      ;; annotations.  This is used when switching annotations to another

Diff finished.  Mon Mar 09 15:24:19 2009

By the Way:

vc.el contains '$Id$', looks like keyword expansion was not switched on.

In GNU Emacs 22.2.1 (i386-mingw-nt5.1.2600)
  of 2008-03-26 on RELEASE
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (3.4)'