emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/marginalia cfeae6dff1 1/2: Fix marginalia-annotate-proj


From: ELPA Syncer
Subject: [elpa] externals/marginalia cfeae6dff1 1/2: Fix marginalia-annotate-project-file
Date: Wed, 16 Feb 2022 19:57:40 -0500 (EST)

branch: externals/marginalia
commit cfeae6dff115dbc184a72e58f9ae994f614e443b
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Fix marginalia-annotate-project-file
---
 marginalia.el | 34 +++++++++++++++++++++++-----------
 1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/marginalia.el b/marginalia.el
index 547cd4491a..007f2e38c5 100644
--- a/marginalia.el
+++ b/marginalia.el
@@ -937,21 +937,33 @@ These annotations are skipped for remote paths."
       (marginalia--time-relative time)
     (marginalia--time-absolute time)))
 
-(defmacro marginalia--project-root ()
+(defvar-local marginalia--project-root 'unset)
+(defun marginalia--project-root ()
   "Return project root."
-  (require 'project)
-  `(when-let (proj (project-current))
-     ,(if (fboundp 'project-root)
-          '(project-root proj)
-        '(car (project-roots proj)))))
+  (with-current-buffer
+      (if-let (win (active-minibuffer-window))
+          (window-buffer win)
+        (current-buffer))
+    (when (eq marginalia--project-root 'unset)
+      (setq marginalia--project-root
+            (or (let ((prompt (minibuffer-prompt)))
+                  (and (string-match
+                        "\\`\\(?:Dired\\|Find file\\) in \\(.*\\): \\'"
+                        prompt)
+                       (match-string 1 prompt)))
+                (when-let (proj (project-current))
+                  (cond
+                   ((fboundp 'project-root) (project-root proj))
+                   ((fboundp 'project-roots) (car (project-roots proj))))))))
+    marginalia--project-root))
 
 (defun marginalia-annotate-project-file (cand)
   "Annotate file CAND with its size, modification time and other attributes."
-  ;; TODO project-find-file can be called from outside all projects in
-  ;; which case it prompts for a project first; we don't support that
-  ;; case yet, since there is no current project.
-  (when-let (root (marginalia--project-root))
-    (marginalia-annotate-file (expand-file-name cand root))))
+  ;; Absolute project directories also report project-file category
+  (if (file-name-absolute-p cand)
+      (marginalia-annotate-file cand)
+    (when-let (root (marginalia--project-root))
+      (marginalia-annotate-file (expand-file-name cand root)))))o
 
 (defvar-local marginalia--library-cache nil)
 (defun marginalia--library-cache ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]