]> code.delx.au - gnu-emacs/blobdiff - lisp/vc-dir.el
Fix typos in docstrings.
[gnu-emacs] / lisp / vc-dir.el
index c87366b8294d0feb3b4341a320a82636d7728e75..575a64c1f80fd366a025b2e75d33aa27414d2263 100644 (file)
@@ -1,6 +1,6 @@
 ;;; vc-dir.el --- Directory status display under VC
 
-;; Copyright (C) 2007, 2008, 2009
+;; Copyright (C) 2007, 2008, 2009, 2010
 ;;   Free Software Foundation, Inc.
 
 ;; Author:   Dan Nicolaescu <dann@ics.uci.edu>
@@ -89,19 +89,21 @@ See `run-hooks'."
 (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 (file-name-as-directory (expand-file-name dir)))
-  (let*
-        ;; Look for another buffer name BNAME visiting the same directory.
-        ((buf (save-excursion
-               (unless create-new
-                 (dolist (buffer (buffer-list))
-                   (set-buffer buffer)
-                   (when (and (derived-mode-p 'vc-dir-mode)
-                              (eq vc-dir-backend backend)
-                              (string= (expand-file-name default-directory) dir))
-                     (return buffer)))))))
+  (let* ;; Look for another buffer name BNAME visiting the same directory.
+      ((buf (save-excursion
+              (unless create-new
+                (dolist (buffer vc-dir-buffers)
+                  (when (buffer-live-p buffer)
+                    (set-buffer buffer)
+                    (when (and (derived-mode-p 'vc-dir-mode)
+                               (eq vc-dir-backend backend)
+                               (string= default-directory dir))
+                      (return buffer))))))))
     (or buf
         ;; Create a new buffer named BNAME.
-        (with-current-buffer (create-file-buffer bname)
+       ;; We pass a filename to create-file-buffer because it is what
+       ;; the function expects, and also what uniquify needs (if active)
+        (with-current-buffer (create-file-buffer (expand-file-name bname dir))
           (cd dir)
           (vc-setup-buffer (current-buffer))
           ;; Reset the vc-parent-buffer-name so that it does not appear
@@ -321,7 +323,7 @@ If BODY uses EVENT, it should be a variable,
 
 (defun vc-dir-node-directory (node)
   ;; Compute the directory for NODE.
-  ;; If it's a directory node, get it from the the node.
+  ;; If it's a directory node, get it from the node.
   (let ((data (ewoc-data node)))
     (or (vc-dir-fileinfo->directory data)
        ;; Otherwise compute it from the file name.
@@ -360,7 +362,7 @@ If NOINSERT, ignore elements on ENTRIES which are not in the ewoc."
       (unless node
        (ewoc-enter-last
         vc-ewoc (vc-dir-create-fileinfo
-                 dotname nil nil nil (expand-file-name default-directory)))
+                 dotname nil nil nil default-directory))
        (setq node (ewoc-nth vc-ewoc 0)))
 
       (while (and entry node)
@@ -849,7 +851,7 @@ If it is a file, return the corresponding cons for the file itself."
   ;; Update the entries for all the child files of DIRNAME shown in
   ;; the current *vc-dir* buffer.
   (let ((files (vc-dir-find-child-files dirname))
-       (ddir (expand-file-name default-directory))
+       (ddir default-directory)
        fileentries)
     (when files
       (dolist (crt files)
@@ -860,25 +862,25 @@ If it is a file, return the corresponding cons for the file itself."
 (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)))
-       (found-vc-dir-buf nil))
-    (save-excursion
-      (dolist (status-buf (buffer-list))
-       (set-buffer status-buf)
-       ;; look for a vc-dir buffer that might show this file.
-       (when (derived-mode-p 'vc-dir-mode)
-         (setq found-vc-dir-buf t)
-         (let ((ddir (expand-file-name default-directory)))
-           (when (vc-string-prefix-p ddir file)
-             (if (file-directory-p file)
-                 (vc-dir-resync-directory-files file)
-               (let ((state (vc-dir-recompute-file-state file ddir)))
-                 (vc-dir-update
-                  (list state)
-                  status-buf (eq (cadr state) 'up-to-date)))))))))
-    ;; We didn't find any vc-dir buffers, remove the hook, it is
-    ;; not needed.
-    (unless found-vc-dir-buf
-      (remove-hook 'after-save-hook 'vc-dir-resynch-file))))
+        (drop '()))
+    (save-current-buffer
+      ;; look for a vc-dir buffer that might show this file.
+      (dolist (status-buf vc-dir-buffers)
+        (if (not (buffer-live-p status-buf))
+            (push status-buf drop)
+          (set-buffer status-buf)
+          (if (not (derived-mode-p 'vc-dir-mode))
+              (push status-buf drop)
+            (let ((ddir default-directory))
+              (when (vc-string-prefix-p ddir file)
+                (if (file-directory-p file)
+                    (vc-dir-resync-directory-files file)
+                  (let ((state (vc-dir-recompute-file-state file ddir)))
+                    (vc-dir-update
+                     (list state)
+                     status-buf (eq (cadr state) 'up-to-date))))))))))
+    ;; Remove out-of-date entries from vc-dir-buffers.
+    (dolist (b drop) (setq vc-dir-buffers (delq b vc-dir-buffers)))))
 
 (defvar use-vc-backend)  ;; dynamically bound
 
@@ -928,9 +930,8 @@ the *vc-dir* buffer.
     (set (make-local-variable 'vc-ewoc) (ewoc-create #'vc-dir-printer))
     (set (make-local-variable 'revert-buffer-function)
         'vc-dir-revert-buffer-function)
-    (set (make-local-variable 'list-buffers-directory)
-         (expand-file-name default-directory))
-    (add-hook 'after-save-hook 'vc-dir-resynch-file)
+    (setq list-buffers-directory (expand-file-name "*vc-dir*" default-directory))
+    (add-to-list 'vc-dir-buffers (current-buffer))
     ;; Make sure that if the directory buffer is killed, the update
     ;; process running in the background is also killed.
     (add-hook 'kill-buffer-query-functions 'vc-dir-kill-query nil t)
@@ -1130,7 +1131,7 @@ Interactively, a prefix argument means to ask for the backend.
 
 These are the commands available for use in the file status buffer:
 
-\\<vc-dir-mode-map>"
+\\{vc-dir-mode-map}"
 
   (interactive
    (list