From: "Jose A. Ortega Ruiz" <jao@gnu.org>
To: info-gnus-english@gnu.org
Subject: Re: gnus-search-engine set to gnus-search-notmuch and refer threads
Date: Thu, 23 Dec 2021 03:34:32 +0000 [thread overview]
Message-ID: <87tuf08053.fsf@gnus.jao.io> (raw)
In-Reply-To: <87v8zg6u3r.fsf@ericabrahamsen.net>
On Wed, Dec 22 2021, Eric Abrahamsen wrote:
[...]
> You have done heroic work, and I hope it may yet be unnecessary for me
> to install and configure notmuch. Telling notmuch what to do with
> "thread:xxx" queries is not difficult, and I should have a solution for
> this in the next day or so.
i fear you'll have to install it. the naive fixes below
(properly set a query with (query . "thread:xxxxxxxxx") rather than the
raw string, and eliminating --duplicate for thread searches) end up
performing the query in nnselect group, rather than moving to the parent
group.
cheers,
jao
(cl-defmethod gnus-search-run-search :around ((engine gnus-search-notmuch)
server query groups)
"Handle notmuch's thread-search routine."
;; Notmuch allows for searching threads, but only using its own
;; thread ids. That means a thread search is a \"double-bounce\":
;; once to find the relevant thread ids, and again to find the
;; actual messages. This method performs the first \"bounce\".
(if (alist-get 'thread query)
(with-slots (program proc-buffer) engine
(let* ((qstring
(gnus-search-make-query-string engine query))
(cp-list (gnus-search-indexed-search-command
engine qstring query groups))
thread-ids proc)
(set-buffer proc-buffer)
(erase-buffer)
(setq proc (apply #'start-process (format "search-%s" server)
proc-buffer program cp-list))
(while (process-live-p proc)
(accept-process-output proc))
(goto-char (point-min))
(while (re-search-forward "^thread:\\([^\n ]+\\)" (point-max) t)
(push (match-string 0) thread-ids))
(cl-call-next-method
engine server
;; Completely replace the query with our new thread-based one.
`((query . ,(mapconcat 'identity thread-ids " or ")))
;;;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
nil)))
(cl-call-next-method engine server query groups)))
(cl-defmethod gnus-search-indexed-search-command ((engine gnus-search-notmuch)
(qstring string)
query &optional _groups)
;; Theoretically we could use the GROUPS parameter to pass a
;; --folder switch to notmuch, but I'm not confident of getting the
;; format right.
(let ((limit (alist-get 'limit query))
(thread (alist-get 'thread query)))
(with-slots (switches config-file) engine
`(,(format "--config=%s" config-file)
"search"
,(if thread
"--output=threads"
"--output=files")
,@(unless thread '("--duplicate=1"))
; I have found this necessary, I don't know why.
;;;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
,@switches
,(if limit (format "--limit=%d" limit) "")
,qstring
))))
next prev parent reply other threads:[~2021-12-24 2:08 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <87lf1k11ed.fsf@onenetbeyond.org>
2021-11-19 19:05 ` jao
2021-12-14 21:41 ` dal-blazej
2021-12-15 17:41 ` Eric Abrahamsen
2021-12-18 23:22 ` dal-blazej
2021-12-21 5:56 ` Andrew Cohen
2021-12-22 20:56 ` Jose A. Ortega Ruiz
2021-12-22 21:16 ` Eric Abrahamsen
2021-12-22 21:19 ` Eric Abrahamsen
2021-12-22 23:01 ` Jose A. Ortega Ruiz
2021-12-23 0:30 ` Eric Abrahamsen
2021-12-23 3:34 ` Jose A. Ortega Ruiz [this message]
2021-12-23 20:55 ` Eric Abrahamsen
2021-12-24 3:08 ` Jose A. Ortega Ruiz
2021-12-27 21:54 ` Jose A. Ortega Ruiz
2021-12-30 23:51 ` Eric Abrahamsen
2021-12-31 0:07 ` Andrew Cohen
2021-12-31 0:20 ` Eric Abrahamsen
2021-12-31 0:37 ` Andrew Cohen
2021-12-31 1:13 ` Eric Abrahamsen
2021-12-31 2:57 ` Jose A. Ortega Ruiz
2021-12-31 1:39 ` jao
2022-02-17 21:11 ` Eric Abrahamsen
2022-02-18 0:22 ` Andrew Cohen
2022-02-18 7:36 ` Eric Abrahamsen
2022-02-18 1:20 Eric Abrahamsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87tuf08053.fsf@gnus.jao.io \
--to=jao@gnu.org \
--cc=info-gnus-english@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).