emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 4e96444 3/3: Allow use of Gnus search groups as not


From: Eli Zaretskii
Subject: [Emacs-diffs] master 4e96444 3/3: Allow use of Gnus search groups as notmuch path: search term
Date: Sat, 3 Nov 2018 04:40:48 -0400 (EDT)

branch: master
commit 4e9644475727ff718c2c8b0d2ef091aaf3e751c8
Author: Eric Abrahamsen <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    Allow use of Gnus search groups as notmuch path: search term
    
    * lisp/gnus/nnir.el (nnir-notmuch-filter-group-names-function): New
    option governing whether and how to use Gnus' search groups as path:
    search terms to notmuch.
    (nnir-run-notmuch): Check and possibly use above variable.
    (Bug#33122)
---
 lisp/gnus/nnir.el | 58 +++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 43 insertions(+), 15 deletions(-)

diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el
index 7e5f56e..ea7257d 100644
--- a/lisp/gnus/nnir.el
+++ b/lisp/gnus/nnir.el
@@ -518,6 +518,26 @@ that it is for notmuch, not Namazu."
   :type '(regexp)
   :group 'nnir)
 
+(defcustom nnir-notmuch-filter-group-names-function
+  #'gnus-group-short-name
+  "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:
+
+\(add-function :filter-return
+   nnir-notmuch-filter-group-names-function
+   (lambda (g) (replace-regexp-in-string \"\\\\.\" \"/\" g)))"
+  :version "27.1"
+  :type '(choice function
+                nil))
+
 ;;; Developer Extension Variable:
 
 (defvar nnir-engines
@@ -1505,23 +1525,30 @@ Tested with Namazu 2.0.6 on a GNU/Linux system."
                                (> (nnir-artitem-rsv x)
                                   (nnir-artitem-rsv y)))))))))
 
-(defun nnir-run-notmuch (query server &optional _group)
+(defun nnir-run-notmuch (query server &optional groups)
   "Run QUERY against notmuch.
 Returns a vector of (group name, file name) pairs (also vectors,
-actually)."
-
-  ;; (when group
-  ;;   (error "The notmuch backend cannot search specific groups"))
+actually).  If GROUPS is a list of group names, use them to
+construct path: search terms (see the variable
+`nnir-notmuch-filter-group-names-function')."
 
   (save-excursion
-    (let ( (qstring (cdr (assq 'query query)))
-          (groupspec (cdr (assq 'notmuch-group query)))
+    (let* ((qstring (cdr (assq 'query query)))
           (prefix (nnir-read-server-parm 'nnir-notmuch-remove-prefix server))
            artlist
           (article-pattern (if (string-match "\\`nnmaildir:"
                                              (gnus-group-server server))
-                              ":[0-9]+"
-                            "^[0-9]+$"))
+                               ":[0-9]+"
+                             "^[0-9]+$"))
+          (groups (when nnir-notmuch-filter-group-names-function
+                    (mapcar nnir-notmuch-filter-group-names-function
+                            groups)))
+          (pathquery (when groups
+                       (concat "("
+                        (mapconcat (lambda (g)
+                                     (format " path:%s" g))
+                                   groups " or")
+                        ")")))
            artno dirnam filenam)
 
       (when (equal "" qstring)
@@ -1530,10 +1557,14 @@ actually)."
       (set-buffer (get-buffer-create nnir-tmp-buffer))
       (erase-buffer)
 
-      (if groupspec
-          (message "Doing notmuch query %s on %s..." qstring groupspec)
+      (if groups
+          (message "Doing notmuch query %s on %s..."
+                  qstring (mapconcat #'identity groups " "))
         (message "Doing notmuch query %s..." qstring))
 
+      (when groups
+       (setq qstring (concat qstring pathquery)))
+
       (let* ((cp-list `( ,nnir-notmuch-program
                          nil            ; input from /dev/null
                          t              ; output
@@ -1571,10 +1602,7 @@ actually)."
         (when (string-match article-pattern artno)
           (when (not (null dirnam))
 
-           ;; maybe limit results to matching groups.
-           (when (or (not groupspec)
-                     (string-match groupspec dirnam))
-             (nnir-add-result dirnam artno "" prefix server artlist)))))
+           (nnir-add-result dirnam artno "" prefix server artlist))))
 
       (message "Massaging notmuch output...done")
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]