(defvar buffery-taxy
(cl-labels ((directory (buffer)
(buffer-local-value 'default-directory buffer))
(mode (buffer)
(prin1-to-string (buffer-local-value 'major-mode buffer)))
(project (buffer)
(with-current-buffer buffer
(when-let ((project (project-current)))
(project-root project))))
(specialp (buffer)
(when (not (buffer-file-name buffer))
"*special*"))
(make-fn (&rest args)
(apply #'make-taxy-magit-section
:make #'make-fn
:format-fn #'buffer-name
args)))
(make-fn
:name "Buffers"
:take (apply-partially #'taxy-take-keyed
(list (list #'project)
(list #'specialp)
#'directory #'mode)))))
Thanks for the good example. This is how the same
is achieved with 'Buffer-menu-group-by':
#+begin_src emacs-lisp
(setq Buffer-menu-group-by
(lambda (b)
(concat "* "
(or
(with-current-buffer (car b)
(when-let ((project (project-current)))
(project-root project)))
(when (not (buffer-file-name (car b)))
"*special*")
(buffer-local-value 'default-directory (car b))
(aref (cadr b) 5)))))
#+end_src