Add a `transient' project type
* lisp/progmodes/project.el (project-roots): Implement for the `transient' project type (bug#23224). (project-current): Instead of signaling an error, return a transient project instance rooted in the chosen directory.
This commit is contained in:
parent
0d7aad1b30
commit
20686f7a64
1 changed files with 8 additions and 2 deletions
|
@ -101,7 +101,9 @@ that it is not applicable, or a project instance.")
|
|||
(defun project-current (&optional maybe-prompt dir)
|
||||
"Return the project instance in DIR or `default-directory'.
|
||||
When no project found in DIR, and MAYBE-PROMPT is non-nil, ask
|
||||
the user for a different directory to look in."
|
||||
the user for a different directory to look in. If that directory
|
||||
is not a part of a detectable project either, return a
|
||||
`transient' project instance rooted in it."
|
||||
(unless dir (setq dir default-directory))
|
||||
(let ((pr (project--find-in-directory dir)))
|
||||
(cond
|
||||
|
@ -110,7 +112,8 @@ the user for a different directory to look in."
|
|||
(setq dir (read-directory-name "Choose the project directory: " dir nil t)
|
||||
pr (project--find-in-directory dir))
|
||||
(unless pr
|
||||
(user-error "No project found in `%s'" dir))))
|
||||
(message "Using '%s' as a transient project root" dir)
|
||||
(setq pr (cons 'transient dir)))))
|
||||
pr))
|
||||
|
||||
(defun project--find-in-directory (dir)
|
||||
|
@ -182,6 +185,9 @@ to find the list of ignores for each directory."
|
|||
(t
|
||||
(complete-with-action action all-files string pred))))))
|
||||
|
||||
(cl-defmethod project-roots ((project (head transient)))
|
||||
(list (cdr project)))
|
||||
|
||||
(defgroup project-vc nil
|
||||
"Project implementation using the VC package."
|
||||
:version "25.1"
|
||||
|
|
Loading…
Add table
Reference in a new issue