annotate lisp/vc-annotate.el @ 108922:05ef9c0de767

* vc-mtn.el (log-edit-extract-headers): Declare function.
author Juanma Barranquero <lekktu@gmail.com>
date Wed, 09 Jun 2010 13:27:56 +0200
parents dc9565b08f10
children
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)
107374
dc9565b08f10 Add .dir-locals.el support for file-less buffers.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106988
diff changeset
165 '(vc-annotate-font-lock-keywords t))
dc9565b08f10 Add .dir-locals.el support for file-less buffers.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106988
diff changeset
166 (hack-dir-local-variables-non-file-buffer))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
167
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
168 (defun vc-annotate-toggle-annotation-visibility ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
169 "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
170 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
171 (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
172 'remove-from-invisibility-spec
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
173 'add-to-invisibility-spec)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
174 'vc-annotate-annotation)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
175 (force-window-update (current-buffer)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
176
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
177 (defun vc-annotate-display-default (ratio)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
178 "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
179 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
180 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
181 (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
182 (message "Redisplaying annotation...")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
183 (vc-annotate-display ratio)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
184 (message "Redisplaying annotation...done"))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
185
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
186 (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
187 "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
188 ;; 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
189 (caar (last color-map)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
190
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
191 (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
192 (let ((bol (point))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
193 (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
194 (inhibit-read-only t))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
195 (assert (>= (point) bol))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
196 (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
197 date))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
198
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
199 (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
200 "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
201 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
202 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
203 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
204 (interactive "P")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
205 (let ((newest 0.0)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
206 (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
207 (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
208 date)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
209 (message "Redisplaying annotation...")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
210 ;; 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
211 (save-excursion
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
212 (goto-char (point-min))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
213 (while (not (eobp))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
214 (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
215 (when (> date newest)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
216 (setq newest date))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
217 (when (< date oldest)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
218 (setq oldest date)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
219 (forward-line 1)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
220 (vc-annotate-display
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
221 (/ (- (if full newest current) oldest)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
222 (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
223 (if full newest))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
224 (message "Redisplaying annotation...done \(%s\)"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
225 (if full
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
226 (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
227 (- current oldest)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
228 (- current newest))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
229 (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
230
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
231 ;; Menu -- Using easymenu.el
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
232 (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
233 "VC Annotate Display Menu"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
234 `("VC-Annotate"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
235 ["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
236 (setq vc-annotate-display-mode nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
237 (vc-annotate-display-select))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
238 :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
239 ,@(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
240 (mapcar (lambda (element)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
241 (let ((days (* element oldest-in-map)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
242 `[,(format "Span %.1f days" days)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
243 (vc-annotate-display-select nil ,days)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
244 :style toggle :selected
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
245 (eql vc-annotate-display-mode ,days) ]))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
246 vc-annotate-menu-elements))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
247 ["Span ..."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
248 (vc-annotate-display-select
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
249 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
250 "--"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
251 ["Span to Oldest"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
252 (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
253 (vc-annotate-display-select nil 'scale))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
254 :help
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
255 "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
256 :style toggle :selected
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
257 (eq vc-annotate-display-mode 'scale)]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
258 ["Span Oldest->Newest"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
259 (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
260 (vc-annotate-display-select nil 'fullscale))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
261 :help
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
262 "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
263 :style toggle :selected
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
264 (eq vc-annotate-display-mode 'fullscale)]
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
265 "--"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
266 ["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
267 :help
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
268 "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
269 ["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
270 :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
271 ["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
272 :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
273 ["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
274 :help
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
275 "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
276 ["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
277 :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
278 ["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
279 :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
280 "--"
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
281 ["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
282 :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
283 ["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
284 :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
285 ["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
286 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
287 :enable
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
288 (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
289 :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
290 ["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
291 :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
292
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
293 (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
294 "Highlight the output of \\[vc-annotate].
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
295 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
296 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
297 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
298 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
299 (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
300 (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
301 (cond ((null vc-annotate-display-mode)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
302 ;; 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
303 (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
304 (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
305 ;; One of the auto-scaling modes
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
306 ((eq vc-annotate-display-mode 'scale)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
307 (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
308 ((eq vc-annotate-display-mode 'fullscale)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
309 (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
310 ((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
311 (vc-annotate-display-default
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
312 (/ vc-annotate-display-mode
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
313 (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
314 (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
315 vc-annotate-display-mode))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
316
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
317 ;;;###autoload
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
318 (defun vc-annotate (file rev &optional display-mode buf move-point-to)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
319 "Display the edit history of the current file using colors.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
320
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
321 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
322 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
323 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
324 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
325 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
326 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
327
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
328 With a prefix argument, this command asks two questions in the
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
329 minibuffer. First, you may enter a revision number; then the buffer
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
330 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
331 \(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
332 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
333 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
334 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
335 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
336
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
337 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
338
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
339 Customization variables:
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
340
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
341 `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
342 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
343 `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
344 `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
345 (interactive
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
346 (save-current-buffer
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
347 (vc-ensure-vc-buffer)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
348 (list buffer-file-name
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
349 (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
350 (if (null current-prefix-arg) def
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
351 (read-string
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
352 (format "Annotate from revision (default %s): " def)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
353 nil nil def)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
354 (if (null current-prefix-arg)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
355 vc-annotate-display-mode
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
356 (float (string-to-number
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
357 (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
358 nil nil "20")))))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
359 (vc-ensure-vc-buffer)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
360 (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
361 (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
362 (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
363 ;; 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
364 ;; 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
365 ;; 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
366 (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
367 (save-restriction
8e50ad0da4e8 (vc-annotate): Use widened line number (Bug#2612).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
368 (widen)
8e50ad0da4e8 (vc-annotate): Use widened line number (Bug#2612).
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
369 (line-number-at-pos))))))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
370 (message "Annotating...")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
371 ;; 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
372 ;; 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
373 ;; 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
374 (when buf (with-current-buffer buf
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
375 (rename-buffer temp-buffer-name t)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
376 ;; 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
377 (setq temp-buffer-name (buffer-name))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
378 (with-output-to-temp-buffer temp-buffer-name
104949
4fab4cdb3614 * vc-annotate.el (vc-annotate): Use the main file's coding-system to
Juanma Barranquero <lekktu@gmail.com>
parents: 102463
diff changeset
379 (let ((backend (vc-backend file))
4fab4cdb3614 * vc-annotate.el (vc-annotate): Use the main file's coding-system to
Juanma Barranquero <lekktu@gmail.com>
parents: 102463
diff changeset
380 (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
381 (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
382 (get-buffer temp-buffer-name) rev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
383 ;; 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
384 ;; 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
385 ;; with-output-to-temp-buffer
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
386 (with-current-buffer temp-buffer-name
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
387 (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
388 (vc-annotate-mode))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
389 (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
390 (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
391 (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
392 (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
393 display-mode))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
394
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
395 (with-current-buffer temp-buffer-name
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
396 (vc-exec-after
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
397 `(progn
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
398 ;; 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
399 ;; 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
400 ;; of the user's cursor :-(
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
401 (when ,current-line ;(and (bobp))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
402 (goto-line ,current-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
403 (setq vc-sentinel-movepoint (point)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
404 (unless (active-minibuffer-window)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
405 (message "Annotating... done")))))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
406
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
407 (defun vc-annotate-prev-revision (prefix)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
408 "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
409
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
410 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
411 revisions previous."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
412 (interactive "p")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
413 (vc-annotate-warp-revision (- 0 prefix)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
414
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
415 (defun vc-annotate-next-revision (prefix)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
416 "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
417
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
418 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
419 revisions after."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
420 (interactive "p")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
421 (vc-annotate-warp-revision prefix))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
422
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
423 (defun vc-annotate-working-revision ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
424 "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
425 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
426 (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
427 (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
428 (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
429 (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
430 (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
431 (vc-annotate-warp-revision warp-rev)))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
432
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
433 (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
434 "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
435 Return a cons (REV . FILENAME)."
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
436 ;; 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
437 (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
438 'annotate-extract-revision-at-line)))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
439 (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
440 rev
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
441 (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
442
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
443 (defun vc-annotate-revision-at-line ()
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
444 "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
445 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
446 (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
447 (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
448 (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
449 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
450 (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
451 (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
452 (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
453 (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
454 (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
455
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
456 (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
457 "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
458 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
459 (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
460 (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
461 (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
462 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
463 (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
464 (switch-to-buffer-other-window
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
465 (vc-find-revision (cdr rev-at-line) (car rev-at-line)))))))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
466
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
467 (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
468 "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
469 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
470 (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
471 (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
472 (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
473 (prev-rev nil)
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
474 (rev (car rev-at-line))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
475 (fname (cdr rev-at-line)))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
476 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
477 (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
478 (setq prev-rev
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
479 (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
480 fname rev))
106250
456620b3e939 (vc-annotate-revision-previous-to-line): Really use previous revision.
Johan Bockgård <bojohan@gnu.org>
parents: 106157
diff changeset
481 (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
482
106517
badae536951d (log-view-vc-backend, log-view-vc-fileset): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 106472
diff changeset
483 (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
484 (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
485
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
486 (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
487 "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
488 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
489 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
490 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
491 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
492 (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
493 (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
494 (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
495 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
496 (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
497 (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
498 (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
499 pos)
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
500 (if (and
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
501 log-buf
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
502 ;; 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
503 (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
504 (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
505 (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
506 (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
507 ;; 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
508 (vc-call-backend
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
509 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
510 (setq pos (point)))))
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
511 (progn
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
512 (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
513 (goto-char pos))
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
514 ;; 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
515 (vc-print-log-internal
6e0f1038bc44 Support showing a single log entry from vc-annotate.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106250
diff changeset
516 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
517 (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
518
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
519 (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
520 (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
521 (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
522 (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
523 (prev-rev nil)
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
524 (rev (car rev-at-line))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
525 (fname (cdr rev-at-line)))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
526 (if (not rev-at-line)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
527 (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
528 (setq prev-rev
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
529 (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
530 fname rev))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
531 (if (not prev-rev)
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
532 (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
533 (save-window-excursion
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
534 (vc-diff-internal
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
535 nil
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
536 ;; 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
537 ;; `vc-deduce-fileset' returns.
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
538 (list vc-annotate-backend
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
539 (if filediff
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
540 (list fname)
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
541 nil))
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
542 prev-rev rev))
96202
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
543 (switch-to-buffer "*vc-diff*"))))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
544
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
545 (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
546 "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
547 (interactive)
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
548 (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
549
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
550 (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
551 "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
552 (interactive)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
553 (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
554 (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
555 (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
556
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
557 (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
558 "Annotate the revision described by REVSPEC.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
559
99841
fd7d46b20afe * allout.el (allout-mode): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 96517
diff changeset
560 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
561 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
562 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
563 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
564 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
565 (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
566 (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
567 (let* ((buf (current-buffer))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
568 (oldline (line-number-at-pos))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
569 (revspeccopy revspec)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
570 (newrev nil))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
571 (cond
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
572 ((and (integerp revspec) (> revspec 0))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
573 (setq newrev vc-annotate-parent-rev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
574 (while (and (> revspec 0) newrev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
575 (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
576 (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
577 (setq revspec (1- revspec)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
578 (unless newrev
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
579 (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
580 revspeccopy vc-annotate-parent-rev)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
581 ((and (integerp revspec) (< revspec 0))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
582 (setq newrev vc-annotate-parent-rev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
583 (while (and (< revspec 0) newrev)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
584 (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
585 (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
586 (setq revspec (1+ revspec)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
587 (unless newrev
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
588 (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
589 (- 0 revspeccopy) vc-annotate-parent-rev)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
590 ((stringp revspec) (setq newrev revspec))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
591 (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
592 (when newrev
105670
6f463ea7a91a Make vc-annotate work through copies and renames.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104949
diff changeset
593 (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
594 vc-annotate-parent-display-mode
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
595 buf
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
596 ;; 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
597 ;; place the point in the line.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
598 (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
599 (forward-line -1)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
600 (line-number-at-pos))))))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
601
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
602 (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
603 "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
604 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
605 nil if no such cell exists."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
606 (let ((i 1)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
607 (tmp-cons (car a-list)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
608 (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
609 (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
610 (setq i (+ i 1)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
611 tmp-cons)) ; Return the appropriate value
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
612
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
613 (defun vc-annotate-convert-time (time)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
614 "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
615 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
616 `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
617 (/ (+ (* (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
618
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
619 (defun vc-annotate-difference (&optional offset)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
620 "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
621 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
622 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
623 or OFFSET if present."
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
624 (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
625 (when next-time
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
626 (- (or offset
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
627 (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
628 next-time))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
629
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
630 (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
631 "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
632 (vc-annotate-convert-time (current-time)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
633
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
634 (defvar vc-annotate-offset nil)
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 (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
637 "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
638 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
639 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
640 (when (/= ratio 1.0)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
641 (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
642 (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
643 vc-annotate-color-map)))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
644 (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
645 (font-lock-mode 1))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
646
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
647 (defun vc-annotate-lines (limit)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
648 (while (< (point) limit)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
649 (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
650 (start (point))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
651 (end (progn (forward-line 1) (point))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
652 (when difference
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
653 (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
654 (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
655 ;; 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
656 (face-name (concat "vc-annotate-face-"
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
657 (if (string-equal
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
658 (substring (cdr color) 0 1) "#")
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
659 (substring (cdr color) 1)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
660 (cdr color))))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
661 ;; Make the face if not done.
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
662 (face (or (intern-soft face-name)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
663 (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
664 (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
665 (when vc-annotate-background
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
666 (set-face-background tmp-face
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
667 vc-annotate-background))
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
668 tmp-face)))) ; Return the face
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
669 (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
670 ;; 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
671 nil)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
672
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
673 (provide 'vc-annotate)
2bd68cb03fe1 * vc.el: Move vc-annotate variables and functions ...
Dan Nicolaescu <dann@ics.uci.edu>
parents:
diff changeset
674
96204
d4a46d5d6f08 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 96202
diff changeset
675 ;; 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
676 ;;; vc-annotate.el ends here