The support for emacs in bookmarks in mu4e-contrib has been broken for a while;
we removed it an now re-implement it as part of mu4e-proper.
Fixes: issue #2255.
Add command ~mu4e-sexp-at-point~ for showing/hiding the s-expression for the
message-at-point. Useful for development / debugging. Bound to ~,~ in headers and
view mode.
When using a side-by-side split layout, i.e., headers left of message view, it
easily can happen that parts of the headers (like a longer subject) are not
visible without horizontal scrolling. So eldoc to the rescue, which can echo a
customizable message (see `mu4e-headers-eldoc-format`) containing stuff like
subject, from, to, date, etc. in the echo area.
Support the new batched query results from the mu server; these are much faster
to render (2-3x it seems).
Rearrange the code a bit to avoid byte-compiler warnings.
Obsolete mu4e-header-func, to be replaced by mu4e-headers-append-func.
Fire mu4e-index-updated-hook after any index operations, where anything changed
or not. Add a new variable `mu4e-index-update-status' which can be used to see
what changed (if anything) in the last indexing operation.
Keep mu4e-message-changed-hook in place; it only fires when a message
changed (and when it is update).
Remove the long-obsolete `mu4e-msg-changed-hook'.
I'm not quite sure why it was done in the first place, and it seems to have
unwanted side-effects. So let's turn it off and see if anything breaks.
Fixes: #2146.
This allows to have a function returning a window as value of
`mu4e-split-view`. I'm using this patch since quite some time locally with the
following function.
```el
(defun th/mu4e-split-view ()
(let* ((headers (mu4e-get-headers-buffer))
(headers-win (and headers (get-buffer-window headers)))
(view (mu4e-get-view-buffer))
(view-win (and view (get-buffer-window view))))
(cond
;; There's a view window, just use it.
(view-win view-win)
;; Just one window, split sensibly, i.e., horizontally or
;; vertically depending on geometry.
((one-window-p) (split-window-sensibly))
;; Otherwise, use the tallest window.
(t (car (sort (delq headers-win (window-list))
(lambda (a b)
(> (window-height a) (window-height b)))))))))
(setq mu4e-split-view #'th/mu4e-split-view)
```
Usurp more of the utils code than can be re-used without further dependencies in
helpers.
Split off specific parts in their own file.
After the helper/utils changes, update the rest of mu4e to take the changes into
account.