From e0eda06495826cbb9ada9ced4f304ee9caf1916f Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sat, 28 Feb 2026 10:45:40 +0200 Subject: 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. --- projectile.el | 19 ++++++++++--------- 1 file 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." -- cgit v1.0