Subject: bug#33122: Acknowledgement (27.0.50; Allow use of Gnus search groups as notmuch :path search terms)

From: Eric Abrahamsen <[email-masked]>
Date: Mon, 19 Nov 2018 10:17:24 -0800

On 11/03/18 10:43 AM, Eli Zaretskii wrote:
>> From: Eric Abrahamsen <[email-masked]>
>> Date: Wed, 24 Oct 2018 08:46:29 +0800
>> 
>> Here's an updated version of the patch, thanks to Andreas Goesele for
>> reporting and testing.
>
> Thanks, pushed to the master branch.

In hindsight, this behavior should be off by default: it's going to
require user intervention too often to be practical as on-by-default.
This patch changes that, fixes a small bug, and also documents the
option.

>From 7c26e8db58f64446f60c6f255a1a614deba198a6 Mon Sep 17 00:00:00 2001
From: Eric Abrahamsen <[email-masked]>
Date: Mon, 19 Nov 2018 10:03:16 -0800
Subject: [PATCH] Fix "Allow use of Gnus search groups as notmuch path: search
 term"

* lisp/gnus/nnir.el (nnir-notmuch-filter-group-names-function):
  Default to nil -- getting correct behavior requires user
  intervention too often to have this enabled by default.
* lisp/gnus/nnir.el (nnir-run-notmuch): If the user has turned this
  on, then also hardcode `gnus-group-short-name' as a filter -- things
  will never work without it. Also move leading space to before the
  opening parenthesis.
* doc/misc/gnus.texi: Document option.

(Bug#33122)
---
 doc/misc/gnus.texi | 12 ++++++++++++
 lisp/gnus/nnir.el  | 27 +++++++++++++--------------
 2 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index fb9113f460..d1c746c2e5 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -21468,6 +21468,18 @@ The notmuch Engine
 to get a group name (albeit with @samp{/} instead of @samp{.}).  This
 is a regular expression.
 
+@item nnir-notmuch-filter-group-names-function
+A function used to transform the names of groups being searched in,
+for use as a ``path:'' search keyword for notmuch.  If nil, the
+default, ``path:'' keywords are not used.  Otherwise, this should be a
+callable which accepts a single group name and returns a transformed
+name as notmuch expects to see it.  In many mail backends, for
+instance, dots in group names must be converted to forward slashes: to
+achieve this, set this option to
+@example
+(lambda (g) (replace-regexp-in-string "\\." "/" g))
+@end example
+
 @end table

diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el
index ea7257d0c9..084b154e8a 100644
--- a/lisp/gnus/nnir.el
+++ b/lisp/gnus/nnir.el
@@ -518,18 +518,16 @@ nnir-notmuch-remove-prefix
   :type '(regexp)
   :group 'nnir)
 
-(defcustom nnir-notmuch-filter-group-names-function
-  #'gnus-group-short-name
+(defcustom nnir-notmuch-filter-group-names-function nil
   "Whether and how to use Gnus group names as \"path:\" search terms.
 When nil, the groups being searched in are not used as notmuch
 :path search terms.  It's still possible to use \"path:\" terms
 manually within the search query, however.
 
-When a function, map this function over all the group names.  By
-default this runs them through `gnus-group-short-name', and it is
-recommended to use this transform, at least.  Further
-transforms (for instance, converting \".\" to \"/\") can be
-added like so:
+When a function, map this function over all the group names.  To
+use the group names unchanged, set to (lambda (g) g).  Multiple
+transforms (for instance, converting \".\" to \"/\") can be added
+like so:
 
 \(add-function :filter-return
    nnir-notmuch-filter-group-names-function
@@ -1541,14 +1539,15 @@ nnir-run-notmuch
 				":[0-9]+"
 			      "^[0-9]+$"))
 	   (groups (when nnir-notmuch-filter-group-names-function
-		     (mapcar nnir-notmuch-filter-group-names-function
-			     groups)))
+		     (delq nil
+			   (mapcar nnir-notmuch-filter-group-names-function
+				   (mapcar #'gnus-group-short-name groups)))))
 	   (pathquery (when groups
-			(concat "("
-			 (mapconcat (lambda (g)
-				      (format " path:%s" g))
-				    groups " or")
-			 ")")))
+			(concat " ("
+				(mapconcat (lambda (g)
+					     (format "path:%s" g))
+					   groups " or")
+				")")))
            artno dirnam filenam)
 
       (when (equal "" qstring)
-- 
2.19.1