diff options
Diffstat (limited to 'lisp/vc/vc-dir.el')
-rw-r--r-- | lisp/vc/vc-dir.el | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el index be3b1fa94b5..c90bf1c2343 100644 --- a/lisp/vc/vc-dir.el +++ b/lisp/vc/vc-dir.el @@ -169,6 +169,9 @@ See `run-hooks'." (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")) @@ -273,6 +276,7 @@ See `run-hooks'." (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) @@ -755,6 +759,13 @@ that share the same state." (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) @@ -1014,7 +1025,7 @@ specific headers." (vc-call-backend backend 'dir-extra-headers dir) "\n")) -(defun vc-dir-refresh-files (files default-state) +(defun vc-dir-refresh-files (files) "Refresh some files in the *VC-dir* buffer." (let ((def-dir default-directory) (backend vc-dir-backend)) @@ -1032,7 +1043,7 @@ specific headers." (setq default-directory def-dir) (erase-buffer) (vc-call-backend - backend 'dir-status-files def-dir files default-state + backend 'dir-status-files def-dir files (lambda (entries &optional more-to-come) ;; ENTRIES is a list of (FILE VC_STATE EXTRA) items. ;; If MORE-TO-COME is true, then more updates will come from @@ -1097,7 +1108,7 @@ Throw an error if another update process is in progress." (setq default-directory def-dir) (erase-buffer) (vc-call-backend - backend 'dir-status def-dir + backend 'dir-status-files def-dir nil (lambda (entries &optional more-to-come) ;; ENTRIES is a list of (FILE VC_STATE EXTRA) items. ;; If MORE-TO-COME is true, then more updates will come from @@ -1110,8 +1121,7 @@ Throw an error if another update process is in progress." vc-ewoc 'vc-dir-fileinfo->needs-update))) (if remaining (vc-dir-refresh-files - (mapcar 'vc-dir-fileinfo->name remaining) - 'up-to-date) + (mapcar 'vc-dir-fileinfo->name remaining)) (setq mode-line-process nil)))))))))))) (defun vc-dir-show-fileentry (file) @@ -1125,18 +1135,18 @@ outside of VC) and one wants to do some operation on it." "Hide items that are in STATE from display. See `vc-state' for valid values of STATE. -If STATE is nil, default it to up-to-date. +If STATE is nil, hide both `up-to-date' and `ignored' items. Interactively, if `current-prefix-arg' is non-nil, set STATE to -state of item at point. Otherwise, set STATE to up-to-date." +state of item at point, if any." (interactive (list (and current-prefix-arg ;; Command is prefixed. Infer STATE from point. (let ((node (ewoc-locate vc-ewoc))) (and node (vc-dir-fileinfo->state (ewoc-data node))))))) - ;; If STATE is un-specified, use up-to-date. - (setq state (or state 'up-to-date)) - (message "Hiding items in state \"%s\"" state) + (if state + (message "Hiding items in state \"%s\"" state) + (message "Hiding up-to-date and ignored items")) (let ((crt (ewoc-nth vc-ewoc -1)) (first (ewoc-nth vc-ewoc 0))) ;; Go over from the last item to the first and remove the @@ -1157,8 +1167,10 @@ state of item at point. Otherwise, set STATE to up-to-date." ;; Next item is a directory. (vc-dir-fileinfo->directory (ewoc-data next)))) ;; Remove files in specified STATE. STATE can be a - ;; symbol or a user-name. - (equal (vc-dir-fileinfo->state data) state)) + ;; symbol, a user-name, or nil. + (if state + (equal (vc-dir-fileinfo->state data) state) + (memq (vc-dir-fileinfo->state data) '(up-to-date ignored)))) (ewoc-delete vc-ewoc crt)) (setq crt prev))))) |