Mu4e: jump to manual to get help in writing queries
This is a mini blog. I use the amazing Mu4e to manage my emails from Emacs. Sometimes I struggle querying them though! Often I want to filter dates in between dates and I forget how to define that predicate in the Mu query language.
This has become boring now that I have shortened my feedback loop by using helm-mu: Helm updates the result of my query in real time, so if it is broken, I feel the pain of my error!
Naturally mu has an explanation of the query language in the manual
(and there is also a nice blog about that). So I decided to change my
setup to add a shortcut to get to the manpage when I need to:
(defun my/mu4e-queries-help ()
(interactive)
(split-window-vertically)
(woman "mu-query")
(search-forward "FIELDS
"))
After binding this to a keybinding, I can access the Mu manual on the fly.
That does not work well with helm-mu though. To fix that I redefined the source in my configuration:
(let ((system-package
(when (eq system-type 'darwin)
'(wn . "brew install gnu-sed --with-default-names"))))
(eval `(use-package helm-mu
:ensure-system-package ,system-package
:config
(setq helm-source-mu
(helm-build-async-source "Search email with mu"
:candidates-process #'helm-mu-init
:candidate-transformer
'(helm-mu-candidate-parser helm-mu-candidates-formatter)
:multimatch nil
:nohighlight t
:requires-pattern 3
:persistent-action #'helm-mu-persistent-action
:help-message (concat "* Mu Manual\n\n" (let ((buf (current-buffer)) ; adding some help I can access with C-h m when in the Helm session
(_ (woman "mu-query"))
(contents (buffer-string)))
(switch-to-buffer buf)
contents))
:action '(("Display message in mu4e" . helm-mu-display-email)))))))
That lets me read the manual without losing my Helm session with the
keys C-h m.
Happy querying!