;;; vc-dir.el --- Directory status display under VC -*- lexical-binding: t -*-
-;; Copyright (C) 2007-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2016 Free Software Foundation, Inc.
;; Author: Dan Nicolaescu <dann@ics.uci.edu>
;; Keywords: vc tools
(current-buffer)))))
(defvar vc-dir-menu-map
- (let ((map (make-sparse-keymap "VC-dir")))
+ (let ((map (make-sparse-keymap "VC-Dir")))
(define-key map [quit]
'(menu-item "Quit" quit-window
:help "Quit"))
(define-key map [ise]
'(menu-item "Isearch Files..." vc-dir-isearch
:help "Incremental search a string in the marked files"))
+ (define-key map [display]
+ '(menu-item "Display in Other Window" vc-dir-display-file
+ :help "Display the file on the current line, in another window"))
(define-key map [open-other]
'(menu-item "Open in Other Window" vc-dir-find-file-other-window
:help "Find the file on the current line, in another window"))
:help "List the change log for the current tree in a window"))
;; VC commands.
(define-key map [sepvccmd] '("--"))
+ (define-key map [push]
+ '(menu-item "Push Changes" vc-push
+ :enable (vc-find-backend-function vc-dir-backend 'push)
+ :help "Push the current branch's changes"))
(define-key map [update]
'(menu-item "Update to Latest Version" vc-update
:help "Update the current fileset's files to their tip revisions"))
(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 +
+ ;; I'd prefer some kind of symmetry with vc-update:
+ (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 " " 'vc-dir-next-line)
(define-key map "\t" 'vc-dir-next-directory)
(define-key map "p" 'vc-dir-previous-line)
+ (define-key map [?\S-\ ] 'vc-dir-previous-line)
(define-key map [backtab] 'vc-dir-previous-directory)
;;; Rebind paragraph-movement commands.
(define-key map "\M-}" 'vc-dir-next-directory)
(define-key map "e" 'vc-dir-find-file) ; dired-mode compatibility
(define-key map "\C-m" 'vc-dir-find-file)
(define-key map "o" 'vc-dir-find-file-other-window)
+ (define-key map "\C-o" 'vc-dir-display-file)
(define-key map "\C-c\C-c" 'vc-dir-kill-dir-status-process)
(define-key map [down-mouse-3] 'vc-dir-menu)
(define-key map [mouse-2] 'vc-dir-toggle-mark)
`(menu-item
;; VC backends can use this to add mode-specific menu items to
;; vc-dir-menu-map.
- "VC-dir" ,vc-dir-menu-map :filter vc-dir-menu-map-filter))
+ "VC-Dir" ,vc-dir-menu-map :filter vc-dir-menu-map-filter))
map)
"Keymap for directory buffer.")
(if event (posn-set-point (event-end event)))
(find-file-other-window (vc-dir-current-file)))
+(defun vc-dir-display-file (&optional event)
+ "Display the file on the current line, in another window."
+ (interactive (list last-nonmenu-event))
+ (if event (posn-set-point (event-end event)))
+ (display-buffer (find-file-noselect (vc-dir-current-file))
+ t))
+
(defun vc-dir-isearch ()
"Search for a string through all marked buffers using Isearch."
(interactive)
(defun vc-dir-resynch-file (&optional fname)
"Update the entries for FNAME in any directory buffers that list it."
- (let ((file (or fname (expand-file-name buffer-file-name)))
+ (let ((file (expand-file-name (or fname buffer-file-name)))
(drop '()))
(save-current-buffer
;; look for a vc-dir buffer that might show this file.
;; Otherwise if you do C-x v d -> C-x C-f -> C-c v d
;; you may get a new *vc-dir* buffer, different from the original
(file-truename (read-directory-name "VC status for directory: "
- default-directory default-directory t
+ (vc-root-dir) nil t
nil))
(if current-prefix-arg
(intern