GNU bug report logs - #75305
31.0.50; gnus-refer-thread-use-search isn't exact enough about how the current group is searched

Previous Next

Package: emacs;

Reported by: Björn Bidar <bjorn.bidar <at> thaodan.de>

Date: Thu, 2 Jan 2025 23:37:02 UTC

Severity: wishlist

Found in version 31.0.50

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: eric <at> ericabrahamsen.net, cohen <at> andy.bu.edu
Cc: bjorn.bidar <at> thaodan.de, 75305 <at> debbugs.gnu.org
Subject: bug#75305: 31.0.50; gnus-refer-thread-use-search isn't exact enough about how the current group is searched
Date: Sat, 01 Feb 2025 13:53:42 +0200
Ping! Ping!  Andrew and Eric, any comments on the patch?

> Cc: eric <at> ericabrahamsen.net, 75305 <at> debbugs.gnu.org, cohen <at> andy.bu.edu
> Date: Sat, 18 Jan 2025 11:34:55 +0200
> From: Eli Zaretskii <eliz <at> gnu.org>
> 
> Ping! Andrew and Eric, would you please review the proposed patch?
> 
> > From: Björn Bidar <bjorn.bidar <at> thaodan.de>
> > Cc: Andrew G Cohen <cohen <at> andy.bu.edu>,  Eric Abrahamsen
> >  <eric <at> ericabrahamsen.net>,  75305 <at> debbugs.gnu.org
> > Date: Sun, 05 Jan 2025 22:36:13 +0200
> > 
> > 
> > I forgot to attach the update patch, see below:
> > 
> > >From 8cd116f25411575fb8ad59e08ba1cde8f7d7ae12 Mon Sep 17 00:00:00 2001
> > From: =?UTF-8?q?Bj=C3=B6rn=20Bidar?= <bjorn.bidar <at> thaodan.de>
> > Date: Fri, 3 Jan 2025 04:09:55 +0200
> > Subject: [PATCH] Refactor gnus-refer-thread-use-search
> > 
> > * lisp/gnus/gnus-sum.el (gnus-refer-thread-use-search):
> > Make it easier to customize the variable by adding predefine choices
> > as well as descriptions to each choice. Add option to add the value
> > `current' to the list of servers and groups to add the current group.
> > E.g. to add another group and the current group.
> > * lisp/gnus/gnus-search.el
> > (gnus-refer-thread-maybe-add-current-group, gnus-search-thread):
> > Add helper function to determine if the option contains
> > the value current. Use helper function.
> > * lisp/gnus/nnselect.el (nnselect-request-thread): Use helper
> > function to check if the value current is in
> > gnus-refer-thread-use-search.
> > * doc/misc/gnus.texi (gnus-refer-thread-use-search):
> > Include the current value in the section. Format the section
> > a little better to have a paragraph for each possible value that
> > the option may contain. Explain the option to have
> > a list of servers more detailed , i.e. similarly to the custom
> > description. Highlight that the current group is not searched
> > unless specified. Explain that unless the articles of that
> > thread are contained in the searched groups not adding
> > the current group might not be the desired effect.
> > ---
> >  doc/misc/gnus.texi       | 23 +++++++++++++++++------
> >  lisp/gnus/gnus-search.el | 25 ++++++++++++++++++++++---
> >  lisp/gnus/gnus-sum.el    | 17 +++++++++++++----
> >  lisp/gnus/nnselect.el    |  4 ++--
> >  4 files changed, 54 insertions(+), 15 deletions(-)
> > 
> > diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
> > index 200b68d2059..2e9959aeaf0 100644
> > --- a/doc/misc/gnus.texi
> > +++ b/doc/misc/gnus.texi
> > @@ -10557,12 +10557,23 @@ Finding the Parent
> >  course, it'll make group entry somewhat slow.
> >  
> >  @vindex gnus-refer-thread-use-search
> > -If @code{gnus-refer-thread-use-search} is @code{nil} (the default)
> > -then thread-referral only looks for articles in the current group.  If
> > -this variable is @code{t} the server to which the current group
> > -belongs is searched (provided that searching is available for the
> > -server's backend).  If this variable is a list of servers, each server
> > -in the list is searched.
> > +If @code{gnus-refer-thread-use-search} is @code{current} or @code{nil}
> > +(the default), then thread-referral only looks for articles
> > +in the current group.
> > +
> > +If this variable is @code{t}, the server to which the current group
> > +belongs is searched.  Note this is only possible provided that
> > +searching is available for the server's backend.
> > +
> > +The value can also be a list of the form
> > +@code{(@var{server} @var{group}@dots{})}, where @var{server} is the
> > +server and @var{group}s are the groups belonging to the server.
> > +
> > +To search in the current group in addition to other groups,
> > +the list of servers may contain the symbol @code{current}.
> > +If @code{current} is not in the list, the current group is not searched.
> > +Note this may be not the desired effect if any of articles referred in
> > +the thread are not contained in any of the searched groups.
> >  
> >  @vindex gnus-refer-thread-limit
> >  The @code{gnus-refer-thread-limit} variable says how many old (i.e.,
> > diff --git a/lisp/gnus/gnus-search.el b/lisp/gnus/gnus-search.el
> > index 12af8dcdfa7..959984c2ca4 100644
> > --- a/lisp/gnus/gnus-search.el
> > +++ b/lisp/gnus/gnus-search.el
> > @@ -2206,6 +2206,24 @@ gnus-search-server-to-engine
> >  
> >  (declare-function gnus-registry-get-id-key "gnus-registry" (id key))
> >  
> > +(defun gnus-refer-thread-maybe-add-current-group (group)
> > +  "Return `gnus-refer-thread-use-search' with `current' replaced by GROUP.
> > +Return nil if `current' was not found or if was not a list."
> > +  (cond ((eq 'current gnus-refer-thread-use-search)
> > +         (list (gnus-info-method (gnus-get-info group))
> > +               group))
> > +        ((listp gnus-refer-thread-use-search)
> > +         (let (out)
> > +           (dolist (search gnus-refer-thread-use-search)
> > +             (push (if (and (not (listp search)) (eq 'current search))
> > +                       (list (gnus-info-method (gnus-get-info group))
> > +                             group)
> > +                     search)
> > +                   out))
> > +           out))
> > +        (t
> > +         nil)))
> > +
> >  (defun gnus-search-thread (header &optional group server)
> >    "Find articles in the thread containing HEADER from GROUP on SERVER.
> >  If `gnus-refer-thread-use-search' is nil only the current group is
> > @@ -2227,7 +2245,8 @@ gnus-search-thread
> >                              " or "))
> >             (cons 'thread t)))
> >           (gnus-search-use-parsed-queries t))
> > -    (if (not gnus-refer-thread-use-search)
> > +    (if (or (not gnus-refer-thread-use-search)
> > +            (eq 'current gnus-refer-thread-use-search))
> >          ;; Search only the current group and send the headers back to
> >          ;; the caller to add to the summary buffer.
> >          (gnus-fetch-headers
> > @@ -2247,8 +2266,8 @@ gnus-search-thread
> >              (thread  (gnus-search-run-query
> >                        (list (cons 'search-query-spec query)
> >                              (cons 'search-group-spec
> > -                                  (if (listp gnus-refer-thread-use-search)
> > -                                      gnus-refer-thread-use-search
> > +                                  (or (gnus-refer-thread-maybe-add-current-group
> > +                                       group)
> >                                      (list (list server))))))))
> >          (if (< (nnselect-artlist-length thread) 2)
> >              (message "No other articles in thread")
> > diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
> > index a9caa83b15c..107e52ab8ef 100644
> > --- a/lisp/gnus/gnus-sum.el
> > +++ b/lisp/gnus/gnus-sum.el
> > @@ -149,11 +149,20 @@ gnus-refer-thread-use-search
> >  list of servers and groups (where each element is a list whose
> >  car is the server and whose cdr is a list of groups on this
> >  server or nil to search the entire server) searches these
> > -server/groups.  This may usefully be set as a group parameter."
> > -  :version "28.1"
> > +server/groups.
> > +
> > +The list of of server and groups may contain
> > +the symbol `current' to refer to the current group.
> > +For example, to search in the current group in addition to other groups.
> > +
> > +This may usefully be set as a group parameter."
> > +  :version "31.1"
> >    :group 'gnus-thread
> > -  :type '(restricted-sexp :match-alternatives
> > -                          (listp 't 'nil)))
> > +  :type '(choice (const :tag "Current group" nil)
> > +                 (const :tag "All groups" t)
> > +                 (repeat :tag "Server and groups"
> > +                         (choice (const :tag "Current Group" current)
> > +                                 (repeat :tag "Server and groups" string)))))
> >  
> >  (defcustom gnus-refer-thread-limit-to-thread nil
> >    "If non-nil referring a thread will limit the summary buffer to
> > diff --git a/lisp/gnus/nnselect.el b/lisp/gnus/nnselect.el
> > index c6a1c0a9342..9d55ac27b98 100644
> > --- a/lisp/gnus/nnselect.el
> > +++ b/lisp/gnus/nnselect.el
> > @@ -49,6 +49,7 @@
> >  (require 'gnus-art)
> >  (autoload 'gnus-search-run-query "gnus-search")
> >  (autoload 'gnus-search-server-to-engine "gnus-search")
> > +(autoload 'gnus-refer-thread-maybe-add-current-group "gnus-search")
> >  
> >  (eval-when-compile (require 'cl-lib))
> >  
> > @@ -707,8 +708,7 @@ nnselect-request-thread
> >                   (group-spec
> >                    (if (not gnus-refer-thread-use-search)
> >                        (list (list server artgroup))
> > -                    (if (listp gnus-refer-thread-use-search)
> > -                        gnus-refer-thread-use-search
> > +                    (or (gnus-refer-thread-maybe-add-current-group group)
> >                        (list (list server)))))
> >                   (ids (cons (mail-header-id header)
> >                              (split-string
> > -- 
> > 2.45.2
> > 
> 
> 
> 
> 




This bug report was last modified 97 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.