info-gnus-english
[Top][All Lists]
Advanced

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

Re: gnus-search-engine set to gnus-search-notmuch and refer threads


From: Eric Abrahamsen
Subject: Re: gnus-search-engine set to gnus-search-notmuch and refer threads
Date: Thu, 23 Dec 2021 12:55:55 -0800
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux)

"Jose A. Ortega Ruiz" <jao@gnu.org> 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) #<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 :)

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?

Attachment: notmuchthreads.diff
Description: Text Data


reply via email to

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