I few months ago, I introduced
mu4e, a modest little emacs mail client that
I wrote. It seems many people picked it up, great!
I have just released mu/mu4e version 0.9.9. There are quite a few changes, both user-visible and 'under-the-hood'. I've also spent some time on improving the manual (pdf), and I'm quite happy about it.
Some of the more visible new things in
- Support for crypto (decrypting messages, signing them)
- Support for refiling (like
- Dynamic folders (instead of hard-coding the sent/draft/trash/refile folder, they can be functions that return different folders based on the message we're dealing with, see the example below)
- Same for the folder to save attachments
- A lot of smaller and bigger UI improvements
Also, the core
mu program has seen a lot of improvements (many of which
mu4e as well)
- Better support for non-ascii locales / character sets, such as
- Improved on-line help ('
mu help ...')
- Performance improvements for threaded display (~ 25% for 23K messages)
For a more complete list, see NEWS.
mu4e now supports dynamic folders. Before, you'd set your
trash folder to some static string:
(setq mu4e-trash-folder "/trash")
In some cases, you may want to have a bit more flexibility – for example, have a separate trash-folder (or sent-folder, drafts-folder, refile-folder) for private mail and work mail. You can now do something like:
(setq mu4e-trash-folder (lambda (msg) (if (and msg ;; msg may be nil (mu4e-message-contact-field-matches msg :to "email@example.com")) "/trash-work" "/trash")))
After I have dealt with some e-mail, I either delete it or move it to some
archive folder – refiling. For this, there is now the
r keybinding, and
mu4e-refile-folder; and a place where dynamic folders really shine:
(setq mu4e-refile-folder (lambda (msg) (cond ;; messages to the mu mailing list go to the /mu folder ((mu4e-message-contact-field-matches msg :to "firstname.lastname@example.org") "/mu") ;; messages sent directly to me go to /archive ;; also `mu4e-user-mail-address-regexp' can be used ((mu4e-message-contact-field-matches msg :to "email@example.com") "/private") ;; messages with football or soccer in the subject go to /football ((string-match "football\\|soccer" (or (mu4e-message-field msg :subject) "")) "/football") ;; everything else goes to /archive ;; important to have a catch-all at the end! (t "/archive"))))
How cool is that? After reading my inbox folder, I select all messages (
C-x h), press
r, and they're all moved to the right refiling folder.
mu4e already supported signing/encrypting messages, but now it supports
decryption and verifying signatures as well. This was one of the most
requested new features. I think it is still a bit rough, but it has been
working very well for me.
I think version 0.9.9 is a great new step for
mu4e. It already goes far
beyond I ever planned to do. I received a lot of suggestions for new
features, which is great! I'm not planning to implement all of those, but I
will try to make
mu4e even more programmable – it should be easy to augment
mu4e with your own little elisp-snippets – the Barbapapa principle of
software, already so clearly present in emacs itself.