Subject: Re: bug#69305: outline-minor-mode for tabulated-list-mode

From: Adam Porter <[email-masked]>
Date: Fri, 8 Mar 2024 17:13:52 -0600

Hi Juri,

On 3/6/24 11:37, Juri Linkov wrote:
>> (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

Please note that that does not produce the same result.  Your example 
produces one level of grouping.  Taxy, when used with `taxy-take-keyed', 
produces dynamically nested groups according to the list of key 
functions and their nesting.

The Taxy documentation describes these features extensively, with examples:

https://github.com/alphapapa/taxy.el#dynamic-taxys