]> git.eshelyaron.com Git - emacs.git/commitdiff
M-n in read-directory-name of vc commands gets project dirs (bug#41821)
authorJuri Linkov <juri@linkov.net>
Tue, 23 Jun 2020 23:59:31 +0000 (02:59 +0300)
committerJuri Linkov <juri@linkov.net>
Tue, 23 Jun 2020 23:59:31 +0000 (02:59 +0300)
* lisp/progmodes/project.el (project-known-roots): New autoloaded function.

* lisp/vc/vc-hooks.el (vc-known-roots): New function.

* lisp/vc/vc.el (vc-root-diff, vc-print-root-log):
* lisp/vc/vc-dir.el (vc-dir): Use 'vc-known-roots' for default
values for read-directory-name.

etc/NEWS
lisp/progmodes/project.el
lisp/vc/vc-dir.el
lisp/vc/vc-hooks.el
lisp/vc/vc.el

index 32ceec1d362db7426b8845b1e6a318f6db2d2375..6d42fd46c2aa715872a2163cc012f091923738f6 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -176,6 +176,9 @@ directories with the help of new command 'dired-vc-next-action'.
 *** More vc commands that don't change VC state can be used from non-file buffers.
 Such non-file buffers should have default-directory under vc.
 
+*** Typing 'M-n' in the minibuffer that asks for a vc directory in vc commands
+can retrieve directories of previously used vc projects.
+
 *** New command 'vc-dir-root' uses the root directory without asking.
 
 *** New commands 'vc-dir-mark-registered-files' (bound to '* r') and
index 2f213dab8b1b2dffc28f083d616c24bd74e04cad..42715dc9dcf5b36afcfea286920b3abe66874d9a 100644 (file)
@@ -935,6 +935,12 @@ It's also possible to enter an arbitrary directory not in the list."
         (read-directory-name "Select directory: " default-directory nil t)
       pr-dir)))
 
+;;;###autoload
+(defun project-known-roots ()
+  "Return a list of known project roots."
+  (project--ensure-read-project-list)
+  project--list)
+
 \f
 ;;; Project switching
 
index cdf8ab984e8697e7bc6d6374c59cdc3aa887f3bb..46be9b73801c2986b7b0454fc53cb2ff33cc6165 100644 (file)
@@ -1366,7 +1366,7 @@ These are the commands available for use in the file status buffer:
     ;; Otherwise if you do C-x v d -> C-x C-f -> C-x v d
     ;; you may get a new *vc-dir* buffer, different from the original
     (file-truename (read-directory-name "VC status for directory: "
-                                       (vc-root-dir) nil t
+                                       (vc-root-dir) (vc-known-roots) t
                                        nil))
     (if current-prefix-arg
        (intern
index ce72a49b955c39630663fb3121a9fa6a01d0a0e8..9675c364bb79f7f954415a3272b2b2e1f40cbdb0 100644 (file)
@@ -299,6 +299,11 @@ non-nil if FILE exists and its contents were successfully inserted."
     (set-buffer-modified-p nil)
     t))
 
+(declare-function project-try-vc "project")
+(defun vc-known-roots ()
+  "Return a list of known vc roots."
+  (seq-filter #'project-try-vc (mapcar #'car (project-known-roots))))
+
 (defun vc-find-root (file witness)
   "Find the root of a checked out project.
 The function walks up the directory tree from FILE looking for WITNESS.
index 65775f8e46edad37f445ff9c67e77f8e47354d45..49323ef47d2b3121d7b5bf9e8e80a1b4dc9e7044 100644 (file)
@@ -2001,7 +2001,8 @@ saving the buffer."
          rootdir working-revision)
       (if backend
          (setq rootdir (vc-call-backend backend 'root default-directory))
-       (setq rootdir (read-directory-name "Directory for VC root-diff: "))
+       (setq rootdir (read-directory-name "Directory for VC root-diff: "
+                                           nil (vc-known-roots)))
        (setq backend (vc-responsible-backend rootdir))
        (if backend
            (setq default-directory rootdir)
@@ -2545,7 +2546,8 @@ with its diffs (if the underlying VCS supports that)."
         rootdir)
     (if backend
        (setq rootdir (vc-call-backend backend 'root default-directory))
-      (setq rootdir (read-directory-name "Directory for VC revision log: "))
+      (setq rootdir (read-directory-name "Directory for VC revision log: "
+                                         nil (vc-known-roots)))
       (setq backend (vc-responsible-backend rootdir))
       (unless backend
         (error "Directory is not version controlled")))