(defun vc-dir-prepare-status-buffer (bname dir backend &optional create-new)
"Find a buffer named BNAME showing DIR, or create a new one."
- (setq dir (expand-file-name dir))
+ (setq dir (file-name-as-directory (expand-file-name dir)))
(let*
;; Look for another buffer name BNAME visiting the same directory.
((buf (save-excursion
'(menu-item "Register" vc-register
:help "Register file set into the version control system"))
map)
- "Menu for dispatcher status")
+ "Menu for VC dir")
;; VC backends can use this to add mode-specific menu items to
;; vc-dir-menu-map.
(define-key map "+" 'vc-update) ;; C-x v +
(define-key map "l" 'vc-print-log) ;; C-x v l
;; More confusing than helpful, probably
- ;;(define-key map "R" 'vc-revert) ;; u is taken by dispatcher unmark.
- ;;(define-key map "A" 'vc-annotate) ;; g is taken by dispatcher refresh
+ ;;(define-key map "R" 'vc-revert) ;; u is taken by vc-dir-unmark.
+ ;;(define-key map "A" 'vc-annotate) ;; g is taken by revert-buffer
+ ;; bound by `special-mode'.
;; Marking.
(define-key map "m" 'vc-dir-mark)
(define-key map "M" 'vc-dir-mark-all-files)
,@body))))
(defun vc-dir-menu (e)
- "Popup the dispatcher status menu."
+ "Popup the VC dir menu."
(interactive "e")
(vc-at-event e (popup-menu vc-dir-menu-map e)))
result)
(setq crt (ewoc-next vc-ewoc crt)))
(setq crt (ewoc-next vc-ewoc crt)))))
- result))
+ (nreverse result)))
(defun vc-dir-child-files-and-states ()
"Return the list of conses (FILE . STATE) for child files of the current entry if it's a directory.
(push
(cons (expand-file-name (vc-dir-fileinfo->name crt-data))
(vc-dir-fileinfo->state crt-data)) result))
- result))
+ (nreverse result)))
(defun vc-dir-recompute-file-state (fname def-dir)
(let* ((file-short (file-relative-name fname def-dir))
(defvar use-vc-backend) ;; dynamically bound
(define-derived-mode vc-dir-mode special-mode "VC dir"
- "Major mode for dispatcher directory buffers.
+ "Major mode for VC directory buffers.
Marking/Unmarking key bindings and actions:
m - marks a file/directory or if the region is active, mark all the files
in region.
- if the cursor is on a directory: unmark all child files
- with a prefix argument: unmark all files
+VC commands
+VC commands in the `C-x v' can be used, they act on the marked
+entries, or on the current entry if nothing is marked.
+
+Search & Replace
+S - searches the marked files
+Q - does a query replace on the marked files
+M-s a C-s - does an isearch on the marked files
+M-s a C-M-s - does a regexp isearch on the marked files
+If nothing is marked, these commands act on the current entry.
+When a directory is current or marked, the Search & Replace
+commands act on the files in those directories displayed in the
+*vc-dir* buffer.
\\{vc-dir-mode-map}"
(set (make-local-variable 'vc-dir-backend) use-vc-backend)
(let ((buffer-read-only nil))
(erase-buffer)
(set (make-local-variable 'vc-dir-process-buffer) nil)
- (set (make-local-variable 'vc-ewoc)
- (ewoc-create #'vc-dir-status-printer
- (vc-dir-headers vc-dir-backend default-directory)))
+ (set (make-local-variable 'vc-ewoc) (ewoc-create #'vc-dir-status-printer))
(set (make-local-variable 'revert-buffer-function)
'vc-dir-revert-buffer-function)
(set (make-local-variable 'list-buffers-directory)
(vc-dir-refresh-files
(mapcar 'vc-dir-fileinfo->name remaining)
'up-to-date)
- (setq mode-line-process nil))))))))))))
+ (setq mode-line-process nil)))))))))
+ (ewoc-set-hf vc-ewoc (vc-dir-headers backend def-dir) ""))))
(defun vc-dir-show-fileentry (file)
"Insert an entry for a specific file into the current *VC-dir* listing.
Interactively, a prefix argument means to ask for the backend."
(interactive
(list
- (read-file-name "VC status for directory: "
- default-directory default-directory t
- nil #'file-directory-p)
+ ;; When you hit C-x v d in a visited VC file,
+ ;; the *vc-dir* buffer visits the directory under its truename;
+ ;; therefore it makes sense to always do that.
+ ;; 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-file-name "VC status for directory: "
+ default-directory default-directory t
+ nil #'file-directory-p))
(if current-prefix-arg
(intern
(completing-read