]> git.eshelyaron.com Git - emacs.git/commitdiff
(vc-status-prepare-status-buffer): New function.
authorDan Nicolaescu <dann@ics.uci.edu>
Sat, 22 Mar 2008 20:32:10 +0000 (20:32 +0000)
committerDan Nicolaescu <dann@ics.uci.edu>
Sat, 22 Mar 2008 20:32:10 +0000 (20:32 +0000)
(vc-status): Use it.

lisp/ChangeLog
lisp/vc.el

index 9573f31e79033cdde7592cddc0fac00f0e669744..0cb6857f2501ff92f6f671eb1b1e527d9657775c 100644 (file)
@@ -1,5 +1,8 @@
 2008-03-22  Dan Nicolaescu  <dann@ics.uci.edu>
 
+       * 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.
 
index 81d45870e64a0f41b0be1be1cf0f375e1af1f8e5..c50b72f7d3f4d463b0e9c2f7c96e1ae8265048b4 100644 (file)
@@ -2685,13 +2685,29 @@ With prefix arg READ-SWITCHES, specify a value to override
   ;; 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