From 20686f7a6430ef37f17b3866f14e7dc3095c1524 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Thu, 7 Apr 2016 02:02:13 +0300 Subject: [PATCH] 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. --- lisp/progmodes/project.el | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 1251bca2491..9c8a88c80fc 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -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" -- 2.39.5