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.
Backward Incompatible Changes
This release was bumped to 2.0, not because of the magnitude of features (which is actually smaller than past releases), but because of a few changes that are backward incompatible. Please read this list carefully to be aware of these changes:
-
When using
<attach-file>to browse and add multiple attachments to an email, you may use<quit>to exit after tagging the files. Previously, "enter" had to be pressed on a non-directory file. This was awkward and non-intuitive. -
The default value of some configuration variables is
translatable. Those are marked with
type
string (localized)in the manual. Examples include $attribution and $status_format. - $ssl_force_tls defaults set. If this sounds familiar, that's because I tried this before in the 1.13.0 release, but reverted it after some breakage. I'm trying again with a major revision number bump. If you need to connect to a non-encrypted site, you will need to turn this setting off yourself.
-
<decode-copy>and<decode-save>no longer perform header weeding by default. Header weeding can be toggled back on by setting $copy_decode_weed. -
$hostname is set after
processing the muttrc and
-ecommand-line arguments. This was done to provide a way to skip DNS lookups of the FQDN, which on some systems can result in a delay when starting up. - $reply_to is processed before $reply_self.
- Normal configuration variables (as opposed to user-defined my variables) were previously escaped when used on the right hand side of an assignment. Newline was converted to "\n", carriage return to "\r", tab to "\t", backslash and double quotes were backslash escaped. This was a bug, but a long-standing one, so I note the change here.
Domain-literal support in email addresses
This feature isn't commonly needed, but see
ticket 226
for the reasoning behind the request. This allows the use of
literal IP addresses in place of the email address domain. For example
user@[IPv6:fcXX:....].
Ability to change directory
The cd command allows the ability to change
the working directory inside Mutt.
I believe this wasn't implemented previously because Mutt didn't
resolve relative paths internally. So, starting Mutt with
something like "mutt -f mymailbox"
would cause Mutt to open "mymailbox" in the current
directory and continue to refer to it as "mymailbox"
internally. If the directory changed, Mutt would still
refer (incorrectly) to "mymailbox" in the new directory.
Because of this, Mutt now also tries to resolve relative paths. This isn't as straightforward as you would think. So if you encounter issues, please let us know!
Automatic reconnect to IMAP on error
When an unplanned disconnect occurs, Mutt will try to reconnect automatically, preserving unsaved changes in the mailbox. This isn't bulletproof, but will hopefully at least reduce lost changes due to a mailbox connection freezing or being dropped.
Protected Headers Improvements
$crypt_protected_headers_subject defaults to "..." to comply with the recent recommendations.
Also, Mutt will store the Date, From, To, Cc, and Reply-To headers in protected headers. Mutt currently doesn't display or make use of those headers, but other MUA's may expect them to be there.
XOAUTH2 Support
"xoauth2" is supported as a value in $imap_authenticators, $smtp_authenticators, and $pop_authenticators. Additionally there is a refresh token script under the contrib directory which works with Python 3. (The script is not officially supported by the Mutt team, but has been reported to work.)
Pattern Completion
If you sometimes forget a pattern modifier, you can invoke
<complete> (by default bound
to the Tab key) after the ~ to get a list of pattern modifiers.
Hitting enter on a selection will add it to the line
editor.
Decode and Header Weeding
Three new variables, $copy_decode_weed, $pipe_decode_weed, and $print_decode_weed allow you to decouple the operation of "decoding" with the operation of header weeding. Pipe and print operations weed by default, preserving previous behavior. Copy and save operations do not weed by default.
MuttLisp
MuttLisp is an experimental feature providing a Lisp-like enhancement to the configuration file. It allows more dynamic decisions about commands or command-arguments; however it is not a full-blown language, and does not take the place of macros or commands.
A simple example is the ability to execute commands conditionally:
run (if (equal $USER "kevin8t8") \
"set arrow_cursor")
or, with $muttlisp_inline_eval set, dynamically generate command arguments:
set muttlisp_inline_eval
set index_format = (if (equal $sidebar_visible "yes") \
"short index format" \
"long index format")
For a more detailed introduction and examples, please see the MuttLisp manual section.
Cursor Overlay
$cursor_overlay can be
used to have an "underline" indicator, for instance,
that shows the colors of the selected line underneath.
default indicator
foreground/background colors will be set by the color of the
line instead. Attributes (such as bold, underline, reverse)
will be merged between the two.
For example:
color indicator underline default default
color index red default ~N
set cursor_overlay

With $cursor_overlay set, the "underline" cursor will
show the red foreground of a new message.
Default Attachment Save Directory
$attach_save_dir specifies a directory to use when saving attachments. Note: the prompt will be the same, but relative path files will be saved relative to that directory.