Mutt--The Next Generation

by Kyle Rankin

Related link:

As I have previously mentioned, I'm a big fan of mutt as my primary email client. Among the reasons is that I can ssh into one of my machines from any other machine, and easily and quickly check my email. Recently a new project, mutt-ng has appeared promising a number of nice new features, one or two nice enough to encourage me to switch from standard mutt. Here I'll discuss steps I took (so far) for the migration and what I like about mutt-ng.

Mutt-ng is like many OSS project forks in that it seems to be a response to slow uptake of many interesting feature additions for mutt that have been floating around the Internet in patch form. They have incorporated many of these patches (some of which have been incorporated into mutt itself recently) along with some fixes of their own, including:

  • Better view support for format=flowed attachments
  • Message IDs are configurable
  • User can set signoff_string just like in slrn
  • User can call up the "last folder" when saving attachments
  • IMAP reconnecting: when the connection to the IMAP server dies, mutt-ng attempts reconnecting
  • User can set the umask with which all the files shall be created (was hard-coded before, and caused huge problems for shared mailboxes to some people)
  • Support for NNTP, i.e. mutt-ng can be used as a newsreader
  • A sidebar similar to other (graphical) MUAs where you can directly jump to a certain mailbox

This sidebar feature is an interesting addition and is one of those "wow" features you can show your friends. Personally I've found I like the regular folder browser better, but then again I haven't tried newsgroup browsing with mutt-ng yet. Anyway, here's how it looks (from the mutt-ng blog):

One of the big feature additions that has caused me to switch to mutt-ng full time is header caching. While mutt is a fast browser, when you are loading mailboxes with 5000 messages it can be a bit sluggish. With header caching, this is no longer a problem and mutt carves through folders of every size like... like... a hot knife through butter? How about, mutt eats headers like a hungry dog eats kibbles and bits. In any case, it's fast, and is the killer feature that cemented the switch for me.

So, if you do want to switch, how do you do it? It's a fairly new project, so depending on your distribution, you will probably need to download the source from their snapshots directory. If you follow the mutt-ng development blog, you will see that a number of packagers have stepped up providing packages for debian and recently an ebuild for gentoo. Since I use debian, I just added two lines to my /etc/apt/sources.list:

deb unstable/
deb-src unstable/

Then I ran apt-get update && apt-get install mutt-ng. Once installed, there is a bit of configuration to do. In my experience, mutt-ng won't use your regular ~/.muttrc (or ~/.mutt/.muttrc) file, but instead looks for its own ~/.muttngrc file. My simple solution was to create a ~/.muttngrc file that sources my ~/.muttrc and also contains any mutt-ng-specific settings. That way I can switch back to standard mutt with minimal impact. Here's my ~/.muttngrc file so far:

#regular mutt settings
source ~/.mutt/.muttrc

# mutt-ng settings
set sidebar_visible="no"
set sidebar_width=25
set shorten_hierarchy
color sidebar_new yellow default

bind index <space> sidebar-open
bind index F flag-message
bind pager F flag-message

macro index H "c?\t"
macro index h "<enter-command>bind index j sidebar-next<enter>
<enter-command>bind index k sidebar-prev<enter>"
macro index l "<enter-command>bind index j next-undeleted<enter>
<enter-command>bind index k previous-undeleted<enter>"

macro index <f2> "<enter-command>set invsidebar_visible<enter>"
set header_cache="~/.mutt/headers"

This file does contain the configuration settings you'll need if you want a sidebar, just set sidebar_visible to yes. What I did was set up a macro so that I can toggle the sidebar view by pressing F2.

Another little tweak was the macros I attached to h and l. One problem with the sidebar is that by default there are no keys bound to navigate up and down it. I thought it would make the most sense to try to make it "vi-like" so that when I hit h, it would appear to move the cursor to the left, and j and k would move up and down the sidebar. Then when I hit l, j and k would move up and down my index. One thing I haven't figured out is how to escape <enter> so that I can bind a key to enter inside a macro.

Note the last line points to my header cache. If this points to a file, mutt-ng will store all the headers in a single file. If it is a directory, it will store headers per-folder.

All in all, I'm pretty excited to see where mutt-ng development heads. They are adding a lot of nice features to it, and maybe once I give the newsgroup support a whirl I will follow-up with more information about it.

So if your .muttrc files have been collecting dust, or if you just want to try the state-of-the-art in text-based email clients (irony intended), I recommend giving mutt-ng a try.


2005-03-24 23:36:46
The official Debian packages already has the header-cache patch