summaryrefslogtreecommitdiff
path: root/lisp/gnus/nnir.el
diff options
context:
space:
mode:
authorEric Abrahamsen <eric@ericabrahamsen.net>2018-10-23 10:51:37 +0800
committerEli Zaretskii <eliz@gnu.org>2018-11-03 10:39:20 +0200
commit4e9644475727ff718c2c8b0d2ef091aaf3e751c8 (patch)
tree9047b87cb4309704277589d404e3eb5a37fe7a90 /lisp/gnus/nnir.el
parent1f38454e00826c958807340d156302a78158966f (diff)
downloademacs-4e9644475727ff718c2c8b0d2ef091aaf3e751c8.tar.gz
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)
Diffstat (limited to 'lisp/gnus/nnir.el')
-rw-r--r--lisp/gnus/nnir.el58
1 files changed, 43 insertions, 15 deletions
diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el
index 7e5f56e4dd0..ea7257d0c9b 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")