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) #<bytecode 0x1fd1b560df8c2360>)(#<gnus-search-notmuch gnus-search-notmuch-157d5a02af62> "thread:000000000001a830") apply(#f(compiled-function (engine query-spec) #<bytecode 0x1fd1b560df8c2360>) #<gnus-search-notmuch gnus-search-notmuch-157d5a02af62> "thread:000000000001a830") gnus-search-make-query-string(#<gnus-search-notmuch gnus-search-notmuch-157d5a02af62> "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 :) hth, jao