From a9f974d04d19826e96e8e0d4c28142b655a52eb1 Mon Sep 17 00:00:00 2001 From: Eshel Yaron Date: Mon, 17 Feb 2025 09:24:56 +0100 Subject: [PATCH] (project-forget-projects-under): Improve minibuffer action feedback --- lisp/progmodes/project.el | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index b015387cfd7..8656c20bf26 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -1872,6 +1872,12 @@ With some possible metadata (to be decided).") (current-buffer))) (write-region nil nil filename nil 'silent)))) +(defvar project--roots-cache nil) + +(defsubst project--update-roots-cache () + (setq project--roots-cache + (mapcar (compose #'expand-file-name #'car) project--list))) + (defun project--remember-dir (root &optional no-write) "Add project root ROOT to the front of the project list. Save the result in `project-list-file' if the list of projects @@ -1883,6 +1889,7 @@ has changed, and NO-WRITE is nil." (when (equal dir (car ent)) (setq project--list (delq ent project--list)))) (push (list dir) project--list) + (project--update-roots-cache) (unless no-write (project--write-project-list))))) @@ -1902,6 +1909,7 @@ passed to `message' as its first argument." (project--ensure-read-project-list) (when-let ((ent (assoc (abbreviate-file-name project-root) project--list))) (setq project--list (delq ent project--list)) + (project--update-roots-cache) (message report-message project-root) (project--write-project-list))) @@ -2082,14 +2090,10 @@ Return the number of detected projects." (defun project-read-ancestor-directory (prompt) "Prompt with PROMPT for an ancestor directory of one or more project roots." (project--ensure-read-project-list) + (project--update-roots-cache) (read-directory-name prompt nil nil nil nil - (let ((ps (mapcar (lambda (p) (expand-file-name (car p))) project--list))) - (lambda (dir) - (catch 'ball - (dolist (p ps) - (when (string-prefix-p (expand-file-name dir) p) - (throw 'ball t)))))))) + (lambda (dir) (try-completion (expand-file-name dir) project--roots-cache)))) (defun project-forget-projects-under (dir &optional recursive) "Forget all known projects below a directory DIR. @@ -2121,10 +2125,7 @@ Return the number of forgotten projects." count)) count)) -(put 'project-forget-projects-under 'minibuffer-action - ;; TODO: Respect prefix arg. - ;; TODO: Update completion predicate for live feedback. - "forget") +(put 'project-forget-projects-under 'minibuffer-action "forget") ;;; Project switching -- 2.39.5