mu 0.9.16

A brand new mu

We've just released version 0.9.16 of the mu e-mail search engine and the mu4e e-mail client for emacs. You can check the releases repo for tarballs/PDFs, and for the details.

Here, let's look at some of the new features and other changes, focusing on mu4e, since that is where most of the development went.

Contact completion

Contact completion makes it possible to compose a new message, type a few characters in the To: (or Cc:, Bcc:) field, and have mu4e automatically fill in the contact / e-mail information you were looking for.

mu4e's implementation uses the contacts from your existing e-mail corpus, trying to intelligently order them, to make it very probable that the looked-for address is in the first few matches.

In the new version, mu4e gained an improved algorithm for sorting contacts, based on how recent they are, how often we've seen them, and whether they appeared in 'personal' messages - that is, messages where your address was in one of the contact fields as well, rather than mailing-list messages.

Also, it now successfully convinces emacs to not alphabetically sort the already-sorted contacts, as it did in earlier versions. Overall, it works quite a bit nicer, especially if you have a large e-mail corpus.

Mu4e-context: Multi-account support

Many mu4e-users have asked for support for multiple accounts in mu4e; a typical use-case for this is having Work and Private accounts.

Using multiple accounts has been possible for quite some time of course - there's even an example in the manual of a simple account system, and a bit of googling reveals some other approaches around the web, such as mu4e-multi. Those have been very useful to understand the requirements, but of course weren't very deeply integrated.

Now, with version 0.9.16, mu4e gained a truly built-in system to do all of that: mu4e-context. The system is tightly integrated with the rest of mu4e, so, for example, you get the name of current context in the modeline, and it can ask you (if you want; this is all configurable) to figure out the correct context when composing new messages.

Each of the contexts may optionally have a 'match'-function, which allows mu4e to determine what is the context to use in a specific situation - so when you reply to a message, or when you want to refile it, the system can figure it out for you.

It's all documented, including some examples to set things up. See mu4e contexts in the manual.

Overall, it's a powerful system, but we took care to make simple usage easy, yet make more complex patterns possible, if you're willing to write a little elisp. There are a few ideas about extending the system, but let's gain some real-world experience with it first.


Fancy characters

There's now better support for 'fancy' (Unicode) characters in the interface. A new set of default characters, to avoid the infamous hex-box characters for common fonts, and some documentation on how to fix that in a more rigorous way.

If some font does not contain some unicode-character, emacs tries to use one from some other font. This may result in alignment problems in the UI. You can avoid that with this clever trick: Monospacifier.

Switch between html / text messages

Using the 'h'-key, it's now easy to switch between the text and html versions of messages (if they have both). The goal is to effectively deal with HTML-messages within emacs, even though that's sometimes hard. Using emacs' shr HTML-renderer has made it a lot better at least.

If that is not enough (looking at you, airlines), you can use the 'View in Brower' or 'View as PDF' actions in the message view to watch the messages in their full rich-text glory (press 'v' there to view the available actions).

Better integration with org-mode

Many mu4e users (including its author) use it in concert with org-mode to build an efficient productivity platform. Details of that probably warrant a separate article, but in any case, the new mu4e version adds org-mu4e-store-and-capture, which makes it very easy to add e-mails to your Todo-list or perhaps your WaitingFor-list - you could add something like the following to your org-capture-templates:

;; handle this message in the next two days
("P" "process-soon" entry (file+headline "" "Todo")
  "* TODO %a %?\nDEADLINE: %(org-insert-time-stamp (org-read-date nil t \"+2d\"))")
;; wait for an e-mail reply
("W" "wait-for-reply" entry (file+headline "" "Waiting")
  "* WAIT %u %a %?\n")

If you want quick access to those from within mu4e, you can define some key-bindings for the headers and view mode:

(define-key mu4e-headers-mode-map (kbd "C-c c") 'org-mu4e-store-and-capture)
(define-key mu4e-view-mode-map    (kbd "C-c c") 'org-mu4e-store-and-capture)


  • It's possible now to not automatically mark message you've read as, well, read. See the variable mu4e-view-auto-mark-as-read.
  • Allow for customizing the user-agent string, if that's your thing. See the variable mu4e-user-agent-string
  • Transform mailing list names en-masse, using the variable mu4e-mailing-list-patterns
  • Improved support for Cygwin

Published • 2016-01-20 | emacs