Subject: bug#47287: 28.0.50; [PATCH] Add command project-remove-known-project

From: Theodor Thornhill <[email-masked]>
Date: Mon, 22 Mar 2021 08:48:47 +0100

Hi,
> It's fine, but it would be better for both function's argument to follow 
> projectile-add-known-project (meaning, call it 'project-root').

See attached patch.

>
> Regarding report-message, I figured it would just be a separate 
> 'message' call in both caller functions. Apparently that might to this 
> message appearing more often (due to the requested project not actually 
> appearing in project--list?), but I wonder if we shouldn't replace that 
> when-let with a presence assertion instead.

Yeah, we could do that. However, the nice thing now is at least that the
behavior is bundled together, so we don't need to remember to
report. Not sure what is best :)

>
> Anyway, the latter is not a big deal; project--remove-from-project-list 
> can be changed at any time later.

Sure! Do the manual later, or now?

--
Theo

>From 78f9aea9d96373721e2590cd79eef360bbc93f0d Mon Sep 17 00:00:00 2001
From: Theodor Thornhill <[email-masked]>
Date: Mon, 22 Mar 2021 00:19:23 +0100
Subject: [PATCH] Add command project-remove-known-project

* etc/NEWS: Mention the new command.

* lisp/progmodes/project.el (project--remove-from-project-list): Add
new argument, report-message, used to signal various messages when
removal has happened.

* lisp/progmodes/project.el (project-remove-known-project): New
command that removes the selected directory from the project-list-file.

* lisp/progmodes/project.el (project-current): Add the report message.
---
 etc/NEWS                  |  4 ++++
 lisp/progmodes/project.el | 22 ++++++++++++++++------
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 49a4bb8106..abe7107f12 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1573,6 +1573,10 @@ project's root directory, respectively.
 +++
 *** New user option 'project-list-file'.
 
+*** New command 'project-remove-known-project'.
+This command lets you interactively remove an entry from the list of projects
+in 'project-list-file'
+
 ** xref
 
 ---
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index b6a886f731..d76bcbbe96 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -201,7 +201,8 @@ of the project instance object."
     (when maybe-prompt
       (if pr
           (project-remember-project pr)
-        (project--remove-from-project-list directory)
+        (project--remove-from-project-list
+         directory "Project `%s' not found; removed from list")
         (setq pr (cons 'transient directory))))
     pr))
 
@@ -1217,17 +1218,26 @@ Save the result in `project-list-file' if the list of projects has changed."
       (push (list dir) project--list)
       (project--write-project-list))))
 
-(defun project--remove-from-project-list (pr-dir)
-  "Remove directory PR-DIR of a missing project from the project list.
+(defun project--remove-from-project-list (project-root report-message)
+  "Remove directory PROJECT-ROOT of a missing project from the project list.
 If the directory was in the list before the removal, save the
 result in `project-list-file'.  Announce the project's removal
-from the list."
+from the list using REPORT-MESSAGE."
   (project--ensure-read-project-list)
-  (when-let ((ent (assoc pr-dir project--list)))
+  (when-let ((ent (assoc project-root project--list)))
     (setq project--list (delq ent project--list))
-    (message "Project `%s' not found; removed from list" pr-dir)
+    (message report-message project-root)
     (project--write-project-list)))
 
+;;;###autoload
+(defun project-remove-known-project (project-root)
+  "Remove directory PROJECT-ROOT from the project list.
+PROJECT-ROOT is the root directory of a known project listed in
+the project list."
+  (interactive (list (project-prompt-project-dir)))
+  (project--remove-from-project-list
+   dir "Project `%s' removed from known projects"))
+
 (defun project-prompt-project-dir ()
   "Prompt the user for a directory that is one of the known project roots.
 The project is chosen among projects known from the project list,
-- 
2.24.3 (Apple Git-128)