Function: treemacs--consolidate-projects
treemacs--consolidate-projects is a byte-compiled function defined in
treemacs-workspaces.el.
Signature
(treemacs--consolidate-projects)
Documentation
Correct treemacs buffers' content after the workspace was edited.
Source Code
;; Defined in ~/.emacs.d/elpa/treemacs-20251226.1307/treemacs-workspaces.el
(defun treemacs--consolidate-projects ()
"Correct treemacs buffers' content after the workspace was edited."
(treemacs--invalidate-buffer-project-cache)
(treemacs-run-in-every-buffer
(let* ((current-file (--when-let (treemacs-current-button) (treemacs--nearest-path it)))
(current-workspace (treemacs-current-workspace))
;; gather both the projects actually in the workspace ...
(projects-in-workspace (treemacs-workspace->projects current-workspace))
(projects-in-buffer)
(expanded-projects-in-buffer))
(goto-char 0)
;; ... as well as the projects currently shown in the buffer
(unless (s-blank? (buffer-string))
(push (treemacs-project-at-point) projects-in-buffer)
(let (next-pos)
(while (/= (point-max)
(setq next-pos (treemacs--next-project-pos)))
(goto-char next-pos)
(unless (treemacs-button-get (treemacs-current-button) :custom)
(push (treemacs-project-at-point) projects-in-buffer)))))
;; remember which ones are expanded, close them so the dom position can be rebuilt
(dolist (project-in-buffer projects-in-buffer)
(-let [project-btn (treemacs-project->position project-in-buffer)]
(when (eq 'root-node-open (treemacs-button-get project-btn :state))
(push project-in-buffer expanded-projects-in-buffer)
(goto-char project-btn)
(treemacs--collapse-root-node project-btn))))
;; figure out which ones have been deleted and and remove them from the dom
(dolist (project-in-buffer projects-in-buffer)
(unless (member project-in-buffer projects-in-workspace)
(treemacs-on-collapse (treemacs-project->path project-in-buffer) :purge)
(ht-remove! treemacs-dom (treemacs-project->path project-in-buffer))
(setf projects-in-buffer (delete project-in-buffer projects-in-buffer))))
(treemacs-with-writable-buffer
(treemacs--reset-dom)
;; delete everything's that's visible and render it again - the order of projects could
;; have been changed
(erase-buffer)
(treemacs--render-projects projects-in-workspace)
(goto-char 0)
;; re-expand the projects that were expanded before the consolidation
(let (next-pos)
(-let [btn (treemacs-current-button)]
(when (member (treemacs-button-get btn :project) expanded-projects-in-buffer)
(treemacs--expand-root-node btn)))
(while (/= (point-max)
(setq next-pos (treemacs--next-project-pos)))
(goto-char next-pos)
(-let [btn (treemacs-current-button)]
(when (member (treemacs-button-get btn :project) expanded-projects-in-buffer)
(treemacs--expand-root-node btn))))))
;; go back to the previous position
(if (and current-file
(treemacs-is-path current-file :in-workspace))
(treemacs-goto-file-node current-file)
(goto-char 0)
(treemacs--evade-image))
(hl-line-highlight))))