Mutt 1.9 Release Notes

Note: this is a review of some of the more interesting features in this release. For a complete list of changes please be sure to read the UPDATING file.

OpenSSL partial chain support

$ssl_verify_partial_chains enables the X509_V_FLAG_PARTIAL_CHAIN flag for OpenSSL certificate verification. This allows a certificate to be validated without trusting the entire chain: an intermediate or leaf certificate in the trusted store is enough to validate the cert.

When set, a (s)kip choice is added to the certificate prompt:

By selecting (s)kip, an intermediate or leaf node further down the chain can be saved to the $certificate_file using the (a)ccept always choice.

Note this option is only available for OpenSSL and requires version 1.0.2b or newer.

Redrawing improvements

The redrawing engine was rearchitected, allowing for a couple user visible improvements.

The first improvement is multi-line prompts:

The second improvement is the ability to process redraws while inside the line editor. Rather than the whole screen becoming distorted until after the prompt is exited, the screen will be reflowed and redrawn:

Compose menu colors

The compose menu header labels and Security status can now be colored. This is controlled by the "color compose header" and "color compose security_{encrypt|sign|both|none}" commands:

color compose header green default
color compose security_none red default

Pager header partial coloring

$header_color_partial changes how "color header" matches are applied. If unset, the default, matches will color the entire header. When set, only the matched string will be colored. This, for example, allows just header labels to be colored:

set header_color_partial
color header default green '^[^[:blank:]:]*:'
color hdrdefault yellow default

History ring duplicate removal

By default, Mutt will not add consecutively repeating commands to the history ring. When $history_remove_dups is set, Mutt will also scan and remove duplicate entries from the entire ring when adding a new entry.

IMAP improvements

Header downloading was revamped to support out of order and missing MSNs in the results. This is an uncommon but legal scenario, which previously could result in mutt hanging while downloading headers.

As a result of these improvements, body caching cleanup should be faster. Performance may be acceptable enough to leave $message_cache_clean set all the time.

$imap_poll_timeout controls how long Mutt will wait when polling a mailbox until timing out and closing the connection. The default is 15 seconds.

Self encryption

The new configuration variables $pgp_self_encrypt and $smime_self_encrypt enable adding your own key when sending an encrypted PGP or S/MIME message. $pgp_self_encrypt_as and $smime_self_encrypt_as specify the key to add.

$postpone_encrypt previously checked the value of $postpone_encrypt_as, but this doesn't support users of both PGP and S/MIME well. $postpone_encrypt will now check the $pgp_self_encrypt_as and $smime_self_encrypt_as configuration variables first, falling back to $postpone_encrypt_as if they are unset.

Forwarded messages attribution

$forward_attribution_intro and $forward_attribution_trailer can now be used to customize the (previously hardcoded) attribution messages when including a forwarded message in the body.

New pattern operators for immediate parent and children

Sometimes it is useful to select messages based on their immediate parent or children. ~<(PATTERN) and ~>(PATTERN) do this. The PATTERN is matched against a message's immediate parent or children, respectively.

So for example, ~<(~P) will match replies to your messages, while ~>(~P) will match messages that you replied to. !~<(~A) will match root messages in a thread, while !~>(~A) will match leaf messages.

Like the ~(PATTERN) operator, messages must be sorted by thread for the operator to work.

Nested encryption support in the attachment menu

Sometimes the encrypted part of a message is nested, or sometimes an encrypted message may be attached. Previously, mutt would decrypt and show the nested content in the pager, but the atttachment menu would not show any of the nested parts. This made it tricky to save or operate on any of those parts.

Here is 1.8.3 with a nested encrypted message:

And here is 1.9.0 with the same message:

Command to query an attachment's MIME type

When creating a new attachment, Mutt consults the mime.types file to determine the correct MIME type. If the attachment's extension isn't found, or if the attachment doesn't have an extension, $mime_type_query_command can be used to specify a program to run to determine the MIME type. Two suggested programs are "xdg-mime query filetype" or "file -bi".

To run the command before (or instead of) the mime.types file lookup, $mime_type_query_first should be set. Mutt will then only consult the mime.types file if the query command does not output a MIME type.