aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBozhidar Batsov <bozhidar@batsov.dev>2026-02-28 10:45:40 +0200
committerBozhidar Batsov <bozhidar@batsov.dev>2026-02-28 10:51:37 +0200
commite0eda06495826cbb9ada9ced4f304ee9caf1916f (patch)
treeacbd1291989f499ee5f63c7942ad7b1a57b8acc2
parentd249a8d3e07364776087df8f720e67007fb01b31 (diff)
Share truename cache across buffers in projectile-open-projects
Like projectile-project-buffers, pass a shared truename-cache hash table to projectile-project-buffer-p to avoid redundant file-truename calls when iterating over the buffer list.
-rw-r--r--projectile.el19
1 files changed, 10 insertions, 9 deletions
diff --git a/projectile.el b/projectile.el
index 5b2c84e..e7f84bf 100644
--- a/projectile.el
+++ b/projectile.el
@@ -5685,15 +5685,16 @@ directories."
(defun projectile-open-projects ()
"Return a list of all open projects.
An open project is a project with any open buffers."
- (seq-uniq
- ;; TODO: Replace delq+mapcar with seq-keep when Emacs 29.1 is the minimum version
- (delq nil
- (mapcar (lambda (buffer)
- (with-current-buffer buffer
- (when-let* ((project-root (projectile-project-root)))
- (when (projectile-project-buffer-p buffer project-root)
- (abbreviate-file-name project-root)))))
- (buffer-list)))))
+ (let ((truename-cache (make-hash-table :test 'equal)))
+ (seq-uniq
+ ;; TODO: Replace delq+mapcar with seq-keep when Emacs 29.1 is the minimum version
+ (delq nil
+ (mapcar (lambda (buffer)
+ (with-current-buffer buffer
+ (when-let* ((project-root (projectile-project-root)))
+ (when (projectile-project-buffer-p buffer project-root truename-cache)
+ (abbreviate-file-name project-root)))))
+ (buffer-list))))))
(defun projectile--remove-current-project (projects)
"Remove the current project (if any) from the list of PROJECTS."