# HG changeset patch # User Dan Nicolaescu # Date 1206217930 0 # Node ID 4422d1ec58d7f0b97ba645ff396119dedc0fa33b # Parent 641cbad340a878a222e03abe914fcb891bfdb96b (vc-status-prepare-status-buffer): New function. (vc-status): Use it. diff -r 641cbad340a8 -r 4422d1ec58d7 lisp/ChangeLog --- a/lisp/ChangeLog Sat Mar 22 17:51:17 2008 +0000 +++ b/lisp/ChangeLog Sat Mar 22 20:32:10 2008 +0000 @@ -1,5 +1,8 @@ 2008-03-22 Dan Nicolaescu + * vc.el (vc-status-prepare-status-buffer): New function. + (vc-status): Use it. + * emacs-lisp/lisp-mode.el (emacs-lisp-mode-map): Add ... where appropriate. diff -r 641cbad340a8 -r 4422d1ec58d7 lisp/vc.el --- a/lisp/vc.el Sat Mar 22 17:51:17 2008 +0000 +++ b/lisp/vc.el Sat Mar 22 20:32:10 2008 +0000 @@ -2685,13 +2685,29 @@ ;; Must be in sync with vc-status-printer. (forward-char 25)) +(defun vc-status-prepare-status-buffer (dir &optional create-new) + "Find a *vc-status* buffer showing DIR, or create a new one." + (setq dir (expand-file-name dir)) + (let ((bname "*vc-status*")) + ;; Look for another *vc-status* buffer visiting the same directory. + (save-excursion + (unless create-new + (dolist (buffer (buffer-list)) + (set-buffer buffer) + (when (and (eq major-mode 'vc-status-mode) + (string= default-directory dir)) + (return buffer))))) + ;; Create a new *vc-status* buffer. + (with-current-buffer (create-file-buffer bname) + (cd dir) + (vc-setup-buffer (current-buffer)) + (current-buffer)))) + ;;;###autoload (defun vc-status (dir) "Show the VC status for DIR." (interactive "DVC status for directory: ") - (vc-setup-buffer "*vc-status*") - (switch-to-buffer "*vc-status*") - (cd dir) + (switch-to-buffer (vc-status-prepare-status-buffer dir)) (vc-status-mode)) (defvar vc-status-menu-map