GNU bug report logs - #79721
30.2; Thread search in gnus-search-notmuch uses incorrect format

Previous Next

Packages: gnus, emacs;

Reported by: "Jose A. Ortega Ruiz" <jao <at> gnu.org>

Date: Wed, 29 Oct 2025 21:08:03 UTC

Severity: normal

Found in version 30.2

To reply to this bug, email your comments to 79721 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org:
bug#79721; Package emacs,gnus. (Wed, 29 Oct 2025 21:08:03 GMT) Full text and rfc822 format available.

Acknowledgement sent to "Jose A. Ortega Ruiz" <jao <at> gnu.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org. (Wed, 29 Oct 2025 21:08:03 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: "Jose A. Ortega Ruiz" <jao <at> gnu.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 30.2; Thread search in gnus-search-notmuch uses incorrect format
Date: Wed, 29 Oct 2025 21:07:27 +0000
Hello,

In gnus-search-notmuch implementation of
gnus-search-indexed-search-command (gnus-search.el:1686), the thread
queries use directly id formats as provided in qstring, which happen to
include <> brackets. So the query received here seems to not have been
transformed according to gnus-search-transform-expression, which removes
them (as required for notmuch) in line 1668. As result, all invocations
of A T in the summary fail with empty threads.

I know this is so because I've put a trace in the function above, and
see that it receives queries of the form (real example)

  "id:<discourse/post/549043 <at> users.rust-lang.org> or id:<discourse/post/548959 <at> users.rust-lang.org> or id:<discourse/post/548986 <at> users.rust-lang.org>"

in the qstring parameter. If one removes angled brackets from that
query, the search succeeds.

Thanks!
jao


In GNU Emacs 30.2 (build 2, aarch64-apple-darwin25.0.0, NS
 appkit-2685.10 Version 26.0.1 (Build 25A362)) of 2025-10-10 built on
 imladris
Windowing system distributor 'Apple', version 10.3.2685
System Description:  macOS 26.0.1

Configured using:
 'configure --disable-dependency-tracking --disable-silent-rules
 --enable-locallisppath=/opt/homebrew/share/emacs/site-lisp
 --infodir=/opt/homebrew/Cellar/emacs-plus <at> 30/30.2/share/info/emacs
 --prefix=/opt/homebrew/Cellar/emacs-plus <at> 30/30.2
 --with-native-compilation=aot --with-xml2 --with-gnutls
 --without-compress-install --without-dbus --without-imagemagick
 --with-modules --with-rsvg --with-webp --with-ns
 --disable-ns-self-contained 'CFLAGS=-O2 -DFD_SETSIZE=10000
 -DDARWIN_UNLIMITED_SELECT -I/opt/homebrew/opt/sqlite/include
 -I/opt/homebrew/opt/gcc/include -I/opt/homebrew/opt/libgccjit/include'
 'LDFLAGS=-L/opt/homebrew/opt/sqlite/lib -L/opt/homebrew/lib/gcc/15
 -I/opt/homebrew/opt/gcc/include -I/opt/homebrew/opt/libgccjit/include''

Configured features:
ACL GIF GLIB GMP GNUTLS JPEG LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY
KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP XIM ZLIB

Important settings:
  value of $LANG: en_GB.UTF-8
  locale-coding-system: utf-8-unix

Major mode: ELisp/l

Minor modes in effect:
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  paredit-mode: t
  whitespace-mode: t
  display-fill-column-indicator-mode: t
  symbol-overlay-mode: t
  jao-outline-minor-mode: t
  outline-minor-faces-mode: t
  global-diff-hl-mode: t
  diff-hl-mode: t
  eshell-syntax-highlighting-global-mode: t
  winner-mode: t
  global-auto-revert-mode: t
  vertico-multiform-mode: t
  vertico-mode: t
  marginalia-mode: t
  persistent-scratch-autosave-mode: t
  outline-minor-mode: t
  jao-minibuffer-mode: t
  minibuffer-electric-default-mode: t
  minibuffer-depth-indicate-mode: t
  repeat-mode: t
  server-mode: t
  savehist-mode: t
  recentf-mode: t
  save-place-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-mua hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-mua
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-tree hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-tree
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-show hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-show
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-tag hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-tag
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/coolj hides /opt/homebrew/share/emacs/site-lisp/notmuch/coolj
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-wash hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-wash
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-maildir-fcc hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-maildir-fcc
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-compat hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-compat
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-address hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-address
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-lib hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-lib
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-print hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-print
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-draft hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-draft
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-jump hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-jump
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/rstdoc hides /opt/homebrew/share/emacs/site-lisp/notmuch/rstdoc
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-parser hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-parser
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-query hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-query
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-message hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-message
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-hello hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-hello
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-crypto hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-crypto
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/make-deps hides /opt/homebrew/share/emacs/site-lisp/notmuch/make-deps
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-pkg hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-pkg
/Users/jao/.emacs.d/elpa.30/notmuch-20250620.1557/notmuch-company hides /opt/homebrew/share/emacs/site-lisp/notmuch/notmuch-company
/Users/jao/.emacs.d/elpa.30/password-store-20250618.951/password-store hides /opt/homebrew/share/emacs/site-lisp/pass/password-store
/Users/jao/.emacs.d/elpa.30/transient-0.10.1.0.20251024.110624/transient hides /opt/homebrew/Cellar/emacs-plus <at> 30/30.2/share/emacs/30.2/lisp/transient
/Users/jao/.emacs.d/config/site/custom hides /opt/homebrew/Cellar/emacs-plus <at> 30/30.2/share/emacs/30.2/lisp/custom

Features:
(shadow emacsbug nnfolder consult-imenu ecomplete gnus-cus gnus-diary
nndiary gnus-fun gnus-html gnus-kill gnus-logic gnus-mh mh-comp mh-scan
mh-gnus mh-e mh-buffers mh-loaddefs gnus-registry registry eieio-base
rmailsum rmail gnus-salt gnus-uu yenc gnus-vm dired-aux gnus-dired quail
eglot external-completion jsonrpc magit-extras cc-langs let-alist
rustic-spellcheck rustic-expand rustic-lsp rustic-playground
rustic-rustfix rustic-babel rustic-rustfmt rustic-comint rustic-clippy
rustic-doc f rustic-popup rustic-cargo rustic-compile spinner
rustic-interaction rustic xterm-color markdown-toc markdown-mode
rustic-autoloads elec-pair rust-utils rust-prog-mode rust-mode
rust-playpen rust-common ert rust-rustfmt rust-compile rust-cargo
rust-mode-autoloads dash s f-autoloads xterm-color-autoloads
loaddefs-gen lisp-mnt tar-mode arc-mode archive-mode goto-chg pulse
vertico-buffer shortdoc cus-start cl-print debug backtrace vc-hg vc-bzr
vc-src vc-sccs vc-svn vc-cvs vc-rcs bug-reference magit-bookmark
magit-submodule magit-blame magit-stash magit-reflog magit-bisect
magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit
magit-sequence magit-notes magit-worktree magit-tag magit-merge
magit-branch magit-reset magit-files magit-refs magit-status magit
magit-repos magit-apply magit-wip magit-log which-func magit-diff
smerge-mode diff git-commit log-edit add-log magit-core magit-autorevert
magit-margin magit-transient magit-process magit-mode benchmark
magit-git magit-base magit-section cursor-sensor llama org-cliplink
org-cliplink-transport org-cliplink-string bbdb-pgp mailalias
bbdb-message url-http url-gw url-cache url-auth pcmpl-unix
bash-completion em-unix em-script em-pred em-ls em-hist em-glob
em-extpipe em-cmpl em-basic em-banner sort gnus-cite shr-color color qp
mm-archive mail-extr textsec uni-scripts idna-mapping uni-confusable
textsec-check gnus-async gnus-bcklg gnus-dup gnus-ml gnus-topic utf-7
network-stream nsm imap rfc2104 nnml bbdb-gnus nnnil consult-notmuch
jao-notmuch-gnus gnus-search eieio-opt speedbar ezimage dframe bbdb-mua
gnus-icalendar ol-gnus nnselect gnus-demon gnus-delay gnus-draft
gnus-agent gnus-srvr gnus-score score-mode nnvirtual nntp gnus-cache
gnus-msg gnus-art mm-uu mml2015 nndraft nnmh gnus-sum gnus-group
gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7
nnoo gnus-spec gnus-int gnus-range gnus-win cal-move cal-julian
org-duration cal-iso image-file image-converter oc-basic bibtex
face-remap org-agenda copyright misearch multi-isearch paredit
whitespace display-fill-column-indicator symbol-overlay
vertico-directory vertico-sort tramp-cmds jao-mpc jao-random-album
jao-lyrics json-mode jao-custom-programming apples-mode cl
ob-applescript typescript-mode haskell haskell-completions haskell-load
haskell-commands highlight-uses-mode haskell-modules haskell-sandbox
haskell-navigate-imports haskell-repl haskell-svg haskell-collapse
hideshow haskell-debug haskell-interactive-mode
haskell-presentation-mode haskell-compile haskell-process
haskell-session haskell-hoogle consult-hoogle hoogle-base align
geiser-chez geiser-guile tramp trampver tramp-integration tramp-message
tramp-compat parse-time iso8601 tramp-loaddefs info-look geiser-debug
geiser-repl geiser-image geiser-capf geiser-doc geiser-menu
geiser-autodoc geiser-edit geiser-completion geiser-eval
geiser-connection tq geiser-syntax scheme geiser-impl help-fns
radix-tree geiser-log geiser-popup view geiser-custom geiser-base geiser
edit-list project-cmake cmake-mode rst outline-minor-faces git-modes
gitignore-mode gitconfig-mode conf-mode gitattributes-mode git-link
git-timemachine diff-hl log-view pcvs-util vc-dir ewoc jao-eshell-here
eshell-autojump eshell-up git-ps1-mode em-term term disp-table ehelp
eshell-syntax-highlighting em-dirs em-prompt em-alias jao-custom-email
jao-custom-notmuch org-capture jao-notmuch link-hint avy notmuch
notmuch-tree notmuch-jump notmuch-hello notmuch-show notmuch-print
notmuch-crypto notmuch-mua notmuch-message notmuch-draft
notmuch-maildir-fcc notmuch-address notmuch-company notmuch-parser
notmuch-wash coolj goto-addr icalendar notmuch-tag notmuch-lib
notmuch-version notmuch-compat hl-line mm-view mml-smime smime gnutls
dig bbdb-anniv bbdb-com crm bbdb bbdb-site timezone randomsig message
sendmail yank-media rfc822 mml mml-sec mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils
mailheader nov imenu esxml-query jao-custom-pdf saveplace-pdf-view
jao-custom-eww ol-eww jao-eww-session eww url-queue mm-url gnus nnheader
gnus-util mail-utils range mm-util mail-prsvr jao-custom-browse
edit-indirect ispell jao-custom-blog htmlize jao-custom-org org-mac-link
org-goto jao-org-links jao-doc-view jao-pdf jao-mac doc-view image-mode
exif ol-info ol-eshell esh-mode esh-var eshell esh-cmd esh-ext esh-opt
esh-proc esh-io esh-arg esh-module esh-module-loaddefs esh-util files-x
jao-org-notes embark-consult consult bookmark ob-C cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
ob-shell ob-scheme ob-python python ob-org ob-ocaml ob-makefile
ob-haskell ob-gnuplot ob-clojure ob-calc calc-store calc-trail calc-ext
calc calc-loaddefs rect calc-macs org-tempo tempo ox-org ox-texinfo
ox-latex ox-html table ox-ascii ox-publish ox org-attach org-fragtog
embark-org org-element org-persist xdg org-id org-refile org-element-ast
inline avl-tree org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro
org-src sh-script smie treesit executable ob-comint org-pcomplete
org-list org-footnote org-faces org-entities time-date ob-emacs-lisp
ob-core ob-eval org-version org-cycle org-table ol org-fold
org-fold-core org-keys oc org-loaddefs find-func org-compat org-macs
advice winner autorevert filenotify jao-custom-completion embark
vertico-multiform vertico marginalia orderless jao-r2e jao-url ffap shr
pixel-fill kinsoku url-file puny svg dom jao-skel-latex jao-skel-haskell
haskell-mode haskell-cabal haskell-utils haskell-font-lock
haskell-indentation haskell-string haskell-sort-imports haskell-lexeme
haskell-align-imports haskell-complete-module haskell-ghc-support
flymake-proc flymake thingatpt etags fileloop generator xref project
dabbrev haskell-customize jao-compilation jao-skel-lisp jao-skel-geiser
jao-skel skeleton autoinsert wgrep grep compile text-property-search
jka-compr dired-duplicates dired-x dired dired-loaddefs ls-lisp
persistent-scratch cal-china lunar solar cal-dst holidays
holiday-loaddefs vc-git diff-mode track-changes appt diary-lib
diary-loaddefs cal-menu calendar cal-loaddefs jao-tracking jao-afio
jao-doc-session multisession sqlite tracking shorten jao-notify battery
dbus xml noutline outline diminish jao-mode-line jao-minibuffer
minibuf-eldef mb-depth man jao-light-theme jao-themes
password-store-menu vc vc-dispatcher password-store auth-source-pass
with-editor comp comp-cstr warnings comp-run comp-common rx shell
pcomplete comint ansi-osc ansi-color ring epa-file epa derived epg
rfc6068 epg-config transient format-spec cond-let compat repeat
jao-shell edmacro kmacro server savehist recentf tree-widget saveplace
cus-edit pp cus-load wid-edit jao-custom-mac gnu-elpa-keyring-update
cl-extra help-mode use-package use-package-ensure use-package-delight
use-package-diminish use-package-bind-key bind-key easy-mmode
use-package-core finder-inf apples-mode-autoloads auctex-autoloads
tex-site bash-completion-autoloads bbdb-autoloads cider-autoloads
clojure-mode-autoloads cmake-mode-autoloads consult-hoogle-autoloads
consult-notmuch-autoloads diff-hl-autoloads diminish-autoloads
dired-duplicates-autoloads eat-autoloads edit-indirect-autoloads
edit-list-autoloads eldoc-cmake-autoloads embark-consult-autoloads
consult-autoloads embark-vc-autoloads embark-autoloads
eshell-autojump-autoloads eshell-syntax-highlighting-autoloads
eshell-up-autoloads flymake-hlint-autoloads flymake-easy-autoloads
forge-autoloads closql-autoloads emacsql-autoloads ghub-autoloads
git-link-autoloads git-modes-autoloads git-ps1-mode-autoloads
git-timemachine-autoloads gnu-elpa-keyring-update-autoloads
goto-chg-autoloads haskell-mode-autoloads hlint-refactor-autoloads
htmlize-autoloads json-mode-autoloads link-hint-autoloads avy-autoloads
magit-autoloads pcase magit-section-autoloads llama-autoloads
marginalia-autoloads markdown-toc-autoloads dash-autoloads
markdown-mode-autoloads nano-modeline-autoloads notmuch-autoloads
nov-autoloads esxml-autoloads ob-applescript-autoloads
orderless-autoloads org-cliplink-autoloads org-fragtog-autoloads
org-mac-link-autoloads org-static-blog-autoloads
outline-minor-faces-autoloads paredit-autoloads parseedn-autoloads
parseclj-autoloads password-store-menu-autoloads
password-store-autoloads persistent-scratch-autoloads
project-cmake-autoloads queue-autoloads s-autoloads
saveplace-pdf-view-autoloads sesman-autoloads spinner-autoloads
symbol-overlay-autoloads tracking-autoloads transient-autoloads
cond-let-autoloads treepy-autoloads typescript-mode-autoloads
vertico-autoloads wgrep-autoloads info with-editor-autoloads
yaml-autoloads package browse-url url url-proxy url-privacy url-expand
url-methods url-history url-cookie generate-lisp-file url-domsuf
url-util mailcap url-handlers url-parse auth-source cl-seq eieio
eieio-core cl-macs icons password-cache json subr-x map byte-opt gv
bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl tooltip
cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/ns-win ns-win ucs-normalize mule-util
term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads kqueue cocoa ns lcms2 multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 2115417 652234) (symbols 48 86212 636) (strings 32 521495 28941)
 (string-bytes 1 22303968) (vectors 16 157411) (vector-slots 8 3992616 232021)
 (floats 8 3606 54195) (intervals 56 91677 13851) (buffers 992 169))

--
Everyone confesses that exertion which brings out all the powers of body and
mind is the best thing for us; but most people do all they can to get rid of
it, and as a general rule nobody does much more than circumstances drive them
to do. -Harriet Beecher Stowe (1811-1896)




Information forwarded to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org:
bug#79721; Package emacs,gnus. (Thu, 30 Oct 2025 03:03:02 GMT) Full text and rfc822 format available.

Message #8 received at 79721 <at> debbugs.gnu.org (full text, mbox):

From: "Jose A. Ortega Ruiz" <jao <at> gnu.org>
To: <79721 <at> debbugs.gnu.org>
Subject: Re: bug#79721: Acknowledgement (30.2; Thread search in
 gnus-search-notmuch uses incorrect format)
Date: Thu, 30 Oct 2025 03:01:43 +0000
For reference, I've worked around this problem by defining this engine,
which also (orthogonally to this issue) makes use of the `groups'
parameter to add a folder: constraint to the query:

--8<---------------cut here---------------start------------->8---
(defclass gnus-search-jao-notmuch (gnus-search-notmuch) ())

(cl-defmethod gnus-search-indexed-search-command
  ((engine gnus-search-jao-notmuch) (qstring string) query &optional groups)
  (let* ((limit (alist-get 'limit query))
         (thread (alist-get 'thread query))
         (qs (cond (thread
                    (format "thread:\"{%s}\""
                            (thread-last (string-replace "\"" "\"\"" qstring)
                                         (string-replace "<" "")
                                         (string-replace ">" ""))))
                   (groups
                    (let ((gs (mapconcat 'gnus-group-short-name groups "|")))
                      (format "(%s) and folder:/%s/" qstring gs)))
                   (t qstring))))
    (with-slots (switches config-file) engine
      `(,(format "--config=%s" config-file) "search" "--output=files"
        ,@(unless thread '("--duplicate=1"))
        ,@(when limit (list (format "--limit=%d" limit)))
        ,@switches
        ,qs))))
--8<---------------cut here---------------end--------------->8---

Seems to be working here :)

Cheers,
jao




Information forwarded to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org:
bug#79721; Package emacs,gnus. (Thu, 30 Oct 2025 09:46:02 GMT) Full text and rfc822 format available.

Message #11 received at 79721 <at> debbugs.gnu.org (full text, mbox):

From: Robert Pluim <rpluim <at> gmail.com>
To: "Jose A. Ortega Ruiz" <jao <at> gnu.org>
Cc: 79721 <at> debbugs.gnu.org
Subject: Re: bug#79721: 30.2; Thread search in gnus-search-notmuch uses
 incorrect format
Date: Thu, 30 Oct 2025 10:45:05 +0100
>>>>> On Wed, 29 Oct 2025 21:07:27 +0000, "Jose A. Ortega Ruiz" <jao <at> gnu.org> said:

    jao> Hello,

    jao> In gnus-search-notmuch implementation of
    jao> gnus-search-indexed-search-command (gnus-search.el:1686), the thread
    jao> queries use directly id formats as provided in qstring, which happen to
    jao> include <> brackets. So the query received here seems to not have been
    jao> transformed according to gnus-search-transform-expression, which removes
    jao> them (as required for notmuch) in line 1668. As result, all invocations
    jao> of A T in the summary fail with empty threads.

    jao> I know this is so because I've put a trace in the function above, and
    jao> see that it receives queries of the form (real example)

    jao>   "id:<discourse/post/549043 <at> users.rust-lang.org> or id:<discourse/post/548959 <at> users.rust-lang.org> or id:<discourse/post/548986 <at> users.rust-lang.org>"

    jao> in the qstring parameter. If one removes angled brackets from that
    jao> query, the search succeeds.

Can you show us what the value of 'expr' is at entry to
`gnus-search-transform-expression'? The code looks correct, which
means my assumptions don始t match reality 馃榾

Robert
-- 




Information forwarded to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org:
bug#79721; Package emacs,gnus. (Thu, 30 Oct 2025 13:21:01 GMT) Full text and rfc822 format available.

Message #14 received at 79721 <at> debbugs.gnu.org (full text, mbox):

From: "Jose A. Ortega Ruiz" <jao <at> gnu.org>
To: "Robert Pluim" <rpluim <at> gmail.com>
Cc: 79721 <at> debbugs.gnu.org
Subject: Re: bug#79721: 30.2; Thread search in gnus-search-notmuch uses
 incorrect format
Date: Thu, 30 Oct 2025 13:20:26 +0000
On Thu, Oct 30 2025, Robert Pluim wrote:

>
>     jao>   "id:<discourse/post/549043 <at> users.rust-lang.org> or id:<discourse/post/548959 <at> users.rust-lang.org> or id:<discourse/post/548986 <at> users.rust-lang.org>"
>
>     jao> in the qstring parameter. If one removes angled brackets from that
>     jao> query, the search succeeds.
>
> Can you show us what the value of 'expr' is at entry to
> `gnus-search-transform-expression'? The code looks correct, which
> means my assumptions don始t match reality 馃榾

As far as I can tell, gnus-search-transform-expression is never
called. The code goes as far as calling gnus-search-parse-query with a
string that looks like the above, but the iteration using
gnus-search-query-next-expr never triggers a call to the transform
generic for gnus-search-notmuch. It's as if it had lost track of the
engine. Not sure if that might be related, but my secondary select
method has an empty name:

   (nnml "" (gnus-search-engine gnus-search-jao-notmuch (remove-prefix ...)))

Cheers,
jao
-- 
The little I know, I owe to my ignorance. -Sacha Guitry (1885-1957)




Information forwarded to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org:
bug#79721; Package emacs,gnus. (Thu, 30 Oct 2025 13:52:01 GMT) Full text and rfc822 format available.

Message #17 received at 79721 <at> debbugs.gnu.org (full text, mbox):

From: Robert Pluim <rpluim <at> gmail.com>
To: "Jose A. Ortega Ruiz" <jao <at> gnu.org>
Cc: 79721 <at> debbugs.gnu.org
Subject: Re: bug#79721: 30.2; Thread search in gnus-search-notmuch uses
 incorrect format
Date: Thu, 30 Oct 2025 14:51:31 +0100
>>>>> On Thu, 30 Oct 2025 13:20:26 +0000, "Jose A. Ortega Ruiz" <jao <at> gnu.org> said:

    jao> On Thu, Oct 30 2025, Robert Pluim wrote:
    >> 
    jao> "id:<discourse/post/549043 <at> users.rust-lang.org> or
    jao> id:<discourse/post/548959 <at> users.rust-lang.org> or
    jao> id:<discourse/post/548986 <at> users.rust-lang.org>"
    >> 
    jao> in the qstring parameter. If one removes angled brackets from that
    jao> query, the search succeeds.
    >> 
    >> Can you show us what the value of 'expr' is at entry to
    >> `gnus-search-transform-expression'? The code looks correct, which
    >> means my assumptions don始t match reality 馃榾

    jao> As far as I can tell, gnus-search-transform-expression is never
    jao> called. The code goes as far as calling gnus-search-parse-query with a
    jao> string that looks like the above, but the iteration using
    jao> gnus-search-query-next-expr never triggers a call to the transform
    jao> generic for gnus-search-notmuch. It's as if it had lost track of the
    jao> engine. Not sure if that might be related, but my secondary select
    jao> method has an empty name:

    jao>    (nnml "" (gnus-search-engine gnus-search-jao-notmuch (remove-prefix ...)))

Hmm, I guess you need to figure out why
`gnus-search-transform-expression' is never called. I don始t use
notmuch myself. If all else fails I guess I can try to set it up.

Robert
-- 




Information forwarded to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org:
bug#79721; Package emacs,gnus. (Thu, 30 Oct 2025 18:05:02 GMT) Full text and rfc822 format available.

Message #20 received at 79721 <at> debbugs.gnu.org (full text, mbox):

From: "Jose A. Ortega Ruiz" <jao <at> gnu.org>
To: "Robert Pluim" <rpluim <at> gmail.com>
Cc: 79721 <at> debbugs.gnu.org
Subject: Re: bug#79721: 30.2; Thread search in gnus-search-notmuch uses
 incorrect format
Date: Thu, 30 Oct 2025 18:04:26 +0000
On Thu, Oct 30 2025, Robert Pluim wrote:

[...]

> Hmm, I guess you need to figure out why
> `gnus-search-transform-expression' is never called. I don始t use
> notmuch myself. If all else fails I guess I can try to set it up.
>
> Robert
> --
>
>

Actually, I don't think this generic function gets called for any
specific engine at all, at least for the nnml backend:

Inside gnus-summary-refer-thread, one ends up in gnus-search.el:9041,
where one sees the call:

       (gnus-search-thread header)

which is passed neither the group nor the server, so it seems not
possible that the search is performed using an engine-specific parsing,
as the search engine is confirgured per server. Or am i missing
something?

Cheers,
jao
-- 
Spend the afternoon. You can't take it with you.
  -Annie Dillard, author (b. 1945)




Information forwarded to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org:
bug#79721; Package emacs,gnus. (Mon, 03 Nov 2025 19:11:02 GMT) Full text and rfc822 format available.

Message #23 received at 79721 <at> debbugs.gnu.org (full text, mbox):

From: Sean Whitton <spwhitton <at> spwhitton.name>
To: "Jose A. Ortega Ruiz" <jao <at> gnu.org>
Cc: 79721 <at> debbugs.gnu.org
Subject: Re: bug#79721: 30.2; Thread search in gnus-search-notmuch uses
 incorrect format
Date: Mon, 03 Nov 2025 19:10:14 +0000
Hello,

On Wed 29 Oct 2025 at 09:07pm GMT, Jose A. Ortega Ruiz wrote:

> Hello,
>
> In gnus-search-notmuch implementation of
> gnus-search-indexed-search-command (gnus-search.el:1686), the thread
> queries use directly id formats as provided in qstring, which happen to
> include <> brackets. So the query received here seems to not have been
> transformed according to gnus-search-transform-expression, which removes
> them (as required for notmuch) in line 1668. As result, all invocations
> of A T in the summary fail with empty threads.
>
> I know this is so because I've put a trace in the function above, and
> see that it receives queries of the form (real example)
>
>   "id:<discourse/post/549043 <at> users.rust-lang.org> or id:<discourse/post/548959 <at> users.rust-lang.org> or id:<discourse/post/548986 <at> users.rust-lang.org>"
>
> in the qstring parameter. If one removes angled brackets from that
> query, the search succeeds.

I use Gnus+notmuch and have not run into this.  'A T' works for me.  Hrm.

-- 
Sean Whitton




Information forwarded to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org:
bug#79721; Package emacs,gnus. (Mon, 03 Nov 2025 19:32:01 GMT) Full text and rfc822 format available.

Message #26 received at 79721 <at> debbugs.gnu.org (full text, mbox):

From: Jose Antonio Ortega Ruiz <jao <at> gnu.org>
To: Sean Whitton <spwhitton <at> spwhitton.name>
Cc: 79721 <at> debbugs.gnu.org
Subject: Re: bug#79721: 30.2; Thread search in gnus-search-notmuch uses
 incorrect format
Date: Mon, 03 Nov 2025 19:31:24 +0000
On Mon, Nov 03 2025, Sean Whitton wrote:

[...]

> I use Gnus+notmuch and have not run into this.  'A T' works for me.  Hrm.

Hmm. What version of emacs do you use? This one is 30.2.

Cheers,
jao
-- 
"Faith" is a fine invention / For gentlemen who see --
But microscopes are prudent / In an emergency.
  -Emily Dickinson (1830-1886)




Information forwarded to bug-gnu-emacs <at> gnu.org, bugs <at> gnus.org:
bug#79721; Package emacs,gnus. (Tue, 04 Nov 2025 11:01:01 GMT) Full text and rfc822 format available.

Message #29 received at 79721 <at> debbugs.gnu.org (full text, mbox):

From: Sean Whitton <spwhitton <at> spwhitton.name>
To: Jose Antonio Ortega Ruiz <jao <at> gnu.org>
Cc: 79721 <at> debbugs.gnu.org
Subject: Re: bug#79721: 30.2; Thread search in gnus-search-notmuch uses
 incorrect format
Date: Tue, 04 Nov 2025 11:00:48 +0000
Hello,

On Mon 03 Nov 2025 at 07:31pm GMT, Jose Antonio Ortega Ruiz wrote:

> On Mon, Nov 03 2025, Sean Whitton wrote:
>
> [...]
>
>> I use Gnus+notmuch and have not run into this.  'A T' works for me.  Hrm.
>
> Hmm. What version of emacs do you use? This one is 30.2.

The trunk.  But Gnus hasn't changed much.

-- 
Sean Whitton




This bug report was last modified 1 day ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.