Subject: Re: bug#72739: [PATCH] * lisp/gnus/gnus-sum.el: Handle leafs with children in summary line

From: Stefan Kangas <[email-masked]>
Date: Sun, 23 Feb 2025 00:25:54 +0000

Blyte Scholar <[email-masked]> writes:

> This patch adds customization options which handle the cases where a
> thread leaf has both siblings and children. This allows using box
> drawing characters to seamlessly connect all messages in a
> thread. Previously, there would be messages could either be connected to
> a sibling or a child, but not both.

Andrew, Eric, could you please help review the below patch?

> From fca49a37ec7cc0c512290de93dd8311ca5a012d6 Mon Sep 17 00:00:00 2001
> From: Blyte Scholar <[email-masked]>
> Date: Tue, 20 Aug 2024 17:32:10 -0400
> Subject: [PATCH] * lisp/gnus/gnus-sum.el: Handle leafs with children in
>  summary line
>
> (gnus-sum-thread-tree-leaf-with-other-root): New variable.
> (gnus-sum-thread-tree-single-leaf-root): New variable.
> (gnus-summary-prepare-threads):
> Use gnus-sum-thread-tree-leaf-with-other-root and
> gnus-sum-thread-single-leaf-root strings in summary line when they are
> available.
> ---
>  lisp/gnus/gnus-sum.el | 24 ++++++++++++++++++++++--
>  1 file changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
> index a9caa83b15c..2fd342f3a0c 100644
> --- a/lisp/gnus/gnus-sum.el
> +++ b/lisp/gnus/gnus-sum.el
> @@ -5193,12 +5193,26 @@ gnus-sum-thread-tree-leaf-with-other
>    :type 'string
>    :group 'gnus-thread)
>
> +(defcustom gnus-sum-thread-tree-leaf-with-other-root nil
> +  "With %B spec, used for a leaf with brothers and children.
> +If nil use `gnus-sum-thread-tree-leaf-with-other' instead."
> +  :version "31.1"
> +  :type 'string
> +  :group 'gnus-thread)
> +
>  (defcustom gnus-sum-thread-tree-single-leaf "\\-> "
>    "With %B spec, used for a leaf without brothers."
>    :version "22.1"
>    :type 'string
>    :group 'gnus-thread)
>
> +(defcustom gnus-sum-thread-tree-single-leaf-root nil
> +  "With %B spec, used for a leaf without brothers but children.
> +If nil use `gnus-sum-thread-tree-leaf-single-leaf' instead."
> +  :version "31.1"
> +  :type 'string
> +  :group 'gnus-thread)
> +
>  (defcustom gnus-summary-display-while-building nil
>    "If non-nil, show and update the summary buffer as it's being built.
>  If the value is t, update the buffer after every line is inserted.  If
> @@ -5474,8 +5488,14 @@ gnus-summary-prepare-threads
>  					  gnus-sum-thread-tree-indent))
>  				      (cdr (reverse tree-stack))))
>  		       (if (nth 1 thread)
> -			   gnus-sum-thread-tree-leaf-with-other
> -			 gnus-sum-thread-tree-single-leaf)))))
> +                           (if (and gnus-sum-thread-tree-leaf-with-other-root
> +                                    (cadar thread))
> +                               gnus-sum-thread-tree-leaf-with-other-root
> +			     gnus-sum-thread-tree-leaf-with-other)
> +                         (if (and gnus-sum-thread-tree-single-leaf-root
> +                                  (cadar thread))
> +                             gnus-sum-thread-tree-single-leaf-root
> +			   gnus-sum-thread-tree-single-leaf))))))
>  	    (when (string= gnus-tmp-name "")
>  	      (setq gnus-tmp-name gnus-tmp-from))
>  	    (unless (numberp gnus-tmp-lines)