"Jose A. Ortega Ruiz" writes: > On Wed, Dec 22 2021, Eric Abrahamsen wrote: > > [...] > >> My guess is that we need to go to point-min right here. >> >>> (while (re-search-forward "^thread:\\([^ ]+\\)" (point-max) t) >>> (push (match-string 1) thread-ids)) >>> (cl-call-next-method >>> engine server >>> ;; Completely replace the query with our new thread-based one. >>> (mapconcat (lambda (thrd) (concat "thread:" thrd)) >>> thread-ids " or ") >>> nil))) >>> (cl-call-next-method engine server query groups))) > > it's not enough. before that, there's a problem with invoking the > search for threads, because notmuch is passed the flag --duplicate=1, > and that's not accepted for format thread: > > Error: --duplicate=N is only supported with --output=files and --output=messages. > > funny thing is that that flag is added for no apparent reason in line > 1633 of gnus-search.el: > > "--duplicate=1" ; I have found this necessary, I don't know why. > > i don't know why either because searches seem to work without it :). > if one eliminates that flag and adds your suggested (goto-char > (point-min)) we are not out the woods yet: the thread id is read, but > including an eol, so one needs > > (while (re-search-forward "^thread:\\([^\n ]+\\)" (point-max) t) > ^^^^ > > and then, we still fail, because that leads, somehow to an error of the > form: > > Debugger entered--Lisp error: (wrong-type-argument listp "thread:000000000001a830") > alist-get(parsed-query "thread:000000000001a830") > #f(compiled-function (engine query-spec) #)(# "thread:000000000001a830") > apply(#f(compiled-function (engine query-spec) #) # "thread:000000000001a830") > gnus-search-make-query-string(# "thread:000000000001a830") > > which indicates that the notmuch method for > gnus-search-make-query-string is buggy: it doesn't know how to parse > "thread:000000000001a830" queries... and here i ran out of steam, but > the fix seems nearby :) Here's what I've got so far, would you try it out? I'm not sure about notmuch not knowing how to parse a "thread:000000000001a830" query, it looks like it handles it fine to me: (let* ((engine (make-instance 'gnus-search-notmuch)) (query "thread:23434223455") (parsed-query (gnus-search-parse-query query))) (gnus-search-make-query-string engine `((query ,query) (parsed-query . ,parsed-query)))) => "thread:23434223455" Am I misunderstanding something?