annotate lisp/vc-annotate.el @ 111039:5e8f54361c49

Fix incorrect font metrics when the same font is opened with different pixelsizes.
author Kenichi Handa <handa@m17n.org>
date Fri, 15 Oct 2010 17:01:41 +0900
parents 827f21099a9d
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
1 ;;; vc-annotate.el --- VC Annotate Support
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
2
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
3 ;; Copyright (C) 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106517
diff changeset
4 ;; 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
5
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
6 ;; Author: Martin Lorentzson <emwson@emw.ericsson.se>
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
7 ;; Maintainer: FSF
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
8 ;; Keywords: tools
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
9
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
11
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
15 ;; (at your option) any later version.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
16
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
20 ;; GNU General Public License for more details.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
21
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
24
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
25 ;;; Commentary:
99841
fd7d46b20afe * allout.el (allout-mode): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 96517
diff changeset
26 ;;
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
27
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
28 (require 'vc-hooks)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
29 (require 'vc)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
30
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
31 ;;; Code:
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
32 (eval-when-compile
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
33 (require 'cl))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
34
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
35 (defcustom vc-annotate-display-mode 'fullscale
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
36 "Which mode to color the output of \\[vc-annotate] with by default."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
37 :type '(choice (const :tag "By Color Map Range" nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
38 (const :tag "Scale to Oldest" scale)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
39 (const :tag "Scale Oldest->Newest" fullscale)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
40 (number :tag "Specify Fractional Number of Days"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
41 :value "20.5"))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
42 :group 'vc)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
43
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
44 (defcustom vc-annotate-color-map
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
45 (if (and (tty-display-color-p) (<= (display-color-cells) 8))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
46 ;; A custom sorted TTY colormap
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
47 (let* ((colors
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
48 (sort
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
49 (delq nil
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
50 (mapcar (lambda (x)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
51 (if (not (or
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
52 (string-equal (car x) "white")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
53 (string-equal (car x) "black") ))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
54 (car x)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
55 (tty-color-alist)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
56 (lambda (a b)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
57 (cond
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
58 ((or (string-equal a "red") (string-equal b "blue")) t)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
59 ((or (string-equal b "red") (string-equal a "blue")) nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
60 ((string-equal a "yellow") t)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
61 ((string-equal b "yellow") nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
62 ((string-equal a "cyan") t)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
63 ((string-equal b "cyan") nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
64 ((string-equal a "green") t)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
65 ((string-equal b "green") nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
66 ((string-equal a "magenta") t)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
67 ((string-equal b "magenta") nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
68 (t (string< a b))))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
69 (date 20.)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
70 (delta (/ (- 360. date) (1- (length colors)))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
71 (mapcar (lambda (x)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
72 (prog1
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
73 (cons date x)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
74 (setq date (+ date delta)))) colors))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
75 ;; Normal colormap: hue stepped from 0-240deg, value=1., saturation=0.75
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
76 '(( 20. . "#FF3F3F")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
77 ( 40. . "#FF6C3F")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
78 ( 60. . "#FF993F")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
79 ( 80. . "#FFC63F")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
80 (100. . "#FFF33F")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
81 (120. . "#DDFF3F")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
82 (140. . "#B0FF3F")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
83 (160. . "#83FF3F")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
84 (180. . "#56FF3F")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
85 (200. . "#3FFF56")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
86 (220. . "#3FFF83")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
87 (240. . "#3FFFB0")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
88 (260. . "#3FFFDD")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
89 (280. . "#3FF3FF")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
90 (300. . "#3FC6FF")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
91 (320. . "#3F99FF")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
92 (340. . "#3F6CFF")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
93 (360. . "#3F3FFF")))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
94 "Association list of age versus color, for \\[vc-annotate].
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
95 Ages are given in units of fractional days. Default is eighteen
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
96 steps using a twenty day increment, from red to blue. For TTY
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
97 displays with 8 or fewer colors, the default is red to blue with
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
98 all other colors between (excluding black and white)."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
99 :type 'alist
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
100 :group 'vc)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
101
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
102 (defcustom vc-annotate-very-old-color "#3F3FFF"
99841
fd7d46b20afe * allout.el (allout-mode): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 96517
diff changeset
103 "Color for lines older than the current color range in \\[vc-annotate]."
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
104 :type 'string
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
105 :group 'vc)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
106
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
107 (defcustom vc-annotate-background "black"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
108 "Background color for \\[vc-annotate].
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
109 Default color is used if nil."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
110 :type '(choice (const :tag "Default background" nil) (color))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
111 :group 'vc)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
112
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
113 (defcustom vc-annotate-menu-elements '(2 0.5 0.1 0.01)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
114 "Menu elements for the mode-specific menu of VC-Annotate mode.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
115 List of factors, used to expand/compress the time scale. See `vc-annotate'."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
116 :type '(repeat number)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
117 :group 'vc)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
118
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
119 (defvar vc-annotate-mode-map
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
120 (let ((m (make-sparse-keymap)))
96475
fa83184d8296 (vc-annotate-mode-map): Bind to lower case keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96206
diff changeset
121 (define-key m "a" 'vc-annotate-revision-previous-to-line)
fa83184d8296 (vc-annotate-mode-map): Bind to lower case keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96206
diff changeset
122 (define-key m "d" 'vc-annotate-show-diff-revision-at-line)
fa83184d8296 (vc-annotate-mode-map): Bind to lower case keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96206
diff changeset
123 (define-key m "D" 'vc-annotate-show-changeset-diff-revision-at-line)
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
124 (define-key m "f" 'vc-annotate-find-revision-at-line)
96475
fa83184d8296 (vc-annotate-mode-map): Bind to lower case keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96206
diff changeset
125 (define-key m "j" 'vc-annotate-revision-at-line)
fa83184d8296 (vc-annotate-mode-map): Bind to lower case keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96206
diff changeset
126 (define-key m "l" 'vc-annotate-show-log-revision-at-line)
fa83184d8296 (vc-annotate-mode-map): Bind to lower case keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96206
diff changeset
127 (define-key m "n" 'vc-annotate-next-revision)
fa83184d8296 (vc-annotate-mode-map): Bind to lower case keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96206
diff changeset
128 (define-key m "p" 'vc-annotate-prev-revision)
fa83184d8296 (vc-annotate-mode-map): Bind to lower case keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96206
diff changeset
129 (define-key m "w" 'vc-annotate-working-revision)
fa83184d8296 (vc-annotate-mode-map): Bind to lower case keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96206
diff changeset
130 (define-key m "v" 'vc-annotate-toggle-annotation-visibility)
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
131 m)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
132 "Local keymap used for VC-Annotate mode.")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
133
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
134 ;;; Annotate functionality
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
135
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
136 ;; Declare globally instead of additional parameter to
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
137 ;; temp-buffer-show-function (not possible to pass more than one
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
138 ;; parameter). The use of annotate-ratio is deprecated in favor of
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
139 ;; annotate-mode, which replaces it with the more sensible "span-to
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
140 ;; days", along with autoscaling support.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
141 (defvar vc-annotate-ratio nil "Global variable.")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
142
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
143 ;; internal buffer-local variables
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
144 (defvar vc-annotate-backend nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
145 (defvar vc-annotate-parent-file nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
146 (defvar vc-annotate-parent-rev nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
147 (defvar vc-annotate-parent-display-mode nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
148
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
149 (defconst vc-annotate-font-lock-keywords
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
150 ;; The fontification is done by vc-annotate-lines instead of font-lock.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
151 '((vc-annotate-lines)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
152
96206
5a490e8feb43 (vc-annotate-mode): Derive from special-mode
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96204
diff changeset
153 (define-derived-mode vc-annotate-mode special-mode "Annotate"
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
154 "Major mode for output buffers of the `vc-annotate' command.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
155
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
156 You can use the mode-specific menu to alter the time-span of the used
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
157 colors. See variable `vc-annotate-menu-elements' for customizing the
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
158 menu items."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
159 ;; Frob buffer-invisibility-spec so that if it is originally a naked t,
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
160 ;; it will become a list, to avoid initial annotations being invisible.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
161 (add-to-invisibility-spec 'foo)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
162 (remove-from-invisibility-spec 'foo)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
163 (set (make-local-variable 'truncate-lines) t)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
164 (set (make-local-variable 'font-lock-defaults)
96206
5a490e8feb43 (vc-annotate-mode): Derive from special-mode
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96204
diff changeset
165 '(vc-annotate-font-lock-keywords t)))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
166
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
167 (defun vc-annotate-toggle-annotation-visibility ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
168 "Toggle whether or not the annotation is visible."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
169 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
170 (funcall (if (memq 'vc-annotate-annotation buffer-invisibility-spec)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
171 'remove-from-invisibility-spec
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
172 'add-to-invisibility-spec)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
173 'vc-annotate-annotation)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
174 (force-window-update (current-buffer)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
175
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
176 (defun vc-annotate-display-default (ratio)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
177 "Display the output of \\[vc-annotate] using the default color range.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
178 The color range is given by `vc-annotate-color-map', scaled by RATIO.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
179 The current time is used as the offset."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
180 (interactive (progn (kill-local-variable 'vc-annotate-color-map) '(1.0)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
181 (message "Redisplaying annotation...")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
182 (vc-annotate-display ratio)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
183 (message "Redisplaying annotation...done"))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
184
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
185 (defun vc-annotate-oldest-in-map (color-map)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
186 "Return the oldest time in the COLOR-MAP."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
187 ;; Since entries should be sorted, we can just use the last one.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
188 (caar (last color-map)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
189
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
190 (defun vc-annotate-get-time-set-line-props ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
191 (let ((bol (point))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
192 (date (vc-call-backend vc-annotate-backend 'annotate-time))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
193 (inhibit-read-only t))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
194 (assert (>= (point) bol))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
195 (put-text-property bol (point) 'invisible 'vc-annotate-annotation)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
196 date))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
197
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
198 (defun vc-annotate-display-autoscale (&optional full)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
199 "Highlight the output of \\[vc-annotate] using an autoscaled color map.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
200 Autoscaling means that the map is scaled from the current time to the
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
201 oldest annotation in the buffer, or, with prefix argument FULL, to
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
202 cover the range from the oldest annotation to the newest."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
203 (interactive "P")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
204 (let ((newest 0.0)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
205 (oldest 999999.) ;Any CVS users at the founding of Rome?
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
206 (current (vc-annotate-convert-time (current-time)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
207 date)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
208 (message "Redisplaying annotation...")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
209 ;; Run through this file and find the oldest and newest dates annotated.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
210 (save-excursion
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
211 (goto-char (point-min))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
212 (while (not (eobp))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
213 (when (setq date (vc-annotate-get-time-set-line-props))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
214 (when (> date newest)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
215 (setq newest date))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
216 (when (< date oldest)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
217 (setq oldest date)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
218 (forward-line 1)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
219 (vc-annotate-display
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
220 (/ (- (if full newest current) oldest)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
221 (vc-annotate-oldest-in-map vc-annotate-color-map))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
222 (if full newest))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
223 (message "Redisplaying annotation...done \(%s\)"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
224 (if full
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
225 (format "Spanned from %.1f to %.1f days old"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
226 (- current oldest)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
227 (- current newest))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
228 (format "Spanned to %.1f days old" (- current oldest))))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
229
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
230 ;; Menu -- Using easymenu.el
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
231 (easy-menu-define vc-annotate-mode-menu vc-annotate-mode-map
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
232 "VC Annotate Display Menu"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
233 `("VC-Annotate"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
234 ["By Color Map Range" (unless (null vc-annotate-display-mode)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
235 (setq vc-annotate-display-mode nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
236 (vc-annotate-display-select))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
237 :style toggle :selected (null vc-annotate-display-mode)]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
238 ,@(let ((oldest-in-map (vc-annotate-oldest-in-map vc-annotate-color-map)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
239 (mapcar (lambda (element)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
240 (let ((days (* element oldest-in-map)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
241 `[,(format "Span %.1f days" days)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
242 (vc-annotate-display-select nil ,days)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
243 :style toggle :selected
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
244 (eql vc-annotate-display-mode ,days) ]))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
245 vc-annotate-menu-elements))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
246 ["Span ..."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
247 (vc-annotate-display-select
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
248 nil (float (string-to-number (read-string "Span how many days? "))))]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
249 "--"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
250 ["Span to Oldest"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
251 (unless (eq vc-annotate-display-mode 'scale)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
252 (vc-annotate-display-select nil 'scale))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
253 :help
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
254 "Use an autoscaled color map from the oldest annotation to the current time"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
255 :style toggle :selected
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
256 (eq vc-annotate-display-mode 'scale)]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
257 ["Span Oldest->Newest"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
258 (unless (eq vc-annotate-display-mode 'fullscale)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
259 (vc-annotate-display-select nil 'fullscale))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
260 :help
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
261 "Use an autoscaled color map from the oldest to the newest annotation"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
262 :style toggle :selected
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
263 (eq vc-annotate-display-mode 'fullscale)]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
264 "--"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
265 ["Toggle annotation visibility" vc-annotate-toggle-annotation-visibility
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
266 :help
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
267 "Toggle whether the annotation is visible or not"]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
268 ["Annotate previous revision" vc-annotate-prev-revision
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
269 :help "Visit the annotation of the revision previous to this one"]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
270 ["Annotate next revision" vc-annotate-next-revision
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
271 :help "Visit the annotation of the revision after this one"]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
272 ["Annotate revision at line" vc-annotate-revision-at-line
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
273 :help
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
274 "Visit the annotation of the revision identified in the current line"]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
275 ["Annotate revision previous to line" vc-annotate-revision-previous-to-line
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
276 :help "Visit the annotation of the revision before the revision at line"]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
277 ["Annotate latest revision" vc-annotate-working-revision
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
278 :help "Visit the annotation of the working revision of this file"]
96517
b250e775669b (vc-annotate-mode-menu): Add separator.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96475
diff changeset
279 "--"
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
280 ["Show log of revision at line" vc-annotate-show-log-revision-at-line
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
281 :help "Visit the log of the revision at line"]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
282 ["Show diff of revision at line" vc-annotate-show-diff-revision-at-line
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
283 :help "Visit the diff of the revision at line from its previous revision"]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
284 ["Show changeset diff of revision at line"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
285 vc-annotate-show-changeset-diff-revision-at-line
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
286 :enable
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
287 (eq 'repository (vc-call-backend ,vc-annotate-backend 'revision-granularity))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
288 :help "Visit the diff of the revision at line from its previous revision"]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
289 ["Visit revision at line" vc-annotate-find-revision-at-line
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
290 :help "Visit the revision identified in the current line"]))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
291
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
292 (defun vc-annotate-display-select (&optional buffer mode)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
293 "Highlight the output of \\[vc-annotate].
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
294 By default, the current buffer is highlighted, unless overridden by
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
295 BUFFER. `vc-annotate-display-mode' specifies the highlighting mode to
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
296 use; you may override this using the second optional arg MODE."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
297 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
298 (when mode (setq vc-annotate-display-mode mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
299 (pop-to-buffer (or buffer (current-buffer)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
300 (cond ((null vc-annotate-display-mode)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
301 ;; The ratio is global, thus relative to the global color-map.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
302 (kill-local-variable 'vc-annotate-color-map)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
303 (vc-annotate-display-default (or vc-annotate-ratio 1.0)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
304 ;; One of the auto-scaling modes
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
305 ((eq vc-annotate-display-mode 'scale)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
306 (vc-exec-after `(vc-annotate-display-autoscale)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
307 ((eq vc-annotate-display-mode 'fullscale)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
308 (vc-exec-after `(vc-annotate-display-autoscale t)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
309 ((numberp vc-annotate-display-mode) ; A fixed number of days lookback
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
310 (vc-annotate-display-default
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
311 (/ vc-annotate-display-mode
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
312 (vc-annotate-oldest-in-map vc-annotate-color-map))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
313 (t (error "No such display mode: %s"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
314 vc-annotate-display-mode))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
315
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
316 ;;;###autoload
109254
827f21099a9d Fix annotating other revisions for renamed files in vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109253
diff changeset
317 (defun vc-annotate (file rev &optional display-mode buf move-point-to vc-bk)
109005
fb83c83549bb * lisp/vc-annotate.el (vc-annotate): Use vc-read-revision.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106988
diff changeset
318 "Display the edit history of the current FILE using colors.
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
319
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
320 This command creates a buffer that shows, for each line of the current
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
321 file, when it was last edited and by whom. Additionally, colors are
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
322 used to show the age of each line--blue means oldest, red means
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
323 youngest, and intermediate colors indicate intermediate ages. By
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
324 default, the time scale stretches back one year into the past;
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
325 everything that is older than that is shown in blue.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
326
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
327 With a prefix argument, this command asks two questions in the
109005
fb83c83549bb * lisp/vc-annotate.el (vc-annotate): Use vc-read-revision.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106988
diff changeset
328 minibuffer. First, you may enter a revision number REV; then the buffer
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
329 displays and annotates that revision instead of the working revision
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
330 \(type RET in the minibuffer to leave that default unchanged). Then,
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
331 you are prompted for the time span in days which the color range
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
332 should cover. For example, a time span of 20 days means that changes
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
333 over the past 20 days are shown in red to blue, according to their
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
334 age, and everything that is older than that is shown in blue.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
335
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
336 If MOVE-POINT-TO is given, move the point to that line.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
337
109254
827f21099a9d Fix annotating other revisions for renamed files in vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109253
diff changeset
338 If VC-BK is given used that VC backend.
827f21099a9d Fix annotating other revisions for renamed files in vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109253
diff changeset
339
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
340 Customization variables:
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
341
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
342 `vc-annotate-menu-elements' customizes the menu elements of the
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
343 mode-specific menu. `vc-annotate-color-map' and
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
344 `vc-annotate-very-old-color' define the mapping of time to colors.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
345 `vc-annotate-background' specifies the background color."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
346 (interactive
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
347 (save-current-buffer
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
348 (vc-ensure-vc-buffer)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
349 (list buffer-file-name
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
350 (let ((def (vc-working-revision buffer-file-name)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
351 (if (null current-prefix-arg) def
109005
fb83c83549bb * lisp/vc-annotate.el (vc-annotate): Use vc-read-revision.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106988
diff changeset
352 (vc-read-revision
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
353 (format "Annotate from revision (default %s): " def)
109005
fb83c83549bb * lisp/vc-annotate.el (vc-annotate): Use vc-read-revision.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106988
diff changeset
354 (list buffer-file-name) nil def)))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
355 (if (null current-prefix-arg)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
356 vc-annotate-display-mode
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
357 (float (string-to-number
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
358 (read-string "Annotate span days (default 20): "
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
359 nil nil "20")))))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
360 (vc-ensure-vc-buffer)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
361 (setq vc-annotate-display-mode display-mode) ;Not sure why. --Stef
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
362 (let* ((temp-buffer-name (format "*Annotate %s (rev %s)*" (buffer-name) rev))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
363 (temp-buffer-show-function 'vc-annotate-display-select)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
364 ;; If BUF is specified, we presume the caller maintains current line,
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
365 ;; so we don't need to do it here. This implementation may give
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
366 ;; strange results occasionally in the case of REV != WORKFILE-REV.
102463
8e50ad0da4e8 (vc-annotate): Use widened line number (Bug#2612).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
367 (current-line (or move-point-to (unless buf
8e50ad0da4e8 (vc-annotate): Use widened line number (Bug#2612).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
368 (save-restriction
8e50ad0da4e8 (vc-annotate): Use widened line number (Bug#2612).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
369 (widen)
8e50ad0da4e8 (vc-annotate): Use widened line number (Bug#2612).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
370 (line-number-at-pos))))))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
371 (message "Annotating...")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
372 ;; If BUF is specified it tells in which buffer we should put the
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
373 ;; annotations. This is used when switching annotations to another
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
374 ;; revision, so we should update the buffer's name.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
375 (when buf (with-current-buffer buf
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
376 (rename-buffer temp-buffer-name t)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
377 ;; In case it had to be uniquified.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
378 (setq temp-buffer-name (buffer-name))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
379 (with-output-to-temp-buffer temp-buffer-name
109254
827f21099a9d Fix annotating other revisions for renamed files in vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109253
diff changeset
380 (let ((backend (or vc-bk (vc-backend file)))
104949
4fab4cdb3614 * vc-annotate.el (vc-annotate): Use the main file's coding-system to
Juanma Barranquero <lekktu@gmail.com>
parents: 102463
diff changeset
381 (coding-system-for-read buffer-file-coding-system))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
382 (vc-call-backend backend 'annotate-command file
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
383 (get-buffer temp-buffer-name) rev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
384 ;; we must setup the mode first, and then set our local
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
385 ;; variables before the show-function is called at the exit of
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
386 ;; with-output-to-temp-buffer
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
387 (with-current-buffer temp-buffer-name
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
388 (unless (equal major-mode 'vc-annotate-mode)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
389 (vc-annotate-mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
390 (set (make-local-variable 'vc-annotate-backend) backend)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
391 (set (make-local-variable 'vc-annotate-parent-file) file)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
392 (set (make-local-variable 'vc-annotate-parent-rev) rev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
393 (set (make-local-variable 'vc-annotate-parent-display-mode)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
394 display-mode))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
395
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
396 (with-current-buffer temp-buffer-name
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
397 (vc-exec-after
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
398 `(progn
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
399 ;; Ideally, we'd rather not move point if the user has already
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
400 ;; moved it elsewhere, but really point here is not the position
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
401 ;; of the user's cursor :-(
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
402 (when ,current-line ;(and (bobp))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
403 (goto-line ,current-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
404 (setq vc-sentinel-movepoint (point)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
405 (unless (active-minibuffer-window)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
406 (message "Annotating... done")))))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
407
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
408 (defun vc-annotate-prev-revision (prefix)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
409 "Visit the annotation of the revision previous to this one.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
410
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
411 With a numeric prefix argument, annotate the revision that many
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
412 revisions previous."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
413 (interactive "p")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
414 (vc-annotate-warp-revision (- 0 prefix)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
415
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
416 (defun vc-annotate-next-revision (prefix)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
417 "Visit the annotation of the revision after this one.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
418
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
419 With a numeric prefix argument, annotate the revision that many
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
420 revisions after."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
421 (interactive "p")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
422 (vc-annotate-warp-revision prefix))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
423
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
424 (defun vc-annotate-working-revision ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
425 "Visit the annotation of the working revision of this file."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
426 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
427 (if (not (equal major-mode 'vc-annotate-mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
428 (message "Cannot be invoked outside of a vc annotate buffer")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
429 (let ((warp-rev (vc-working-revision vc-annotate-parent-file)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
430 (if (equal warp-rev vc-annotate-parent-rev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
431 (message "Already at revision %s" warp-rev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
432 (vc-annotate-warp-revision warp-rev)))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
433
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
434 (defun vc-annotate-extract-revision-at-line ()
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
435 "Extract the revision number of the current line.
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
436 Return a cons (REV . FILENAME)."
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
437 ;; This function must be invoked from a buffer in vc-annotate-mode
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
438 (let ((rev (vc-call-backend vc-annotate-backend
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
439 'annotate-extract-revision-at-line)))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
440 (if (or (null rev) (consp rev))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
441 rev
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
442 (cons rev vc-annotate-parent-file))))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
443
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
444 (defun vc-annotate-revision-at-line ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
445 "Visit the annotation of the revision identified in the current line."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
446 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
447 (if (not (equal major-mode 'vc-annotate-mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
448 (message "Cannot be invoked outside of a vc annotate buffer")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
449 (let ((rev-at-line (vc-annotate-extract-revision-at-line)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
450 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
451 (message "Cannot extract revision number from the current line")
106988
05efa1881381 (vc-annotate-revision-at-line): Compare file
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
452 (if (and (equal (car rev-at-line) vc-annotate-parent-rev)
05efa1881381 (vc-annotate-revision-at-line): Compare file
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
453 (string= (cdr rev-at-line) vc-annotate-parent-file))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
454 (message "Already at revision %s" rev-at-line)
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
455 (vc-annotate-warp-revision (car rev-at-line) (cdr rev-at-line)))))))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
456
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
457 (defun vc-annotate-find-revision-at-line ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
458 "Visit the revision identified in the current line."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
459 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
460 (if (not (equal major-mode 'vc-annotate-mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
461 (message "Cannot be invoked outside of a vc annotate buffer")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
462 (let ((rev-at-line (vc-annotate-extract-revision-at-line)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
463 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
464 (message "Cannot extract revision number from the current line")
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
465 (switch-to-buffer-other-window
109252
64f9d1b2b73b Fix finding revisions in for renamed files in vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109005
diff changeset
466 (vc-find-revision (cdr rev-at-line) (car rev-at-line) vc-annotate-backend))))))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
467
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
468 (defun vc-annotate-revision-previous-to-line ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
469 "Visit the annotation of the revision before the revision at line."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
470 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
471 (if (not (equal major-mode 'vc-annotate-mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
472 (message "Cannot be invoked outside of a vc annotate buffer")
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
473 (let* ((rev-at-line (vc-annotate-extract-revision-at-line))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
474 (prev-rev nil)
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
475 (rev (car rev-at-line))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
476 (fname (cdr rev-at-line)))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
477 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
478 (message "Cannot extract revision number from the current line")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
479 (setq prev-rev
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
480 (vc-call-backend vc-annotate-backend 'previous-revision
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
481 fname rev))
106250
456620b3e939 (vc-annotate-revision-previous-to-line): Really use previous revision.
Johan Bockgård <bojohan@gnu.org>
parents: 106157
diff changeset
482 (vc-annotate-warp-revision prev-rev fname)))))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
483
106517
badae536951d (log-view-vc-backend, log-view-vc-fileset): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 106472
diff changeset
484 (defvar log-view-vc-backend)
badae536951d (log-view-vc-backend, log-view-vc-fileset): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 106472
diff changeset
485 (defvar log-view-vc-fileset)
badae536951d (log-view-vc-backend, log-view-vc-fileset): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 106472
diff changeset
486
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
487 (defun vc-annotate-show-log-revision-at-line ()
106472
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
488 "Visit the log of the revision at line.
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
489 If the VC backend supports it, only show the log entry for the revision.
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
490 If a *vc-change-log* buffer exists and already shows a log for
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
491 the file in question, search for the log entry required and move point ."
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
492 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
493 (if (not (equal major-mode 'vc-annotate-mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
494 (message "Cannot be invoked outside of a vc annotate buffer")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
495 (let ((rev-at-line (vc-annotate-extract-revision-at-line)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
496 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
497 (message "Cannot extract revision number from the current line")
106472
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
498 (let ((backend vc-annotate-backend)
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
499 (log-buf (get-buffer "*vc-change-log*"))
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
500 pos)
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
501 (if (and
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
502 log-buf
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
503 ;; Look for a log buffer that already displays the correct file.
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
504 (with-current-buffer log-buf
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
505 (and (eq backend log-view-vc-backend)
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
506 (null (cdr log-view-vc-fileset))
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
507 (string= (car log-view-vc-fileset) (cdr rev-at-line))
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
508 ;; Check if the entry we require can be found.
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
509 (vc-call-backend
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
510 backend 'show-log-entry (car rev-at-line))
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
511 (setq pos (point)))))
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
512 (progn
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
513 (pop-to-buffer log-buf)
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
514 (goto-char pos))
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
515 ;; Ask the backend to display a single log entry.
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
516 (vc-print-log-internal
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
517 vc-annotate-backend (list (cdr rev-at-line))
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
518 (car rev-at-line) t 1)))))))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
519
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
520 (defun vc-annotate-show-diff-revision-at-line-internal (filediff)
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
521 (if (not (equal major-mode 'vc-annotate-mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
522 (message "Cannot be invoked outside of a vc annotate buffer")
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
523 (let* ((rev-at-line (vc-annotate-extract-revision-at-line))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
524 (prev-rev nil)
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
525 (rev (car rev-at-line))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
526 (fname (cdr rev-at-line)))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
527 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
528 (message "Cannot extract revision number from the current line")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
529 (setq prev-rev
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
530 (vc-call-backend vc-annotate-backend 'previous-revision
109253
a41a9e7bfad8 Fix vc-annotate-show-changeset-diff-revision-at-line for git.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109252
diff changeset
531 (if filediff fname nil) rev))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
532 (if (not prev-rev)
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
533 (message "Cannot diff from any revision prior to %s" rev)
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
534 (save-window-excursion
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
535 (vc-diff-internal
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
536 nil
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
537 ;; The value passed here should follow what
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
538 ;; `vc-deduce-fileset' returns.
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
539 (list vc-annotate-backend
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
540 (if filediff
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
541 (list fname)
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
542 nil))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
543 prev-rev rev))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
544 (switch-to-buffer "*vc-diff*"))))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
545
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
546 (defun vc-annotate-show-diff-revision-at-line ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
547 "Visit the diff of the revision at line from its previous revision."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
548 (interactive)
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
549 (vc-annotate-show-diff-revision-at-line-internal t))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
550
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
551 (defun vc-annotate-show-changeset-diff-revision-at-line ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
552 "Visit the diff of the revision at line from its previous revision for all files in the changeset."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
553 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
554 (when (eq 'file (vc-call-backend vc-annotate-backend 'revision-granularity))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
555 (error "The %s backend does not support changeset diffs" vc-annotate-backend))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
556 (vc-annotate-show-diff-revision-at-line-internal nil))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
557
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
558 (defun vc-annotate-warp-revision (revspec &optional file)
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
559 "Annotate the revision described by REVSPEC.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
560
99841
fd7d46b20afe * allout.el (allout-mode): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 96517
diff changeset
561 If REVSPEC is a positive integer, warp that many revisions forward,
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
562 if possible, otherwise echo a warning message. If REVSPEC is a
99841
fd7d46b20afe * allout.el (allout-mode): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 96517
diff changeset
563 negative integer, warp that many revisions backward, if possible,
fd7d46b20afe * allout.el (allout-mode): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 96517
diff changeset
564 otherwise echo a warning message. If REVSPEC is a string, then it
fd7d46b20afe * allout.el (allout-mode): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 96517
diff changeset
565 describes a revision number, so warp to that revision."
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
566 (if (not (equal major-mode 'vc-annotate-mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
567 (message "Cannot be invoked outside of a vc annotate buffer")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
568 (let* ((buf (current-buffer))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
569 (oldline (line-number-at-pos))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
570 (revspeccopy revspec)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
571 (newrev nil))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
572 (cond
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
573 ((and (integerp revspec) (> revspec 0))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
574 (setq newrev vc-annotate-parent-rev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
575 (while (and (> revspec 0) newrev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
576 (setq newrev (vc-call-backend vc-annotate-backend 'next-revision
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
577 (or file vc-annotate-parent-file) newrev))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
578 (setq revspec (1- revspec)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
579 (unless newrev
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
580 (message "Cannot increment %d revisions from revision %s"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
581 revspeccopy vc-annotate-parent-rev)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
582 ((and (integerp revspec) (< revspec 0))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
583 (setq newrev vc-annotate-parent-rev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
584 (while (and (< revspec 0) newrev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
585 (setq newrev (vc-call-backend vc-annotate-backend 'previous-revision
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
586 (or file vc-annotate-parent-file) newrev))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
587 (setq revspec (1+ revspec)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
588 (unless newrev
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
589 (message "Cannot decrement %d revisions from revision %s"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
590 (- 0 revspeccopy) vc-annotate-parent-rev)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
591 ((stringp revspec) (setq newrev revspec))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
592 (t (error "Invalid argument to vc-annotate-warp-revision")))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
593 (when newrev
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
594 (vc-annotate (or file vc-annotate-parent-file) newrev
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
595 vc-annotate-parent-display-mode
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
596 buf
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
597 ;; Pass the current line so that vc-annotate will
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
598 ;; place the point in the line.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
599 (min oldline (progn (goto-char (point-max))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
600 (forward-line -1)
109254
827f21099a9d Fix annotating other revisions for renamed files in vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109253
diff changeset
601 (line-number-at-pos)))
827f21099a9d Fix annotating other revisions for renamed files in vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109253
diff changeset
602 vc-annotate-backend)))))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
603
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
604 (defun vc-annotate-compcar (threshold a-list)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
605 "Test successive cons cells of A-LIST against THRESHOLD.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
606 Return the first cons cell with a car that is not less than THRESHOLD,
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
607 nil if no such cell exists."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
608 (let ((i 1)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
609 (tmp-cons (car a-list)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
610 (while (and tmp-cons (< (car tmp-cons) threshold))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
611 (setq tmp-cons (car (nthcdr i a-list)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
612 (setq i (+ i 1)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
613 tmp-cons)) ; Return the appropriate value
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
614
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
615 (defun vc-annotate-convert-time (time)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
616 "Convert a time value to a floating-point number of days.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
617 The argument TIME is a list as returned by `current-time' or
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
618 `encode-time', only the first two elements of that list are considered."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
619 (/ (+ (* (float (car time)) (lsh 1 16)) (cadr time)) 24 3600))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
620
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
621 (defun vc-annotate-difference (&optional offset)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
622 "Return the time span in days to the next annotation.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
623 This calls the backend function annotate-time, and returns the
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
624 difference in days between the time returned and the current time,
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
625 or OFFSET if present."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
626 (let ((next-time (vc-annotate-get-time-set-line-props)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
627 (when next-time
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
628 (- (or offset
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
629 (vc-call-backend vc-annotate-backend 'annotate-current-time))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
630 next-time))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
631
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
632 (defun vc-default-annotate-current-time (backend)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
633 "Return the current time, encoded as fractional days."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
634 (vc-annotate-convert-time (current-time)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
635
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
636 (defvar vc-annotate-offset nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
637
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
638 (defun vc-annotate-display (ratio &optional offset)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
639 "Highlight `vc-annotate' output in the current buffer.
99841
fd7d46b20afe * allout.el (allout-mode): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 96517
diff changeset
640 RATIO is the expansion that should be applied to `vc-annotate-color-map'.
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
641 The annotations are relative to the current time, unless overridden by OFFSET."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
642 (when (/= ratio 1.0)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
643 (set (make-local-variable 'vc-annotate-color-map)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
644 (mapcar (lambda (elem) (cons (* (car elem) ratio) (cdr elem)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
645 vc-annotate-color-map)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
646 (set (make-local-variable 'vc-annotate-offset) offset)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
647 (font-lock-mode 1))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
648
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
649 (defun vc-annotate-lines (limit)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
650 (while (< (point) limit)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
651 (let ((difference (vc-annotate-difference vc-annotate-offset))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
652 (start (point))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
653 (end (progn (forward-line 1) (point))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
654 (when difference
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
655 (let* ((color (or (vc-annotate-compcar difference vc-annotate-color-map)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
656 (cons nil vc-annotate-very-old-color)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
657 ;; substring from index 1 to remove any leading `#' in the name
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
658 (face-name (concat "vc-annotate-face-"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
659 (if (string-equal
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
660 (substring (cdr color) 0 1) "#")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
661 (substring (cdr color) 1)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
662 (cdr color))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
663 ;; Make the face if not done.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
664 (face (or (intern-soft face-name)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
665 (let ((tmp-face (make-face (intern face-name))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
666 (set-face-foreground tmp-face (cdr color))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
667 (when vc-annotate-background
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
668 (set-face-background tmp-face
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
669 vc-annotate-background))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
670 tmp-face)))) ; Return the face
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
671 (put-text-property start end 'face face)))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
672 ;; Pretend to font-lock there were no matches.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
673 nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
674
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
675 (provide 'vc-annotate)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
676
96204
d4a46d5d6f08 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 96202
diff changeset
677 ;; arch-tag: c3454a89-80e5-4ffd-8993-671b59612898
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
678 ;;; vc-annotate.el ends here