I've ended up doing it in two discrete steps: 1. open all buffers from the current (tree) search (may take a few seconds): ``` (defun notmuch-tree-show-all-messages () (interactive) (goto-char (point-min)) (while (and (not (eobp)) (not (get-buffer (notmuch-tree-get-message-id)))) (notmuch-tree-show-message-out) (previous-buffer) (forward-line 1))) ``` 2. multi-occur only in the opened notmuch messages: ``` (defun my-multi-occur-in-notmuch-message-matching-buffers (regexp &optional allbufs) "search only in notmuch messages" (interactive (occur-read-primary-args)) (multi-occur-in-matching-buffers "notmuch" regexp (not allbufs))) ``` [ref\[1\]][1] May be worth noting that just for the purpose of full-text email search, I'm testing [recoll][2] now instead, which indexes all emails ahead of time. [1]: https://stackoverflow.com/questions/2641211/emacs-interactively-search-open-buffers [2]: https://www.lesbonscomptes.com/recoll/pages/index-recoll.html