Mutt 1.11 Release Notes

There were lots of little bug fixes and some internal changes during this development cycle. I think the most exciting changes were IMAP QRESYNC support and inotify monitoring, but there are a few other interesting new features too.

IMAP CONDSTORE and QRESYNC Support

Opening a large header-cached IMAP mailbox in Mutt is slow for two reasons. First, Mutt needs to know the current flags for messages. Second, Mutt needs to know which messages (still) exist in the mailbox.

Although it provides other functionality, Mutt uses the CONDSTORE extension to obtain flag updates since the last time the mailbox was opened. Mutt still needs to query the list of all messages, but it skip asking for flags at the same time. This makes the query slightly faster. The flag updates are then retrieved in a separate, usually much smaller, query.

The QRESYNC extension solves the second problem. It provides a way to find out what messages still exist without querying the whole list. This enables much faster opening of large mailboxes. Only changes since the last time need to be downloaded.

This feature is still new, and so defaults off. If you don't use Gmail, we would love to hear how (or if) the feature works for you. Please try it out by enabling $imap_condstore and $imap_qresync.

(Unfortunately Gmail doesn't support QRESYNC, and its CONDSTORE implementation slows things down noticably, removing all benefit of enabling the extension.)

Inotify Mailbox Monitoring

This is enabled by default for Linux users, but can be disabled at compile-time with the --disable-filemonitor flag. It uses inotify to speed up new mail notification for local mailboxes.

This feature is in addition to the normal polling via $timeout and $mail_check. It should provide faster notifications without having to turn those values way down.

OAUTHBEARER Support

This has been implemented and tested against Gmail. Mutt uses external scripts to generate the refresh token. See OAUTHBEARER Support.

To enable, "oauthbearer" needs to be added to the appropriate authenticator list: $imap_authenticators, $smtp_authenticators, or $pop_authenticators. Then the token refresh script needs to be set up in $imap_oauth_refresh_command, $smtp_oauth_refresh_command, or $pop_oauth_refresh_command.

Personally, I haven't used this, although it was contributed by Brandon Long, who worked on much of the initial IMAP implementation for Mutt. As always, feedback is appreciated.

Dynamic $index_format Content

Two new features: the %@name@ $index_format expando, and index-format-hook combine to allow dynamic content in the index.

%@name@ specifies a placeholder in the $index_format. The current message will be pattern matched against index-format-hooks with the same name. The first matching hook's format-string will be substituted and evaluated.

The format-string in an index-format-hook can contain other expandos, including a %@name% expando. This allows a fair amount of flexibility, while still keeping the $index_format readable.

One potential use is dynamically formatting dates based on the age of the message, for example:

      set index_format="%Z %-20.20F %s %*  %@reldate@"

      index-format-hook  reldate  "%d<1d"  "%[!%X]"   # show time
      index-format-hook  reldate  "~A"     "%[!%x]"   # show date
    

In addition, to allow for more granular matching, the relative date units H (hour), M (minute), and S (second) have been added.

Smaller Features and Noteworthy Bugfixes:

Manually updating mailbox stats

When $mail_check_stats is set, Mutt will periodically check the unread, flagged, and total message counts for monitored mailboxes.

If you'd rather perform this update yourself, the new function <check-stats> can be invoked.

Thread limited views and new mail

Thread limited views, e.g. ~(~f me), did not properly display new messages that arrived while the limit was in effect. This has now been fixed, along with a few other related issues.

-z and -Z work for IMAP mailboxes

Command line argument -z, checks $spoolfile or the -f argument for new mail and exits if there is none. It previously was not hooked up to poll an IMAP mailbox but now does.

-Z polls all monitored mailboxes. It previously worked with IMAP only if $imap_passive was unset. It will now poll IMAP mailboxes, regardless of the value of $imap_passive.

$abort_noattach skips quoted lines

$abort_noattach will now skip scanning lines that are considered "quoted lines", as determined by $quote_regexp and $smileys. This seems reasonable behavior, so I have not included an option to toggle the behavior.

Ability to abort opening a large IMAP mailbox

Mutt now allows ctrl-c to abort opening an IMAP mailbox. Note this will close the mailbox and connection.

Composing to the current message sender

The <compose-to-sender> function allows you to compose a new email to the sender of the currently selected message(s). Note this generates a brand new email: it doesn't respect Reply-To, Mail-Followup-To, or generate a References header.

This feature was requested in #63 based on a NeoMutt feature. However the implementation is different (well... better ;-) ), with proper mode checks, and works on messages in the attachment menu too.

Address book queries and multibyte characters

Strangely, the query menu did not properly handle multibyte characters, resulting in misaligned output for those cases. It's a small but annoying thing fixed in this release.

pgpring renamed to mutt_pgpring

Although it's unlikely there are many original PGP (Pretty Good Privacy) users, the binary to list the keyring has been renamed from pgpring to mutt_pgpring (due to a naming conflict with the signing-party package). Users will need to update their $pgp_list_pubring_command and $pgp_list_secring_command to refer to mutt_pgpring instead. See the contrib/pgp5.rc or contrib/pgp6.rc files.

SHA-256 in cert prompts

MD5 fingerprints were removed and replaced with SHA-256 fingerprints.

Non-threaded $sort_aux

For a $sort value other than "threads", $sort_aux "reverse-" prefixed values are now functional.

GNU Info manual

For those interested, the manual can now be generated in GNU Info format too. Install-info is required to properly install the info file. Those compiling from git will also need docbook2x-texi and makeinfo installed.