Subject: bug#50344: C-x v keybinding for vc-print-branch-log

From: Juri Linkov <[email-masked]>
Date: Thu, 02 Sep 2021 21:43:13 +0300

While vc-print-branch-log is a frequently used command, it still has no
keybinding in vc-prefix-map.  But it has a keybinding in vc-dir-mode-map.
Many keys are already shared between vc-prefix-map and vc-dir-mode-map, e.g.:

  (defvar vc-dir-mode-map
    ;; VC commands
    (define-key map "v" #'vc-next-action)   ;; C-x v v
    (define-key map "=" #'vc-diff)	   ;; C-x v =
    (define-key map "D" #'vc-root-diff)	   ;; C-x v D
    (define-key map "i" #'vc-register)	   ;; C-x v i
    (define-key map "+" #'vc-update)	   ;; C-x v +
    (define-key map "P" #'vc-push)	   ;; C-x v P
    (define-key map "l" #'vc-print-log)	   ;; C-x v l
    (define-key map "L" #'vc-print-root-log) ;; C-x v L
    (define-key map "I" #'vc-log-incoming)   ;; C-x v I
    (define-key map "O" #'vc-log-outgoing)   ;; C-x v O

Also vc-dir-mode-map has branch keys:

    (let ((branch-map (make-sparse-keymap)))
      (define-key map "B" branch-map)
      (define-key branch-map "c" #'vc-create-tag)
      (define-key branch-map "l" #'vc-print-branch-log)
      (define-key branch-map "s" #'vc-retrieve-tag))

So it makes sense to copy branch keys from vc-dir-mode-map
to vc-prefix-map:

diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el
index 4b3c829a2c..d039c400c5 100644
--- a/lisp/vc/vc-hooks.el
+++ b/lisp/vc/vc-hooks.el
@@ -865,6 +865,9 @@ vc-prefix-map
   (let ((map (make-sparse-keymap)))
     (define-key map "a" #'vc-update-change-log)
     (define-key map "b" #'vc-switch-backend)
+    (define-key map "Bc" #'vc-create-tag)
+    (define-key map "Bl" #'vc-print-branch-log)
+    (define-key map "Bs" #'vc-retrieve-tag)
     (define-key map "d" #'vc-dir)
     (define-key map "g" #'vc-annotate)
     (define-key map "G" #'vc-ignore)