From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#69305: outline-minor-mode for tabulated-list-mode Date: Thu, 29 Feb 2024 09:45:00 +0200 Organization: LINKOV.NET Message-ID: <8634tbn2or.fsf@mail.linkov.net> References: <86msrtvi06.fsf@mail.linkov.net> <86frxlmy1d.fsf@gnu.org> <86cyspt02f.fsf@mail.linkov.net> <861q94nc4j.fsf@gnu.org> <867ciws983.fsf@mail.linkov.net> <86plwo1fii.fsf@gnu.org> <86il2fwuc8.fsf@mail.linkov.net> <86edd31tv5.fsf@gnu.org> <86jzmtda1y.fsf@mail.linkov.net> <86sf1hybm3.fsf@gnu.org> <86msrpx91u.fsf@mail.linkov.net> <86frxgwdzk.fsf@gnu.org> <86jzmqgxvg.fsf@mail.linkov.net> <861q8yux46.fsf@gnu.org> <86plwhg5o5.fsf@mail.linkov.net> <86le75u4pz.fsf@gnu.org> <86msrlxcox.fsf@mail.linkov.net> <864jdsu6ld.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34938"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/30.0.50 (x86_64-pc-linux-gnu) Cc: 69305@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Feb 29 08:56:03 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rfbGt-0008t8-Br for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 29 Feb 2024 08:56:03 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rfbGX-0008Fj-2B; Thu, 29 Feb 2024 02:55:41 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rfbGR-0008EL-ST for bug-gnu-emacs@gnu.org; Thu, 29 Feb 2024 02:55:36 -0500 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rfbGQ-0000XP-U3 for bug-gnu-emacs@gnu.org; Thu, 29 Feb 2024 02:55:35 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rfbGr-0006Qb-IM for bug-gnu-emacs@gnu.org; Thu, 29 Feb 2024 02:56:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 29 Feb 2024 07:56:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 69305 X-GNU-PR-Package: emacs Original-Received: via spool by 69305-submit@debbugs.gnu.org id=B69305.170919332924633 (code B ref 69305); Thu, 29 Feb 2024 07:56:01 +0000 Original-Received: (at 69305) by debbugs.gnu.org; 29 Feb 2024 07:55:29 +0000 Original-Received: from localhost ([127.0.0.1]:60904 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rfbGJ-0006PC-NU for submit@debbugs.gnu.org; Thu, 29 Feb 2024 02:55:29 -0500 Original-Received: from relay5-d.mail.gandi.net ([217.70.183.197]:46057) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rfbBo-0006Bp-B6 for 69305@debbugs.gnu.org; Thu, 29 Feb 2024 02:50:48 -0500 Original-Received: by mail.gandi.net (Postfix) with ESMTPSA id 161B41C0009; Thu, 29 Feb 2024 07:50:13 +0000 (UTC) In-Reply-To: <864jdsu6ld.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 28 Feb 2024 14:16:30 +0200") X-GND-Sasl: juri@linkov.net X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:280783 Archived-At: >> >> >> But tabulated-list-groups is not a defcustom. >> >> >> There are no defcustoms here. >> >> > >> >> > Buffer-menu-group-by _is_ a defcustom, and it is documented thusly: >> >> > >> >> > + "If non-nil, buffers are grouped by function. >> >> > +This function takes one argument: a list of entries in the same format >> >> > +as in `tabulated-list-entries', and should return a list in the format >> >> > +suitable for `tabulated-list-groups'. >> >> > >> >> > So you are inviting users to write functions that return values of a >> >> > certain format, but the format's documentation IMO doesn't make it >> >> > clear how to specify a grouping, and for its important part alludes to >> >> > another variable (tabulated-list-entries), whose documentation is >> >> > suitable for different kind of uses, not for grouping of entries. >> >> >> >> The format 'tabulated-list-entries' is input. >> >> The format 'tabulated-list-groups' is output. >> > >> > Yes, I'm well aware of that. >> > >> >> > Since tabulated-list-groups is such an important part of the >> >> > documentation of Buffer-menu-group-by, the doc string of >> >> > tabulated-list-groups is in effect part of the doc string of >> >> > Buffer-menu-group-by, and should IMO be worded as appropriate for user >> >> > options. >> >> >> >> The docstring of 'tabulated-list-groups' already >> >> sufficiently documents the format: >> > >> > No, it doesn't document it sufficiently. As I already said several >> > times. >> > >> >> (defvar-local tabulated-list-groups nil >> >> "Groups displayed in the current Tabulated List buffer. >> >> This should be either a function, or a list. >> >> If a list, each element has the form (GROUP-NAME ENTRIES), >> >> where: >> >> >> >> - GROUP-NAME is a group name as a string, which is displayed >> >> at the top line of each group. >> >> >> >> - ENTRIES is a list described in `tabulated-list-entries'. >> >> >> >> There is no need to duplicate the description of linked >> >> 'tabulated-list-entries'. >> > >> > This is not about duplication. This is about adding information that >> > currently isn't there. >> > >> >> And here it's clear that the function should add GROUP-NAME to >> >> groups from 'tabulated-list-entries'. >> > >> > Which doesn't clarify the issue at hand even a single bit. >> >> Sorry, I don't understand what is missing here. >> Please show an example of changes that you want. > > Sorry, I cannot show an example of something whose use I don't > understand. Which is why I asked _you_ to show an example: how to set > up Buffer-menu-group-by to group buffers by major-mode. Ah, you wanted to include a buffer example in "Tabulated List Mode". Ok, here it is: diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 630e42e6878..e79b73eb081 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1246,6 +1246,41 @@ Tabulated List Mode above form when called with no arguments. @end defvar +@defvar tabulated-list-groups +This buffer-local variable specifies the groups of entries displayed in +the Tabulated List buffer. Its value should be either a list, or a +function. + +If the value is a list, each list element corresponds to one group, and +should have the form @w{@code{(@var{group-name} @var{entries})}}, where +@var{group-name} is a string inserted before all group entries, and +@var{entries} have the same format as @code{tabulated-list-entries} +(see above). + +Otherwise, the value should be a function which returns a list of the +above form when called with no arguments. +@end defvar + +You can use @code{seq-group-by} to create @code{tabulated-list-groups} +from @code{tabulated-list-entries}. For example: + +@smallexample +@group + (setq tabulated-list-groups + (seq-group-by 'Buffer-menu-group-by-mode + tabulated-list-entries)) +@end group +@end smallexample + +where you can define @code{Buffer-menu-group-by-mode} like this: + +@smallexample +@group +(defun Buffer-menu-group-by-mode (entry) + (concat "* " (aref (cadr entry) 5))) +@end group +@end smallexample + @defvar tabulated-list-revert-hook This normal hook is run prior to reverting a Tabulated List buffer. A derived mode can add a function to this hook to recompute