Subject: bug#59935: 29.0.60; project-list-buffers is slow

From: Dmitry Gutov <[email-masked]>
Date: Sun, 11 Dec 2022 12:23:13 +0200

On 11/12/2022 08:19, Eli Zaretskii wrote:
>> Date: Sat, 10 Dec 2022 22:23:01 +0200
>> Cc: [email-masked], [email-masked]
>> From: Dmitry Gutov <[email-masked]>
>>
>> On 10/12/2022 22:11, Eli Zaretskii wrote:
>>> I see this in emacs-29:
>>>
>>>                (setq-local revert-buffer-function
>>>                            (lambda (&rest _ignored)
>>>                              (list-buffers--refresh (project-buffers pr))
>>>                              (tabulated-list-print t))))
>>>
>>> So I still don't understand your fears.
>>
>> That's the (version< emacs-version "29.0.50") branch.
> 
> Still unclear.  It almost looks like you don't _want_ me to
> understand.  A detailed explanation with code fragments would be much
> more effective.

I think I've explained everything, and we are now going in circles. Why 
not look at the definition yourself? It's 12 lines.

The function has two execution branches: one for the latest Emacs (at 
the moment), and one (the largest one) for older Emacsen.

The main problematic behavior (low performance) is exhibited by the 
"latest" branch, which looks like this:

   (let ((pr (project-current t)))
       (display-buffer
        (if (version< emacs-version "29.0.50")
            ;; ...
          (list-buffers-noselect
           arg nil (lambda (buf) (memq buf (project-buffers pr)))))))

> Anyway, I only entered this discussion because you asked about making
> some non-trivial changes on the release branch.  If that is no longer
> an issue, I will gladly bow out of this.

I expect Juri is going to argue for that later. For non-trivial changes 
in buff-menu.el, no less.