* vc-arch.el (vc-arch-extra-menu-map): New var and fun.

* vc-hooks.el (vc-menu-entry): New var.
(vc-mode-line-map): Use it so that this menu also uses the extra-menu.
(menu-bar-tools-menu): Add the VC menu here rather than in menu-bar.el.
(vc-menu-map): Declare and initialize in one step.

* menu-bar.el (vc-menu-map): Don't setup any more.
Instead, just create the proper spot in the menu.

* vc.el: Document new VC operation `extra-menu'.

* vc-hooks.el (vc-default-extra-menu, vc-menu-map-filter): New
function.
This commit is contained in:
Dan Nicolaescu 2007-09-18 01:28:25 +00:00
parent 7262a148b6
commit 793a22023e
5 changed files with 102 additions and 33 deletions

View file

@ -1,3 +1,23 @@
2007-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
* vc-arch.el (vc-arch-extra-menu-map): New var and fun.
* vc-hooks.el (vc-menu-entry): New var.
(vc-mode-line-map): Use it so that this menu also uses the extra-menu.
(menu-bar-tools-menu): Add the VC menu here rather than in menu-bar.el.
(vc-menu-map): Declare and initialize in one step.
* menu-bar.el (vc-menu-map): Don't setup any more.
Instead, just create the proper spot in the menu.
2007-09-18 Dan Nicolaescu <dann@ics.uci.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
* vc.el: Document new VC operation `extra-menu'.
* vc-hooks.el (vc-default-extra-menu, vc-menu-map-filter): New
function.
2007-09-17 Dan Nicolaescu <dann@ics.uci.edu>
* vc-git.el (vc-git-log-view-mode): Add font-lock patterns for

View file

@ -1160,11 +1160,9 @@ mail status in mode line"))
(define-key menu-bar-tools-menu [separator-vc]
'("--"))
(defvar vc-menu-map (make-sparse-keymap "Version Control"))
(define-key menu-bar-tools-menu [pcl-cvs]
'(menu-item "PCL-CVS" cvs-global-menu))
(define-key menu-bar-tools-menu [vc]
(list 'menu-item "Version Control" vc-menu-map))
(define-key menu-bar-tools-menu [vc] nil) ;Create the place for the VC menu.
(define-key menu-bar-tools-menu [separator-compare]
'("--"))

View file

@ -444,6 +444,15 @@ Return non-nil if FILE is unchanged."
(table (vc-arch--version-completion-table root string)))
(complete-with-action action table string pred)))))
(defvar vc-arch-extra-menu-map
(let ((map (make-sparse-keymap)))
(define-key map [add-tagline]
'(menu-item "Add tagline" vc-arch-add-tagline))
map))
(defun vc-arch-extra-menu () vc-arch-extra-menu-map)
;;; Less obvious implementations.
(defun vc-arch-find-version (file rev buffer)

View file

@ -707,6 +707,21 @@ Before doing that, check if there are any old backups and get rid of them."
;; any VC Dired buffer to synchronize.
(vc-dired-resynch-file file)))))
(defvar vc-menu-entry
'(menu-item "Version Control" vc-menu-map
:filter vc-menu-map-filter))
(when (boundp 'menu-bar-tools-menu)
;; We do not need to worry here about the placement of this entry
;; because menu-bar.el has already created the proper spot for us
;; and this will simply use it.
(define-key menu-bar-tools-menu [vc] vc-menu-entry))
(defconst vc-mode-line-map
(let ((map (make-sparse-keymap)))
(define-key map [mode-line down-mouse-1] vc-menu-entry)
map))
(defun vc-mode-line (file)
"Set `vc-mode' to display type of version control for FILE.
The value is set in the current buffer, which should be the buffer
@ -880,36 +895,54 @@ Used in `find-file-not-found-functions'."
(fset 'vc-prefix-map vc-prefix-map)
(define-key global-map "\C-xv" 'vc-prefix-map)
(if (not (boundp 'vc-menu-map))
;; Don't do the menu bindings if menu-bar.el wasn't loaded to defvar
;; vc-menu-map.
()
;;(define-key vc-menu-map [show-files]
;; '("Show Files under VC" . (vc-directory t)))
(define-key vc-menu-map [vc-retrieve-snapshot]
'("Retrieve Snapshot" . vc-retrieve-snapshot))
(define-key vc-menu-map [vc-create-snapshot]
'("Create Snapshot" . vc-create-snapshot))
(define-key vc-menu-map [vc-directory] '("VC Directory Listing" . vc-directory))
(define-key vc-menu-map [separator1] '("----"))
(define-key vc-menu-map [vc-annotate] '("Annotate" . vc-annotate))
(define-key vc-menu-map [vc-rename-file] '("Rename File" . vc-rename-file))
(define-key vc-menu-map [vc-version-other-window]
'("Show Other Version" . vc-version-other-window))
(define-key vc-menu-map [vc-diff] '("Compare with Base Version" . vc-diff))
(define-key vc-menu-map [vc-update-change-log]
'("Update ChangeLog" . vc-update-change-log))
(define-key vc-menu-map [vc-print-log] '("Show History" . vc-print-log))
(define-key vc-menu-map [separator2] '("----"))
(define-key vc-menu-map [vc-insert-header]
'("Insert Header" . vc-insert-headers))
(define-key vc-menu-map [undo] '("Undo Last Check-In" . vc-cancel-version))
(define-key vc-menu-map [vc-revert-buffer]
'("Revert to Base Version" . vc-revert-buffer))
(define-key vc-menu-map [vc-update]
'("Update to Latest Version" . vc-update))
(define-key vc-menu-map [vc-next-action] '("Check In/Out" . vc-next-action))
(define-key vc-menu-map [vc-register] '("Register" . vc-register)))
(defvar vc-menu-map
(let ((map (make-sparse-keymap "Version Control")))
;;(define-key map [show-files]
;; '("Show Files under VC" . (vc-directory t)))
(define-key map [vc-retrieve-snapshot]
'("Retrieve Snapshot" . vc-retrieve-snapshot))
(define-key map [vc-create-snapshot]
'("Create Snapshot" . vc-create-snapshot))
(define-key map [vc-directory] '("VC Directory Listing" . vc-directory))
(define-key map [separator1] '("----"))
(define-key map [vc-annotate] '("Annotate" . vc-annotate))
(define-key map [vc-rename-file] '("Rename File" . vc-rename-file))
(define-key map [vc-version-other-window]
'("Show Other Version" . vc-version-other-window))
(define-key map [vc-diff] '("Compare with Base Version" . vc-diff))
(define-key map [vc-update-change-log]
'("Update ChangeLog" . vc-update-change-log))
(define-key map [vc-print-log] '("Show History" . vc-print-log))
(define-key map [separator2] '("----"))
(define-key map [vc-insert-header]
'("Insert Header" . vc-insert-headers))
(define-key map [undo] '("Undo Last Check-In" . vc-cancel-version))
(define-key map [vc-revert-buffer]
'("Revert to Base Version" . vc-revert-buffer))
(define-key map [vc-update]
'("Update to Latest Version" . vc-update))
(define-key map [vc-next-action] '("Check In/Out" . vc-next-action))
(define-key map [vc-register] '("Register" . vc-register))
map))
(defalias 'vc-menu-map vc-menu-map)
(defun vc-menu-map-filter (orig-binding)
(if (and (symbolp orig-binding) (fboundp orig-binding))
(setq orig-binding (indirect-function orig-binding)))
(let ((ext-binding
(if vc-mode (vc-call-backend (vc-backend buffer-file-name)
'extra-menu))))
;; Give the VC backend a chance to add menu entries
;; specific for that backend.
(if (null ext-binding)
orig-binding
(append orig-binding
'((ext-menu-separator "---"))
ext-binding))))
(defun vc-default-extra-menu (backend)
nil)
;; These are not correct and it's not currently clear how doing it
;; better (with more complicated expressions) might slow things down

View file

@ -463,6 +463,15 @@
;;
;; Operation called in current buffer when opening a non-existing file.
;; By default, this asks the user if she wants to check out the file.
;;
;; - extra-menu ()
;;
;; Return a menu keymap, the items in the keymap will appear at the
;; end of the Version Control menu. The goal is to allow backends
;; to specify extra menu items that appear in the VC menu. This way
;; you can provide menu entries for functionality that is specific
;; to your backend and which does not map to any of the VC generic
;; concepts.
;;; Code: