M-n in read-directory-name of vc commands gets project dirs (bug#41821)
* 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.
This commit is contained in:
parent
4e04ca847f
commit
bfd96e995d
5 changed files with 19 additions and 3 deletions
3
etc/NEWS
3
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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
;;; Project switching
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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")))
|
||||
|
|
Loading…
Add table
Reference in a new issue