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
View this message in rfc822 format
From: Eli Zaretskii <eliz <at> gnu.org> To: Björn Bidar <bjorn.bidar <at> thaodan.de> Cc: eric <at> ericabrahamsen.net, 75305 <at> debbugs.gnu.org, cohen <at> andy.bu.edu Subject: bug#75305: 31.0.50; gnus-refer-thread-use-search isn't exact enough about how the current group is searched Date: Sat, 18 Jan 2025 11:34:55 +0200
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 >
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.