                           The NeoMutt E-Mail Client

  Richard Russon

<rich@flatcap.org>

version 2026-05-04

Abstract

"Teaching an old dog new tricks"

--------------------------------------------------------------------------------

Table of Contents

1. Introduction

             1. NeoMutt Home Page

             2. Mailing Lists

             3. NeoMutt Online Resources

             4. Contributing to NeoMutt

             5. Typographical Conventions

             6. Copyright

2. Getting Started

             1. Core Concepts

             2. Screens and Menus

                          2.1. Index

                          2.2. Pager

                          2.3. File Browser

                          2.4. Sidebar

                          2.5. Help

                          2.6. Compose Menu

                          2.7. Alias Menu

                          2.8. Attachment Menu

             3. Moving Around in Menus

             4. Editing Input Fields

                          4.1. Introduction

                          4.2. History

             5. Reading Mail

                          5.1. The Message Index

                          5.2. The Pager

                          5.3. Threaded Mode

                          5.4. Miscellaneous Functions

             6. Sending Mail

                          6.1. Introduction

                          6.2. Editing the Message Header

                          6.3. Sending Cryptographically Signed/Encrypted
                          Messages

                          6.4. Sending Format=Flowed Messages

             7. Forwarding and Bouncing Mail

             8. Postponing Mail

             9. Logging

             10. Encryption and Signing

                          10.1. OpenPGP Configuration

                          10.2. S/MIME Configuration

3. Configuration

             1. Location of Initialization Files

                          1.1. Location of system config files

                          1.2. Location of user config files

                          1.3. Config Priority

             2. Starter NeoMuttrc

             3. Syntax of Initialization Files

             4. Address Groups

             5. Defining/Using Aliases

             6. Changing the Default Key Bindings

                          6.1. Binding a Key Sequence to a Function

                          6.2. Unbinding a Key Sequence

                          6.3. Enter versus Return

                          6.4. Warnings about Duplicated Bindings

                          6.5. Terminal Keybindings

             7. Changing the current working directory

             8. Defining Aliases for Character Sets

             9. Setting Variables Based Upon Mailbox

             10. Keyboard Macros

                          10.1. Creating a Key Macro

                          10.2. Removing a Key Macro

             11. Using Color and Mono Video Attributes

                          11.1. Color Style

                          11.2. Simple Colors

                          11.3. Color Lists

                          11.4. Mono Color

             12. Message Header Display

                          12.1. Header Display

                          12.2. Selecting Headers

                          12.3. Ordering Displayed Headers

             13. Alternative Addresses

             14. Mailing Lists

             15. Using Multiple Spool Mailboxes

             16. Monitoring Incoming Mail

             17. User-Defined Headers

             18. Specify Default Fcc: and/or Save Mailbox

             19. Change Settings Based Upon Message Recipients

             20. Change Settings Before Formatting a Message

             21. Choosing the Cryptographic Key of the Recipient

             22. Dynamically Changing $index_format using Patterns

             23. Adding Key Sequences to the Keyboard Buffer

             24. Executing Functions

             25. Message Scoring

             26. Spam Detection

             27. Setting and Querying Variables

                          27.1. Variable Types

                          27.2. Commands

                          27.3. User-Defined Variables

                          27.4. Type Conversions

             28. Reading Initialization Commands From Another File

             29. Removing Hooks

             30. Format Strings

                          30.1. Basic usage

                          30.2. Conditionals

                          30.3. Filters

                          30.4. Padding

                          30.5. Conditional Dates

                          30.6. Bytes size display

             31. Control allowed header fields in a mailto: URL

4. Advanced Usage

             1. Character Set Handling

             2. Regular Expressions

             3. Patterns: Searching, Limiting and Tagging

                          3.1. Pattern Modifier

                          3.2. Simple Searches

                          3.3. Nesting and Boolean Operators

                          3.4. Searching by Date

                          3.5. Gmail Patterns

             4. Marking Messages

             5. Using Tags

             6. Using Hooks

                          6.1. Message Matching in Hooks

                          6.2. Mailbox Matching in Hooks

             7. Managing the Environment

             8. External Address Queries

             9. Mailbox Formats

             10. Mailbox Shortcuts

             11. Handling Mailing Lists

             12. Display Munging

             13. New Mail Detection

                          13.1. How New Mail Detection Works

                          13.2. Polling For New Mail

                          13.3. Monitoring New Mail

                          13.4. Calculating Mailbox Message Counts

             14. Editing Threads

                          14.1. Linking Threads

                          14.2. Breaking Threads

             15. Delivery Status Notification (DSN) Support

             16. Start a WWW Browser on URLs

             17. Echoing Text

             18. Message Composition Flow

             19. Miscellany

5. NeoMutt's MIME Support

             1. Using MIME in NeoMutt

                          1.1. MIME Overview

                          1.2. Viewing MIME Messages in the Pager

                          1.3. The Attachment Menu

                          1.4. The Compose Menu

             2. MIME Type Configuration with mime.types

             3. MIME Viewer Configuration with Mailcap

                          3.1. The Basics of the Mailcap File

                          3.2. Secure Use of Mailcap

                          3.3. Advanced Mailcap Usage

                          3.4. Example Mailcap Files

             4. MIME Autoview

             5. MIME Multipart/Alternative

                          5.1. Reading Multipart/Alternative Emails

                          5.2. Composing Multipart/Alternative Emails

             6. MIME Multipart/Multilingual

                          6.1. Reading Multipart/Multilingual Emails

                          6.2. Composing Multipart/Multilingual Emails

             7. MIME Multipart/Related

                          7.1. Composing Multipart/Related Emails

             8. Attachment Searching and Counting

             9. MIME Lookup

6. Optional Features

             1. General Notes

                          1.1. Enabling/Disabling Features

                          1.2. URL Syntax

             2. SSL/TLS Support

                          2.1. STARTTLS

                          2.2. Tunnel

             3. POP3 Support

                          3.1. Remote POP3 mailboxes

                          3.2. Fetching mail from a POP3 server

             4. IMAP Support

                          4.1. The IMAP Folder Browser

                          4.2. Authentication

             5. SMTP Support

             6. OAUTHBEARER and XOAUTH2 Support

             7. Managing Multiple Accounts

             8. Local Caching

                          8.1. Header Caching

                          8.2. Body Caching

                          8.3. Cache Directories

                          8.4. Maintenance

             9. Account Command Feature

                          9.1. Support

                          9.2. Introduction

                          9.3. Usage

                          9.4. Known Bugs

                          9.5. Credits

             10. Attach Headers Color Feature

                          10.1. Support

                          10.2. Introduction

                          10.3. Usage

                          10.4. neomuttrc

                          10.5. See Also

                          10.6. Known Bugs

                          10.7. Credits

             11. Command-line Crypto (-C) Feature

                          11.1. Support

                          11.2. Introduction

                          11.3. Usage

                          11.4. neomuttrc

                          11.5. gitconfig

                          11.6. Credits

             12. Compose Message Preview Feature

                          12.1. Support

                          12.2. Introduction

                          12.3. Variables

                          12.4. Functions

                          12.5. Limitations

                          12.6. Credits

             13. Compose to Sender Feature

                          13.1. Support

                          13.2. Introduction

                          13.3. Functions

                          13.4. neomuttrc

                          13.5. Known Bugs

                          13.6. Credits

             14. Compressed Folders Feature

                          14.1. Support

                          14.2. Introduction

                          14.3. Commands

                          14.4. neomuttrc

                          14.5. See Also

                          14.6. Credits

             15. Conditional Dates Feature

                          15.1. Support

                          15.2. Introduction

                          15.3. Variables

                          15.4. neomuttrc

                          15.5. See Also

                          15.6. Known Bugs

                          15.7. Credits

             16. Encrypt-to-Self Feature

                          16.1. Support

                          16.2. Introduction

                          16.3. Variables

                          16.4. neomuttrc

                          16.5. Known Bugs

                          16.6. Credits

             17. Encryption information block

                          17.1. Support

                          17.2. Introduction

                          17.3. Usage

                          17.4. Credits

             18. Fmemopen Feature

                          18.1. Support

                          18.2. Introduction

                          18.3. See Also

                          18.4. Known Bugs

                          18.5. Credits

             19. Forgotten Attachment Feature

                          19.1. Support

                          19.2. Introduction

                          19.3. Variables

                          19.4. neomuttrc

                          19.5. See Also

                          19.6. Known Bugs

                          19.7. Credits

             20. Global Hooks

                          20.1. Introduction

                          20.2. Commands

                          20.3. neomuttrc

                          20.4. See Also

                          20.5. Known Bugs

                          20.6. Credits

             21. Header Cache Compression Feature

                          21.1. Support

                          21.2. Introduction

                          21.3. Variables

                          21.4. neomuttrc

                          21.5. Known Bugs

                          21.6. Credits

             22. Ifdef Feature

                          22.1. Support

                          22.2. Introduction

                          22.3. Commands

                          22.4. neomuttrc

                          22.5. Known Bugs

                          22.6. Credits

             23. Index Color Feature

                          23.1. Support

                          23.2. Introduction

                          23.3. Colors

                          23.4. neomuttrc

                          23.5. See Also

                          23.6. Known Bugs

                          23.7. Credits

             24. Initials Expando Feature

                          24.1. Support

                          24.2. Introduction

                          24.3. Variables

                          24.4. neomuttrc

                          24.5. See Also

                          24.6. Known Bugs

                          24.7. Credits

             25. Kyoto Cabinet Feature

                          25.1. Support

                          25.2. Introduction

                          25.3. See Also

                          25.4. Known Bugs

                          25.5. Credits

             26. Limit Current Thread Feature

                          26.1. Support

                          26.2. Introduction

                          26.3. Functions

                          26.4. neomuttrc

                          26.5. Known Bugs

                          26.6. Credits

             27. LMDB Feature

                          27.1. Support

                          27.2. Introduction

                          27.3. See Also

                          27.4. Known Bugs

                          27.5. Credits

             28. Multiple FCC Feature

                          28.1. Support

                          28.2. Introduction

                          28.3. See Also

                          28.4. Known Bugs

                          28.5. Credits

             29. Nested If Feature

                          29.1. Support

                          29.2. Introduction

                          29.3. Variables

                          29.4. neomuttrc

                          29.5. See Also

                          29.6. Known Bugs

                          29.7. Credits

             30. New Mail Feature

                          30.1. Support

                          30.2. Introduction

                          30.3. Variables

                          30.4. neomuttrc

                          30.5. See Also

                          30.6. Known Bugs

                          30.7. Credits

             31. NNTP Feature

                          31.1. Support

                          31.2. Introduction

                          31.3. Variables

                          31.4. Functions

                          31.5. neomuttrc

                          31.6. Known Bugs

                          31.7. Credits

             32. Custom backend based Tags Feature

                          32.1. Support

                          32.2. Introduction

                          32.3. Variables

                          32.4. Functions

                          32.5. Commands

                          32.6. Colors

                          32.7. neomuttrc

                          32.8. Credits

             33. Notmuch Feature

                          33.1. Support

                          33.2. Introduction

                          33.3. Using Notmuch

                          33.4. Variables

                          33.5. Functions

                          33.6. Colors

                          33.7. neomuttrc

                          33.8. See Also

                          33.9. Known Bugs

                          33.10. Credits

             34. Pager Read Delay Feature

                          34.1. Support

                          34.2. Introduction

                          34.3. Functions

                          34.4. Variables

                          34.5. neomuttrc

                          34.6. Known Bugs

                          34.7. Credits

             35. Progress Bar Feature

                          35.1. Support

                          35.2. Introduction

                          35.3. Colors

                          35.4. neomuttrc

                          35.5. See Also

                          35.6. Known Bugs

                          35.7. Credits

             36. Quasi-Delete Feature

                          36.1. Support

                          36.2. Introduction

                          36.3. Functions

                          36.4. neomuttrc

                          36.5. See Also

                          36.6. Known Bugs

                          36.7. Credits

             37. Reply With X-Original-To Feature

                          37.1. Support

                          37.2. Introduction

                          37.3. Variables

                          37.4. neomuttrc

                          37.5. Credits

             38. Sensible Browser Feature

                          38.1. Support

                          38.2. Introduction

                          38.3. See Also

                          38.4. Known Bugs

                          38.5. Credits

             39. Sidebar Feature

                          39.1. Support

                          39.2. Introduction

                          39.3. Variables

                          39.4. Functions

                          39.5. Commands

                          39.6. Colors

                          39.7. Sort

                          39.8. neomuttrc

                          39.9. See Also

                          39.10. Known Bugs

                          39.11. Credits

             40. Skip Quoted Feature

                          40.1. Support

                          40.2. Introduction

                          40.3. Functions

                          40.4. Variables

                          40.5. neomuttrc

                          40.6. Known Bugs

                          40.7. Credits

             41. Status Color Feature

                          41.1. Support

                          41.2. Introduction

                          41.3. Commands

                          41.4. Colors

                          41.5. neomuttrc

                          41.6. See Also

                          41.7. Known Bugs

                          41.8. Credits

             42. TLS-SNI Feature

                          42.1. Support

                          42.2. Introduction

                          42.3. Known Bugs

                          42.4. Credits

             43. Trash Folder Feature

                          43.1. Support

                          43.2. Introduction

                          43.3. Variables

                          43.4. Functions

                          43.5. neomuttrc

                          43.6. See Also

                          43.7. Known Bugs

                          43.8. Credits

             44. Use Threads Feature

                          44.1. Support

                          44.2. Introduction

                          44.3. Functions

                          44.4. Variables

                          44.5. Use Threads

                          44.6. neomuttrc

                          44.7. Known Bugs

                          44.8. Credits

             45. Autocrypt

                          45.1. Requirements

                          45.2. First Run

                          45.3. Compose Menu

                          45.4. Account Management

                          45.5. Alternative Key and Keyring Strategies

7. Security Considerations

             1. Passwords

             2. Temporary Files

             3. Information Leaks

                          3.1. Message-Id: headers

                          3.2. mailto:-style Links

             4. External Applications

8. Performance Tuning

             1. Reading and Writing Mailboxes

             2. Reading Messages from Remote Folders

             3. Searching and Limiting

9. Reference

             1. Command-Line Options

             2. Configuration Commands

             3. Configuration Variables

             4. Functions

                          4.1. Generic Menu

                          4.2. Index Menu

                          4.3. Pager Menu

                          4.4. Alias Menu

                          4.5. Query Menu

                          4.6. Attachment Menu

                          4.7. Compose Menu

                          4.8. Postpone Menu

                          4.9. Browser Menu

                          4.10. Pgp Menu

                          4.11. Smime Menu

                          4.12. Editor Menu

                          4.13. Autocrypt Account Menu

10. Miscellany

             1. Acknowledgements

             2. About This Document

List of Tables

1.1. Typographical conventions for special terms

2.1. sidebar_format

2.2. sidebar_format examples

2.3. Sidebar Color Priority

2.4. Most common navigation keys in entry-based menus

2.5. Most common navigation keys in page-based menus

2.6. Most common line editor keys

2.7. Most common message index keys

2.8. Message status flags

2.9. Message recipient flags

2.10. Most common pager keys

2.11. ANSI escape sequences

2.12. Color sequences

2.13. Most common thread mode keys

2.14. Special Thread Characters

2.15. Most common mail sending keys

2.16. Most common compose menu keys

2.17. PGP key menu flags

2.18. PGP key menu validity

3.1. NeoMutt config file search order

3.2. NeoMutt system config file locations

3.3. NeoMutt user config file locations

3.4. Config Priority

3.5. Symbolic key names

3.6. Fallback key bindings

3.7. Simple Colours

3.8. Simple Sidebar Colours

3.9. Simple Compose Colours

3.10. Quoted Email Colours

3.11. Colour Regex Lists

4.1. POSIX regular expression character classes

4.2. Regular expression repetition operators

4.3. GNU regular expression extensions

4.4. Pattern modifiers

4.5. Alias pattern modifiers

4.6. Relative Message Number Ranges

4.7. Message Number Shortcuts

4.8. Absolute Message Number Ranges

4.9. Simple search keywords

4.10. Date units

4.11. Relative date units

4.12. Gmail Example Patterns

4.13. Mailbox shortcuts

5.1. Supported MIME types

6.1. Message Preview Variables

6.2. Message Preview Functions

6.3. compose-to-sender Functions

6.4. Not all Hooks are Required

6.5. Potential Formatting Scheme

6.6. Date Formatting Codes

6.7. Example Date Tests

6.8. Example 1

6.9. Example 2

6.10. encrypt-self Variables

6.11. forgotten-attachment Variables

6.12. Header Cache Compression Variables

6.13. Header Cache Compression Methods and it's Levels

6.14. ifdef Symbols

6.15. Index Colors

6.16. Limit-Current-Thread Functions

6.17. New Mail Command Variables

6.18. NNTP Variables

6.19. NNTP Functions

6.20. Custom tags Variables

6.21. Notmuch/IMAP Functions

6.22. Index Colors

6.23. Notmuch Variables

6.24. Notmuch Functions

6.25. Progress Colors

6.26. Quasi-Delete Functions

6.27. Reply With X-Original-To Variables

6.28. Sidebar Variables

6.29. Sidebar Functions

6.30. Sidebar Colors

6.31. Sidebar Sort

6.32. Skip Quoted Functions

6.33. Skip-Quoted Variables

6.34. Status Colors

6.35. Trash Variables

6.36. Trash Functions

6.37. Use Threads

9.1. Command line options

9.2. Default Generic Menu Bindings

9.3. Default Index Menu Bindings

9.4. Default Pager Menu Bindings

9.5. Default Alias Menu Bindings

9.6. Default Query Menu Bindings

9.7. Default Attachment Menu Bindings

9.8. Default Compose Menu Bindings

9.9. Default Postpone Menu Bindings

9.10. Default Browser Menu Bindings

9.11. Default Pgp Menu Bindings

9.12. Default Smime Menu Bindings

9.13. Default Editor Menu Bindings

9.14. Default Autocrypt Account Menu Bindings

List of Examples

3.1. Multiple configuration commands per line

3.2. Commenting configuration files

3.3. Escaping quotes in configuration files

3.4. Splitting long configuration commands over several lines

3.5. Using external command's output in configuration files

3.6. Preventing the output of backticks from being parsed

3.7. Using environment variables in configuration files

3.8. Configuring external alias files

3.9. Setting sort method based on mailbox name

3.10. Header weeding

3.11. Configuring header display order

3.12. Defining custom headers

3.13. Using %-expandos in save-hook

3.14. Embedding push in folder-hook

3.15. Configuring spam detection

3.16. Using user-defined variables for config file readability

3.17. Using user-defined variables for backing up other config option values

3.18. Deferring user-defined variable expansion to runtime

3.19. Type conversions using variables

3.20. Using external filters in format strings

4.1. Matching a literal dot

4.2. Using \s and matching a literal dot in patterns

4.3. Matching all addresses in address lists

4.4. Matching restricted to aliases

4.5. Matching any defined alias

4.6. Using boolean operators in patterns

4.7. Specifying a "default" hook

4.8. Subject Munging

5.1. mime.types

5.2. Attachment counting

6.1. URLs

6.2. Managing multiple accounts

6.3. Example of open-hook

6.4. Example of close-hook

6.5. Example of append-hook

                            Chapter 1. Introduction

Table of Contents

1. NeoMutt Home Page

2. Mailing Lists

3. NeoMutt Online Resources

4. Contributing to NeoMutt

5. Typographical Conventions

6. Copyright

NeoMutt is a  small but very  powerful text-based MIME  mail client. NeoMutt  is
highly configurable, and  is well suited  to the mail  power user with  advanced
features like key bindings, keyboard macros, mail threading, regular  expression
searches and  a  powerful pattern  matching  language for  selecting  groups  of
messages.

1. NeoMutt Home Page

The homepage can be found at https://neomutt.org.

2. Mailing Lists

  o <neomutt-users@neomutt.org> -  help, bug  reports and  feature requests.  To
    subscribe    to     this     list,     please     send     a     mail     to
    <neomutt-users-request@neomutt.org> with the subject "subscribe".

  o <neomutt-devel@neomutt.org> - development mailing list. To subscribe to this
    list, please  send a  mail to  <neomutt-devel-request@neomutt.org> with  the
    subject "subscribe".

3. NeoMutt Online Resources

Issue Tracking System

        Bugs  may  be  reported  on  the  devel  mailing  list,  or  on  GitHub:
        https://github.com/neomutt/neomutt/issues

IRC

        For the IRC user community, visit channel #neomutt on irc.libera.chat.

4. Contributing to NeoMutt

There are various ways to contribute to the NeoMutt project.

Especially for new users  it may be  helpful to meet  other new and  experienced
users to chat about NeoMutt, talk about problems and share tricks.

Since translations of NeoMutt into  other languages are highly appreciated,  the
NeoMutt developers always  look for  skilled translators that  help improve  and
continue to maintain stale translations.

For contributing code patches  for new features and  bug fixes, please refer  to
the developer pages at https://neomutt.org/dev.html for more details.

5. Typographical Conventions

This section lists  typographical conventions followed  throughout this  manual.
See  table  Table  1.1,  "Typographical  conventions  for  special  terms"   for
typographical conventions for special terms.

Table 1.1. Typographical conventions for special terms

+----------------+-----------------------------------------+
|      Item      |              Refers to...               |
+----------------+-----------------------------------------+
| printf(3)      | UNIX manual pages, execute man 3 printf |
+----------------+-----------------------------------------+
| <PageUp>       | named keys                              |
+----------------+-----------------------------------------+
| <create-alias> | named NeoMutt function                  |
+----------------+-----------------------------------------+
| ^G             | Control+G key combination               |
+----------------+-----------------------------------------+
| $mail_check    | NeoMutt configuration option            |
+----------------+-----------------------------------------+
| $HOME          | environment variable                    |
+----------------+-----------------------------------------+

Examples are presented as:

neomutt -v

Within command synopsis, curly brackets ("{}") denote a set of options of  which
one is mandatory, square brackets  ("[]") denote optional arguments, three  dots
denote that the argument may be repeated arbitrary times.

6. Copyright

NeoMutt  is  Copyright  (c)  2015-2024  Richard  Russon  <rich@flatcap.org>  and
friends.

This program is free  software; you can redistribute  it and/or modify it  under
the terms of the GNU  General Public License as  published by the Free  Software
Foundation; either  version 2  of the  License, or  (at your  option) any  later
version.

This program is distributed in the hope that it will be useful, but WITHOUT  ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR  A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received  a copy of  the GNU General  Public License along  with
this program; if not, write to  the Free Software Foundation, Inc., 51  Franklin
Street, Fifth Floor, Boston, MA 02110-1301, USA.

                           Chapter 2. Getting Started

Table of Contents

1. Core Concepts

2. Screens and Menus

             2.1. Index

             2.2. Pager

             2.3. File Browser

             2.4. Sidebar

             2.5. Help

             2.6. Compose Menu

             2.7. Alias Menu

             2.8. Attachment Menu

3. Moving Around in Menus

4. Editing Input Fields

             4.1. Introduction

             4.2. History

5. Reading Mail

             5.1. The Message Index

             5.2. The Pager

             5.3. Threaded Mode

             5.4. Miscellaneous Functions

6. Sending Mail

             6.1. Introduction

             6.2. Editing the Message Header

             6.3. Sending Cryptographically Signed/Encrypted Messages

             6.4. Sending Format=Flowed Messages

7. Forwarding and Bouncing Mail

8. Postponing Mail

9. Logging

10. Encryption and Signing

             10.1. OpenPGP Configuration

             10.2. S/MIME Configuration

This section is intended as  a brief overview of how  to use NeoMutt. There  are
many other features which are described  elsewhere in the manual. There is  even
more information available  in the NeoMutt  FAQ and various  web pages. See  the
NeoMutt homepage for more details.

The keybindings described in this section are the defaults as distributed.  Your
local system administrator may have altered the defaults for your site. You  can
always type "?" in any menu to display the current bindings.

The first thing you need  to do is invoke NeoMutt,  simply by typing neomutt  at
the command line. There are various command-line options, see either the NeoMutt
man page or the reference.

1. Core Concepts

NeoMutt is a text-based application which interacts with users through different
menus which are mostly line-/entry-based or page-based. A line-based menu is the
so-called "index" menu (listing all messages of the currently opened folder)  or
the "alias" menu (allowing you to  select recipients from a list). Examples  for
page-based menus are the "pager" (showing one  message at a time) or the  "help"
menu listing all available key bindings.

The user interface consists  of a context  sensitive help line  at the top,  the
menu's contents followed  by a  context sensitive  status line  and finally  the
command line.  The command  line  is used  to  display informational  and  error
messages as well as for prompts and for entering interactive commands.

NeoMutt is configured through variables which, if the user wants to  permanently
use a non-default value, are written to configuration files. NeoMutt supports  a
rich config file syntax  to make even complex  configuration files readable  and
commentable.

Because NeoMutt  allows  for customizing  almost  all key  bindings,  there  are
so-called "functions" which can be executed manually (using the command line) or
in macros. Macros allow the user to bind a sequence of commands to a single  key
or a short  key sequence instead  of repeating  a sequence of  actions over  and
over.

Many commands (such as  saving or copying  a message to  another folder) can  be
applied to a single message or a set of messages (so-called "tagged"  messages).
To help selecting  messages, NeoMutt  provides a  rich set  of message  patterns
(such as recipients, sender, body contents, date sent/received, etc.) which  can
be combined into complex expressions using the boolean and and or operations  as
well as negating. These patterns  can also be used  to (for example) search  for
messages or to limit the index to show only matching messages.

NeoMutt supports a  "hook" concept which  allows the user  to execute  arbitrary
configuration commands and functions  in certain situations  such as entering  a
folder, starting a new message or replying  to an existing one. These hooks  can
be used  to  highly customize  NeoMutt's  behavior including  managing  multiple
identities,  customizing  the  display  for   a  folder  or  even   implementing
auto-archiving based on a per-folder basis and much more.

Besides an interactive mode, NeoMutt can also be used as a command-line tool  to
send messages. See  Table 9.1,  "Command line options"  for a  complete list  of
command-line options.

2. Screens and Menus

  2.1. Index

The index is the screen  that you usually see first  when you start NeoMutt.  It
gives an overview over your emails in the currently opened mailbox. By  default,
this is your system mailbox. The information you  see in the index is a list  of
emails, each with its number on the left, its flags (new email, important email,
email that has been forwarded or replied  to, tagged email, ...), the date  when
email was sent, its sender, the  email size, and the subject. Additionally,  the
index also shows thread hierarchies: when you  reply to an email, and the  other
person replies back, you can see the other person's email in a "sub-tree" below.
This is especially useful for personal email  between a group of people or  when
you've subscribed to mailing lists.

  2.2. Pager

The pager is responsible for showing the email content. On the top of the  pager
you have an overview over the most important email headers like the sender,  the
recipient, the  subject, and  much more  information. How  much information  you
actually see depends on your configuration, which we'll describe below.

Below the headers, you see the email body which usually contains the message. If
the email contains  any attachments, you  will see more  information about  them
below the email body, or, if the  attachments are text files, you can view  them
directly in the pager.

To give the user a  good overview, it is possible  to configure NeoMutt to  show
different things in the pager  with different colors. Virtually everything  that
can be described  with a  regular expression can  be colored,  e.g. URLs,  email
addresses or smileys.

  2.3. File Browser

The file browser  is the  interface to  the local  or remote  file system.  When
selecting a  mailbox  to open,  the  browser  allows custom  sorting  of  items,
limiting the items shown by a regular expression and a freely adjustable  format
of what to display in which way. It also allows for easy navigation through  the
file system when selecting file(s) to attach to a message, select multiple files
to attach and many more.

Some mail systems can  nest mail folders inside  other mail folders. The  normal
open entry commands in NeoMutt will open  the mail folder and you can't see  the
sub-folders. If you instead use the <descend-directory> function it will go into
the directory and not open it as a mail directory.

  2.4. Sidebar

The Sidebar shows a list  of all your mailboxes. The  list can be turned on  and
off, it can be themed and the list style can be configured.

This part of the manual is suitable  for beginners. If you already know  NeoMutt
you could skip ahead to the main Sidebar guide. If you just want to get started,
you could use the sample Sidebar neomuttrc.

Let's turn on the Sidebar:

set sidebar_visible
set sidebar_format = "%B%<F? [%F]>%* %<N?%N/>%S"
set mail_check_stats

You will see something  like this. A list  of mailboxes on the  left. A list  of
emails, from the selected mailbox, on the right.

Fruit [1]     3/8|  1    + Jan 24  Rhys Lee         (192)  Yew
Animals [1]   2/6|  2    + Feb 11  Grace Hall       (167)  Ilama
Cars            4|  3      Feb 23  Aimee Scott      (450)  Nectarine
Seas          1/7|  4    ! Feb 28  Summer Jackson   (264)  Lemon
                 |  5      Mar 07  Callum Harrison  (464)  Raspberry
                 |  6 N  + Mar 24  Samuel Harris    (353)  Tangerine
                 |  7 N  + Sep 05  Sofia Graham     (335)  Cherry
                 |  8 N    Sep 16  Ewan Brown       (105)  Ugli
                 |
                 |

This user has four mailboxes: "Fruit", "Cars", "Animals" and "Seas".

The current, open,  mailbox is "Fruit".  We can also  see information about  the
other mailboxes. For example: The "Animals" mailbox contains, 1 flagged email, 2
new emails out of a total of 6 emails.

    2.4.1. Navigation

The Sidebar adds some new functions to NeoMutt.

The user pressed the  "c" key to <change-folder>  to the "Animals" mailbox.  The
Sidebar automatically updated the indicator to match.

Fruit [1]     3/8|  1      Jan 03  Tia Gibson       (362)  Caiman
Animals [1]   2/6|  2    + Jan 22  Rhys Lee         ( 48)  Dolphin
Cars            4|  3    ! Aug 16  Ewan Brown       (333)  Hummingbird
Seas          1/7|  4      Sep 25  Grace Hall       ( 27)  Capybara
                 |  5 N  + Nov 12  Evelyn Rogers    (453)  Tapir
                 |  6 N  + Nov 16  Callum Harrison  (498)  Hedgehog
                 |
                 |
                 |
                 |

Let's map some functions:

bind index,pager \CP sidebar-prev       # Ctrl-P - Previous Mailbox
bind index,pager \CN sidebar-next       # Ctrl-N - Next Mailbox
bind index,pager \CO sidebar-open       # Ctrl-O - Open Highlighted Mailbox

Pressing "Ctrl-N" (Next mailbox) twice will  move the Sidebar highlight to  down
to the "Seas" mailbox.

Fruit [1]     3/8|  1      Jan 03  Tia Gibson       (362)  Caiman
Animals [1]   2/6|  2    + Jan 22  Rhys Lee         ( 48)  Dolphin
Cars            4|  3    ! Aug 16  Ewan Brown       (333)  Hummingbird
Seas          1/7|  4      Sep 25  Grace Hall       ( 27)  Capybara
                 |  5 N  + Nov 12  Evelyn Rogers    (453)  Tapir
                 |  6 N  + Nov 16  Callum Harrison  (498)  Hedgehog
                 |
                 |
                 |
                 |

  Note

Functions <sidebar-next> and <sidebar-prev> move the Sidebar highlight. They  do
not change the open mailbox.

Press "Ctrl-O" (<sidebar-open>) to open the highlighted mailbox.

Fruit [1]     3/8|  1    ! Mar 07  Finley Jones     (139)  Molucca Sea
Animals [1]   2/6|  2    + Mar 24  Summer Jackson   ( 25)  Arafura Sea
Cars            4|  3    + Feb 28  Imogen Baker     (193)  Pechora Sea
Seas          1/7|  4 N  + Feb 23  Isla Hussain     (348)  Balearic Sea
                 |
                 |
                 |
                 |
                 |
                 |

    2.4.2. Features

The Sidebar shows a list of mailboxes in a panel.

Everything about the Sidebar can be configured.

State of the Sidebar

  o Visibility

  o Width

Which mailboxes are displayed

  o Display all

  o Limit to mailboxes with new mail

  o Pin mailboxes to display always

The order in which mailboxes are displayed

  o Unsorted (order of mailboxes commands)

  o Sorted alphabetically

  o Sorted by number of new mails

Color

  o Sidebar indicators and divider

  o Mailboxes depending on their type

  o Mailboxes depending on their contents

Key bindings

  o Hide/Unhide the Sidebar

  o Select previous/next mailbox

  o Select previous/next mailbox with new mail

  o Page up/down through a list of mailboxes

Misc

  o Formatting string for mailbox

  o Wraparound searching

  o Flexible mailbox abbreviations

  o Support for Unicode mailbox names (UTF-8)

    2.4.3. Display

Everything about the Sidebar can be configured.

For a quick reference:

  o Sidebar variables to set

  o Sidebar colors to apply

  o Sidebar sort methods

      2.4.3.1. Sidebar Basics

The most  important variable  is  $sidebar_visible. You  can  set this  in  your
"neomuttrc", or bind a key to the function <sidebar-toggle-visible>.

set sidebar_visible                         # Make the Sidebar visible by default
bind index,pager B sidebar-toggle-visible   # Use 'B' to switch the Sidebar on and off

Next, decide how wide you want the Sidebar to be. 25 characters might be  enough
for the mailbox name and some  numbers. Remember, you can hide/show the  Sidebar
at the press of button.

Finally, you might  want to change  the divider character.  By default,  Sidebar
draws an ASCII line between  it and the Index  panel. If your terminal  supports
it, you can use a Unicode line-drawing character.

set sidebar_width = 25                  # Plenty of space
set sidebar_divider_char = '|'          # Pretty line-drawing character

      2.4.3.2. Sidebar Format String

$sidebar_format  allows  you   to  customize   the  Sidebar   display.  For   an
introduction, read format strings including the section about conditionals.

The default value is: %D%* %n

A more detailed value is: %B%<F? [%F]>%* %<N?%N/>%S

Which breaks down as:

  o %B - Mailbox name

  o %<F? [%F]> - If flagged emails [%F], otherwise nothing

  o %* - Pad with spaces

  o %<N?%N/> - If new emails %N/, otherwise nothing

  o %S - Total number of emails

Table 2.1. sidebar_format

+--------+-------+-------------------------------------------------------------+
| Format | Notes |                         Description                         |
+--------+-------+-------------------------------------------------------------+
| %B     |       | Name of the mailbox                                         |
+--------+-------+-------------------------------------------------------------+
| %d     | * /=  | Number of deleted messages                                  |
+--------+-------+-------------------------------------------------------------+
| %D     |       | Descriptive name of the mailbox                             |
+--------+-------+-------------------------------------------------------------+
| %F     | * /-  | Number of flagged messages in the mailbox                   |
+--------+-------+-------------------------------------------------------------+
| %L     | * /=  | Number of messages after limiting                           |
+--------+-------+-------------------------------------------------------------+
| %n     | *     | If there's new mail, display "N", otherwise "  " (space).   |
+--------+-------+-------------------------------------------------------------+
| %N     | * /-  | Number of unread messages in the mailbox (seen or unseen)   |
+--------+-------+-------------------------------------------------------------+
| %o     | * /-  | Number of old messages in the mailbox (unread, but seen)    |
+--------+-------+-------------------------------------------------------------+
| %r     | * /-  | Number of read messages in the mailbox                      |
+--------+-------+-------------------------------------------------------------+
| %S     | * /-  | Size of mailbox (total number of messages)                  |
+--------+-------+-------------------------------------------------------------+
| %t     | * /=  | Number of tagged messages in the mailbox                    |
+--------+-------+-------------------------------------------------------------+
| %Z     | * /-  | Number of new messages in the mailbox (unread, unseen)      |
+--------+-------+-------------------------------------------------------------+
| %!     |       | "!": one flagged message; "!!": two flagged messages; "n!": |
|        |       | n flagged messages (for n > 2). Otherwise prints nothing.   |
+--------+-------+-------------------------------------------------------------+
| %>X    |       | Right justify the rest of the string and pad with "X"       |
+--------+-------+-------------------------------------------------------------+
| %|X    |       | Pad to the end of the line with "X"                         |
+--------+-------+-------------------------------------------------------------+
| %*X    |       | Soft-fill with character "X" as pad                         |
+--------+-------+-------------------------------------------------------------+

* = Can be optionally printed if nonzero

/- = To use these expandos, you must first:

set mail_check_stats

/= = Only applicable to the current folder

Here are some examples. They show the number of (F)lagged, (N)ew and (S)ize.

Table 2.2. sidebar_format examples

+---------------------------+---------------------------+
|          Format           |          Example          |
+---------------------------+---------------------------+
| %B%<F? [%F]>%* %<N?%N/>%S |mailbox [F]            N/S |
+---------------------------+---------------------------+
| %B%* %F:%N:%S             |mailbox              F:N:S |
+---------------------------+---------------------------+
| %B %<N?(%N)>%* %S         |mailbox (N)              S |
+---------------------------+---------------------------+
| %B%* %<F?%F/>%N           |mailbox                F/S |
+---------------------------+---------------------------+

      2.4.3.3. Abbreviating Mailbox Names

$sidebar_delim_chars tells  Sidebar how  to split  up mailbox  paths. For  local
directories use "/"; for IMAP folders use "."

        2.4.3.3.1. Example 1

This example  works well  if your  mailboxes have  unique names  after the  last
separator.

Add some mailboxes of different depths.

set folder="~/mail"
mailboxes =fruit/apple          =fruit/banana          =fruit/cherry
mailboxes =water/sea/sicily     =water/sea/archipelago =water/sea/sibuyan
mailboxes =water/ocean/atlantic =water/ocean/pacific   =water/ocean/arctic

Shorten the names:

set sidebar_short_path                  # Shorten mailbox names (truncate all subdirs)
set sidebar_component_depth=1           # Shorten mailbox names (truncate 1 subdirs)
set sidebar_delim_chars="/"             # Delete everything up to the last or Nth / character

The screenshot below  shows what the  Sidebar would look  like before and  after
shortening using sidebar_short_path.

|fruit/apple                            |apple
|fruit/banana                           |banana
|fruit/cherry                           |cherry
|water/sea/sicily                       |sicily
|water/sea/archipelago                  |archipelago
|water/sea/sibuyan                      |sibuyan
|water/ocean/atlantic                   |atlantic
|water/ocean/pacific                    |pacific
|water/ocean/arctic                     |arctic

The screenshot below  shows what the  Sidebar would look  like before and  after
shortening using sidebar_component_depth=1.

|fruit/apple                            |apple
|fruit/banana                           |banana
|fruit/cherry                           |cherry
|water/sea/sicily                       |sea/sicily
|water/sea/archipelago                  |sea/archipelago
|water/sea/sibuyan                      |sea/sibuyan
|water/ocean/atlantic                   |ocean/atlantic
|water/ocean/pacific                    |ocean/pacific
|water/ocean/arctic                     |ocean/arctic

        2.4.3.3.2. Example 2

This example works well if  you have lots of mailboxes  which are arranged in  a
tree.

Add some mailboxes of different depths.

set folder="~/mail"
mailboxes =fruit
mailboxes =fruit/apple =fruit/banana =fruit/cherry
mailboxes =water
mailboxes =water/sea
mailboxes =water/sea/sicily =water/sea/archipelago =water/sea/sibuyan
mailboxes =water/ocean
mailboxes =water/ocean/atlantic =water/ocean/pacific =water/ocean/arctic

Shorten the names:

set sidebar_short_path                  # Shorten mailbox names
set sidebar_delim_chars="/"             # Delete everything up to the last / character
set sidebar_folder_indent               # Indent folders whose names we've shortened
set sidebar_indent_string="  "          # Indent with two spaces

The screenshot below  shows what the  Sidebar would look  like before and  after
shortening.

|fruit                                  |fruit
|fruit/apple                            |  apple
|fruit/banana                           |  banana
|fruit/cherry                           |  cherry
|water                                  |water
|water/sea                              |  sea
|water/sea/sicily                       |    sicily
|water/sea/archipelago                  |    archipelago
|water/sea/sibuyan                      |    sibuyan
|water/ocean                            |  ocean
|water/ocean/atlantic                   |    atlantic
|water/ocean/pacific                    |    pacific
|water/ocean/arctic                     |    arctic

Sometimes, it will be necessary to add mailboxes, that you don't use, to fill in
part of the tree. This  will trade vertical space  for horizontal space (but  it
looks good).

      2.4.3.4. Limiting the Number of Mailboxes

If you have a lot of mailboxes, sometimes it can be useful to hide the ones  you
aren't using. $sidebar_new_mail_only tells Sidebar  to only show mailboxes  that
contain new, or flagged, email.

Sometimes it is useful  to only show  mailboxes that have  mails in them,  while
hiding the rest. $sidebar_non_empty_mailbox_only tells the Sidebar to only  show
mailboxes with a non-zero number of mails.

If you  want some  mailboxes to  be  always visible,  then use  the  sidebar_pin
command. It takes a list of mailboxes as parameters.

set sidebar_new_mail_only         # Only mailboxes with new/flagged email
sidebar_pin +fruit +fruit/apple   # Always display these two mailboxes

    2.4.4. Colors

Here is a sample color scheme:

color sidebar_background default black       # Black background
color sidebar_indicator  default color17     # Dark blue background
color sidebar_highlight  white   color238    # Grey background
color sidebar_spool_file yellow  default     # Yellow
color sidebar_unread     cyan    default     # Light blue
color sidebar_new        green   default     # Green
color sidebar_ordinary   default default     # Default colors
color sidebar_flagged    red     default     # Red
color sidebar_divider    color8  default     # Dark grey

There is a priority order when coloring Sidebar mailboxes. e.g. If a mailbox has
new mail it will have  the sidebar_new color, even  if it also contains  flagged
mails.

Table 2.3. Sidebar Color Priority

+----------+--------------------+----------------------------------------------+
| Priority |       Color        |                 Description                  |
+----------+--------------------+----------------------------------------------+
| Highest  | sidebar_indicator  | Mailbox is open                              |
+----------+--------------------+----------------------------------------------+
|          | sidebar_highlight  | Mailbox is highlighted                       |
+----------+--------------------+----------------------------------------------+
|          | sidebar_new        | Mailbox contains new mail                    |
+----------+--------------------+----------------------------------------------+
|          | sidebar_unread     | Mailbox contains unread mail                 |
+----------+--------------------+----------------------------------------------+
|          | sidebar_flagged    | Mailbox contains flagged mail                |
+----------+--------------------+----------------------------------------------+
|          | sidebar_spool_file | Mailbox is the spool_file (receives incoming |
|          |                    | mail)                                        |
+----------+--------------------+----------------------------------------------+
| Lowest   | sidebar_ordinary   | Mailbox does not match above                 |
+----------+--------------------+----------------------------------------------+

  2.5. Help

The help screen is meant to offer a quick help to the user. It lists the current
configuration of key bindings  and their associated  commands including a  short
description, and currently unbound  functions that still  need to be  associated
with a key binding (or alternatively, they can be called via the NeoMutt command
prompt).

  2.6. Compose Menu

The compose menu features a split screen containing the information which really
matters before actually sending a message by mail: who gets the message as  what
(recipients and  who  gets what  kind  of  copy). Additionally,  users  may  set
security options like deciding  whether to sign, encrypt  or sign and encrypt  a
message with/for what keys. Also, it's  used to attach messages, to re-edit  any
attachment including the message itself.

  2.7. Alias Menu

The alias menu is  used to help  users finding the  recipients of messages.  For
users who need to contact many people, there's no need to remember addresses  or
names completely because it allows for  searching, too. The alias mechanism  and
thus the  alias menu  also  features grouping  several  addresses by  a  shorter
nickname, the  actual alias,  so that  users don't  have to  select each  single
recipient manually.  The  alias menu  is  also used  to  display the  result  of
external address queries.

  2.8. Attachment Menu

As will be later discussed  in detail, NeoMutt features  a good and stable  MIME
implementation, that is, it supports sending and receiving messages of arbitrary
MIME types. The attachment menu displays  a message's structure in detail:  what
content parts  are  attached to  which  parent part  (which  gives a  true  tree
structure), which part is of  what type and what  size. Single parts may  saved,
deleted or modified to offer great and easy access to message's internals.

3. Moving Around in Menus

The most important  navigation keys  common to  line- or  entry-based menus  are
shown in Table 2.4,  "Most common navigation keys  in entry-based menus" and  in
Table 2.5,  "Most common  navigation keys  in page-based  menus" for  page-based
menus.

Table 2.4. Most common navigation keys in entry-based menus

+---------------+------------------+-------------------------------------------+
|      Key      |     Function     |                Description                |
+---------------+------------------+-------------------------------------------+
| j or <Down>   | <next-entry>     | move to the next entry                    |
+---------------+------------------+-------------------------------------------+
| k or <Up>     | <previous-entry> | move to the previous entry                |
+---------------+------------------+-------------------------------------------+
| z or <PageDn> | <next-page>      | go to the next page                       |
+---------------+------------------+-------------------------------------------+
| Z or <PageUp> | <previous-page>  | go to the previous page                   |
+---------------+------------------+-------------------------------------------+
| = or <Home>   | <first-entry>    | jump to the first entry                   |
+---------------+------------------+-------------------------------------------+
| * or <End>    | <last-entry>     | jump to the last entry                    |
+---------------+------------------+-------------------------------------------+
| q             | <quit>           | exit the current menu                     |
+---------------+------------------+-------------------------------------------+
| ?             | <help>           | list all keybindings for the current menu |
+---------------+------------------+-------------------------------------------+

Table 2.5. Most common navigation keys in page-based menus

+------------------------+-----------------+------------------------+
|          Key           |    Function     |      Description       |
+------------------------+-----------------+------------------------+
| J or <Return>          | <next-line>     | scroll down one line   |
+------------------------+-----------------+------------------------+
| <Backspace>            | <previous-line> | scroll up one line     |
+------------------------+-----------------+------------------------+
| K, <Space> or <PageDn> | <next-page>     | move to the next page  |
+------------------------+-----------------+------------------------+
| - or <PageUp>          | <previous-page> | move the previous page |
+------------------------+-----------------+------------------------+
| <Home>                 | <top>           | move to the top        |
+------------------------+-----------------+------------------------+
| <End>                  | <bottom>        | move to the bottom     |
+------------------------+-----------------+------------------------+

4. Editing Input Fields

  4.1. Introduction

NeoMutt has a built-in line editor  for inputting text, e.g. email addresses  or
filenames. The keys used to manipulate text  input are very similar to those  of
Emacs. See Table 2.6,  "Most common line  editor keys" for  a full reference  of
available functions, their default key bindings, and short descriptions.

Table 2.6. Most common line editor keys

+----------------+-------------------+--------------------------------------+
|      Key       |     Function      |             Description              |
+----------------+-------------------+--------------------------------------+
| ^A or <Home>   | <bol>             | move to the start of the line        |
+----------------+-------------------+--------------------------------------+
| ^B or <Left>   | <backward-char>   | move back one char                   |
+----------------+-------------------+--------------------------------------+
| Esc B          | <backward-word>   | move back one word                   |
+----------------+-------------------+--------------------------------------+
| ^D or <Delete> | <delete-char>     | delete the char under the cursor     |
+----------------+-------------------+--------------------------------------+
| ^E or <End>    | <eol>             | move to the end of the line          |
+----------------+-------------------+--------------------------------------+
| ^F or <Right>  | <forward-char>    | move forward one char                |
+----------------+-------------------+--------------------------------------+
| Esc F          | <forward-word>    | move forward one word                |
+----------------+-------------------+--------------------------------------+
| <Tab>          | <complete>        | complete filename, alias, or label   |
+----------------+-------------------+--------------------------------------+
| ^T             | <complete-query>  | complete address with query          |
+----------------+-------------------+--------------------------------------+
| ^K             | <kill-eol>        | delete to the end of the line        |
+----------------+-------------------+--------------------------------------+
| Esc d          | <kill-eow>        | delete to the end of the word        |
+----------------+-------------------+--------------------------------------+
| ^W             | <kill-word>       | kill the word in front of the cursor |
+----------------+-------------------+--------------------------------------+
| ^U             | <kill-line>       | delete entire line                   |
+----------------+-------------------+--------------------------------------+
| ^V             | <quote-char>      | quote the next typed key             |
+----------------+-------------------+--------------------------------------+
| <Up>           | <history-up>      | recall previous string from history  |
+----------------+-------------------+--------------------------------------+
| <Down>         | <history-down>    | recall next string from history      |
+----------------+-------------------+--------------------------------------+
| ^R             | <history-search>  | use current input to search history  |
+----------------+-------------------+--------------------------------------+
| <BackSpace>    | <backspace>       | kill the char in front of the cursor |
+----------------+-------------------+--------------------------------------+
| Esc u          | <upcase-word>     | convert word to upper case           |
+----------------+-------------------+--------------------------------------+
| Esc l          | <downcase-word>   | convert word to lower case           |
+----------------+-------------------+--------------------------------------+
| Esc c          | <capitalize-word> | capitalize the word                  |
+----------------+-------------------+--------------------------------------+
| ^G             | n/a               | abort                                |
+----------------+-------------------+--------------------------------------+
| <Return>       | n/a               | finish editing                       |
+----------------+-------------------+--------------------------------------+

^G is the generic "abort" key in NeoMutt. In addition to the line editor, it can
also be used to abort prompts. Generally, typing ^G at a confirmation prompt  or
line editor should abort the entire action.

You can remap the editor functions using the bind command. For example, to  make
the <Delete> key delete the character in front of the cursor rather than  under,
you could use:

bind editor <delete> backspace

  4.2. History

NeoMutt maintains a  history for  the built-in editor.  The number  of items  is
controlled by the $history variable and can be made persistent using an external
file specified using $history_file and $save_history. You may cycle through them
at an editor prompt  by using the  <history-up> and/or <history-down>  commands.
NeoMutt will remember the currently entered  text as you cycle through  history,
and will wrap around to the initial entry line.

NeoMutt maintains several distinct history lists, one for each of the  following
categories:

  o .neomuttrc commands

  o addresses and aliases

  o shell commands

  o mailboxes

  o filenames

  o patterns

  o everything else

NeoMutt automatically filters out consecutively repeated items from the history.
If $history_remove_dups is set, all repeated items are removed from the history.
It also mimics the  behavior of some  shells by ignoring  items starting with  a
space. The latter feature can be useful  in macros to not clobber the  history's
valuable entries with unwanted entries.

5. Reading Mail

Similar to many other mail clients, there are two modes in which mail is read in
NeoMutt. The first is  a list of  messages in the mailbox,  which is called  the
"index" menu in NeoMutt. The second mode is the display of the message contents.
This is called the "pager."

The next few sections describe the functions provided in each of these modes.

  5.1. The Message Index

Common keys used to navigate through and manage messages in the index are  shown
in Table 2.7, "Most  common message index keys".  How messages are presented  in
the index menu can be customized using the $index_format variable.

Table 2.7. Most common message index keys

+----------+---------------------------------------------+
|   Key    |                 Description                 |
+----------+---------------------------------------------+
| c        | change to a different mailbox               |
+----------+---------------------------------------------+
| Esc c    | change to a folder in read-only mode        |
+----------+---------------------------------------------+
| C        | copy the current message to another mailbox |
+----------+---------------------------------------------+
| Esc C    | decode a message and copy it to a folder    |
+----------+---------------------------------------------+
| Esc s    | decode a message and save it to a folder    |
+----------+---------------------------------------------+
| D        | delete messages matching a pattern          |
+----------+---------------------------------------------+
| d        | delete the current message                  |
+----------+---------------------------------------------+
| F        | mark as important                           |
+----------+---------------------------------------------+
| l        | show messages matching a pattern            |
+----------+---------------------------------------------+
| N        | mark message as new                         |
+----------+---------------------------------------------+
| o        | change the current sort method              |
+----------+---------------------------------------------+
| O        | reverse sort the mailbox                    |
+----------+---------------------------------------------+
| q        | save changes and exit                       |
+----------+---------------------------------------------+
| s        | save-message                                |
+----------+---------------------------------------------+
| T        | tag messages matching a pattern             |
+----------+---------------------------------------------+
| t        | toggle the tag on a message                 |
+----------+---------------------------------------------+
| Esc t    | toggle tag on entire message thread         |
+----------+---------------------------------------------+
| U        | undelete messages matching a pattern        |
+----------+---------------------------------------------+
| u        | undelete-message                            |
+----------+---------------------------------------------+
| v        | view-attachments                            |
+----------+---------------------------------------------+
| x        | abort changes and exit                      |
+----------+---------------------------------------------+
| <Return> | display-message                             |
+----------+---------------------------------------------+
| <Tab>    | jump to the next new or unread message      |
+----------+---------------------------------------------+
| @        | show the author's full e-mail address       |
+----------+---------------------------------------------+
| $        | save changes to mailbox                     |
+----------+---------------------------------------------+
| /        | search                                      |
+----------+---------------------------------------------+
| Esc /    | search-reverse                              |
+----------+---------------------------------------------+
| ^L       | clear and redraw the screen                 |
+----------+---------------------------------------------+
| ^T       | untag messages matching a pattern           |
+----------+---------------------------------------------+

In addition to  who sent the  message and the  subject, a short  summary of  the
disposition of each message is printed  beside the message number. Zero or  more
of the "flags" in Table  2.8, "Message status flags"  may appear, some of  which
can be turned on or off using these functions: <set-flag> and <clear-flag> bound
by default to "w" and "W" respectively.

Furthermore, the flags in Table 2.9,  "Message recipient flags" reflect who  the
message is addressed to. They can be customized with the $to_chars variable.

Table 2.8. Message status flags

+------+---------------------------------------------------------------+
| Flag |                          Description                          |
+------+---------------------------------------------------------------+
| D    | message is deleted (is marked for deletion)                   |
+------+---------------------------------------------------------------+
| d    | message has attachments marked for deletion                   |
+------+---------------------------------------------------------------+
| K    | contains a PGP public key                                     |
+------+---------------------------------------------------------------+
| N    | message is new                                                |
+------+---------------------------------------------------------------+
| O    | message is old                                                |
+------+---------------------------------------------------------------+
| P    | message is PGP encrypted                                      |
+------+---------------------------------------------------------------+
| r    | message has been replied to                                   |
+------+---------------------------------------------------------------+
| S    | message is signed, and the signature is successfully verified |
+------+---------------------------------------------------------------+
| s    | message is signed                                             |
+------+---------------------------------------------------------------+
| !    | message is flagged                                            |
+------+---------------------------------------------------------------+
| *    | message is tagged                                             |
+------+---------------------------------------------------------------+
| n    | thread contains new messages (only if collapsed)              |
+------+---------------------------------------------------------------+
| o    | thread contains old messages (only if collapsed)              |
+------+---------------------------------------------------------------+

Table 2.9. Message recipient flags

+------+---------------------------------------------------+
| Flag |                    Description                    |
+------+---------------------------------------------------+
| +    | message is to you and you only                    |
+------+---------------------------------------------------+
| T    | message is to you, but also to or CC'ed to others |
+------+---------------------------------------------------+
| C    | message is CC'ed to you                           |
+------+---------------------------------------------------+
| F    | message is from you                               |
+------+---------------------------------------------------+
| L    | message is sent to a subscribed mailing list      |
+------+---------------------------------------------------+
| R    | message has your address in the Reply-To field    |
+------+---------------------------------------------------+

  5.2. The Pager

By default, NeoMutt uses its built-in pager to display the contents of  messages
(an external pager such as less(1) can be configured, see $pager variable).  The
pager is  very  similar  to  the  Unix program  less(1)  though  not  nearly  as
featureful.

Table 2.10. Most common pager keys

+----------+-------------------------------------------------------------------+
|   Key    |                            Description                            |
+----------+-------------------------------------------------------------------+
| <Return> | go down one line                                                  |
+----------+-------------------------------------------------------------------+
| <Space>  | display the next page (or next message if at the end of a         |
|          | message)                                                          |
+----------+-------------------------------------------------------------------+
| -        | go back to the previous page                                      |
+----------+-------------------------------------------------------------------+
| n        | search for next match                                             |
+----------+-------------------------------------------------------------------+
| S        | skip beyond quoted text                                           |
+----------+-------------------------------------------------------------------+
| T        | toggle display of quoted text                                     |
+----------+-------------------------------------------------------------------+
| ?        | show keybindings                                                  |
+----------+-------------------------------------------------------------------+
| /        | regular expression search                                         |
+----------+-------------------------------------------------------------------+
| Esc /    | backward regular expression search                                |
+----------+-------------------------------------------------------------------+
| \        | toggle highlighting of search matches                             |
+----------+-------------------------------------------------------------------+
| ^        | jump to the top of the message                                    |
+----------+-------------------------------------------------------------------+

In addition to key bindings in Table 2.10, "Most common pager keys", many of the
functions from  the  index  menu  are  also available  in  the  pager,  such  as
<delete-message> or <copy-message> (this is one advantage over using an external
pager to view messages).

Also, the internal pager supports a couple other advanced features. For one, you
can set $pager_read_delay to operate in  a preview mode, where new messages  are
not marked read unless you remain on  the message for a certain length of  time.
Additionally, it will accept  and translate the  "standard" nroff sequences  for
bold and underline. These sequences are a series of either the letter, backspace
("^H"), the letter  again for bold  or the letter,  backspace, "_" for  denoting
underline.  NeoMutt  will  attempt  to  display  these  in  bold  and  underline
respectively if your terminal supports  them. If not, you  can use the bold  and
underline color objects to specify a color or mono attribute for them.

Additionally,  the  internal  pager  supports  the  ANSI  escape  sequences  for
character attributes.  NeoMutt  translates  them  into  the  correct  color  and
character settings. The sequences NeoMutt supports are:

\e[ Ps; Ps; ...  Ps;m

where Ps can be one of the codes shown in Table 2.11, "ANSI escape sequences".

Table 2.11. ANSI escape sequences

+-------------+----------------------------------------------------------------+
| Escape code |                          Description                           |
+-------------+----------------------------------------------------------------+
| 0           | All attributes off                                             |
+-------------+----------------------------------------------------------------+
| 1           | Bold on                                                        |
+-------------+----------------------------------------------------------------+
| 3           | Italics on                                                     |
+-------------+----------------------------------------------------------------+
| 4           | Underline on                                                   |
+-------------+----------------------------------------------------------------+
| 5           | Blink on                                                       |
+-------------+----------------------------------------------------------------+
| 7           | Reverse video on                                               |
+-------------+----------------------------------------------------------------+
| 3 <color>   | Foreground color is <color> (see Table 2.12, "Color            |
|             | sequences")                                                    |
+-------------+----------------------------------------------------------------+
| 4 <color>   | Background color is <color> (see Table 2.12, "Color            |
|             | sequences")                                                    |
+-------------+----------------------------------------------------------------+

Table 2.12. Color sequences

+------------+---------+
| Color code |  Color  |
+------------+---------+
| 0          | Black   |
+------------+---------+
| 1          | Red     |
+------------+---------+
| 2          | Green   |
+------------+---------+
| 3          | Yellow  |
+------------+---------+
| 4          | Blue    |
+------------+---------+
| 5          | Magenta |
+------------+---------+
| 6          | Cyan    |
+------------+---------+
| 7          | White   |
+------------+---------+

NeoMutt uses these attributes for handling text/enriched messages, and they  can
also be used by an external autoview script for highlighting purposes.

  Note

If you change the  colors for your  display, for example  by changing the  color
associated with color2 for your xterm, then  that color will be used instead  of
green.

  Note

Note that the search commands in  the pager take regular expressions, which  are
not quite the same as  the more complex patterns used  by the search command  in
the index. This  is because  patterns are used  to select  messages by  criteria
whereas the pager already displays a selected message.

  5.3. Threaded Mode

So-called "threads" provide a hierarchy of messages where replies are linked  to
their parent message(s). This organizational form is extremely useful in mailing
lists where different parts of the discussion diverge. NeoMutt displays  threads
as a tree structure.

In NeoMutt, when  a mailbox is  sorted by  threads, there are  a few  additional
functions available in the index and pager  modes as shown in Table 2.13,  "Most
common thread mode keys".

Table 2.13. Most common thread mode keys

+-------+----------------------+-----------------------------------------------+
|  Key  |       Function       |                  Description                  |
+-------+----------------------+-----------------------------------------------+
| ^D    | <delete-thread>      | delete all messages in the current thread     |
+-------+----------------------+-----------------------------------------------+
| ^U    | <undelete-thread>    | undelete all messages in the current thread   |
+-------+----------------------+-----------------------------------------------+
| ^N    | <next-thread>        | jump to the start of the next thread          |
+-------+----------------------+-----------------------------------------------+
| ^P    | <previous-thread>    | jump to the start of the previous thread      |
+-------+----------------------+-----------------------------------------------+
| ^R    | <read-thread>        | mark the current thread as read               |
+-------+----------------------+-----------------------------------------------+
| Esc d | <delete-subthread>   | delete all messages in the current subthread  |
+-------+----------------------+-----------------------------------------------+
| Esc u | <undelete-subthread> | undelete all messages in the current          |
|       |                      | subthread                                     |
+-------+----------------------+-----------------------------------------------+
| Esc n | <next-subthread>     | jump to the start of the next subthread       |
+-------+----------------------+-----------------------------------------------+
| Esc p | <previous-subthread> | jump to the start of the previous subthread   |
+-------+----------------------+-----------------------------------------------+
| Esc r | <read-subthread>     | mark the current subthread as read            |
+-------+----------------------+-----------------------------------------------+
| Esc t | <tag-thread>         | toggle the tag on the current thread          |
+-------+----------------------+-----------------------------------------------+
| Esc v | <collapse-thread>    | toggle collapse for the current thread        |
+-------+----------------------+-----------------------------------------------+
| Esc V | <collapse-all>       | toggle collapse for all threads               |
+-------+----------------------+-----------------------------------------------+
| P     | <parent-message>     | jump to parent message in thread              |
+-------+----------------------+-----------------------------------------------+

In the index, the subject of  threaded children messages will be prepended  with
thread tree characters. By  default, the subject itself  will not be  duplicated
unless $hide_thread_subject is unset.  Special characters will  be added to  the
thread tree as detailed in Table 2.14, "Special Thread Characters".

Table 2.14. Special Thread Characters

+-----------+------------------+-----------------------------------------------+
| Character |   Description    |                     Notes                     |
+-----------+------------------+-----------------------------------------------+
| &         | hidden message   | see $hide_limited and $hide_top_limited       |
+-----------+------------------+-----------------------------------------------+
| ?         | missing message  | see $hide_missing and $hide_top_missing       |
+-----------+------------------+-----------------------------------------------+
| *         | pseudo thread    | see $strict_threads; not displayed when       |
|           |                  | $narrow_tree is set                           |
+-----------+------------------+-----------------------------------------------+
| =         | duplicate thread | see $duplicate_threads; not displayed when    |
|           |                  | $narrow_tree is set                           |
+-----------+------------------+-----------------------------------------------+

Collapsing a thread displays only the first message in the thread and hides  the
others. This is useful when threads contain  so many messages that you can  only
see a handful of threads  on the screen. See  %M in $index_format. For  example,
you could  use %<M?(#%03M)&(%4l)>  in $index_format  to optionally  display  the
number   of    hidden   messages    if   the    thread   is    collapsed.    The
%<char?if-part&else-part>  syntax  is  explained  in  detail  in  format  string
conditionals.

Technically, every reply  should contain a  list of its  parent messages in  the
thread tree, but  not all do.  In these  cases, NeoMutt groups  them by  subject
which can be controlled using the $strict_threads variable.

  5.4. Miscellaneous Functions

In addition, the index and pager menus have these interesting functions:

<check-stats>

        Calculate statistics  for all  monitored  mailboxes declared  using  the
        mailboxes   command.    It    will    calculate    statistics    despite
        $mail_check_stats being unset.

<create-alias> (default: a)

        Creates a new alias based upon the current message (or prompts for a new
        one). Once editing is  complete, an alias command  is added to the  file
        specified by the $alias_file variable for future use

  Note

        NeoMutt  does  not  read  the  $alias_file  upon  startup  so  you  must
        explicitly source the file.

<check-traditional-pgp> (default: Esc P)

        This function  will search  the current  message for  content signed  or
        encrypted with PGP the "traditional"  way, that is, without proper  MIME
        tagging. Technically,  this function  will temporarily  change the  MIME
        content types of the body parts containing PGP data; this is similar  to
        the <edit-type> function's effect.

<edit-raw-message>

        This command (available in the index  and pager) allows you to edit  the
        raw current message as it's present  in the mail folder. After you  have
        finished editing, the changed  message will be  appended to the  current
        folder, and the  original message will  be marked for  deletion; if  the
        message is unchanged it won't be replaced.

        <edit> is a synonym of this for backwards compatibility.

        See also <edit-or-view-raw-message>, <view-raw-message>.

<edit>

        Alias of <edit-raw-message> for backwards compatibility.

<edit-or-view-raw-message> (default: e)

        This command  (available  in  the  index  and  pager)  is  the  same  as
        <edit-raw-message> if the mailbox is writable, otherwise it the same  as
        <view-raw-message>.

<edit-type> (default: ^E on the attachment menu, and in the pager and index
menus; ^T on the compose menu)

        This command is used to temporarily edit an attachment's content type to
        fix, for instance, bogus character set parameters. When invoked from the
        index or  from  the pager,  you'll  have  the opportunity  to  edit  the
        top-level attachment's content  type. On  the attachment  menu, you  can
        change any attachment's content type. These changes are not  persistent,
        and get lost upon changing folders.

        Note that this  command is also  available on the  compose menu.  There,
        it's used to fine-tune  the properties of attachments  you are going  to
        send.

<enter-command> (default: ":")

        This command is used to execute any command you would normally put in  a
        configuration file. A common use is to check the settings of  variables,
        or in conjunction with macros to change settings on the fly.

<extract-keys> (default: ^K)

        This command  extracts  PGP  public  keys from  the  current  or  tagged
        message(s) and adds them to your PGP public key ring.

<forget-passphrase> (default: ^F)

        This command wipes the passphrase(s) from  memory. It is useful, if  you
        misspelled the passphrase.

<list-reply> (default: L)

        Reply to the current  or tagged message(s)  by extracting any  addresses
        which match  the regular  expressions given  by the  lists or  subscribe
        commands,  but  also  honor   any  Mail-Followup-To  header(s)  if   the
        $honor_followup_to configuration  variable  is  set.  In  addition,  the
        List-Post header field is examined for mailto: URLs specifying a mailing
        list address. Using  this when  replying to messages  posted to  mailing
        lists helps  avoid duplicate  copies being  sent to  the author  of  the
        message you are replying to.

<list-subscribe>

        Send an email to the address  specified in the List-Subscribe header  as
        specified in RFC2369.

<list-unsubscribe>

        Send an email to the address specified in the List-Unsubscribe header as
        specified in RFC2369.

<pipe-message> (default: |)

        Asks for  an external  Unix  command and  pipes  the current  or  tagged
        message(s)  to  it.   The  variables  $pipe_decode,   $pipe_decode_weed,
        $pipe_split, $pipe_sep and $wait_key control the exact behavior of  this
        function.

<resend-message> (default: Esc e)

        NeoMutt takes the current message as a template for a new message.  This
        function is best described  as "recall from  arbitrary folders". It  can
        conveniently be  used  to forward  MIME  messages while  preserving  the
        original mail structure. Note that  the amount of headers included  here
        depends on the value of the $weed variable.

        This function is also  available from the attachment  menu. You can  use
        this to easily resend a message which was included with a bounce message
        as a message/rfc822 body part.

<shell-escape> (default: !)

        Asks for an external Unix command and executes it. The $wait_key can  be
        used to control whether NeoMutt will wait  for a key to be pressed  when
        the command returns (presumably to let  the user read the output of  the
        command), based on the return status of the named command. If no command
        is given, an interactive shell is executed.

<skip-headers> (default: H)

        This function will skip to the first line of the body, past the  headers
        of the current message, regardless of current position.

<view-raw-message>

        This command (available in  the index and pager)  opens the raw  message
        read-only in an editor. This command does not allow editing the message,
        use <edit-raw-message> for this.

        See also <edit-raw-message>, <edit-or-view-raw-message>.

<skip-quoted> (default: S)

        This function  will make  the  internal pager  go  forward to  the  next
        segment of non-quoted  body text  (whether the  first line  of the  body
        after headers, or following a line  of quoted text), or print a  message
        if no further unquoted text can be found.

        The variable $pager_skip_quoted_context can be used to show some  quoted
        context prior to the selected line.

<toggle-quoted> (default: T)

        The pager  uses the  $quote_regex variable  to detect  quoted text  when
        displaying the body of the message. This function toggles the display of
        the quoted material in the message. It is particularly useful when being
        interested in just the  response and there is  a large amount of  quoted
        text in the way.

        The variable $toggle_quoted_show_levels can be used to show some context
        by continuing  to show  that number  of levels  rather than  hiding  all
        quoted levels.

6. Sending Mail

  6.1. Introduction

The bindings shown in Table 2.15, "Most common mail sending keys" are  available
in the index and pager to start a new message.

Table 2.15. Most common mail sending keys

+-------+--------------------+------------------------------------------------+
|  Key  |      Function      |                  Description                   |
+-------+--------------------+------------------------------------------------+
| m     | <mail>             | compose a new message                          |
+-------+--------------------+------------------------------------------------+
| r     | <reply>            | reply to sender                                |
+-------+--------------------+------------------------------------------------+
| g     | <group-reply>      | reply to all recipients                        |
+-------+--------------------+------------------------------------------------+
|       | <group-chat-reply> | reply to all recipients preserving To/Cc       |
+-------+--------------------+------------------------------------------------+
| L     | <list-reply>       | reply to a mailing list                        |
+-------+--------------------+------------------------------------------------+
| L     | <list-subscribe>   | send a subscription email to a mailing list    |
+-------+--------------------+------------------------------------------------+
| L     | <list-unsubscribe> | send an unsubscription email to a mailing list |
+-------+--------------------+------------------------------------------------+
| f     | <forward-message>  | forward message                                |
+-------+--------------------+------------------------------------------------+
| b     | <bounce-message>   | bounce (remail) message                        |
+-------+--------------------+------------------------------------------------+
| Esc k | <mail-key>         | mail a PGP public key to someone               |
+-------+--------------------+------------------------------------------------+

Bouncing a  message  sends the  message  as-is  to the  recipient  you  specify.
Forwarding a message allows you  to add comments or  modify the message you  are
forwarding. These items  are discussed  in greater  detail in  the next  section
"Forwarding and Bouncing Mail".

NeoMutt will then enter the  compose menu and prompt  you for the recipients  to
place on the "To:" header field when you hit m to start a new message. Next,  it
will ask you for the  "Subject:" field for the  message, providing a default  if
you are replying to or forwarding a message. You again have the chance to adjust
recipients, subject, and  security settings  right before  actually sending  the
message. See  also  $ask_cc,  $ask_bcc, $auto_edit,  $bounce,  $fast_reply,  and
$include for changing how and if NeoMutt asks these questions.

When replying, NeoMutt fills  these fields with proper  values depending on  the
reply type. The types of replying supported are:

Simple reply

        Reply to the author directly.

Group reply

        Reply to the author;  cc all other  recipients; consults alternates  and
        excludes you.

Group Chat reply

        Reply to  the author  and other  recipients  in the  To list;  cc  other
        recipients in the Cc list; consults alternates and excludes you.

List reply

        Reply  to  all  mailing  list  addresses  found,  either  specified  via
        configuration or  auto-detected. See  Section  14, "Mailing  Lists"  for
        details.

After getting recipients  for new  messages, forwards or  replies, NeoMutt  will
then automatically start your $editor on the message body. If the  $edit_headers
variable is set, the headers will be at  the top of the message in your  editor;
the message body should start on a new line after the existing blank line at the
end of headers. Any messages you are replying to will be added in sort order  to
the   message,   with   appropriate   $attribution_intro,   $indent_string   and
$attribution_trailer. When forwarding a  message, if the $mime_forward  variable
is unset,  a  copy of  the  forwarded message  will  be included.  If  you  have
specified a $signature, it will be appended to the message.

Once you have finished editing the body  of your mail message, you are  returned
to the compose menu  providing the functions shown  in Table 2.16, "Most  common
compose menu keys" to modify, send or postpone the message.

Table 2.16. Most common compose menu keys

+-------+---------------------+----------------------------------------------+
|  Key  |      Function       |                 Description                  |
+-------+---------------------+----------------------------------------------+
| a     | <attach-file>       | attach a file                                |
+-------+---------------------+----------------------------------------------+
| A     | <attach-message>    | attach message(s) to the message             |
+-------+---------------------+----------------------------------------------+
| Esc k | <attach-key>        | attach a PGP public key                      |
+-------+---------------------+----------------------------------------------+
| d     | <edit-description>  | edit description on attachment               |
+-------+---------------------+----------------------------------------------+
| D     | <detach-file>       | detach a file                                |
+-------+---------------------+----------------------------------------------+
| t     | <edit-to>           | edit the To field                            |
+-------+---------------------+----------------------------------------------+
| Esc f | <edit-from>         | edit the From field                          |
+-------+---------------------+----------------------------------------------+
| r     | <edit-reply-to>     | edit the Reply-To field                      |
+-------+---------------------+----------------------------------------------+
| c     | <edit-cc>           | edit the Cc field                            |
+-------+---------------------+----------------------------------------------+
| b     | <edit-bcc>          | edit the Bcc field                           |
+-------+---------------------+----------------------------------------------+
| y     | <send-message>      | send the message                             |
+-------+---------------------+----------------------------------------------+
| s     | <edit-subject>      | edit the Subject                             |
+-------+---------------------+----------------------------------------------+
| S     | <smime-menu>        | select S/MIME options                        |
+-------+---------------------+----------------------------------------------+
| f     | <edit-fcc>          | specify an "Fcc" mailbox                     |
+-------+---------------------+----------------------------------------------+
| p     | <pgp-menu>          | select PGP options                           |
+-------+---------------------+----------------------------------------------+
| P     | <postpone-message>  | postpone this message until later            |
+-------+---------------------+----------------------------------------------+
| q     | <quit>              | quit (abort) sending the message             |
+-------+---------------------+----------------------------------------------+
| w     | <write-fcc>         | write the message to a folder                |
+-------+---------------------+----------------------------------------------+
| i     | <ispell>            | check spelling (if available on your system) |
+-------+---------------------+----------------------------------------------+
| ^F    | <forget-passphrase> | wipe passphrase(s) from memory               |
+-------+---------------------+----------------------------------------------+

The compose menu is also used to edit the attachments for a message which can be
either files or other messages. The <attach-message> function to will prompt you
for a folder to attach  messages from. You can now  tag messages in that  folder
and they will be attached to the message you are sending.

  Note

Note that certain operations  like composing a  new mail, replying,  forwarding,
etc. are not permitted  when you are  in that folder.  The %r in  $status_format
will change to a "A" to indicate that you are in attach-message mode.

After exiting the  compose menu via  <send-message>, the message  will be  sent.
This happens  via  $smtp_url. Otherwise  $sendmail  will be  invoked.  Prior  to
version 2019-11-29,  NeoMutt enabled  $write_bcc by  default, assuming  the  MTA
would automatically remove  a Bcc:  header as  part of  delivery. Starting  with
2019-11-29, the option is unset by default,  but no longer affects the fcc  copy
of the message.

  6.2. Editing the Message Header

When editing the header because of $edit_headers being set, there are a  several
pseudo headers available which will not be included in sent messages but trigger
special NeoMutt behavior.

    6.2.1. Fcc: Pseudo Header

If you specify either of

Mutt-Fcc: filename

Fcc: filename

as a  header,  NeoMutt will  pick  up  filename just  as  if you  had  used  the
<edit-fcc> function  in the  compose menu.  It  can later  be changed  from  the
compose menu.

    6.2.2. Attach: Pseudo Header

You can also attach files to your message by specifying either of

Mutt-Attach: filename [description]

Attach: filename [description]

where filename is the file  to attach and description  is an optional string  to
use as the  description of the  attached file.  Spaces in filenames  have to  be
escaped using backslash ("\").  The file can  be removed as  well as more  added
from the compose menu.

    6.2.3. Pgp: Pseudo Header

If you want to use PGP, you can specify either of

Mutt-PGP: [ E | S | S <id> ]

Pgp: [ E | S | S <id> ]

"E" selects encryption, "S" selects signing and "S<id>" selects signing with the
given key,  setting $pgp_sign_as  for the  duration of  the message  composition
session. The selection can later be changed in the compose menu.

    6.2.4. Smime: Pseudo Header

If you want to use S/MIME, you can specify either of

Mutt-SMIME: [ E | S | S <id> ]

Smime: [ E | S | S <id> ]

"E" selects encryption, "S" selects signing and "S<id>" selects signing with the
given key, setting $smime_sign_as  for the duration  of the message  composition
session. The selection can later be changed in the compose menu.

    6.2.5. In-Reply-To: Header

When replying to messages,  the In-Reply-To: header  contains the Message-Id  of
the message(s) you reply to. If you remove or modify its value, NeoMutt will not
generate a References: field, which allows  you to create a new message  thread,
for example to create a  new message to a mailing  list without having to  enter
the mailing list's address.

If you intend to  start a new  thread by replying, please  make really sure  you
remove the In-Reply-To: header in your editor. Otherwise, though you'll  produce
a technically valid  reply, some netiquette  guardians will be  annoyed by  this
so-called "thread hijacking".

  6.3. Sending Cryptographically Signed/Encrypted Messages

If you have told NeoMutt to PGP or  S/MIME encrypt a message, it will guide  you
through a key selection process when you  try to send the message. NeoMutt  will
not ask you any questions about keys which have a certified user ID matching one
of the message recipients' mail addresses.  However, there may be situations  in
which there  are several  keys, weakly  certified user  ID fields,  or where  no
matching keys can be found.

In these cases, you are dropped into a  menu with a list of keys from which  you
can select one.  When you quit  this menu,  or NeoMutt can't  find any  matching
keys, you are prompted  for a user  ID. You can, as  usually, abort this  prompt
using ^G. When you do so, NeoMutt will return to the compose screen.

Once you  have successfully  finished the  key selection,  the message  will  be
encrypted using the selected public keys when sent out.

To ensure you can  view encrypted messages  you have sent, you  may wish to  set
$pgp_self_encrypt and  $pgp_default_key  for  PGP,  or  $smime_self_encrypt  and
$smime_default_key for S/MIME.

Most  fields   of  the   entries   in  the   key   selection  menu   (see   also
$pgp_entry_format)  have  obvious  meanings.   But  some  explanations  on   the
capabilities, flags, and validity fields are in order.

The flags sequence ("%f") will  expand to one of the  flags in Table 2.17,  "PGP
key menu flags".

Table 2.17. PGP key menu flags

+------+----------------------------------------------------+
| Flag |                    Description                     |
+------+----------------------------------------------------+
| R    | The key has been revoked and can't be used.        |
+------+----------------------------------------------------+
| X    | The key is expired and can't be used.              |
+------+----------------------------------------------------+
| d    | You have marked the key as disabled.               |
+------+----------------------------------------------------+
| c    | There are unknown critical self-signature packets. |
+------+----------------------------------------------------+

The capabilities field ("%c") expands to a two-character sequence representing a
key's capabilities. The first character gives the key's encryption capabilities:
A minus sign ("-") means that the key cannot be used for encryption. A dot (".")
means that it's marked as a signature key  in one of the user IDs, but may  also
be used for encryption. The letter "e"  indicates that this key can be used  for
encryption.

The second character indicates the key's signing capabilities. Once again, a "-"
implies "not for signing", "." implies that  the key is marked as an  encryption
key in one of the user-ids, and "s" denotes a key which can be used for signing.

Finally, the validity field  ("%t") indicates how  well-certified a user-id  is.
Its values  depend  on the  backend  used. Note  that  S/MIME (which  uses  X509
certificates) has no  concept of  validity, so this  field simply  shows x.  The
possible values listed in Table 2.18, "PGP key menu validity".

Table 2.18. PGP key menu validity

+--------------------+--------------+------------------------------------------+
| Flag (classic PGP) | Flag (GPGME) |               Description                |
+--------------------+--------------+------------------------------------------+
| N/A                | ?            | indicates unknown validity               |
+--------------------+--------------+------------------------------------------+
| ?                  | q            | indicates undefined validity             |
+--------------------+--------------+------------------------------------------+
| -                  | n            | indicates a never valid key (untrusted   |
|                    |              | association)                             |
+--------------------+--------------+------------------------------------------+
| space              | m            | indicates marginal validity (partially   |
|                    |              | trusted)                                 |
+--------------------+--------------+------------------------------------------+
| +                  | f            | indicates full validity (fully trusted)  |
+--------------------+--------------+------------------------------------------+
| N/A                | u            | indicates ultimate validity              |
+--------------------+--------------+------------------------------------------+
| N/A                | x            | the entry is an X509 certificate         |
|                    |              | (S/MIME)                                 |
+--------------------+--------------+------------------------------------------+

  6.4. Sending Format=Flowed Messages

    6.4.1. Concept

format=flowed-style messages (or  f=f for  short) are  text/plain messages  that
consist of paragraphs  which a receiver's  mail client may  reformat to its  own
needs, which  mostly means  to customize  line lengths  regardless of  what  the
sender sent.  Technically this  is achieved  by letting  lines of  a  "flowable"
paragraph end in spaces except for the last line.

While for text-mode  clients like NeoMutt  it's best to  assume only a  standard
80x24 character cell  terminal, it  may be desired  to let  the receiver  decide
completely how to view a message.

    6.4.2. NeoMutt Support

NeoMutt only  supports  setting the  required  format=flowed MIME  parameter  on
outgoing messages if the $text_flowed variable is set, specifically it does  not
add the trailing spaces.

After editing,  NeoMutt properly  space-stuffs  the message.  Space-stuffing  is
required by RFC3676, defining format=flowed, and means to prepend a space to:

  o all lines starting with a space

  o lines starting with the word "From" followed by space

  o all lines starting with ">", which is not intended to be a quote character

  Note

NeoMutt only supports space-stuffing  for the first two  types of lines but  not
for the third: It is impossible to  safely detect whether a leading >  character
starts a quote or not.

All leading  spaces  are to  be  removed by  receiving  clients to  restore  the
original message prior to further processing.

    6.4.3. Editor Considerations

As NeoMutt  provides  no  additional  features to  compose  f=f  messages,  it's
completely up to  the user  and his editor  to produce  proper messages.  Please
consider your editor's documentation if you intend to send f=f messages.

For example, vim provides the w flag for its formatoptions setting to assist  in
creating f=f messages, see :help fo-table for details.

    6.4.4. Reformatting

NeoMutt  has  some  support  for  reformatting  when  viewing  and  replying  to
format=flowed messages. In order to  take advantage of these, $reflow_text  must
be set.

  o Paragraphs are automatically  reflowed and wrapped at  a width specified  by
    $reflow_wrap.

  o In its original format, the  quoting style of format=flowed messages can  be
    difficult to  read,  and  doesn't intermix  well  with  non-flowed  replies.
    Setting $reflow_space_quotes adds spaces after each level of quoting when in
    the pager  and  replying in  a  non-flowed format  (i.e.  with  $text_flowed
    unset).

  o If $reflow_space_quotes is unset, NeoMutt will still add one trailing  space
    after all the quotes in the pager (but not when replying).

7. Forwarding and Bouncing Mail

Bouncing and forwarding let you send an existing message to recipients that  you
specify. Bouncing a message  sends a verbatim copy  of a message to  alternative
addresses as if they were the message's original recipients specified in the Bcc
header. Forwarding  a message,  on the  other  hand, allows  you to  modify  the
message before it is resent (for example, by adding your own comments). Bouncing
is  done  using   the  <bounce-message>  function   and  forwarding  using   the
<forward-message> function bound to "b" and "f" respectively.

Forwarding can be done  by including the original  message in the new  message's
body  (surrounded  by  indicating  lines:  see  $forward_attribution_intro   and
$forward_attribution_trailer) or including it as a MIME attachment, depending on
the value of the  $mime_forward variable. Decoding of  attachments, like in  the
pager,  can  be  controlled  by  the  $forward_decode  and  $mime_forward_decode
variables, respectively.  The  desired  forwarding  format  may  depend  on  the
content, therefore $mime_forward is a quadoption which, for example, can be  set
to "ask-no".

NeoMutt's default  ($mime_forward="no"  and  $forward_decode="yes")  is  to  use
standard inline forwarding. In that  mode all text-decodable parts are  included
in the new message body. Other attachments  from the original email can also  be
attached to the new message, based on the quadoption $forward_attachments.

The inclusion  of headers  is controlled  by the  current setting  of the  $weed
variable, unless $mime_forward is set. The subject of the email is controlled by
$forward_format.

By default a forwarded message does not reference the messages it contains. When
$forward_references is set, a forwarded message includes the "In-Reply-To:"  and
"References:" headers,  just like  a reply  would. Hence  the forwarded  message
becomes part of the original thread instead of starting a new one.

Editing the message to forward follows the same procedure as sending or replying
to a message does, but can be disabled via the quadoption $forward_edit.

8. Postponing Mail

At times it is desirable to delay sending a message that you have already  begun
to compose. When the  <postpone-message> function is used  in the compose  menu,
the body of your message and attachments are stored in the mailbox specified  by
the $postponed variable. This means that you can recall the message even if  you
exit NeoMutt and then restart it at a later time.

Once a message  is postponed,  there are  several ways  to resume  it. From  the
command line you can use the "-p" option,  or if you compose a new message  from
the index or pager you will be prompted if postponed messages exist. If multiple
messages are currently  postponed, the postponed  menu will pop  up and you  can
select which message you would like to resume.

  Note

If you postpone a reply to a message,  the reply setting of the message is  only
updated when you actually finish the message  and send it. Also, you must be  in
the same folder with the message you replied to for the status of the message to
be updated.

See also the $postpone quad-option.

9. Logging

NeoMutt has different types of logging/error messages

  o Primitive Errors: errors emitted by C library functions such as fopen().

  o Errors

  o Warnings

  o Message: Informational messages such as Sorting mailbox....

  o Debug: Debug messages usually only interesting while debugging.

These log messages are shown in the command bar at the bottom of the UI (usually
below the status line) and errors are shown in a different colour than the other
message types. The colours used for displaying can be adjusted with color  error
... and color message  ..., respectively. See the  description of color for  the
precise syntax.

The command bar shows only the last message. To show the last 100 messages (this
includes  all   types  of   messages   from  debug   to  error)   the   function
<show-log-messages> can be used.

Debug messages are not shown  by default. The debug log  level must be set  with
the -d command line parameter at startup. The -d parameter expects a debug level
which can range from 1 to 5 and affects verbosity of the debug messages. A value
of 2 is recommended for the start. If debug logging is enabled, all log messages
(i.e. errors,  warnings,  ...,  debug)  are additionally  written  to  the  file
~/.neomuttdebug0.

10. Encryption and Signing

NeoMutt supports encrypting and signing emails when used interactively. In batch
mode, cryptographic operations are disabled, so  these options can't be used  to
sign an email sent via a cron job, for instance.

The recommended way to enable OpenPGP and  S/MIME is to use GPGME. This  library
is integrated into NeoMutt and can  perform all the common crypto functions  the
user will need.

# Enable GPGME
set crypt_use_gpgme

If you have  complex crypto needs,  then you  can enable the  "classic mode"  by
disabling  GPGME  and  setting  all  pgp_command_*  and  smime_command_*  config
variables.

For example config, see: gpg.rc and smime.rc in the Contrib repository.

# Use manual crypto functions
unset crypt_use_gpgme
set pgp_clear_sign_command = "..."
...
set smime_decrypt_command = "..."
...

  10.1. OpenPGP Configuration

The two  most  important  settings are  $pgp_default_key  and  $pgp_sign_as.  To
perform encryption, you  must set  the first variable.  If you  have a  separate
signing key, or only have a signing  key, then set the second. Most people  will
only need to set $pgp_default_key.

Starting with version  2.1.0, GnuPG automatically  uses an agent  to prompt  for
your passphrase. If  you are using  a version  older than that,  you'll need  to
ensure an agent is running (alternatively, you can unset $pgp_use_gpg_agent  and
NeoMutt will prompt you for your passphrase). The agent in turn uses a  pinentry
program to  display the  prompt.  There are  many  different kinds  of  pinentry
programs that can be used: qt, gtk2, gnome3, fltk, and curses. However,  NeoMutt
does not work properly with the tty pinentry program. Please ensure you have one
of the  GUI or  curses pinentry  programs  installed and  configured to  be  the
default for your system.

  10.2. S/MIME Configuration

As with  OpenPGP, the  two most  important settings  are $smime_default_key  and
$smime_sign_as. To perform  encryption and  decryption, you must  set the  first
variable. If you have a separate signing  key, or only have a signing key,  then
set the second. Most people will only need to set $smime_default_key.

When using GPGME as S/MIME backend, keys and certificates are managed by  GnuPG.
You can add your key (or certificates) to GnuPG with the command "gpgsm --import
mykey.p12". Note that in  order to use  the key for  signing or encrypting,  the
root certificate  of that  key  must be  trusted,  which might  involve  editing
~/.gnupg/trustlist.txt. Consult  your documentation  of  GnuPG for  details,  in
particular gpgsm.

In "classic mode", keys and certificates  are managed by the smime_keys  program
that comes with NeoMutt.  By default they are  stored under ~/.smime/. (This  is
set  by  the  smime.rc  file  with  $smime_certificates  and  $smime_keys.)   To
initialize this  directory,  use the  command  "smime_keys init"  from  a  shell
prompt. The program can be then be used to import and list certificates. You may
also want to periodically  run "smime_keys refresh" to  update status flags  for
your certificates.

                            Chapter 3. Configuration

Table of Contents

1. Location of Initialization Files

             1.1. Location of system config files

             1.2. Location of user config files

             1.3. Config Priority

2. Starter NeoMuttrc

3. Syntax of Initialization Files

4. Address Groups

5. Defining/Using Aliases

6. Changing the Default Key Bindings

             6.1. Binding a Key Sequence to a Function

             6.2. Unbinding a Key Sequence

             6.3. Enter versus Return

             6.4. Warnings about Duplicated Bindings

             6.5. Terminal Keybindings

7. Changing the current working directory

8. Defining Aliases for Character Sets

9. Setting Variables Based Upon Mailbox

10. Keyboard Macros

             10.1. Creating a Key Macro

             10.2. Removing a Key Macro

11. Using Color and Mono Video Attributes

             11.1. Color Style

             11.2. Simple Colors

             11.3. Color Lists

             11.4. Mono Color

12. Message Header Display

             12.1. Header Display

             12.2. Selecting Headers

             12.3. Ordering Displayed Headers

13. Alternative Addresses

14. Mailing Lists

15. Using Multiple Spool Mailboxes

16. Monitoring Incoming Mail

17. User-Defined Headers

18. Specify Default Fcc: and/or Save Mailbox

19. Change Settings Based Upon Message Recipients

20. Change Settings Before Formatting a Message

21. Choosing the Cryptographic Key of the Recipient

22. Dynamically Changing $index_format using Patterns

23. Adding Key Sequences to the Keyboard Buffer

24. Executing Functions

25. Message Scoring

26. Spam Detection

27. Setting and Querying Variables

             27.1. Variable Types

             27.2. Commands

             27.3. User-Defined Variables

             27.4. Type Conversions

28. Reading Initialization Commands From Another File

29. Removing Hooks

30. Format Strings

             30.1. Basic usage

             30.2. Conditionals

             30.3. Filters

             30.4. Padding

             30.5. Conditional Dates

             30.6. Bytes size display

31. Control allowed header fields in a mailto: URL

1. Location of Initialization Files

When NeoMutt starts up it looks for two configuration files - one "system"  file
and one "user" file.

NeoMutt first reads the system  configuration file, then the user  configuration
file. The two files are merged in  the sense that "last setting wins". That  is,
if a setting is defined in both  files, the user configuration file's value  for
that setting is the one that takes precedence and becomes effective.

NeoMutt searches for several  different file names when  looking for config.  It
looks for NeoMutt  config files before  Mutt config files  and versioned  config
before plain config. For example:

Table 3.1. NeoMutt config file search order

+-----------+
| neomuttrc |
+-----------+
| muttrc    |
+-----------+

This allows the user  to create separate  NeoMutt and Mutt  config files on  the
same system.

  1.1. Location of system config files

NeoMutt will search for a system config  file in a neomutt directory in  several
places. First  it  searches  the  locations  specified  in  the  XDG_CONFIG_DIRS
environment variable,  which  defaults to  /etc/xdg.  Next, it  looks  in  /etc.
Finally, it tries /usr/share.

The system config  file will  not be  read if  the "-n"  option is  used on  the
command line.

NeoMutt will read just one file, the first file it finds, from the list below.

Table 3.2. NeoMutt system config file locations

+------------------------------+-------------------------------+
|        File Location         |             Notes             |
+------------------------------+-------------------------------+
| /etc/xdg/neomutt/neomuttrc   |                               |
+------------------------------+-------------------------------+
| /etc/xdg/neomutt/Muttrc      | Note the case of the filename |
+------------------------------+-------------------------------+
| /etc/neomuttrc               |                               |
+------------------------------+-------------------------------+
| /etc/Muttrc                  | Note the case of the filename |
+------------------------------+-------------------------------+
| /usr/share/neomutt/neomuttrc |                               |
+------------------------------+-------------------------------+
| /usr/share/neomutt/Muttrc    | Note the case of the filename |
+------------------------------+-------------------------------+

  1.2. Location of user config files

NeoMutt will search for a user config file in several places. First it looks  in
the directory  specified  in  the XDG_CONFIG_HOME  environment  variable,  which
defaults to  ~/.config/neomutt.  Next, it  looks  in ~  (your  home  directory).
Finally, it tries ~/.neomutt.

You may specify your own location for the user config file using the "-F" option
on the command line.

NeoMutt will read just one file, the first file it finds, from the list below.

Table 3.3. NeoMutt user config file locations

+-----------------------------+
|        File Location        |
+-----------------------------+
| ~/.config/neomutt/neomuttrc |
+-----------------------------+
| ~/.config/neomutt/muttrc    |
+-----------------------------+
| ~/.config/mutt/neomuttrc    |
+-----------------------------+
| ~/.config/mutt/muttrc       |
+-----------------------------+
| ~/.neomutt/neomuttrc        |
+-----------------------------+
| ~/.neomutt/muttrc           |
+-----------------------------+
| ~/.mutt/neomuttrc           |
+-----------------------------+
| ~/.mutt/muttrc              |
+-----------------------------+
| ~/.neomuttrc                |
+-----------------------------+
| ~/.muttrc                   |
+-----------------------------+

  1.3. Config Priority

The majority of NeoMutt's config will be read from two files: the system  config
in /etc and the user config in, e.g. ~/.neomuttrc

The last file that  gets read will overwrite  any settings from previous  config
files. This means that an administrator can set some defaults which the user can
override.

Additionally, there are  a handful of  config items  which can be  set using  an
environment variable. They have a lower priority than the NeoMutt config  files:
$editor, $from, $mailcap_path, $news_server, shell, $spool_file, $tmp_dir,

Finally, it's possible to set some variables directly on the command-line  using
the -e option.

Table 3.4. Config Priority

+----------+---------------+---------------------------------------------------+
| Priority |     Where     |                      Example                      |
+----------+---------------+---------------------------------------------------+
| Highest  | Command line  | neomutt -e 'set from="John Doe                    |
|          |               | <john@example.com>"'                              |
+----------+---------------+---------------------------------------------------+
|          | User Config   | ~/.neomuttrc                                      |
+----------+---------------+---------------------------------------------------+
|          | System Config | /etc/neomuttrc                                    |
+----------+---------------+---------------------------------------------------+
|          | Environment   | export EDITOR="/usr/bin/vim"                      |
+----------+---------------+---------------------------------------------------+
| Lowest   | Built-in      | Defaults hard-coded into NeoMutt                  |
+----------+---------------+---------------------------------------------------+

2. Starter NeoMuttrc

NeoMutt is highly configurable because it's meant to be customized to your needs
and preferences. However, this configurability  can make it difficult when  just
getting started. A few sample neomuttrc files are available in the Contrib Repo.

3. Syntax of Initialization Files

An initialization file consists of a series  of commands. Each line of the  file
may contain one or more commands. When multiple commands are used, they must  be
separated by a semicolon (";").

Example 3.1. Multiple configuration commands per line

set real_name='John Smith' ; ignore x-

The hash mark, or pound  sign ("#"), is used as  a "comment" character. You  can
use it  to  annotate  your  initialization file.  All  text  after  the  comment
character to the end of the line is ignored.

Example 3.2. Commenting configuration files

my_hdr X-Disclaimer: Why are you listening to me?   # This is a comment

Single quotes ("'") and double quotes (""")  can be used to quote strings  which
contain spaces or other special characters. The difference between the two types
of quotes is  similar to  that of  many popular  shell programs,  namely that  a
single quote is used to  specify a literal string  (one that is not  interpreted
for shell variables  or quoting with  a backslash [see  next paragraph]),  while
double quotes indicate  a string  for which  should be  evaluated. For  example,
backticks are evaluated inside of double quotes, but not for single quotes.

"\" quotes the next character, just like in a shell. For example, if want to put
quotes """ inside of a string, you can use "\" to force the next character to be
a literal instead of interpreted character.

Example 3.3. Escaping quotes in configuration files

set real_name="John \"anonymous\" Doe"

"\\" means to insert a literal "\" into the line. "\n" and "\r" have their usual
C meanings of linefeed and carriage-return, respectively.

A "\" at the end of a line can be used to split commands over multiple lines  as
it "escapes" the line end,  provided that the split  points don't appear in  the
middle of command names. Lines  are first concatenated before interpretation  so
that a multi-line can be commented by commenting out the first line only.

Example 3.4. Splitting long configuration commands over several lines

set status_format="some very \
long value split \
over several lines"

  Note

Using "\" at the end of a line only removes the newline character.

Any leading whitespace on the following lines will be part of the configuration.

It is  also  possible  to  substitute  the  output  of  a  Unix  command  in  an
initialization file. This is accomplished by enclosing the command in  backticks
(``). In Example 3.5, "Using external command's output in configuration  files",
the output of the Unix command "uname -a" will be substituted before the line is
parsed. Since initialization  files are line  oriented, only the  first line  of
output from the Unix command will be substituted.

Example 3.5. Using external command's output in configuration files

my_hdr X-Operating-System: `uname -a`

To avoid the output of backticks being parsed, place them inside double  quotes.
In Example 3.6,  "Preventing the  output of  backticks from  being parsed",  the
output of the gpg decryption is assigned directly to $imap_pass, so that special
characters in the password  (e.g."'", "#", "$") are  not parsed and  interpreted
specially by neomutt.

Example 3.6. Preventing the output of backticks from being parsed

set imap_pass="`gpg --batch -q --decrypt ~/.neomutt/account.gpg`"

Both environment variables and NeoMutt  variables can be accessed by  prepending
"$" to the name of the variable. For example,

Example 3.7. Using environment variables in configuration files

set record = "+sent_on_$HOSTNAME"

will cause NeoMutt to save outgoing messages to a folder named "sent_on_kremvax"
if the environment  variable $HOSTNAME  is set  to "kremvax."  (See $record  for
details.)

If NeoMutt can't find a matching config variable, it will try to find a matching
environment variable.

NeoMutt expands the variable when  it is assigned, not when  it is used. If  the
value of a variable on  the right-hand side of  an assignment changes after  the
assignment, the variable on the left-hand side will not be affected.

The commands understood by NeoMutt are  explained in the next paragraphs. For  a
complete list, see the command reference.

All configuration files are expected to be in the current locale as specified by
the $charset variable which doesn't have  a default value since it's  determined
by NeoMutt  at startup.  If a  configuration file  is not  encoded in  the  same
character set the $config_charset  variable should be  used: all lines  starting
with the next are recoded from $config_charset to $charset.

This  mechanism  should  be  avoided  if  possible  as  it  has  the   following
implications:

  o These variables should  be set early in  a configuration file with  $charset
    preceding $config_charset so NeoMutt knows what character set to convert to.

  o If  $config_charset is  set, it  should be  set in  each configuration  file
    because the value is global and not per configuration file.

  o Because NeoMutt  first recodes  a line  before it  attempts to  parse it,  a
    conversion introducing question marks or other characters as part of  errors
    (unconvertible characters, transliteration) may  introduce syntax errors  or
    silently change the meaning of certain tokens (e.g. inserting question marks
    into regular expressions).

4. Address Groups

Usage:

group [ -group name ...] { -rx regex ... | -addr address ... }
ungroup [ -group name ...] { * | -rx regex ... | -addr address ... }

NeoMutt supports grouping addresses logically  into named groups. An address  or
regular expression can appear in several  groups at the same time. These  groups
can be used in patterns  (for searching, limiting and  tagging) and in hooks  by
using group  patterns. This  can be  useful to  classify mail  and take  certain
actions depending on  in what groups  the message is.  For example, the  NeoMutt
user's  mailing  list  would  fit   into  the  categories  "mailing  list"   and
"NeoMutt-related". Using send-hook, the sender can be set to a dedicated one for
writing  mailing  list  messages,   and  the  signature  could   be  set  to   a
NeoMutt-related one for writing to  a NeoMutt list -  for other lists, the  list
sender setting still  applies but  a different  signature can  be selected.  Or,
given a  group  only  containing  recipients known  to  accept  encrypted  mail,
"auto-encryption" can be achieved easily.

The  group  command  is  used  to  directly  add  either  addresses  or  regular
expressions to  the  specified group  or  groups. The  different  categories  of
arguments to the  group command can  be in any  order. The flags  -rx and  -addr
specify what the following strings (that  cannot begin with a hyphen) should  be
interpreted as: either a regular expression or an email address, respectively.

These address  groups  can also  be  created  implicitly by  the  alias,  lists,
subscribe and alternates commands by specifying the optional -group option.  For
example,

alternates -group me address1 address2
alternates -group me -group work address3

would create a group named "me" which  contains all three addresses and a  group
named "work" which contains only your work address address3. Besides many  other
possibilities, this could be used to  automatically mark your own messages in  a
mailing list  folder  as  read  or use  a  special  signature  for  work-related
messages.

The ungroup command is used to remove addresses or regular expressions from  the
specified group or groups. The syntax  is similar to the group command,  however
the special character * can be used to empty a group of all of its contents.  As
soon as a group  gets empty because all  addresses and regular expressions  have
been removed, it'll internally  be removed, too (i.e.  there cannot be an  empty
group). When  removing regular  expressions  from a  group,  the regex  must  be
specified exactly as given to the group command or -group argument.

5. Defining/Using Aliases

Usage:

alias [  -group name  ...] key  address [  , address  ...] [  # [  comments ]  [
tags:... ]]
unalias [ -group name ...] { * | key ... }

It's usually very cumbersome to remember or type out the address of someone  you
are communicating with. NeoMutt allows you to create "aliases" which map a short
string to a full address.

  Note

If you want to create an alias for more than one address, you must separate  the
addresses with a comma (",").

The optional -group argument to alias causes the aliased address(es) to be added
to the named group.

To add an alias:

# Some aliases, with comments and tags
alias alan   Alan Jones <alan@example.com>      # Al tags:friends
alias briony Briony Williams <bw@example.com>   # tags:friends
alias jim    James Smith <js@example.com>       # Pointy-haired boss

# An alias that references two other aliases
alias friends alan, briony

Aliases can given  tags (labels) which  can be used  for searching or  limiting.
Tags consist of comma-separated strings after a comment of tags:. In the Address
Book, you can search for a tag with ~Y friends or limit the view to friends.

To remove an alias or aliases ("*" means all aliases):

unalias muttdude
unalias *

Note: The alias key  is matched case insensitively  when creating (checking  for
duplicates), removing, or expanding aliases.

Unlike other mailers, NeoMutt doesn't require aliases to be defined in a special
file. The alias command can appear anywhere in a configuration file, as long  as
this file is sourced.  Consequently, you can have  multiple alias files, or  you
can have all aliases defined in your .neomuttrc.

On the other hand, the  <create-alias> function can use  only one file, the  one
pointed to by the $alias_file variable (which is ~/.neomuttrc by default).  This
file is  not special  either, in  the  sense that  NeoMutt will  happily  append
aliases to any file, but in order for the new aliases to take effect you need to
explicitly source this file too.

Example 3.8. Configuring external alias files

source /usr/local/share/NeoMutt.aliases
source ~/.mail_aliases
set alias_file=~/.mail_aliases

To use aliases, you merely use the  alias at any place in NeoMutt where  NeoMutt
prompts for addresses, such as the To: or Cc: prompt. You can also enter aliases
in your editor at the appropriate headers if you have the $edit_headers variable
set.

In addition, at the various  address prompts, you can  use the tab character  to
expand a partial alias to the full alias. If there are multiple matches, NeoMutt
will bring up a menu  with the matching aliases. In  order to be presented  with
the full list of aliases, you must hit  tab without a partial alias, such as  at
the beginning of the prompt or after a comma denoting multiple addresses.

In the alias menu, you can select as many aliases as you want with the tag-entry
key (default: <Space> or t), and use the exit key (default: q) to return to  the
address prompt.

6. Changing the Default Key Bindings

Usage:

bind map [ ,map ...] key function
unbind { * | map [ ,map ...] } [ key ]

This command allows you  to change the default  key bindings (operation  invoked
when pressing a key).

  6.1. Binding a Key Sequence to a Function

The bind  command  allows to  assign  a  new effect  to  a  key (e.g.  a)  or  a
keysequence (e.g. gh - that is pressing g followed by a press of h). Its  syntax
is:

bind map [ ,map ...] key function

map specifies in which menu the binding belongs. Multiple maps may be  specified
by separating  them  with commas  (no  additional whitespace  is  allowed).  The
currently defined maps are:

generic

        This is not a real menu, but is used as a fallback for all of the  other
        menus except for the pager and editor modes. If a key is not defined  in
        another menu, NeoMutt will look for a binding to use in this menu.  This
        allows you to bind a key to a certain function in multiple menus instead
        of having multiple bind statements to accomplish the same task.

alias

        The alias menu is the list of  your personal aliases as defined in  your
        .neomuttrc. It is the mapping from a short alias name to the full  email
        address(es) of the recipient(s).

attach

        The attachment  menu  is used  to  access the  attachments  on  received
        messages.

browser

        The browser is used for both browsing the local directory structure, and
        for listing all of your incoming mailboxes.

editor

        The editor is used  to allow the  user to enter a  single line of  text,
        such as the To or Subject prompts in the compose menu.

index

        The index is the list of messages contained in a mailbox.

compose

        The compose menu is the screen used when sending a new message.

pager

        The pager is the mode used to display message/attachment data, and  help
        listings.

pgp

        The pgp menu is used to select the OpenPGP keys used to encrypt outgoing
        messages.

smime

        The smime  menu is  used  to select  the  OpenSSL certificates  used  to
        encrypt outgoing messages.

postpone

        The postpone menu  is similar  to the index  menu, except  is used  when
        recalling a message the user was composing, but saved until later.

query

        The query menu is the browser for results returned by $query_command.

key is  the key  (or  key sequence)  you  wish to  bind.  To specify  a  control
character, use the sequence \Cx, where x is the letter of the control  character
(for example, to specify control-A use "\Ca").  Note that the case of x as  well
as \C  is  ignored, so  that  \CA,  \Ca, \cA  and  \ca are  all  equivalent.  An
alternative form is to specify  the key as a  three digit octal number  prefixed
with a "\" (for example  \177 is equivalent to \c?).  You can also use the  form
<177>, which  allows  octal numbers  with  an  arbitrary number  of  digits.  In
addition, key  may be  a symbolic  name as  shown in  Table 3.5,  "Symbolic  key
names".

Table 3.5. Symbolic key names

+---------------+-----------------------------+
| Symbolic name |           Meaning           |
+---------------+-----------------------------+
| \t            | tab                         |
+---------------+-----------------------------+
| <tab>         | tab                         |
+---------------+-----------------------------+
| <backtab>     | backtab / shift-tab         |
+---------------+-----------------------------+
| \r            | carriage return             |
+---------------+-----------------------------+
| \n            | newline                     |
+---------------+-----------------------------+
| \e            | escape/alt                  |
+---------------+-----------------------------+
| <esc>         | escape/alt                  |
+---------------+-----------------------------+
| <up>          | up arrow                    |
+---------------+-----------------------------+
| <down>        | down arrow                  |
+---------------+-----------------------------+
| <left>        | left arrow                  |
+---------------+-----------------------------+
| <right>       | right arrow                 |
+---------------+-----------------------------+
| <pageup>      | Page Up                     |
+---------------+-----------------------------+
| <pagedown>    | Page Down                   |
+---------------+-----------------------------+
| <backspace>   | Backspace                   |
+---------------+-----------------------------+
| <delete>      | Delete                      |
+---------------+-----------------------------+
| <insert>      | Insert                      |
+---------------+-----------------------------+
| <enter>       | Enter                       |
+---------------+-----------------------------+
| <return>      | Return                      |
+---------------+-----------------------------+
| <keypadenter> | Enter key on numeric keypad |
+---------------+-----------------------------+
| <home>        | Home                        |
+---------------+-----------------------------+
| <end>         | End                         |
+---------------+-----------------------------+
| <space>       | Space bar                   |
+---------------+-----------------------------+
| <f1>          | function key 1              |
+---------------+-----------------------------+
| <f10>         | function key 10             |
+---------------+-----------------------------+

The <what-key> function can  be used to explore  keycode and symbolic names  for
other keys on your  keyboard. Executing this  function will display  information
about each key pressed, until terminated by ^G.

key does not need to be enclosed in  quotes unless it contains a space (" ")  or
semi-colon (";").

function specifies which action to take when key is pressed. For a complete list
of functions,  see the  reference. Note  that the  bind expects  function to  be
specified without angle brackets.

The  special  function  <noop>  unbinds  the  specified  key  sequence.  It   is
recommended to use unbind instead.

  6.2. Unbinding a Key Sequence

To remove a binding of a key or key sequence unbind can be used. Its syntax is:

unbind { * | map [ ,map ...] } [ key ]

map specifies from which menus the key sequence should be removed. Multiple maps
may be specified  by separating them  with commas (no  additional whitespace  is
allowed). If * is given, then the key sequence is removed from all menus.  Valid
menu names and their description are listed in the bind section.

key is the key or key  sequence to be unbound. It  may be omitted in which  case
all keybindings in the given menus are removed. To prevent NeoMutt from becoming
unusable  some  fallback  key  bindings  are  added  afterwards.  The   fallback
keybindings added depend on  the menu, they are  listed in Table 3.6,  "Fallback
key bindings".

Table 3.6. Fallback key bindings

+----------+-------------+-------------------+
|   Menu   |     Key     |  Bound Function   |
+----------+-------------+-------------------+
| generic  | <enter>     | <select-entry>    |
+----------+-------------+-------------------+
| generic  | <return>    | <select-entry>    |
+----------+-------------+-------------------+
| generic  | :           | <enter-command>   |
+----------+-------------+-------------------+
| generic  | ?           | <help>            |
+----------+-------------+-------------------+
| generic  | q           | <exit>            |
+----------+-------------+-------------------+
| alias    | ?           | <help>            |
+----------+-------------+-------------------+
| alias    | q           | <exit>            |
+----------+-------------+-------------------+
| attach   | ?           | <help>            |
+----------+-------------+-------------------+
| attach   | q           | <exit>            |
+----------+-------------+-------------------+
| browser  | ?           | <help>            |
+----------+-------------+-------------------+
| browser  | q           | <exit>            |
+----------+-------------+-------------------+
| editor   | <backspace> | <backspace>       |
+----------+-------------+-------------------+
| editor   | \177        | <backspace>       |
+----------+-------------+-------------------+
| index    | <enter>     | <display-message> |
+----------+-------------+-------------------+
| index    | <return>    | <display-message> |
+----------+-------------+-------------------+
| index    | ?           | <help>            |
+----------+-------------+-------------------+
| index    | q           | <exit>            |
+----------+-------------+-------------------+
| compose  | ?           | <help>            |
+----------+-------------+-------------------+
| compose  | q           | <exit>            |
+----------+-------------+-------------------+
| pager    | ?           | <help>            |
+----------+-------------+-------------------+
| pager    | q           | <exit>            |
+----------+-------------+-------------------+
| pager    | :           | <enter-command>   |
+----------+-------------+-------------------+
| pgp      | ?           | <help>            |
+----------+-------------+-------------------+
| pgp      | q           | <exit>            |
+----------+-------------+-------------------+
| smime    | ?           | <help>            |
+----------+-------------+-------------------+
| smime    | q           | <exit>            |
+----------+-------------+-------------------+
| postpone | ?           | <help>            |
+----------+-------------+-------------------+
| postpone | q           | <exit>            |
+----------+-------------+-------------------+
| query    | ?           | <help>            |
+----------+-------------+-------------------+
| query    | q           | <exit>            |
+----------+-------------+-------------------+
| mix      | ?           | <help>            |
+----------+-------------+-------------------+
| mix      | q           | <exit>            |
+----------+-------------+-------------------+

A key binding can also be unbound by mapping it to the special function  <noop>.
It is, however, recommended to use unbind instead.

  6.3. Enter versus Return

Prior to 2022,  NeoMutt used  a default ncurses  mode ("nl()").  This mode  maps
keyboard input of either  <Enter> or <Return> to  the same value, which  NeoMutt
interpreted as <Return> internally.

However, starting in version 2.2, this mode is turned off, allowing <Return> and
<Enter> to be mapped separately, if  desired. The default keyboard mappings  set
both, but you can override this or create new bindings with one or the other (or
both).

Note that in terminal application, such as NeoMutt, <Enter> is the same as  "\n"
and ^J; while <Return> is the same as "\r" and ^M.

  6.4. Warnings about Duplicated Bindings

Due to a limitation of NeoMutt, creating key bindings, or macros, will overwrite
existing mappings with similar, shorter, names.

bind index g  group-reply
bind index gg first-entry

In this example, the  g binding will  be overwritten and  cannot be used.  Newer
versions of NeoMutt will warn the user about this.

To avoid  warnings  on  startup, first  set  the  shorter binding  to  noop  (no
operation).

bind index g  noop
bind index gg first-entry

The same is also possible using unbind.

unbind index g
bind index gg first-entry

  6.5. Terminal Keybindings

Some key bindings are  controlled by the  terminal, and so  by default can't  be
bound inside NeoMutt. These may include ^C,  ^\, ^Q, ^S, ^Z, and on BSD/Mac  ^Y.
These terminal settings can be viewed and changed using the stty program.

"stty -a" will list the bound characters  (not all of them affect NeoMutt),  and
what actions they take when pressed. For example, you may see "intr = ^C" in its
output. This means typing ^C  will send an interrupt  signal. "quit = ^\"  means
typing ^\ (commonly also ^4) will send a quit signal.

To unbind a key  from an action,  you invoke "stty  action undef". For  example,
"stty quit undef" will  unbind ^\ (and  ^4) from sending  the quit signal.  Once
unbound (e.g, by placing  that line in  your .profile, or  in a NeoMutt  wrapper
script/function) you can use the key sequence in your NeoMutt bindings.

7. Changing the current working directory

Usage:

cd directory

The cd  command  changes  NeoMutt's  current  working  directory.  This  affects
commands and  functions  like source,  change-folder,  and save-entry  that  use
relative paths. Using cd without directory changes to your home directory.

8. Defining Aliases for Character Sets

Usage:

charset-hook alias charset
iconv-hook charset local-charset

The charset-hook command defines an alias for a character set. This is useful to
properly display messages which are tagged  with a character set name not  known
to NeoMutt.

The iconv-hook command defines a system-specific name for a character set.  This
is helpful  when your  systems  character conversion  library insists  on  using
strange, system-specific names for character sets.

9. Setting Variables Based Upon Mailbox

Usage:

folder-hook [ -noregex ] regex command

It is often desirable to change settings based on which mailbox you are reading.
The folder-hook  command  provides  a  method  by  which  you  can  execute  any
configuration command.  The command  is executed  before loading  any  mailboxes
matching regex. The -noregex  switch controls whether regex  is matched using  a
simple string comparison or  a full regex match.  If a mailbox matches  multiple
folder-hooks, they are executed in the order given in the .neomuttrc.

The regex  parameter  has mailbox  shortcut  expansion performed  on  the  first
character. See Mailbox Matching in Hooks for more details.

  Note

If you use the "!" shortcut for $spool_file at the beginning of regex, you  must
place it inside of double or single  quotes in order to distinguish it from  the
logical not operator for the expression.

  Note

Settings are not  restored when you  leave the mailbox.  For example, a  command
action to perform is to change the  sorting method based upon the mailbox  being
read:

folder-hook work "set sort=threads"

However, the sorting method is not restored to its previous value when reading a
different mailbox. To specify a default command, use the regex "." before  other
folder-hooks adjusting a value  on a per-folder  basis because folder-hooks  are
evaluated in the order given in the configuration file.

  Note

The keyboard  buffer  will not  be  processed until  after  all hooks  are  run;
multiple push or exec commands will end up being processed in reverse order.

The following example will  set the sort variable  to date-sent for all  folders
but to threads for all folders containing "work" in their name.

Example 3.9. Setting sort method based on mailbox name

folder-hook . "set sort=date-sent"
folder-hook work "set sort=threads"

10. Keyboard Macros

Usage:

macro menu [ ,menu ...] key sequence [ description ]
unmacro { * | map | [ ,map ...]} [ key ]

Macros are a convenient way to automate various actions.

  10.1. Creating a Key Macro

This command allows you to create a macro.

macro menu [ ,menu ...] key sequence [ description ]

Macros are  useful when  you would  like a  single key  to perform  a series  of
actions. When you  press key in  menu menu, NeoMutt  will behave as  if you  had
typed sequence. So if you have a  common sequence of commands you type, you  can
create a macro to execute those commands with a single key or fewer keys.

menu is the map which the macro will be bound in. Multiple maps may be specified
by separating multiple menu arguments by  commas. Whitespace may not be used  in
between the menu arguments and the commas separating them.

key and sequence are expanded  by the same rules as  the key bindings with  some
additions. The  first  is  that  control characters  in  sequence  can  also  be
specified as ^x. In order to get a caret ("^") you need to use ^^. Secondly,  to
specify a certain key such as up or  to invoke a function directly, you can  use
the format <key name> and  <function name>. For a listing  of key names see  the
section on key bindings. Functions are listed in the reference.

The advantage with using  function names directly is  that the macros will  work
regardless of the current key  bindings, so they are  not dependent on the  user
having particular key definitions. This makes them more robust and portable, and
also facilitates defining of macros in files  used by more than one user  (e.g.,
the system neomuttrc).

Optionally you can specify a descriptive text after sequence, which is shown  in
the help screens if they contain a description.

  Note

Macro definitions (if any) listed in the help screen(s), are silently  truncated
at the screen width, and are not wrapped.

  10.2. Removing a Key Macro

This command will remove a macro.

unmacro menu [ ,menu ...] key sequence

menu specifies from which menus the macro should be removed. Multiple menus  may
be specified  by  separating  them  with commas  (no  additional  whitespace  is
allowed). If * is given,  then the macro is removed  from all menus. Valid  menu
names and their description are listed in the bind section.

key is the key or key  sequence to be unbound. It  may be omitted in which  case
all macros in the given menus are removed.

  Note

Missing key sequence in unmacro command means unmacro all macros in menus  given
in menu.

11. Using Color and Mono Video Attributes

Usage:

color object [ attribute ...] foreground background
color pattern-object [ attribute ...] foreground background pattern
color regex-object [ attribute ...] foreground background regex
color status [ attribute ...] foreground background [ regex [ num ]]
uncolor object
uncolor pattern-object { pattern | * }
uncolor regex-object { regex | * }
uncolor status { regex | * }

If your terminal supports color, you can  spice up NeoMutt by creating your  own
color scheme.

  Note

The config variable  $color_directcolor must be  set to its  final value  before
using any color command.

The types of objects that can be colored fall into two categories: Simple Colors
such as the  highlight in the  index, and Color  Lists such as  the status  bar.
These lists can created complexing coloring rules.

  11.1. Color Style

Objects in NeoMutt can be given colors  and attributes to make things easier  to
find and use.

  Note

Objects must be given both a foreground and background color (it is not possible
to specify one or the other). Note that default can be used as transparent color
(see below).

Colors can be specified  in up to  three ways, using their  name such as  green,
blue; by their  number in the  palette, such as  color12, color207 (the  palette
consists of the 256  Xterm colors); or by  using hexadecimal RGB codes  #RRGGBB,
where RR, GG, BB are the red, green, and blue components given as a  hexadecimal
number between  00  and  FF  (=255),  e.g.  #00FFFF  (bright  cyan)  or  #12af84
(greenish). The last syntax is only accepted if $color_directcolor is set.

Named colours may also be prefixed by a modifier. bright or light will make  the
color boldfaced or light (e.g., brightred). alert to make a blinking/alert color
(e.g., alertred).

The  precise  behavior  depends  on  the  terminal  and  its  configuration.  In
particular, the boldfaced/light  difference and  such background  colors may  be
available only for terminals configured with at least 16 colors, as specified by
the $TERM environment variable.

foreground and background can be one of the following:

  o white

  o black

  o green

  o magenta

  o blue

  o cyan

  o yellow

  o red

  o default

In addition to the colors, objects may have their attributes set:

  o none

  o bold

  o italic

  o reverse

  o standout

  o underline

If your terminal  supports it,  the special  keyword default  can be  used as  a
transparent color. In this case default can  be used to only set the  foreground
or background  color. The  following sets  the foreground  and background  color
individually: the first command leaves the foreground untouched while the second
one leaves the background untouched:

# Make error messages white text on a red background
color error default red
color error white   default

On startup  NeoMutt  tries to  detect  whether the  terminal  it is  running  in
supports directcolor (aka  TrueColor aka  24-bit color). If  the terminal  does,
NeoMutt enables the config variable $color_directcolor otherwise it disables it.
Furthermore, NeoMutt allows to use the RGB colors syntax with the color  command
to colour elements with 24-bit colors.

For the detection to work the TERM environment variable must be set up  properly
to advertise the  terminals directcolor  capability. TERM-values  which do  that
usually end in -direct, e.g. xterm-direct.

If NeoMutt does  not detect  directcolor color support,  but you  are sure  your
terminal supports  it,  you may  try  to  explicitly set  the  TERM  environment
variable by starting NeoMutt from the terminal as follows:

TERM=xterm-direct neomutt

If that  still  does  not  help,  you can  additionally  force  NeoMutt  to  use
directcolors by setting  $color_directcolor. Setting this  variable manually  is
strongly discouraged since it usually leads to wrong colors.

  11.2. Simple Colors

Most of  NeoMutt's colorable  objects  follow simple  rules.  They don't  use  a
pattern and any new configuration will overwrite the old colours.

Simple colors can be undone by setting the foreground and background to default,
or by using the uncolor command.

These are general NeoMutt objects:

Table 3.7. Simple Colours

+-------------+----------------------------------------------------------------+
| Colour Name |                          Description                           |
+-------------+----------------------------------------------------------------+
| attachment  | Colour for attachment headers                                  |
+-------------+----------------------------------------------------------------+
| bold        | Highlighting bold patterns in the body of messages             |
+-------------+----------------------------------------------------------------+
| error       | Error messages printed by NeoMutt                              |
+-------------+----------------------------------------------------------------+
| hdrdefault  | Default colour of the message header in the pager              |
+-------------+----------------------------------------------------------------+
| indicator   | Arrow or bar used to indicate the current item in a menu       |
+-------------+----------------------------------------------------------------+
| markers     | The "+" markers at the beginning of wrapped lines in the pager |
+-------------+----------------------------------------------------------------+
| message     | Informational messages                                         |
+-------------+----------------------------------------------------------------+
| normal      | Default colour for all text                                    |
+-------------+----------------------------------------------------------------+
| options     | The key letters in multi-choice questions                      |
+-------------+----------------------------------------------------------------+
| progress    | Visual progress bar                                            |
+-------------+----------------------------------------------------------------+
| prompt      | A question                                                     |
+-------------+----------------------------------------------------------------+
| search      | Highlighting of words in the pager                             |
+-------------+----------------------------------------------------------------+
| signature   | Email's signature lines (.sig)                                 |
+-------------+----------------------------------------------------------------+
| tilde       | The "~" used to pad blank lines in the pager                   |
+-------------+----------------------------------------------------------------+
| tree        | Thread tree drawn in the message index and attachment menu     |
+-------------+----------------------------------------------------------------+
| underline   | Highlighting underlined patterns in the body of messages       |
+-------------+----------------------------------------------------------------+
| warning     | Warning messages                                               |
+-------------+----------------------------------------------------------------+

# Make error messages white text on a red background
color error white red
# Make questions bold, underlined, with light blue text (with default background)
color prompt bold underline cyan default

uncolor error
uncolor prompt

These are sidebar objects. See Sidebar Intro for more details.

Table 3.8. Simple Sidebar Colours

+--------------------+---------------------------------------------------------+
|    Colour Name     |                       Description                       |
+--------------------+---------------------------------------------------------+
| sidebar_background | The entire sidebar panel                                |
+--------------------+---------------------------------------------------------+
| sidebar_divider    | The dividing line between the Sidebar and the           |
|                    | Index/Pager panels                                      |
+--------------------+---------------------------------------------------------+
| sidebar_flagged    | Mailboxes containing flagged mail                       |
+--------------------+---------------------------------------------------------+
| sidebar_highlight  | Cursor to select a mailbox                              |
+--------------------+---------------------------------------------------------+
| sidebar_indicator  | The mailbox open in the Index panel                     |
+--------------------+---------------------------------------------------------+
| sidebar_new        | Mailboxes containing new mail                           |
+--------------------+---------------------------------------------------------+
| sidebar_ordinary   | Mailboxes that have no new/flagged mails, etc           |
+--------------------+---------------------------------------------------------+
| sidebar_spool_file | Mailbox that receives incoming mail                     |
+--------------------+---------------------------------------------------------+
| sidebar_unread     | Mailboxes containing unread mail                        |
+--------------------+---------------------------------------------------------+

color sidebar_divider brightblack default

uncolor sidebar_divider

These are compose objects.

Table 3.9. Simple Compose Colours

+--------------------------+--------------------------------------+
|       Colour Name        |             Description              |
+--------------------------+--------------------------------------+
| compose_header           | Header labels, e.g. From:            |
+--------------------------+--------------------------------------+
| compose_security_encrypt | Mail will be encrypted               |
+--------------------------+--------------------------------------+
| compose_security_sign    | Mail will be signed                  |
+--------------------------+--------------------------------------+
| compose_security_both    | Mail will be encrypted and signed    |
+--------------------------+--------------------------------------+
| compose_security_none    | Mail will not be encrypted or signed |
+--------------------------+--------------------------------------+

color compose_header bold white default

uncolor compose_header

The quoted objects refer  to quoted lines  in an email  reply. They are  defined
using the $reply_regex config variable.

The quoted email colours don't use pattern. The first colour, quoted provides  a
default colour for all quoted text. Also, each different level of quoting can be
given a different colour using, quoted1, quoted2, quoted3 up to quoted9.

Table 3.10. Quoted Email Colours

+-------------+-----------------------------------------------------+
| Colour Name |                     Description                     |
+-------------+-----------------------------------------------------+
| quoted      | Text matching $quote_regex in the body of a message |
+-------------+-----------------------------------------------------+
| quoted1     | 1 level deeper quoted text, e.g. > > text           |
+-------------+-----------------------------------------------------+
| quoted2     | 2 level deeper quoted text, e.g. > > > text         |
+-------------+-----------------------------------------------------+
| ...         | ...                                                 |
+-------------+-----------------------------------------------------+
| quoted9     | 9 level deeper quoted text                          |
+-------------+-----------------------------------------------------+

color quoted brightblue default
color quoted1 brightgreen default
color quoted2 yellow default

uncolor quoted
uncolor quoted1
uncolor quoted2

  11.3. Color Lists

Some objects in NeoMutt support  lists of color rules.  Each rule has a  pattern
and a  color.  Each is  checked  in turn  and  any matching  rules  are  applied
cumulatively (overlaid).

When applying the colours, each pattern will  be tested against the field to  be
colored. All of  the matching  patterns will have  their colors  applied in  the
order they are configured.

The color lists work in slightly different ways to each other.

attach_headers, body  and  header match  a  regular expression  (regex)  in  the
header/body of a email.

index objects match  a pattern  in the email  index (see  Section 3,  "Patterns:
Searching, Limiting and Tagging") Note  that IMAP server-side searches (=b,  =B,
=h) are not supported for color index patterns.

When $header_color_partial is  unset (the  default), a header  matched by  regex
will have color applied to the entire header. When set, color is applied only to
the exact text matched by regex.

For the  status list,  the  regular expression  is  optional. Without  one,  the
command will set  the default style  for the status  bar. With a  regex (and  an
optional number),  it's  possible  to  style  parts  of  the  status  bar.  See:
Status-Color feature for more detail.

Color lists can be undone by using the  uncolor command and the pattern or *  to
match.

Table 3.11. Colour Regex Lists

+-----------------+---------+-----------------------------------------------+
|   Colour Name   |  Match  |                  Description                  |
+-----------------+---------+-----------------------------------------------+
| attach_headers  | regex   | Attachment headers                            |
+-----------------+---------+-----------------------------------------------+
| body            | regex   | Email body                                    |
+-----------------+---------+-----------------------------------------------+
| header          | regex   | Email headers                                 |
+-----------------+---------+-----------------------------------------------+
| index           | pattern | Default highlighting of the entire index line |
+-----------------+---------+-----------------------------------------------+
| index_author    | pattern | Author in the index: %A, %a, %F, %L, %n       |
+-----------------+---------+-----------------------------------------------+
| index_collapsed | pattern | Number of messages in a collapsed thread: %M  |
+-----------------+---------+-----------------------------------------------+
| index_date      | pattern | Date field: %d, %D, %{fmt}, %[fmt], %(fmt)    |
+-----------------+---------+-----------------------------------------------+
| index_flags     | pattern | Flags in the index: %S, %Z                    |
+-----------------+---------+-----------------------------------------------+
| index_label     | pattern | Message label: %y, %Y                         |
+-----------------+---------+-----------------------------------------------+
| index_number    | pattern | Message number: %C                            |
+-----------------+---------+-----------------------------------------------+
| index_size      | pattern | Message size: %c, %cr, %l                     |
+-----------------+---------+-----------------------------------------------+
| index_subject   | pattern | Subject in the index: %s                      |
+-----------------+---------+-----------------------------------------------+
| index_tag       | pattern | Tags in the index: %G                         |
+-----------------+---------+-----------------------------------------------+
| index_tags      | pattern | Transformed message tags: %g, %J              |
+-----------------+---------+-----------------------------------------------+
| status          | regex   | Status bar                                    |
+-----------------+---------+-----------------------------------------------+

# Highlight emails from work (entire line)
color index          cyan default "~f @work.com"
# Extra highlighting for the boss (just the author column)
color index_author   cyan red     "~f boss@work.com"

uncolor index          "~f @work.com"
# Clear all index_author colors
uncolor index_author   *

# Add some highlights to the body of an email
color body    bold red    default "(urgent|important)"
color body         yellow default "(warning|notice)"
# Make the label header red
color header       cyan   default "X-Label"

uncolor body    "(urgent|important)"
# Clear all body colors
uncolor body    *
uncolor header  "X-Label"

# Set the default color for the entire status line
color status blue white
# Highlight New, Deleted, or Flagged emails
color status brightred white '(New|Del|Flag):[0-9]+'
# Highlight the contents of the []s but not the [] themselves
color status red default '\[([^]]+)\]' 1

uncolor status '(New|Del|Flag):[0-9]+'
uncolor status *

  11.4. Mono Color

If your terminal does not support color,  it is still possible change the  video
attributes through the use of the "mono" command. Usage:

mono object attribute
mono { header | body } attribute regex
mono index-object attribute pattern
unmono { index-object | header | body } { * | pattern ... }

For object and attribute, see the color command.

12. Message Header Display

  12.1. Header Display

When displaying a message in the pager, NeoMutt folds long header lines at $wrap
columns. Though there're  precise rules about  where to break  and how,  NeoMutt
always folds headers using a tab for readability. (Note that the sending side is
not affected by this, NeoMutt tries to implement standards compliant folding.)

Despite not being a real header, NeoMutt will also display an mbox "From_"  line
in the  pager  along with  other  headers. This  line  can be  manipulated  with
ignore/unignore and hdr_order/unhdr_order commands.

  12.2. Selecting Headers

Usage:

ignore string [ string ...]
unignore { * | string ... }

Messages often have many header fields added by automatic processing systems, or
which may not seem useful to display  on the screen. This command allows you  to
specify header fields which you don't normally want to see in the pager.

You do not  need to specify  the full  header field name.  For example,  "ignore
content-" will ignore all header fields  that begin with the string  "content-".
"ignore *" will ignore all headers.

To remove a previously  added token from the  list, use the "unignore"  command.
The "unignore"  command will  make NeoMutt  display headers  matching the  given
string. For  example,  if  you  do  "ignore x-"  it  is  possible  to  "unignore
x-mailer".

"unignore *" will remove all tokens from the ignore list.

Example 3.10. Header weeding

# Sven's draconian header weeding
ignore *
unignore from date subject to cc
unignore organization organisation x-mailer: x-newsreader: x-mailing-list:
unignore posted-to:

The above example will show  "From:" headers as well  as mbox "From_" lines.  To
hide the latter, instead use "unignore from:  date subject to cc" on the  second
line.

  12.3. Ordering Displayed Headers

Usage:

hdr_order header [ header ...]
unhdr_order { * | header ... }

With the  hdr_order command  you can  specify  an order  in which  NeoMutt  will
attempt to present these headers to you when viewing messages.

"unhdr_order*" will  clear  all  previous  headers from  the  order  list,  thus
removing the header order effects set by the system-wide startup file.

Example 3.11. Configuring header display order

hdr_order From Date: From: To: Cc: Subject:

13. Alternative Addresses

Usage:

alternates [ -group name ...] regex [ regex ...]
unalternates [ -group name ...] { * | regex ... }

With various functions,  NeoMutt will treat  messages differently, depending  on
whether you  sent them  or whether  you  received them  from someone  else.  For
instance, when replying to a message that you sent to a different party, NeoMutt
will automatically  suggest  to send  the  response to  the  original  message's
recipients - responding to  yourself won't make much  sense in many cases.  (See
$reply_to.)

Many users receive e-mail  under a number of  different addresses. To fully  use
NeoMutt's features  here, the  program must  be able  to recognize  what  e-mail
addresses you receive mail under. That's the purpose of the alternates  command:
It takes a list of  regular expressions, each of  which can identify an  address
under which you receive e-mail.

As addresses  are  matched  using  regular  expressions  and  not  exact  strict
comparisons, you  should make  sure you  specify your  addresses as  precise  as
possible to avoid mismatches. For example, if you specify:

alternates user@example

NeoMutt will consider "some-user@example" as  being your address, too which  may
not be desired. As a solution, in such cases addresses should be specified as:

alternates '^user@example$'

The -group flag causes all of the subsequent regular expressions to be added  to
the named group.

The unalternates command can be used to write exceptions to alternates regex. If
an address matches something  in an alternates command,  but you nonetheless  do
not think  it  is  from  you,  you  can list  a  more  precise  regex  under  an
unalternates command.

To remove a regular  expression from the alternates  list, use the  unalternates
command with exactly the  same regex. Likewise, if  the regex for an  alternates
command matches an entry on the unalternates list, that unalternates entry  will
be removed. If the regex for unalternates is "*", all entries on alternates will
be removed.

14. Mailing Lists

Usage:

lists [ -group name ...] regex [ regex ...]
unlists { * | regex ... }
subscribe [ -group name ...] regex [ regex ...]
unsubscribe { * | regex ... }

NeoMutt has a few  nice features for  handling mailing lists.  In order to  take
advantage of them, you must specify which addresses belong to mailing lists, and
which mailing lists you are subscribed to. NeoMutt also has limited support  for
auto-detecting mailing lists: it  supports parsing mailto:  links in the  common
List-Post: header which has the same  effect as specifying the list address  via
the lists  command (except  the group  feature). Once  you have  done this,  the
<list-reply> function will work for all known lists. Additionally, when you send
a message  to  a  known  list  and $followup_to  is  set,  NeoMutt  will  add  a
Mail-Followup-To header. For unsubscribed lists, this will include your personal
address, ensuring you receive a copy  of replies. For subscribed mailing  lists,
the header will not, telling other users' mail user agents not to send copies of
replies to your personal address.

  Note

The Mail-Followup-To header is a  non-standard extension which is not  supported
by all  mail  user agents.  Adding  it  is not  bullet-proof  against  receiving
personal  CCs  of  list  messages.  Also   note  that  the  generation  of   the
Mail-Followup-To header is controlled by the $followup_to configuration variable
since it's common practice on some mailing lists to send Cc upon replies  (which
is more a group- than a list-reply).

More precisely, NeoMutt maintains lists of regular expressions for the addresses
of known and subscribed mailing lists.  Every subscribed mailing list is  known.
To mark a mailing list as known, use the list command. To mark it as subscribed,
use subscribe.

You can use regular expressions with both commands. To mark all messages sent to
a specific bug report's  address on Debian's bug  tracking system as list  mail,
for instance, you could say

subscribe [0-9]+.*@bugs.debian.org

as it's often sufficient to just give a portion of the list's e-mail address.

Specify as much of the address as you need to to remove ambiguity. For  example,
if you've  subscribed  to  the  NeoMutt mailing  list,  you  will  receive  mail
addressed to  neomutt-users@neomutt.org. So,  to  tell NeoMutt  that this  is  a
mailing list, you could add lists neomutt-users@ to your initialization file. To
tell NeoMutt that you are subscribed to it, add subscribe neomutt-users to  your
initialization file instead. If you also  happen to get mail from someone  whose
address    is     neomutt-users@example.com,     you     could     use     lists
^neomutt-users@neomutt\\.org$  or  subscribe  ^neomutt-users@neomutt\\.org$   to
match only mail from the actual list.

The -group flag  adds all  of the subsequent  regular expressions  to the  named
address group in addition to adding to the specified address list.

The "unlists" command  is used  to remove  a token from  the list  of known  and
subscribed mailing-lists. Use "unlists *" to remove all tokens.

To remove a mailing list from the list of subscribed mailing lists, but keep  it
on the list of known mailing lists, use unsubscribe.

15. Using Multiple Spool Mailboxes

Usage:

mbox-hook [ -noregex ] regex mailbox

This command  is used  to  move read  messages from  a  specified mailbox  to  a
different mailbox automatically when you quit  or change folders. regex is  used
to specifying the mailbox  to treat as a  "spool" mailbox and mailbox  specifies
where mail should be saved when read. The -noregex switch controls whether regex
is matched using a simple string comparison or a full regex match.

The regex  parameter  has mailbox  shortcut  expansion performed  on  the  first
character. See Mailbox Matching in Hooks for more details.

Note that  execution  of mbox-hooks  is  dependent on  the  $move  configuration
variable. If set to "no" (the default), mbox-hooks will not be executed.

Unlike some of the other  hook commands, only the  first matching regex is  used
(it is not possible to save read mail in more than a single mailbox).

16. Monitoring Incoming Mail

Usage:

mailboxes [ [  -label label  | -nolabel  ] [  -notify |  -nonotify ]  [ -poll  |
-nopoll ] mailbox ] [...]
named-mailboxes label mailbox { label mailbox ...}
unmailboxes { * | mailbox ... }

This command specifies folders which can receive mail and which will be  checked
for new messages periodically.

The -label argument can be used to specify an alternative label to print in  the
sidebar or mailbox browser instead of the  mailbox path. A label may be  removed
via the -nolabel  argument. If unspecified,  an existing mailbox  label will  be
unchanged.

Use -nonotify to disable notifying when  new mail arrives. The -notify  argument
can be used to  re-enable notifying for an  existing mailbox. If unspecified:  a
new mailbox will notify by default, while an existing mailbox will be unchanged.

To disable polling, specify -nopoll before the mailbox name. The -poll  argument
can be used to re-enable polling for an existing mailbox. If unspecified: a  new
mailbox will poll by default, while an existing mailbox will be unchanged.

folder can either  be a local  file or directory  (Mbox/Mmdf or Maildir/Mh).  If
NeoMutt was built with POP  and/or IMAP support, folder  can also be a  POP/IMAP
folder URL. The URL syntax  is described in Section  1.2, "URL Syntax", POP  and
IMAP are described in  Section 3, "POP3 Support"  and Section 4, "IMAP  Support"
respectively.

NeoMutt provides  a number  of advanced  features for  handling (possibly  many)
folders and  new  mail  within them,  please  refer  to Section  13,  "New  Mail
Detection" for  details (including  in  what situations  and how  often  NeoMutt
checks for  new mail).  Additionally, $new_mail_command  can be  used to  run  a
command when new mail is detected.

The "unmailboxes" command is  used to remove  a token from  the list of  folders
which  receive  mail.   "unmailboxes"  can   be  used  on   the  mailbox   path,
"$folder"-abbreviated path, or  description. Use "unmailboxes  *" to remove  all
tokens.

  Note

The folders in the mailboxes command are resolved when the command is  executed,
so if  these  names contain  shortcut  characters (such  as  "=" and  "!"),  any
variable definition that affects these characters (like $folder and $spool_file)
should be set before the mailboxes command. If none of these shortcuts are used,
a local path should be absolute as  otherwise NeoMutt tries to find it  relative
to the directory from where NeoMutt was started which may not always be desired.

17. User-Defined Headers

Usage:

my_hdr string
unmy_hdr { * | field ... }

The my_hdr command allows  you to create  your own header  fields which will  be
added to every message  you send and  appear in the  editor if $edit_headers  is
set.

For example, if you would like to add an "Organization:" header field to all  of
your outgoing  messages,  you  can  put the  command  something  like  shown  in
Example 3.12, "Defining custom headers" in your .neomuttrc.

Example 3.12. Defining custom headers

my_hdr Organization: A Really Big Company, Anytown, USA

  Note

Space characters are not  allowed between the keyword  and the colon (":").  The
standard for electronic  mail (RFC2822)  says that  space is  illegal there,  so
NeoMutt enforces the rule.

If you would like to add a header  field to a single message, you should  either
set the $edit_headers  variable, or  use the  <edit-headers> function  (default:
"E") in the compose menu so that you  can edit the header of your message  along
with the body.

To remove user defined header fields, use the unmy_hdr command. You may  specify
an asterisk ("*")  to remove all  header fields,  or the fields  to remove.  For
example, to remove all "To" and "Cc" header fields, you could use:

unmy_hdr to cc

18. Specify Default Fcc: and/or Save Mailbox

Usage:

fcc-save-hook pattern mailbox
fcc-hook pattern mailbox
save-hook pattern mailbox

fcc-save-hook is a shortcut, equivalent to doing both a fcc-hook and a save-hook
with its arguments, including %-expansion on mailbox according to $index_format.

If the pattern is a plain string, or  a regex, it will be expanded to a  pattern
using $default_hook.

fcc-hook is used to save outgoing mail in a mailbox other than $record.  NeoMutt
searches the initial list of message  recipients for the first matching  pattern
and uses mailbox as the default "Fcc:" mailbox. If no match is found the message
will be saved to $record mailbox.

fcc-hook [@.]aol\\.com$ +spammers

...will save  a  copy  of all  messages  going  to the  aol.com  domain  to  the
"+spammers" mailbox by default.

save-hook is used  to override the  default mailbox used  when saving  messages.
mailbox will be used as the default if the message matches pattern.

Example 3.13. Using %-expandos in save-hook

# default: save all to ~/Mail/<author name>
save-hook . ~/Mail/%F
# save from john@turing.ox.ac.uk and john@ox.ac.uk to $folder/smith
save-hook john@(turing\\.)?ox\\.ac\\.uk$ +smith
# save from aol.com to $folder/spam
save-hook aol\\.com$ +spam

Also see the fcc-save-hook command.

To provide more flexibility and good  defaults, NeoMutt applies the expandos  of
$index_format to mailbox after  it was expanded. See  Message Matching in  Hooks
for information on the exact format of pattern.

19. Change Settings Based Upon Message Recipients

Usage:

reply-hook pattern command
send-hook pattern command
send2-hook pattern command

These commands can  be used  to execute arbitrary  configuration commands  based
upon recipients  of the  message. pattern  is  used to  match the  message,  see
Message Matching in Hooks for details. command is executed when pattern matches.

If the pattern is a plain string, or  a regex, it will be expanded to a  pattern
using $default_hook.

reply-hook is matched against  the message you are  replying to, instead of  the
message you are sending. send-hook is matched against all messages, both new and
replies.

  Note

reply-hooks are matched before the send-hook, regardless of the order  specified
in the user's  configuration file.  However, you  can inhibit  send-hook in  the
reply case by using  the pattern '!  ~Q' (not replied,  see Message Matching  in
Hooks) in the send-hook to tell when reply-hook have been executed.

send2-hook is matched every time a message is changed, either by editing it,  or
by using the  compose menu to  change its recipients  or subject. send2-hook  is
executed after send-hook, and can, e.g., be  used to set parameters such as  the
$sendmail variable depending on the message's sender address.

For each type of send-hook or reply-hook, when multiple matches occur,  commands
are executed in the order they are specified in the .neomuttrc (for that type of
hook).

Example: send-hook work "set mime_forward signature=''"

Another  typical  use  for  this  command  is  to  change  the  values  of   the
$attribution_intro, $attribution_locale, and  $signature variables  in order  to
change  the  language  of  the  attributions  and  signatures  based  upon   the
recipients.

  Note

send-hook's are only executed once after getting the initial list of recipients.
They are not executed when resuming a postponed draft. Adding a recipient  after
replying or editing  the message will  not cause any  send-hook to be  executed,
similarly if  $auto_edit is  set (as  then  the initial  list of  recipients  is
empty). Also note that  my_hdr commands which modify  recipient headers, or  the
message's subject, don't have  any effect on the  current message when  executed
from a send-hook.

20. Change Settings Before Formatting a Message

Usage:

message-hook pattern command

This command  can be  used to  execute arbitrary  configuration commands  before
viewing or  formatting  a message  based  upon information  about  the  message.
command is executed  if the pattern  matches the message  to be displayed.  When
multiple matches occur, commands are executed in the order they are specified in
the .neomuttrc.

If the pattern is a plain string, or  a regex, it will be expanded to a  pattern
using $default_hook.

See Message Matching in Hooks for information on the exact format of pattern.

Example:

message-hook ~A 'set pager=""'
message-hook '~f freshmeat-news' 'set pager="less \"+/^  subject: .*\""'

21. Choosing the Cryptographic Key of the Recipient

Usage:

crypt-hook regex keyid

When encrypting messages with PGP/GnuPG or OpenSSL, you may want to associate  a
certain key  with  a given  e-mail  address automatically,  either  because  the
recipient's public  key  can't  be  deduced from  the  destination  address,  or
because, for some reasons, you need  to override the key NeoMutt would  normally
use. The crypt-hook command provides a method by which you can specify the ID of
the public key to be used when  encrypting messages to a certain recipient.  You
may use multiple crypt-hooks with the same regex; multiple matching  crypt-hooks
result in the  use of  multiple keyids for  a recipient.  During key  selection,
NeoMutt will  confirm  whether  each  crypt-hook  is  to  be  used  (unless  the
$crypt_confirm_hook option is  unset). If  all crypt-hooks for  a recipient  are
declined, NeoMutt  will use  the original  recipient address  for key  selection
instead.

The meaning of keyid is to be taken broadly in this context: You can either  put
a numerical key ID or fingerprint here,  an e-mail address, or even just a  real
name.

22. Dynamically Changing $index_format using Patterns

Usage:

index-format-hook name [!]pattern format-string

This command is  used to  inject format strings  dynamically into  $index_format
based on pattern matching against the current message.

If the pattern is a plain string, or  a regex, it will be expanded to a  pattern
using $default_hook.

The $index_format expando  %@name@ specifies  a placeholder  for the  injection.
Index-format-hooks with  the same  name are  matched using  pattern against  the
current message. Matching is  done in the order  specified in the .muttrc,  with
the first match  being used. The  hook's format-string is  then substituted  and
evaluated.

Because the first match is used, best practice is to put a catch-all ~A  pattern
as the last  hook. Here  is an  example showing  how to  implement dynamic  date
formatting:

set index_format="%4C %-6@date@ %-15.15F %Z (%4c) %s"

index-format-hook  date  "~d<1d"    "%[%H:%M]"
index-format-hook  date  "~d<1m"    "%[%a %d]"
index-format-hook  date  "~d<1y"    "%[%b %d]"
index-format-hook  date  "~A"       "%[%m/%y]"

Another example, showing a way  to prepend to the  subject. Note that without  a
catch-all ~A pattern,  no match results  in the expando  being replaced with  an
empty string.

set index_format="%4C %@subj_flags@%s"

index-format-hook  subj_flags  "~f boss@example.com"    "** BOSS ** "
index-format-hook  subj_flags  "~f spouse@example.com"  ":-) "

23. Adding Key Sequences to the Keyboard Buffer

Usage:

push string

This command adds the named string to the beginning of the keyboard buffer.  The
string may contain  control characters, key  names and function  names like  the
sequence string in  the macro command.  You may  use it to  automatically run  a
sequence of commands at startup, or when entering certain folders. For  example,
Example 3.14,  "Embedding  push  in  folder-hook"  shows  how  to  automatically
collapse all threads when entering a folder.

Example 3.14. Embedding push in folder-hook

folder-hook . 'push <collapse-all>'

For using  functions like  shown in  the example,  it's important  to use  angle
brackets ("<" and ">") to make NeoMutt  recognize the input as a function  name.
Otherwise it will simulate individual just keystrokes, i.e. "push  collapse-all"
would be interpreted as if you had typed "c", followed by "o", followed by  "l",
..., which is not desired and may lead to very unexpected behavior.

Keystrokes can  be used,  too,  but are  less  portable because  of  potentially
changed key bindings.  With default bindings,  this is equivalent  to the  above
example:

folder-hook . 'push \eV'

because it simulates  that Esc+V was  pressed (which is  the default binding  of
<collapse-all>).

24. Executing Functions

Usage:

exec function [ function ...]

This command can be used  to execute any function.  Functions are listed in  the
function reference. "exec function" is equivalent to "push <function>".

25. Message Scoring

Usage:

score pattern value
unscore { * | pattern ... }

The score  commands adds  value to  a  message's score  if pattern  matches  it.
pattern is a string in the format  described in the patterns section (note:  For
efficiency reasons, patterns which scan information not available in the  index,
such as ~b, ~B, ~h, ~M, or ~X may not be used). value is a positive or  negative
integer. A message's final score is the sum total of all matching score entries.
However, you  may optionally  prefix value  with an  equal sign  ("=") to  cause
evaluation to stop at  a particular entry  if there is  a match. Negative  final
scores are rounded up to 0.

The unscore command removes  score entries from the  list. You must specify  the
same pattern specified in the  score command for it  to be removed. The  pattern
"*" is a special token which means to clear the list of all score entries.

Scoring occurs  as the  messages are  read  in, before  the mailbox  is  sorted.
Because of this, patterns which  depend on threading, such  as ~=, ~$, and  ~(),
will not work  by default.  A workaround  is to push  the scoring  command in  a
folder hook. This will cause the mailbox  to be rescored after it is opened  and
input starts being processed:

folder-hook . 'push "<enter-command>score ~= 10<enter>"'

26. Spam Detection

Usage:

spam regex format
nospam { * | regex }

NeoMutt has generalized support for  external spam-scoring filters. By  defining
your spam regular expressions with the spam and nospam commands, you can  limit,
search, and sort your mail  based on its spam  attributes, as determined by  the
external filter. You also can display the spam attributes in your index  display
using the %H  selector in the  $index_format variable. (Tip:  try %<H?[%H] >  to
display spam tags only when they are defined for a given message.)

Note: the value  displayed by  %H and  searched by ~H  is stored  in the  header
cache. NeoMutt isn't smart  enough to invalidate a  header cache entry based  on
changing spam rules, so if you aren't seeing correct %H values, try  temporarily
turning off the header  cache. If that  fixes the problem,  then once your  spam
rules are set to your liking, remove your stale header cache files and turn  the
header cache back on.

Your first step is to define your external filter's spam headers using the  spam
command. regex should be a  regular expression that matches  a header in a  mail
message. If any message in the mailbox matches this regular expression, it  will
receive a  "spam tag"  or "spam  attribute"  (unless it  also matches  a  nospam
regular expression - see below.) The appearance of this attribute is entirely up
to you, and is governed by the format parameter. format can be any static  text,
but it also can  include back-references from the  regex expression. (A  regular
expression  "back-reference"  refers  to   a  sub-expression  contained   within
parentheses.) %1 is replaced with the first back-reference in the regex, %2 with
the second, etc.

To match spam tags, NeoMutt needs the corresponding header information which  is
always the  case for  local and  POP folders  but not  for IMAP  in the  default
configuration. Depending on the  spam header to  be analyzed, $imap_headers  may
need to be adjusted.

If you're  using  multiple  spam filters,  a  message  can have  more  than  one
spam-related header. You can  define spam rules  for each filter  you use. If  a
message  matches   two  or   more  of   these  regular   expressions,  and   the
$spam_separator variable is set  to a string, then  the message's spam tag  will
consist  of  all  the  format  strings  joined  together,  with  the  value   of
$spam_separator separating them.

For example,  suppose one  uses  DCC, SpamAssassin,  and PureMessage,  then  the
configuration might look like in Example 3.15, "Configuring spam detection".

Example 3.15. Configuring spam detection

spam "X-DCC-.*-Metrics:.*(....)=many"         "90+/DCC-%1"
spam "X-Spam-Status: Yes"                     "90+/SA"
spam "X-PerlMX-Spam: .*Probability=([0-9]+)%" "%1/PM"
set spam_separator=", "

If then a message  is received that  DCC registered with  "many" hits under  the
"Fuz2" checksum, and that PureMessage registered with a 97% probability of being
spam, that  message's  spam  tag  would  read  90+/DCC-Fuz2,  97/PM.  (The  four
characters before "=many" in a DCC report  indicate the checksum used - in  this
case, "Fuz2".)

If the $spam_separator variable is unset,  then each spam rule match  supersedes
the previous one. Instead of getting joined format strings, you'll get only  the
last one to match.

The spam tag  is what will  be displayed  in the index  when you use  %H in  the
$index_format variable.  It's  also  the string  that  the  ~H  pattern-matching
expression matches against  for <search>  and <limit> functions.  And it's  what
sorting by spam attribute will use as a sort key.

That's a pretty complicated example, and most people's actual environments  will
have only one spam  filter. The simpler your  configuration, the more  effective
NeoMutt can be, especially when it comes to sorting.

Generally, when you sort by spam tag, NeoMutt will sort lexically - that is,  by
ordering strings alphanumerically. However, if a spam tag begins with a  number,
NeoMutt will sort  numerically first, and  lexically only when  two numbers  are
equal in value. (This is like UNIX's sort -n.) A message with no spam attributes
at all - that is, one  that didn't match any of your  spam rules - is sorted  at
lowest priority. Numbers are sorted next,  beginning with 0 and ranging  upward.
Finally, non-numeric strings  are sorted,  with "a" taking  lower priority  than
"z". Clearly, in general, sorting  by spam tags is  most effective when you  can
coerce your filter to give you a raw number. But in case you can't, NeoMutt  can
still do something useful.

The nospam command can be  used to write exceptions to  spam rules. If a  header
field matches something in a spam command, but you nonetheless do not want it to
receive a spam  tag, you  can list  a more  precise regular  expression under  a
nospam command.

If the regex given  to nospam is exactly  the same as the  regex on an  existing
spam rule entry,  the effect will  be to remove  the entry from  the spam  rules
list, instead of adding an exception. Likewise, if the regex for a spam  command
matches an entry on the nospam rule list, that nospam entry will be removed.  If
the regex for nospam  is "*", all  entries on both lists  will be removed.  This
might be the default  action if you  use spam and nospam  in conjunction with  a
folder-hook.

You can have as many spam or nospam  commands as you like. You can even do  your
own primitive spam detection within NeoMutt  - for example, if you consider  all
mail from MAILER-DAEMON to be spam, you can use a spam command like this:

spam "^From: .*MAILER-DAEMON"       "999"

27. Setting and Querying Variables

  27.1. Variable Types

NeoMutt supports these types of configuration variables:

boolean

        A boolean expression, either "yes" or "no".

number

        A signed integer number in the range -32768 to 32767.

number (long)

        A signed integer number in the range -2147483648 to 2147483647.

string

        Arbitrary text.

path

        A specialized  string  for  representing  paths  including  support  for
        mailbox shortcuts (see Section 10, "Mailbox Shortcuts") as well as tilde
        ("~") for a user's home directory and more.

quadoption

        Like a boolean but triggers a  prompt when set to "ask-yes" or  "ask-no"
        with "yes" and "no" preselected respectively.

sort order

        A specialized string allowing only particular words as values  depending
        on the variable.

regular expression

        A regular  expression,  see  Section 2,  "Regular  Expressions"  for  an
        introduction.

folder type

        Specifies the  type  of  folder  to use:  mbox,  mmdf,  mh  or  maildir.
        Currently only used to determine the type for newly created folders.

e-mail address

        An  email  address   either  with  or   without  real_name.  The   older
        "user@example.org (Joe User)" form is supported but strongly deprecated.

user-defined

        Arbitrary text, see Section 27.3, "User-Defined Variables" for details.

  27.2. Commands

The following commands are available to manipulate and query variables:

Usage:

set { [ no | inv | & | ? ] variable } [...]
set { variable=value | variable+=increment | variable-=decrement } [...]
unset variable [ variable ...]
reset variable [ variable ...]
toggle variable [ variable ...]
set variable ?

This command  is used  to set  (and unset)  configuration variables.  There  are
several basic  types of  variables:  boolean, number,  string, string  list  and
quadoption. boolean  variables  can  be  set (true)  or  unset  (false).  number
variables can  be  assigned a  positive  integer  value. The  value  of  numeric
variables can be incremented += and decremented -=. String list variables use +=
for appending to the string list and -= for removal from the string list. string
variables consist of any number of printable characters and must be enclosed  in
quotes if they contain  spaces or tabs.  You may also  use the escape  sequences
"\n" and "\t" for  newline and tab, respectively.  Content of a string  variable
can be extended using  +=. quadoption variables are  used to control whether  or
not to be prompted for certain actions, or to specify a default action. A  value
of yes will  cause the  action to  be carried out  automatically as  if you  had
answered yes to the question. Similarly, a value of no will cause the action  to
be carried out  as if you  had answered "no."  A value of  ask-yes will cause  a
prompt with a default answer of "yes"  and ask-no will provide a default  answer
of "no."

Prefixing a variable with "no" will unset it. Example: set noask_bcc.

For boolean variables, you may optionally  prefix the variable name with inv  to
toggle the value (on or off). This  is useful when writing macros. Example:  set
invsmart_wrap.

The toggle  command  automatically prepends  the  inv prefix  to  all  specified
variables.

The unset  command  automatically  prepends  the  no  prefix  to  all  specified
variables.

Using the <enter-command> function in the index menu, you can query the value of
a variable by suffixing the name of the variable with a question mark:

set allow_8bit?

The old prefix query syntax (set ?allow_8bit) is also still supported.

The  question  mark  is  actually  only  required  for  boolean  and  quadoption
variables.

The reset  command resets  all  given variables  to  the compile  time  defaults
(hopefully mentioned in this manual). If you use the command set and prefix  the
variable with "&" this has the same behavior as the reset command.

With the reset command there exists the special variable "all", which allows you
to reset all variables to their system defaults.

  27.3. User-Defined Variables

    27.3.1. Introduction

Along with the variables listed in the Configuration variables section,  NeoMutt
supports user-defined variables with names starting with my_ as in, for example,
my_cfgdir.

The set command either creates a custom my_ variable or changes its value if  it
exists already. Use of += will adjust a custom variable using the same  behavior
as a string variable, by appending  additional characters (this is true even  if
the current contents  of the variable  resemble an integer,  which is  different
than the behavior  of +=  on built-in numeric  variables). The  unset and  reset
commands remove the variable entirely.

Since user-defined  variables are  expanded  in the  same way  that  environment
variables are (except for the shell-escape command and backtick expansion), this
feature can be used to make configuration files more readable.

    27.3.2. Examples

The following example defines and uses the variable my_cfgdir to abbreviate  the
calls of the source command:

Example 3.16. Using user-defined variables for config file readability

set my_cfgdir = $HOME/neomutt/config
source $my_cfgdir/hooks $my_cfgdir/macros
# more source commands...

A custom variable  can also be  used in macros  to backup the  current value  of
another variable. In the following example, the value of the $delete is  changed
temporarily while its original value is saved as my_delete. After the macro  has
executed all commands, the original value of $delete is restored.

Example 3.17. Using user-defined  variables for backing  up other config  option
values

macro pager ,x '\
<enter-command>set my_delete=$delete<enter>\
<enter-command>set delete=yes<enter>\
...\
<enter-command>set delete=$my_delete<enter>'

Since NeoMutt  expands  such  values  already  when  parsing  the  configuration
file(s), the value  of $my_delete  in the  last example  would be  the value  of
$delete exactly as it was at  that point during parsing the configuration  file.
If another statement would  change the value  for $delete later  in the same  or
another file, it would have no effect on $my_delete. However, the expansion  can
be deferred to runtime, as shown in  the next example, when escaping the  dollar
sign.

Example 3.18. Deferring user-defined variable expansion to runtime

macro pager <PageDown> "\
<enter-command> set my_old_pager_stop=\$pager_stop pager_stop<Enter>\
<next-page>\
<enter-command> set pager_stop=\$my_old_pager_stop<Enter>\
<enter-command> unset my_old_pager_stop<Enter>"

Note that there  is a space  between <enter-command> and  the set  configuration
command, preventing  NeoMutt  from  recording  the  macro's  commands  into  its
history.

  27.4. Type Conversions

Variables are  always  assigned string  values  which NeoMutt  parses  into  its
internal representation according to  the type of the  variable, for example  an
integer number for numeric  types. For all  queries (including $-expansion)  the
value is converted from  its internal type  back into string.  As a result,  any
variable can be  assigned any  value given  that its  content is  valid for  the
target. This also counts for custom variables which are of type string. In  case
of parsing  errors,  NeoMutt will  print  error messages.  Example  3.19,  "Type
conversions using variables" demonstrates type conversions.

Example 3.19. Type conversions using variables

set my_lines = "5"                # value is string "5"
set pager_index_lines = $my_lines # value is integer 5
set my_sort = "date-received"     # value is string "date-received"
set sort = "last-$my_sort"        # value is sort last-date-received
set my_inc = $read_inc            # value is string "10" (default of $read_inc)
set my_foo = $my_inc              # value is string "10"

These assignments are all valid. If, however, the value of $my_lines would  have
been "five"  (or  something else  that  cannot be  parsed  into a  number),  the
assignment to $pager_index_lines would have produced an error message.

Type conversion applies to all configuration commands which take arguments.  But
please note that every expanded value of a variable is considered just a  single
token. A working example is:

set my_pattern = "~A"
set my_number = "10"
# same as: score ~A +10
score $my_pattern +$my_number

What does not work is:

set my_mx = "+mailbox1 +mailbox2"
mailboxes $my_mx +mailbox3

because the value of $my_mx is interpreted as a single mailbox named  "+mailbox1
+mailbox2" and not two distinct mailboxes.

28. Reading Initialization Commands From Another File

Usage:

source filename [ filename ...]

This command allows the inclusion  of initialization commands from other  files.
For example, I place all of my aliases in ~/.mail_aliases so that I can make  my
~/.neomuttrc readable and keep my aliases private.

If the filename begins with  a tilde ("~"), it will  be expanded to the path  of
your home directory.

If the filename is relative and the command source is executed from the  context
of a  configuration file,  then  the filename  is  interpreted relative  to  the
directory of that configuration  file. If the command  is executed outside of  a
configuration file,  e.g. from  the  prompt, then  the filename  is  interpreted
relative to the current working directory (see  cd on how to change the  current
working directory at runtime).

  Note

A hook remembers the configuration file it  was defined in and sets the  context
to that file when executing its commands. As a result a source command inside  a
hook is executed in the context of  the configuration file the hook was  defined
in. Thus relative filenames are  interpreted relative to the configuration  file
the hook is defined in.

If the filename ends with a vertical  bar ("|"), then filename is considered  to
be an executable program from which to read input (e.g. source ~/bin/myscript|).

29. Removing Hooks

Usage:

unhook { * | hook-type }

This command permits  you to flush  hooks you have  previously defined. You  can
either remove all hooks by giving the  "*" character as an argument, or you  can
remove all hooks of a specific type by saying something like unhook send-hook.

30. Format Strings

  30.1. Basic usage

Format strings are a  general concept you'll find  in several locations  through
the NeoMutt  configuration,  especially  in  the  $index_format,  $pager_format,
$status_format, and other related variables. These can be very  straightforward,
and it's quite possible you already know how to use them.

The most basic  format string element  is a percent  symbol followed by  another
character. For  example,  %s  represents  a message's  Subject:  header  in  the
$index_format variable. The "expandos" available are documented with each format
variable,  but  there  are  general  modifiers  available  with  all  formatting
expandos, too. Those are our concern here.

Some of the modifiers are  borrowed right out of C  (though you might know  them
from Perl, Python, shell, or another language). These are the [-]m.n  modifiers,
as in %-12.12s. As with such programming languages, these modifiers allow you to
specify the minimum and  maximum size of  the resulting string,  as well as  its
justification. If  the  "-"  sign  follows  the  percent,  the  string  will  be
left-justified instead  of  right-justified.  If there's  a  number  immediately
following that,  it's the  minimum amount  of space  the formatted  string  will
occupy - if it's naturally smaller than that, it will be padded out with spaces.
If a decimal point and another number follow, that's the maximum space allowable
- the string will not be permitted  to exceed that width, no matter its  natural
size. Each of  these three elements  is optional,  so that all  these are  legal
format strings: %-12s, %4c, %.15F and %-12.15L.

NeoMutt adds some other modifiers to format strings. If you use an equals symbol
(=) as a numeric prefix (like the minus  above), it will force the string to  be
centered within its  minimum space  range. For  example, %=14y  will reserve  14
characters for the %y expansion -  that's the set of message keywords  (formerly
X-Label). If the expansion results in a string less than 14 characters, it  will
be centered in a 14-character space. If  the X-Label for a message were  "test",
that expansion would look like "     test     ".

There are two very little-known modifiers that affect the way that an expando is
replaced. If there is an underline ("_") character between any format  modifiers
(as above) and the expando letter, it will expands in all lower case. And if you
use a colon (":"), it will replace all decimal points with underlines.

  30.2. Conditionals

Depending on the format string  variable, some of its  sequences can be used  to
optionally print a string if their value  is nonzero. For example, you may  only
want to see the number of flagged messages if such messages exist, since zero is
not particularly meaningful. To optionally print a string based upon one of  the
above sequences, the following construct is used:

%<sequence_char?optional_string>

where sequence_char is an expando, and  optional_string is the string you  would
like printed  if sequence_char  is nonzero.  optional_string may  contain  other
sequences as well as normal text, but you may not nest optional strings.

Here is  an example  illustrating how  to  optionally print  the number  of  new
messages (%n) in a mailbox in $status_format:

%<n?%n new messages>

You can also switch between two strings using the following construct:

%<sequence_char?if_string&else_string>

If the value of sequence_char is non-zero, if_string will be expanded, otherwise
else_string will be expanded.

The conditional sequences can also  be nested by using  the %< and >  operators.
The %? notation can still be used but requires quoting. For example:

%<x?true&false>
%<x?%<y?%<z?xyz&xy>&x>&none>

For more examples, see Section 29, "Nested If Feature"

  30.3. Filters

Any format string  ending in a  vertical bar  ("|") will be  expanded and  piped
through the first  word in  the string, using  spaces as  separator. The  string
returned will be used for display. If the returned string ends in %, it will  be
passed through the formatter a second time. This allows the filter to generate a
replacement format string including % expandos.

All % expandos in a  format string are expanded before  the script is called  so
that:

Example 3.20. Using external filters in format strings

set status_format="script.sh '%r %f (%L)'|"

will make NeoMutt expand %r,  %f and %L before  calling the script. The  example
also shows that arguments  can be quoted: the  script will receive the  expanded
string between the single quotes as the only argument.

A  practical  example  is  the  mutt_xtitle  script  installed  in  the  samples
subdirectory of  the  NeoMutt  documentation:  it can  be  used  as  filter  for
$status_format to set the current terminal's title, if supported.

  30.4. Padding

In most  format  strings, NeoMutt  supports  different types  of  padding  using
special %-expandos:

%|X

        When this  occurs, NeoMutt  will fill  the  rest of  the line  with  the
        character X. For example,  filling the rest of  the line with dashes  is
        done by setting:

 set status_format = "%v on %h: %B: %<n?%n&no> new messages %|-"

%>X

        Since the previous expando stops at the end of line, there must be a way
        to fill the gap between two items  via the %>X expando: it puts as  many
        characters X in between two items so  that the rest of the line will  be
        right-justified. For example, to not put the version string and hostname
        the above example on  the left but  on the right and  fill the gap  with
        spaces, one might use (note the space after %>):

 set status_format = "%B: %<n?%n&no> new messages %> (%v on %h)"

%*X

        Normal right-justification will print everything to the left of the  %>,
        displaying padding and whatever lies to the right only if there's  room.
        By  contrast,  "soft-fill"  gives  priority  to  the  right-hand   side,
        guaranteeing space to  display it  and showing padding  only if  there's
        still room. If necessary, soft-fill will eat text leftwards to make room
        for rightward text.  For example,  to right-justify  the subject  making
        sure as much as possible of it  fits on screen, one might use (note  two
        spaces after  %*:  the  second  ensures  there's  a  space  between  the
        truncated right-hand side and the subject):

 set index_format="%4C %Z %{%b %d} %-15.15L (%<l?%4l&%4c>)%*  %s"

  30.5. Conditional Dates

This feature allows the format of dates in the index to vary based on how recent
the message is.  This is  especially useful  in combination  with the  nested-if
feature.

For example, using  %<[y?%<[d?%[%H:%M]&%[%m/%d]>&%[%y.%m]> for the  date in  the
$index_format will produce a display like:

   1   + 14.12 Grace Hall      (   13) Gulliver's Travels
   2   + 10/02 Callum Harrison (   48) Huckleberry Finn
   3     12:17 Rhys Lee        (   42) The Lord Of The Rings

  30.6. Bytes size display

Various format strings  contain expandos that  display the size  of messages  in
bytes. This  includes  %s  in  $attach_format,  %l  in  $compose_format,  %s  in
$folder_format, %c and %cr  in $index_format, and %l  and %L in  $status_format.
There are four  configuration variables that  can be used  to customize how  the
numbers are displayed.

$size_show_bytes will display the number of bytes when the size is < 1 kilobyte.
When unset, kilobytes will be displayed instead.

$size_show_mb will  display  the number  of  megabytes when  the  size is  >=  1
megabyte. When unset,  kilobytes will  be displayed  instead (which  could be  a
large number).

$size_show_fractions, will  display  numbers with  a  single decimal  place  for
values from 0 to 10 kilobytes, and 1 to 10 megabytes.

$size_units_on_left will  display the  unit ("K"  or  "M") to  the left  of  the
number, instead of the right if unset.

These variables also affect size display in a few other places, such as progress
indicators and attachment delimiters in the pager.

31. Control allowed header fields in a mailto: URL

Usage:

mailto_allow { * | header-field ... }
unmailto_allow { * | header-field ... }

As a security measure, NeoMutt will only add user-approved header fields from  a
mailto: URL. This is necessary since NeoMutt will handle certain header  fields,
such as Attach:, in a special way. The mailto_allow and unmailto_allow  commands
allow the user to modify the list of approved headers.

NeoMutt initializes the default list to contain only the Subject and Body header
fields, which are the only requirement specified by the mailto: specification in
RFC2368, and the  Cc, In-Reply-To,  References headers  to aid  with replies  to
mailing lists.

                           Chapter 4. Advanced Usage

Table of Contents

1. Character Set Handling

2. Regular Expressions

3. Patterns: Searching, Limiting and Tagging

             3.1. Pattern Modifier

             3.2. Simple Searches

             3.3. Nesting and Boolean Operators

             3.4. Searching by Date

             3.5. Gmail Patterns

4. Marking Messages

5. Using Tags

6. Using Hooks

             6.1. Message Matching in Hooks

             6.2. Mailbox Matching in Hooks

7. Managing the Environment

8. External Address Queries

9. Mailbox Formats

10. Mailbox Shortcuts

11. Handling Mailing Lists

12. Display Munging

13. New Mail Detection

             13.1. How New Mail Detection Works

             13.2. Polling For New Mail

             13.3. Monitoring New Mail

             13.4. Calculating Mailbox Message Counts

14. Editing Threads

             14.1. Linking Threads

             14.2. Breaking Threads

15. Delivery Status Notification (DSN) Support

16. Start a WWW Browser on URLs

17. Echoing Text

18. Message Composition Flow

19. Miscellany

1. Character Set Handling

A "character set" is basically a mapping between bytes and glyphs and implies  a
certain character  encoding scheme.  For example,  for the  ISO 8859  family  of
character sets,  an encoding  of 8bit  per character  is used.  For the  Unicode
character set, different character encodings may  be used, UTF-8 being the  most
popular. In UTF-8, a character is  represented using a variable number of  bytes
ranging from 1 to 4.

Since NeoMutt is  a command-line tool  run from a  shell, and delegates  certain
tasks to external tools (such as an editor for composing/editing messages),  all
of these tools need to  agree on a character set  and encoding. There exists  no
way to reliably deduce the character set a plain text file has. Interoperability
is gained by the use of well-defined environment variables. The full set can  be
printed by issuing locale on the command line.

Upon startup, NeoMutt  determines the character  set on its  own using  routines
that inspect locale-specific environment  variables. Therefore, it is  generally
not necessary  to  set  the  $charset  variable  in  NeoMutt.  It  may  even  be
counter-productive as NeoMutt uses system and library functions that derive  the
character set themselves and on which  NeoMutt has no influence. It's safest  to
let NeoMutt work out the locale setup itself.

If you happen  to work  with several  character sets  on a  regular basis,  it's
highly advisable  to use  Unicode and  an UTF-8  locale. Unicode  can  represent
nearly all characters in a  message at the same time.  When not using a  Unicode
locale,  it  may  happen   that  you  receive   messages  with  characters   not
representable in your locale. When displaying such a message, or replying to  or
forwarding it, information may get lost possibly rendering the message  unusable
(not only for you but also for the recipient, this breakage is not reversible as
lost information cannot be guessed).

A Unicode locale makes all conversions superfluous which eliminates the risk  of
conversion errors. It also eliminates  potentially wrong expectations about  the
character set between NeoMutt and external programs.

The terminal emulator  used also  must be  properly configured  for the  current
locale. Terminal emulators  usually do  not derive the  locale from  environment
variables, they need to be configured separately. If the terminal is incorrectly
configured, NeoMutt  may  display  random and  unexpected  characters  (question
marks, octal  codes, or  just random  glyphs), format  strings may  not work  as
expected, you may not be abled to enter non-ascii characters, and possible more.
Data is always represented using bytes and so a correct setup is very  important
as to the machine, all character sets "look" the same.

Warning: A mismatch between what system  and library functions think the  locale
is and what NeoMutt was  told what the locale is  may make it behave badly  with
non-ascii input: it will fail at seemingly random places. This warning is to  be
taken seriously since not only local mail handling may suffer: sent messages may
carry wrong character set information the  receiver has too deal with. The  need
to set  $charset directly  in  most cases  points  at terminal  and  environment
variable setup problems, not NeoMutt problems.

A list of officially assigned and known  character sets can be found at IANA,  a
list of locally supported locales can be obtained by running locale -a.

2. Regular Expressions

All string patterns in NeoMutt including those in more complex patterns must  be
specified using  regular  expressions (regex)  in  the "POSIX  extended"  syntax
(which is  more  or less  the  syntax  used by  egrep  and GNU  awk).  For  your
convenience, we have included below a brief description of this syntax.

The search is  case sensitive if  the regular expression  contains at least  one
upper case letter, and case insensitive otherwise.

  Note

"\" must  be  quoted if  used  for a  regular  expression in  an  initialization
command: "\\".

A regular  expression is  a pattern  that describes  a set  of strings.  Regular
expressions are  constructed analogously  to  arithmetic expressions,  by  using
various operators to combine smaller expressions.

  Note

The regular  expression can  be enclosed/delimited  by either  " or  ' which  is
useful if the regular expression includes a white-space character. See Syntax of
Initialization Files for more  information on " and  ' delimiter processing.  To
match a literal " or ' you must preface it with \ (backslash).

The fundamental building blocks are the regular expressions that match a  single
character. Most  characters,  including  all letters  and  digits,  are  regular
expressions that match themselves. Any metacharacter with special meaning may be
quoted by preceding it with a backslash.

The following matches a literal dot "." in an address:

Example 4.1. Matching a literal dot

# no quotes
alternates only\\.dot@example\\.org

# single quotes
lists 'only\.dot@example\.org'

# Double quotes
subscribe "only\\.dot@example\\.org"

The period "." matches any single character.  The caret "^" and the dollar  sign
"$" are metacharacters that respectively match the empty string at the beginning
and end of a line.

A list of characters  enclosed by "["  and "]" matches  any single character  in
that list; if the first character of the list is a caret "^" then it matches any
character not  in the  list. For  example, the  regular expression  [0123456789]
matches any single digit. A range of ASCII characters may be specified by giving
the first and last  characters, separated by a  hyphen "-". Most  metacharacters
lose their special meaning inside lists. To include a literal "]" place it first
in the list. Similarly, to  include a literal "^"  place it anywhere but  first.
Finally, to include a literal hyphen "-" place it last.

Certain named classes of characters are predefined. Character classes consist of
"[:", a keyword denoting the class, and ":]". The following classes are  defined
by the POSIX standard in Table 4.1, "POSIX regular expression character classes"

Table 4.1. POSIX regular expression character classes

+-----------------+------------------------------------------------------------+
| Character class |                        Description                         |
+-----------------+------------------------------------------------------------+
| [:alnum:]       | Alphanumeric characters                                    |
+-----------------+------------------------------------------------------------+
| [:alpha:]       | Alphabetic characters                                      |
+-----------------+------------------------------------------------------------+
| [:blank:]       | Space or tab characters                                    |
+-----------------+------------------------------------------------------------+
| [:cntrl:]       | Control characters                                         |
+-----------------+------------------------------------------------------------+
| [:digit:]       | Numeric characters                                         |
+-----------------+------------------------------------------------------------+
| [:graph:]       | Characters that are both printable and visible. (A space   |
|                 | is printable, but not visible, while an "a" is both)       |
+-----------------+------------------------------------------------------------+
| [:lower:]       | Lower-case alphabetic characters                           |
+-----------------+------------------------------------------------------------+
| [:print:]       | Printable characters (characters that are not control      |
|                 | characters)                                                |
+-----------------+------------------------------------------------------------+
| [:punct:]       | Punctuation characters (characters that are not letter,    |
|                 | digits, control characters, or space characters)           |
+-----------------+------------------------------------------------------------+
| [:space:]       | Space characters (such as space, tab and formfeed, to name |
|                 | a few)                                                     |
+-----------------+------------------------------------------------------------+
| [:upper:]       | Upper-case alphabetic characters                           |
+-----------------+------------------------------------------------------------+
| [:xdigit:]      | Characters that are hexadecimal digits                     |
+-----------------+------------------------------------------------------------+

A character class is only valid in a regular expression inside the brackets of a
character list.

  Note

Note that the brackets in these class names are part of the symbolic names,  and
must be included in  addition to the brackets  delimiting the bracket list.  For
example, [[:digit:]] is equivalent to [0-9].

Two additional special sequences can appear  in character lists. These apply  to
non-ASCII character  sets,  which  can have  single  symbols  (called  collating
elements) that are represented with more than one character, as well as  several
characters that are equivalent for collating or sorting purposes:

Collating Symbols

        A collating symbol  is a multi-character  collating element enclosed  in
        "[." and  ".]".  For example,  if  "ch"  is a  collating  element,  then
        [[.ch.]] is a regex that matches this collating element, while [ch] is a
        regex that matches either "c" or "h".

Equivalence Classes

        An equivalence class is a locale-specific name for a list of  characters
        that are equivalent. The name is enclosed in "[=" and "=]". For example,
        the name "e" might be used to represent all of "e" with grave ("e"), "e"
        with acute ("e") and "e". In this case, [[=e=]] is a regex that  matches
        any of: "e" with grave ("e"), "e" with acute ("e") and "e".

A regular  expression matching  a single  character may  be followed  by one  of
several  repetition  operators  described  in  Table  4.2,  "Regular  expression
repetition operators".

Table 4.2. Regular expression repetition operators

+----------+-------------------------------------------------------------------+
| Operator |                            Description                            |
+----------+-------------------------------------------------------------------+
| ?        | The preceding item is optional and matched at most once           |
+----------+-------------------------------------------------------------------+
| *        | The preceding item will be matched zero or more times             |
+----------+-------------------------------------------------------------------+
| +        | The preceding item will be matched one or more times              |
+----------+-------------------------------------------------------------------+
| {n}      | The preceding item is matched exactly n times                     |
+----------+-------------------------------------------------------------------+
| {n,}     | The preceding item is matched n or more times                     |
+----------+-------------------------------------------------------------------+
| {,m}     | The preceding item is matched at most m times                     |
+----------+-------------------------------------------------------------------+
| {n,m}    | The preceding item is matched at least n times, but no more than  |
|          | m times                                                           |
+----------+-------------------------------------------------------------------+

Two regular expressions  may be concatenated;  the resulting regular  expression
matches any  string formed  by concatenating  two substrings  that  respectively
match the concatenated subexpressions.

Two regular expressions may be joined  by the infix operator "|"; the  resulting
regular expression matches any string matching either subexpression.

Repetition takes precedence over concatenation,  which in turn takes  precedence
over alternation.  A  whole subexpression  may  be enclosed  in  parentheses  to
override these precedence rules.

  Note

If you  compile  NeoMutt  with  the  included  regular  expression  engine,  the
following operators may  also be  used in  regular expressions  as described  in
Table 4.3, "GNU regular expression extensions".

Table 4.3. GNU regular expression extensions

+------------+-----------------------------------------------------------------+
| Expression |                           Description                           |
+------------+-----------------------------------------------------------------+
| \y         | Matches the empty string at either the beginning or the end of  |
|            | a word                                                          |
+------------+-----------------------------------------------------------------+
| \B         | Matches the empty string within a word                          |
+------------+-----------------------------------------------------------------+
| \<         | Matches the empty string at the beginning of a word             |
+------------+-----------------------------------------------------------------+
| \>         | Matches the empty string at the end of a word                   |
+------------+-----------------------------------------------------------------+
| \w         | Matches any word-constituent character (letter, digit, or       |
|            | underscore)                                                     |
+------------+-----------------------------------------------------------------+
| \W         | Matches any character that is not word-constituent              |
+------------+-----------------------------------------------------------------+
| \`         | Matches the empty string at the beginning of a buffer (string)  |
+------------+-----------------------------------------------------------------+
| \'         | Matches the empty string at the end of a buffer                 |
+------------+-----------------------------------------------------------------+

Please note however that these operators are  not defined by POSIX, so they  may
or may not be available in stock libraries on various systems.

3. Patterns: Searching, Limiting and Tagging

  3.1. Pattern Modifier

Many of  NeoMutt's commands  allow you  to specify  a pattern  to match  (limit,
tag-pattern, delete-pattern, etc.). Table 4.4, "Pattern modifiers" shows several
ways to select messages while Table 4.5, "Alias pattern modifiers" shows ways of
selecting aliases.

Table 4.4. Pattern modifiers

+------------------+--------+--------------------------------------------------+
| Pattern modifier | Notes  |                   Description                    |
+------------------+--------+--------------------------------------------------+
| ~A               |        | all messages                                     |
+------------------+--------+--------------------------------------------------+
| ~b EXPR          | d)     | messages which contain EXPR in the message body  |
+------------------+--------+--------------------------------------------------+
|                  |        | If IMAP is enabled, like ~b but searches for     |
| =b STRING        |        | STRING on the server, rather than downloading    |
|                  |        | each message and searching it locally.           |
+------------------+--------+--------------------------------------------------+
| ~B EXPR          | d)     | messages which contain EXPR in the whole message |
+------------------+--------+--------------------------------------------------+
|                  |        | If IMAP is enabled, like ~B but searches for     |
| =B STRING        |        | STRING on the server, rather than downloading    |
|                  |        | each message and searching it locally.           |
+------------------+--------+--------------------------------------------------+
| ~c EXPR          |        | messages carbon-copied to EXPR                   |
+------------------+--------+--------------------------------------------------+
| %c GROUP         |        | messages carbon-copied to any member of GROUP    |
+------------------+--------+--------------------------------------------------+
| ~C EXPR          |        | messages either to:, cc: or bcc: EXPR            |
+------------------+--------+--------------------------------------------------+
| %C GROUP         |        | messages either to:, cc: or bcc: to any member   |
|                  |        | of GROUP                                         |
+------------------+--------+--------------------------------------------------+
| ~d [MIN]-[MAX]   |        | messages with "date-sent" in a Date range        |
+------------------+--------+--------------------------------------------------+
| ~D               |        | deleted messages                                 |
+------------------+--------+--------------------------------------------------+
| ~e EXPR          |        | messages which contains EXPR in the "Sender"     |
|                  |        | field                                            |
+------------------+--------+--------------------------------------------------+
| %e GROUP         |        | messages which contain a member of GROUP in the  |
|                  |        | "Sender" field                                   |
+------------------+--------+--------------------------------------------------+
| ~E               |        | expired messages                                 |
+------------------+--------+--------------------------------------------------+
| ~F               |        | flagged messages                                 |
+------------------+--------+--------------------------------------------------+
| ~f EXPR          |        | messages originating from EXPR                   |
+------------------+--------+--------------------------------------------------+
| %f GROUP         |        | messages originating from any member of GROUP    |
+------------------+--------+--------------------------------------------------+
| ~g               |        | cryptographically signed messages                |
+------------------+--------+--------------------------------------------------+
| ~G               |        | cryptographically encrypted messages             |
+------------------+--------+--------------------------------------------------+
| ~h EXPR          | d)     | messages which contain EXPR in the message       |
|                  |        | header                                           |
+------------------+--------+--------------------------------------------------+
|                  |        | If IMAP is enabled, like ~h but searches for     |
|                  |        | STRING on the server, rather than downloading    |
| =h STRING        |        | each message and searching it locally; STRING    |
|                  |        | must be of the form "header: substring"(see      |
|                  |        | below).                                          |
+------------------+--------+--------------------------------------------------+
| ~H EXPR          |        | messages with a spam attribute matching EXPR     |
+------------------+--------+--------------------------------------------------+
| ~i EXPR          |        | messages which match EXPR in the "Message-ID"    |
|                  |        | field                                            |
+------------------+--------+--------------------------------------------------+
|                  |        | messages whose "Message-ID" field is included in |
|                  |        | the results returned from an external search     |
| ~I QUERY         |        | program, when the program is run with QUERY as   |
|                  |        | its argument. This is explained in greater       |
|                  |        | detail in the variable reference entry           |
|                  |        | Section 3.107, "external_search_command",        |
+------------------+--------+--------------------------------------------------+
| ~k               |        | messages which contain PGP key material          |
+------------------+--------+--------------------------------------------------+
| ~K EXPR          |        | messages blind carbon-copied to EXPR             |
+------------------+--------+--------------------------------------------------+
| ~L EXPR          |        | messages either originated or received by EXPR   |
+------------------+--------+--------------------------------------------------+
| %L GROUP         |        | message either originated or received by any     |
|                  |        | member of GROUP                                  |
+------------------+--------+--------------------------------------------------+
| ~l               |        | messages addressed to a known mailing list       |
+------------------+--------+--------------------------------------------------+
| ~m [MIN]-[MAX]   | c)     | messages with numbers in the range MIN to MAX    |
+------------------+--------+--------------------------------------------------+
| ~m <[MAX]        | c)     | messages with numbers less than MAX              |
+------------------+--------+--------------------------------------------------+
| ~m >[MIN]        | c)     | messages with numbers greater than MIN           |
+------------------+--------+--------------------------------------------------+
| ~m [M]           | c)     | just message number M                            |
+------------------+--------+--------------------------------------------------+
| ~m [MIN],[MAX]   | c)     | messages with offsets (from selected message) in |
|                  |        | the range MIN to MAX                             |
+------------------+--------+--------------------------------------------------+
| ~M EXPR          | d)     | messages which contain a mime Content-Type       |
|                  |        | matching EXPR                                    |
+------------------+--------+--------------------------------------------------+
| ~n [MIN]-[MAX]   | a)     | messages with a score in the range MIN to MAX    |
+------------------+--------+--------------------------------------------------+
| ~N               |        | new messages                                     |
+------------------+--------+--------------------------------------------------+
| ~O               |        | old messages                                     |
+------------------+--------+--------------------------------------------------+
|                  |        | messages addressed to you (consults $from,       |
| ~p               |        | alternates, and local account/hostname           |
|                  |        | information)                                     |
+------------------+--------+--------------------------------------------------+
| ~P               |        | messages from you (consults $from, alternates,   |
|                  |        | and local account/hostname information)          |
+------------------+--------+--------------------------------------------------+
| ~Q               |        | messages which have been replied to              |
+------------------+--------+--------------------------------------------------+
| ~r [MIN]-[MAX]   |        | messages with "date-received" in a Date range    |
+------------------+--------+--------------------------------------------------+
| ~R               |        | read messages                                    |
+------------------+--------+--------------------------------------------------+
| ~s EXPR          |        | messages having EXPR in the "Subject" field.     |
+------------------+--------+--------------------------------------------------+
| ~S               |        | superseded messages                              |
+------------------+--------+--------------------------------------------------+
| ~t EXPR          |        | messages addressed to EXPR                       |
+------------------+--------+--------------------------------------------------+
| ~T               |        | tagged messages                                  |
+------------------+--------+--------------------------------------------------+
| ~u               |        | messages addressed to a subscribed mailing list  |
+------------------+--------+--------------------------------------------------+
| ~U               |        | unread messages                                  |
+------------------+--------+--------------------------------------------------+
| ~v               |        | messages part of a collapsed thread.             |
+------------------+--------+--------------------------------------------------+
| ~V               |        | cryptographically verified messages              |
+------------------+--------+--------------------------------------------------+
| ~w EXPR          |        | newsgroups matching EXPR                         |
+------------------+--------+--------------------------------------------------+
| ~x EXPR          |        | messages which contain EXPR in the "References"  |
|                  |        | or "In-Reply-To" field                           |
+------------------+--------+--------------------------------------------------+
| ~X [MIN]-[MAX]   | a), d) | messages with MIN to MAX attachments             |
+------------------+--------+--------------------------------------------------+
| ~y EXPR          |        | messages which contain EXPR in their keywords    |
+------------------+--------+--------------------------------------------------+
| ~Y EXPR          |        | messages whose tags match EXPR                   |
+------------------+--------+--------------------------------------------------+
| ~z [MIN]-[MAX]   | a), b) | messages with a size in the range MIN to MAX     |
+------------------+--------+--------------------------------------------------+
|                  |        | IMAP custom server-side search for STRING.       |
| =/ STRING        |        | Currently only defined for Gmail. See: Gmail     |
|                  |        | Patterns                                         |
+------------------+--------+--------------------------------------------------+
| ~=               |        | duplicated messages (see $duplicate_threads)     |
+------------------+--------+--------------------------------------------------+
| ~#               |        | broken threads (see $strict_threads)             |
+------------------+--------+--------------------------------------------------+
| ~$               |        | unreferenced messages (requires threaded view)   |
+------------------+--------+--------------------------------------------------+
|                  |        | messages in threads containing messages matching |
| ~(PATTERN)       |        | PATTERN, e.g. all threads containing messages    |
|                  |        | from you: ~(~P)                                  |
+------------------+--------+--------------------------------------------------+
| ~<(PATTERN)      |        | messages whose immediate parent matches PATTERN, |
|                  |        | e.g. replies to your messages: ~<(~P)            |
+------------------+--------+--------------------------------------------------+
| ~>(PATTERN)      |        | messages having an immediate child matching      |
|                  |        | PATTERN, e.g. messages you replied to: ~>(~P)    |
+------------------+--------+--------------------------------------------------+

Table 4.5. Alias pattern modifiers

+------------------+-------+---------------------------------------------------+
| Pattern modifier | Notes |                    Description                    |
+------------------+-------+---------------------------------------------------+
| ~c EXPR          |       | aliases which contain EXPR in the alias comment   |
+------------------+-------+---------------------------------------------------+
| ~f EXPR          |       | aliases which contain EXPR in the alias name      |
|                  |       | (From part of alias)                              |
+------------------+-------+---------------------------------------------------+
| ~t EXPR          |       | aliases which contain EXPR in the alias address   |
|                  |       | (To part of alias)                                |
+------------------+-------+---------------------------------------------------+

Where EXPR is a regular expression, and GROUP is an address group.

a) The forms "<[MAX]", ">[MIN]", "[MIN]-" and "-[MAX]" are allowed, too.

b) The  suffixes  "K" and  "M"  are allowed  to  specify kilobyte  and  megabyte
respectively.

c) The  message number  ranges (introduced  by  ~m) are  even more  general  and
powerful than the other types of ranges. Read on and see Section 3.1.1, "Message
Ranges" below.

d) These patterns read each message in,  and can therefore be much slower.  Over
IMAP this will entail downloading each message. They can not be used for message
scoring, and it is recommended to avoid using them for index coloring.

Special attention  has to  be  paid when  using  regular expressions  inside  of
patterns. Specifically, NeoMutt's parser for these patterns will strip one level
of backslash ("\"), which is normally used for quoting. If it is your  intention
to use  a  backslash  in the  regular  expression,  you will  need  to  use  two
backslashes instead ("\\").

Example 4.2. Using \s and matching a literal dot in patterns

# no quotes
save-hook ~h\ list-id:\\\\s*<only\\\\.dot>    '=archive'
save-hook ~hlist-id:\\\\s*<only\\\\.dot-here> '=archive'

# single quotes
save-hook '~h list-id:\\s<only\\.dot>'        '=archive'
save-hook ~h'list-id:\\s*<only\\.dot-here>'   '=archive'

# Double quotes
save-hook "~h list-id:\\\\s<only\\\\.dot>"    '=archive'
save-hook ~h"list-id:\\\\s*<only\\\\.dot>"    '=archive'

You can force NeoMutt to treat EXPR  as a simple substring instead of a  regular
expression by using = instead of ~ in the pattern name. For example, =b *.* will
find all messages that contain the  literal string "*.*". Simple string  matches
are less powerful than regular expressions but can be considerably faster.

For IMAP folders, string matches =b, =B, and =h will be performed on the  server
instead of by fetching every  message. IMAP treats =h  specially: it must be  of
the form "header:  substring" and  will not  partially match  header names.  The
substring part may be omitted if you  simply wish to find messages containing  a
particular header without regard to its value.

Patterns matching lists of addresses (notably c,  C, p, P and t) match if  there
is at least  one match in  the whole  list. If you  want to make  sure that  all
elements of that  list match, you  need to  prefix your pattern  with "^".  This
example matches all mails which only has recipients from Germany.

Example 4.3. Matching all addresses in address lists

^~C \.de$

You can restrict address pattern matching to aliases that you have defined  with
the "@" modifier. This  example matches messages whose  recipients are all  from
Germany, and who are known to your alias list.

Example 4.4. Matching restricted to aliases

^@~C \.de$

To match any defined  alias, use a regular  expression that matches any  string.
This example matches messages whose senders are known aliases.

Example 4.5. Matching any defined alias

@~f .

    3.1.1. Message Ranges

If a message  number range  (from now on:  MNR) contains  a comma (,),  it is  a
relative MNR.  That  means  the  numbers denote  offsets  from  the  highlighted
message. For example:

Table 4.6. Relative Message Number Ranges

+---------+-------------------------------------------+
| Pattern |                Explanation                |
+---------+-------------------------------------------+
| ~m -2,2 | Previous 2, highlighted and next 2 emails |
+---------+-------------------------------------------+
| ~m 0,1  | Highlighted and next email                |
+---------+-------------------------------------------+

In addition to numbers,  either side of  the range can also  contain one of  the
special characters (shortcuts) .^$. The meaning is:

Table 4.7. Message Number Shortcuts

+----------+-----------------------+---------+---------------------------------+
| Shortcut |      Explanation      | Example |             Meaning             |
+----------+-----------------------+---------+---------------------------------+
| .        | Current / Highlighted | ~m -3,. | Previous 3 emails plus the      |
|          |                       |         | highlighted one                 |
+----------+-----------------------+---------+---------------------------------+
| $        | Last                  | ~m .,$  | Highlighted email and all the   |
|          |                       |         | later ones                      |
+----------+-----------------------+---------+---------------------------------+
| ^        | First                 | ~m ^,1  | Highlighted, next and all       |
|          |                       |         | preceding ones                  |
+----------+-----------------------+---------+---------------------------------+

Lastly, you can also leave either side of the range blank, to make it extend  as
far as possible. For example, ~m ,1 has the same meaning as the last example  in
Table 4.7, "Message Number Shortcuts".

Otherwise, if a MNR  doesn't contain a  comma, the meaning  is similar to  other
ranges, except that the shortcuts are still available. Examples:

Table 4.8. Absolute Message Number Ranges

+---------+----------------------------+
| Pattern |        Explanation         |
+---------+----------------------------+
| ~m 3-10 | Emails 3 to 10             |
+---------+----------------------------+
| ~m -10  | Emails 1 to 10             |
+---------+----------------------------+
| ~m 10-  | Emails 10 to last          |
+---------+----------------------------+
| ~m <3   | First and second email     |
+---------+----------------------------+
| ~m ^-2  | First and second email     |
+---------+----------------------------+
| ~m >1   | Everything but first email |
+---------+----------------------------+
| ~m 2-$  | Everything but first email |
+---------+----------------------------+
| ~m 2    | Just the second email      |
+---------+----------------------------+

  3.2. Simple Searches

NeoMutt supports two versions of so  called "simple searches". These are  issued
if the query  entered for searching,  limiting and similar  operations does  not
seem to contain a valid pattern modifier (i.e. it does not contain one of  these
characters: "~", "=" or "%"). If the  query is supposed to contain one of  these
special characters, they must be escaped by prepending a backslash ("\").

The first  type  is  by checking  whether  the  query string  equals  a  keyword
case-insensitively from  Table 4.9,  "Simple search  keywords": If  that is  the
case, NeoMutt will use  the shown pattern modifier  instead. If a keyword  would
conflict with your search keyword, you need to turn it into a regular expression
to avoid  matching the  keyword table.  For example,  if you  want to  find  all
messages matching "flag" (using $simple_search) but don't want to match  flagged
messages, simply search for "[f]lag".

Table 4.9. Simple search keywords

+---------+------------------+
| Keyword | Pattern modifier |
+---------+------------------+
| all     | ~A               |
+---------+------------------+
| .       | ~A               |
+---------+------------------+
| ^       | ~A               |
+---------+------------------+
| del     | ~D               |
+---------+------------------+
| flag    | ~F               |
+---------+------------------+
| new     | ~N               |
+---------+------------------+
| old     | ~O               |
+---------+------------------+
| repl    | ~Q               |
+---------+------------------+
| read    | ~R               |
+---------+------------------+
| tag     | ~T               |
+---------+------------------+
| unread  | ~U               |
+---------+------------------+

The second type  of simple search  is to  build a complex  search pattern  using
$simple_search as a template. NeoMutt will insert your query properly quoted and
search for the composed complex query.

  3.3. Nesting and Boolean Operators

Logical AND is performed by specifying more than one criterion. For example:

~t work ~f smith

would select messages which  contain the word "work"  in the list of  recipients
and that have the word "smith" in the "From" header field.

NeoMutt also recognizes the  following operators to  create more complex  search
patterns:

  o ! - logical NOT operator

  o | - logical OR operator

  o () - logical grouping operator

Here is an  example illustrating  a complex  search pattern.  This pattern  will
select all messages which do  not contain "work" in the  "To" or "Cc" field  and
which are from "smith".

Example 4.6. Using boolean operators in patterns

!(~t work|~c work) ~f smith

Here is an example using white space in the regular expression (note the "'" and
""" delimiters). For  this to match,  the mail's subject  must match the  "^Junk
+From +Me$" and it must be from either "Jim +Somebody" or "Ed +SomeoneElse":

'~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")'

  Note

If a regular expression contains parenthesis, or a vertical bar ("|"), you  must
enclose the expression  in double or  single quotes since  those characters  are
also used  to  separate  different  parts of  NeoMutt's  pattern  language.  For
example: ~f  "user@(home\.org|work\.com)" Without  the quotes,  the  parenthesis
wouldn't end. This would be separated  to two OR'd patterns: ~f  user@(home\.org
and work\.com). They are never what you want.

  3.4. Searching by Date

NeoMutt supports two types of dates, absolute and relative.

    3.4.1. Absolute Dates

Dates must be in DD/MM/YY format (month and year are optional, defaulting to the
current month and year) or YYYYMMDD. An example of a valid range of dates is:

Limit to messages matching: ~d 20/1/95-31/10
Limit to messages matching: ~d 19950120-19951031

If  you  omit  the  minimum  (first)  date,  and  just  specify  "-DD/MM/YY"  or
"-YYYYMMDD", all messages before  the given date will  be selected. If you  omit
the maximum(second) date, and specify "DD/MM/YY-", all messages after the  given
date will be selected.  If you specify  a single date with  no dash ("-"),  only
messages sent on the given date will be selected.

You can add error margins to absolute dates. An error margin is a sign (+ or -),
followed by a digit, followed by one  of the units in Table 4.10, "Date  units".
As a  special case,  you can  replace  the sign  by a  "*" character,  which  is
equivalent to giving identical plus and minus error margins.

Table 4.10. Date units

+------+-------------+
| Unit | Description |
+------+-------------+
| y    | Years       |
+------+-------------+
| m    | Months      |
+------+-------------+
| w    | Weeks       |
+------+-------------+
| d    | Days        |
+------+-------------+

Example: To select any messages two weeks around January 15, 2001, you'd use the
following pattern:

Limit to messages matching: ~d 15/1/2001*2w

    3.4.2. Relative Dates

This type of date is relative to the current date, and may be specified as:

  o > offset for messages older than offset units

  o < offset for messages newer than offset units

  o = offset for messages exactly offset units old

offset is specified as a positive number with one of the units from Table  4.11,
"Relative date units".

Table 4.11. Relative date units

+------+-------------+
| Unit | Description |
+------+-------------+
| y    | Years       |
+------+-------------+
| m    | Months      |
+------+-------------+
| w    | Weeks       |
+------+-------------+
| d    | Days        |
+------+-------------+
| H    | Hours       |
+------+-------------+
| M    | Minutes     |
+------+-------------+
| S    | Seconds     |
+------+-------------+

Example: to select messages less than 1 month old, you would use

Limit to messages matching: ~d <1m

  Note

All dates used when searching are relative to the local time zone, so unless you
change the setting of your $index_format  to include a %[...] format, these  are
not the dates shown in the main index.

  3.5. Gmail Patterns

=/ "search terms"  invokes server-side  search, passing along  the search  terms
provided. Search  results are  constrained  by IMAP  to  be within  the  current
folder. At present  this only supports  Gmail's search API  IMAP extension.  The
search language  is  entirely up  to  the mail  provider  and changes  at  their
discretion. Using ~/ will silently fail.

For up-to-date information about searching, see: Gmail's Support Page. You  will
need to (once) use  a web-browser to visit  Settings/Labels and enable "Show  in
IMAP" for  "All Mail".  When searching,  visit that  folder in  NeoMutt to  most
closely match Gmail search semantics.

Table 4.12. Gmail Example Patterns

+----------------------------------+-------------------------------------------+
|             Pattern              |                  Matches                  |
+----------------------------------+-------------------------------------------+
|                                  | the foo.example.org mailing-list per      |
| =/ "list:foo.example.org         | Gmail's definitions, and has an           |
| has:attachment is:important"     | attachment, and has been marked as        |
|                                  | important                                 |
+----------------------------------+-------------------------------------------+
| =/ "{has:purple-star             | is older than two months and has either a |
| has:yellow-star} older_than:2m"  | purple-star or a yellow-star              |
+----------------------------------+-------------------------------------------+

4. Marking Messages

There are times  that it's  useful to ask  NeoMutt to  "remember" which  message
you're currently looking at, while you  move elsewhere in your mailbox. You  can
do this with  the "mark-message"  operator, which  is bound  to the  "~" key  by
default. Press this key to enter an identifier for the marked message. When  you
want to return  to this  message, press  "'" and  the name  that you  previously
entered.

(Message marking is really just a shortcut for defining a macro that returns you
to the  current  message by  searching  for its  Message-ID.  You can  choose  a
different prefix by setting the $mark_macro_prefix variable.)

5. Using Tags

Sometimes it is desirable to perform an operation on a group of messages all  at
once rather than  one at  a time.  An example  might be  to save  messages to  a
mailing list  to a  separate folder,  or to  delete all  messages with  a  given
subject. To tag all messages matching a pattern, use the <tag-pattern> function,
which is bound to "shift-T" by  default. Patterns are completable in the  editor
menu. Invoke the <complete>  function (by default bound  to "Tab") after  typing
"~" to get  a selectable list.  Or you  can select individual  messages by  hand
using the <tag-message> function, which is bound to "t" by default. See patterns
for NeoMutt's pattern matching syntax.

Once you  have  tagged  the  desired messages,  you  can  use  the  "tag-prefix"
operator, which is  the ";" (semicolon)  key by default.  When the  "tag-prefix"
operator is used, the next operation will  be applied to all tagged messages  if
that operation can be used in that manner. If the $auto_tag variable is set, the
next operation applies to the  tagged messages automatically, without  requiring
the "tag-prefix".

In macros or push commands, you can use the <tag-prefix-cond> operator. If there
are no tagged messages, NeoMutt  will "eat" the rest of  the macro to abort  its
execution.  NeoMutt  will  stop  "eating"  the  macro  when  it  encounters  the
<end-cond> operator; after this operator the rest of the macro will be  executed
as normal.

6. Using Hooks

A hook is a  concept found in  many other programs which  allows you to  execute
arbitrary commands before performing some  operation. For example, you may  wish
to tailor your  configuration based upon  which mailbox you  are reading, or  to
whom you are sending mail.  In the NeoMutt world, a  hook consists of a  regular
expression or pattern along with a configuration option/command. See:

  o account-hook

  o charset-hook

    iconv-hook

  o index-format-hook

  o crypt-hook

  o fcc-save-hook

    fcc-hook

    save-hook

  o folder-hook

  o mbox-hook

  o message-hook

  o open-hook

    close-hook

    append-hook

  o reply-hook

    send-hook

    send2-hook

  o timeout-hook

    startup-hook

    shutdown-hook

  o unhook

for  specific  details  on  each  type  of  hook  available.  Also  see  Message
Composition Flow for an overview of the composition process.

  Note

If a hook changes configuration  settings, these changes remain effective  until
the end of  the current NeoMutt  session. As  this is generally  not desired,  a
"default" hook needs to be added before all other hooks of that type to  restore
configuration defaults.

Example 4.7. Specifying a "default" hook

send-hook . 'unmy_hdr From:'
send-hook ~C'^b@b\\.b$' my_hdr from: c@c.c

In Example 4.7, "Specifying a "default" hook", by default the value of $from and
$real_name is  not  overridden. When  sending  messages  either To:  or  Cc:  to
<b@b.b>, the From: header is changed to <c@c.c>.

  6.1. Message Matching in Hooks

Hooks that act upon  messages (message-hook, reply-hook, send-hook,  send2-hook,
save-hook, fcc-hook, index-format-hook)  are evaluated in  a slightly  different
manner. For the other types of hooks, a regular expression is sufficient. But in
dealing with messages a finer grain of control is needed for matching since  for
different purposes you want to match different criteria.

NeoMutt allows the use of the  search pattern language for matching messages  in
hook commands. This works in exactly the  same way as it would when limiting  or
searching the mailbox, except that you  are restricted to those operators  which
match information NeoMutt extracts from the  header of the message (i.e.,  from,
to, cc, date, subject, etc.).

For example, if you wanted to set your return address based upon sending mail to
a specific address, you could do something like:

send-hook '~t ^user@work\\.com$' 'my_hdr From: John Smith <user@host>'

which would execute the given command when sending mail to user@work.com.

However, it is not required that you  write the pattern to match using the  full
searching language. You can still specify  a simple regular expression like  the
other hooks, in  which case NeoMutt  will translate your  pattern into the  full
language, using the  translation specified  by the  $default_hook variable.  The
pattern is  translated  at the  time  the hook  is  declared, so  the  value  of
$default_hook that is in effect at that time will be used.

  6.2. Mailbox Matching in Hooks

Hooks that match against mailboxes  (folder-hook, mbox-hook) apply both  regular
expression syntax as well as mailbox shortcut expansion on the regex  parameter.
There is some overlap between these, so special attention should be paid to  the
first character of the regex.

# Here, ^ will expand to "the current mailbox" not "beginning of string":
folder-hook ^/home/user/Mail/bar "set sort=threads"
# If you want ^ to be interpreted as "beginning of string", one workaround
# is to enclose the regex in parenthesis:
folder-hook (^/home/user/Mail/bar) "set sort=threads"
# This will expand to the default save folder for the alias "imap.example.com", which
# is probably not what you want:
folder-hook @imap\\.example\\.com "set sort=threads"
# A workaround is to use parenthesis or a backslash:
folder-hook (@imap\\.example\\.com) "set sort=threads"
folder-hook '\@imap\.example\.com' "set sort=threads"

Keep in mind that mailbox shortcut expansion on the regex parameter takes  place
when the hook  is initially  parsed, not  when the  hook is  matching against  a
mailbox. When NeoMutt  starts up  and is  reading the  .neomuttrc, some  mailbox
shortcuts may not  be usable. For  example, the "current  mailbox" shortcut,  ^,
will expand to an empty string because  no mailbox has been opened yet.  NeoMutt
will issue an error for this case or if the mailbox shortcut results in an empty
regex.

7. Managing the Environment

You can alter  the environment  that NeoMutt passes  on to  its child  processes
using  the  "setenv"  and  "unsetenv"  commands.  You  can  also  query  current
environment values by adding a "?" character.

  Note

These follow NeoMutt-style syntax, not shell-style!

setenv TERM vt100
setenv ORGANIZATION "The NeoMutt Development Team"
unsetenv DISPLAY
setenv LESS?

Running setenv  with no  parameters will  show  a list  of all  the  environment
variables.

8. External Address Queries

NeoMutt supports connecting to external directory databases such as LDAP, ph/qi,
bbdb, or NIS through a wrapper script  which connects to NeoMutt using a  simple
interface. Using the $query_command variable, you specify the wrapper command to
use. For example:

set query_command = "mutt_ldap_query.pl %s"

The wrapper script should accept the query on the command-line. It should return
a one line  message, then each  matching response  on a single  line, each  line
containing  a  tab  separated  address  then  name  then  some  other   optional
information. On error, or if there are no matching addresses, return a  non-zero
exit code and a one line error message.

An example multiple response output:

Searching database ... 70 entries ... 5 matching:
ji@papaya.com   Jeremy Irons    Emmy, Oscar, Tony
jc@damson.com   James Cagney    Oscar
mr@ilama.com    Meg Ryan
mjf@kumquat.com Michael J Fox
ma@yew.com      Murray Abraham  Oscar

There are two mechanisms for accessing the query function of NeoMutt. One is  to
do a query from  the index menu  using the <query>  function (default: Q).  This
will prompt  for a  query, then  bring up  the query  menu which  will list  the
matching responses. From  the query  menu, you  can select  addresses to  create
aliases, or to mail. You can tag multiple addresses to mail, start a new  query,
or have a new query appended to the current responses.

The other mechanism for accessing the query function is for address  completion,
similar to the alias completion.  In any prompt for  address entry, you can  use
the <complete-query> function (default: ^T) to run a query based on the  current
address you have typed. Like aliases, NeoMutt will look for what you have  typed
back to the last space or comma. If  there is a single response for that  query,
NeoMutt will  expand the  address in  place. If  there are  multiple  responses,
NeoMutt will activate the query menu. At  the query menu, you can select one  or
more addresses to be added to the prompt.

  Note

The query menu is affected by $alias_sort, thus overruling the order of  entries
as generated by $query_command.

9. Mailbox Formats

NeoMutt supports reading and  writing of four  different local mailbox  formats:
mbox, MMDF, MH and Maildir.  The mailbox type is auto  detected, so there is  no
need to use  a flag for  different mailbox types.  When creating new  mailboxes,
NeoMutt uses  the  default  specified  with the  $mbox_type  variable.  A  short
description of the formats follows.

mbox. This is a widely used mailbox format for UNIX. All messages are stored  in
a single file. Each message has a line of the form:

From me@ox.ac.uk Fri, 11 Apr 1997 11:44:56 PST

to denote the start of a new message  (this is often referred to as the  "From_"
line). The mbox format requires mailbox locking, is prone to mailbox  corruption
with concurrently writing  clients or misinterpreted  From_ lines. Depending  on
the environment, new mail detection can be unreliable. Mbox folders are fast  to
open and easy to archive.

MMDF. This is a variant of the mbox format. Each message is surrounded by  lines
containing "^A^A^A^A" (four times  control-A's). The same  problems as for  mbox
apply (also with  finding the right  message separator as  four control-A's  may
appear in message bodies).

MH. A radical departure from  mbox and MMDF, a  mailbox consists of a  directory
and each  message is  stored in  a  separate file.  The filename  indicates  the
message number  (however, this  is  may not  correspond  to the  message  number
NeoMutt displays). Deleted messages are renamed with a comma (",") prepended  to
the filename.  NeoMutt  detects this  type  of  mailbox by  looking  for  either
.mh_sequences or .xmhcache files (needed to distinguish normal directories  from
MH mailboxes). MH is  more robust with concurrent  clients writing the  mailbox,
but still may suffer from lost flags; message corruption is less likely to occur
than with mbox/mmdf.  It's usually slower  to open compared  to mbox/mmdf  since
many small files have to be read (NeoMutt provides Section 8.1, "Header Caching"
to greatly speed this process up). Depending on the environment, MH is not  very
disk-space efficient.

Maildir. The newest of the mailbox formats, used by the Qmail MTA (a replacement
for sendmail). Similar to  MH, except that it  adds three subdirectories of  the
mailbox: tmp, new and cur. Filenames for  the messages are chosen in such a  way
they are unique, even when two programs are writing the mailbox over NFS,  which
means that no file  locking is needed and  corruption is very unlikely.  Maildir
maybe slower to open without caching in  NeoMutt, it too is not very  disk-space
efficient depending on the environment. Since  no additional files are used  for
metadata  (which  is  embedded  in   the  message  filenames)  and  Maildir   is
locking-free, it's  easy  to sync  across  different machines  using  file-level
synchronization tools.

10. Mailbox Shortcuts

There are a  number of  built in shortcuts  which refer  to specific  mailboxes.
These shortcuts can be used anywhere you are prompted for a file or mailbox path
or in path-related  configuration variables. Note  that these only  work at  the
beginning of a string.

Table 4.13. Mailbox shortcuts

+----------+-------------------------------------------------------------------+
| Shortcut |                           Refers to...                            |
+----------+-------------------------------------------------------------------+
| !        | your $spool_file (incoming) mailbox                               |
+----------+-------------------------------------------------------------------+
| >        | your $mbox file                                                   |
+----------+-------------------------------------------------------------------+
| <        | your $record file                                                 |
+----------+-------------------------------------------------------------------+
| ^        | the current mailbox                                               |
+----------+-------------------------------------------------------------------+
| - or !!  | the file you've last visited                                      |
+----------+-------------------------------------------------------------------+
| ~        | your home directory                                               |
+----------+-------------------------------------------------------------------+
| = or +   | your $folder directory                                            |
+----------+-------------------------------------------------------------------+
| @alias   | to the default save folder as determined by the address of the    |
|          | alias                                                             |
+----------+-------------------------------------------------------------------+

For example,  to store  a copy  of outgoing  messages in  the folder  they  were
composed in, a folder-hook can be used to set $record:

folder-hook . 'set record=^'

Note: the current mailbox shortcut, "^", has no value in some cases. No  mailbox
is opened when NeoMutt  is invoked to  send an email  from the command-line.  In
interactive mode,  NeoMutt  reads the  muttrc  before opening  the  mailbox,  so
immediate expansion won't  work as expected  either. This can  be an issue  when
trying to directly  assign to $record,  but also affects  the fcc-hook  mailbox,
which is expanded immediately too.  The folder-hook example above works  because
the command is executed later, when the folder-hook fires.

11. Handling Mailing Lists

NeoMutt has a few configuration options that make dealing with large amounts  of
mail easier. The first thing you must  do is to let NeoMutt know what  addresses
you consider to be mailing lists (technically this does not have to be a mailing
list, but that  is what  it is  most often  used for),  and what  lists you  are
subscribed to. This is accomplished through  the use of the lists and  subscribe
commands  in  your  .neomuttrc.  Alternatively  or  additionally,  you  can  set
$auto_subscribe to  automatically  subscribe  addresses  found  in  a  List-Post
header.

Now that NeoMutt knows what  your mailing lists are,  it can do several  things,
the first of which is the ability to  show the name of a list through which  you
received a message (i.e., of a subscribed list) in the index menu display.  This
is useful to distinguish between personal and list mail in the same mailbox.  In
the $index_format variable, the expando "%L"  will print the string "To  <list>"
when "list" appears in the  "To" field, and "Cc <list>"  when it appears in  the
"Cc" field (otherwise it prints the name of the author).

Often times the "To" and "Cc" fields in mailing list messages tend to get  quite
large. Most people do not bother to remove the author of the message they  reply
to from the list, resulting in two or more copies being sent to that person. The
<list-reply> function, which by default  is bound to "L"  in the index menu  and
pager, helps  reduce the  clutter by  only replying  to the  known mailing  list
addresses instead of  all recipients (except  as specified by  Mail-Followup-To,
see below).

NeoMutt also supports the Mail-Followup-To header. When you send a message to  a
list of recipients which includes one or several known mailing lists, and if the
$followup_to option is set, NeoMutt will generate a Mail-Followup-To header.  If
any of the recipients are subscribed mailing lists, this header will contain all
the recipients  to  whom you  send  this message,  but  not your  address.  This
indicates that group-replies or list-replies (also known as "followups") to this
message should only be sent to the  original recipients of the message, and  not
separately to you - you'll  receive your copy through  one of the mailing  lists
you are subscribed to. If none  of the recipients are subscribed mailing  lists,
the header  will also  contain your  address,  ensuring you  receive a  copy  of
replies.

Conversely, when  group-replying  or list-replying  to  a message  which  has  a
Mail-Followup-To   header,   NeoMutt   will   respect   this   header   if   the
$honor_followup_to configuration variable is set. Using list-reply will in  this
case also make sure that  the reply goes to the  mailing list, even if it's  not
specified in the list of recipients in the Mail-Followup-To.

  Note

When header  editing  is  enabled,  you can  create  a  Mail-Followup-To  header
manually. NeoMutt will only auto-generate this  header if it doesn't exist  when
you send the message.

The other method some mailing list admins use is to generate a "Reply-To"  field
which points back  to the mailing  list address  rather than the  author of  the
message. This can create problems when trying to reply directly to the author in
private, since most mail clients will  automatically reply to the address  given
in the "Reply-To"  field. NeoMutt  uses the  $reply_to variable  to help  decide
which address to use. If  set to ask-yes or ask-no,  you will be prompted as  to
whether or not you would like to use the address given in the "Reply-To"  field,
or reply directly to the address given in the "From" field. When set to yes, the
"Reply-To" field will be used when present.

You can  change  or  delete  the  "X-Label:"  field  within  NeoMutt  using  the
"edit-label" command, bound  to the "y"  key by default.  This works for  tagged
messages, too. While in the edit-label function, pressing the <complete> binding
(TAB, by default) will perform completion against all labels currently in use.

Lastly, NeoMutt has the ability to sort the mailbox into threads. A thread is  a
group of  messages  which  all relate  to  the  same subject.  This  is  usually
organized into a tree-like structure where a message and all of its replies  are
represented graphically. If you've ever used a threaded news client, this is the
same concept. It makes  dealing with large volume  mailing lists easier  because
you can easily delete uninteresting threads and quickly find topics of value.

12. Display Munging

Working within the confines of a console or terminal window, it is often  useful
to be able to modify certain information elements in a non-destructive way -  to
change how they display,  without changing the stored  value of the  information
itself. This is especially so of  message subjects, which may often be  polluted
with extraneous metadata that either is reproduced elsewhere, or is of secondary
interest.

subjectrx regex replacement
unsubjectrx { * | regex }

subjectrx specifies  a  regular  expression  which, if  detected  in  a  message
subject, causes the  subject to be  replaced with the  "replacement" value.  The
replacement is subject to substitutions in the same way as for the spam command:
%L for the text to the left of the match, %R for text to the right of the match,
and %1 for the first  subgroup in the match (etc).  If you simply want to  erase
the match, set it to "%L%R". Any number of subjectrx commands may coexist.

Note this well: the  "replacement" value replaces the  entire subject, not  just
the match!

unsubjectrx removes a given subjectrx from  the substitution list. If * is  used
as the argument, all substitutions will be removed.

Example 4.8. Subject Munging

# Erase [rt #12345] tags from Request Tracker (RT) e-mails
subjectrx '\[rt #[0-9]+\] *' '%L%R'
# Servicedesk is another RT that sends more complex subjects.
# Keep the ticket number.
subjectrx '\[servicedesk #([0-9]+)\] ([^.]+)\.([^.]+) - (new|open|pending|update) - ' '%L[#%1] %R'
# Strip out annoying [listname] prefixes in subjects
subjectrx '\[[^]]*\]:? *' '%L%R'

13. New Mail Detection

NeoMutt supports  setups with  multiple  folders, allowing  all  of them  to  be
monitored for new mail (see Section 16, "Monitoring Incoming Mail" for details).

  13.1. How New Mail Detection Works

For Mbox  and Mmdf  folders, new  mail is  detected by  comparing access  and/or
modification times of files: NeoMutt assumes a folder has new mail if it  wasn't
accessed after it was  last modified. Utilities  like biff or  frm or any  other
program which accesses the mailbox might cause NeoMutt to never detect new  mail
for that mailbox if they do not  properly reset the access time. Other  possible
causes of  NeoMutt not  detecting new  mail in  these folders  are backup  tools
(updating access  times)  or  filesystems mounted  without  access  time  update
support (for Linux systems, see the relatime option).

  Note

Contrary to older NeoMutt releases,  it now maintains the  new mail status of  a
folder by properly resetting the access time if the folder contains at least one
message which is neither read, nor deleted, nor marked as old.

In cases  where new  mail  detection for  Mbox or  Mmdf  folders appears  to  be
unreliable, the $check_mbox_size option  can be used to  make NeoMutt track  and
consult file  sizes  for  new  mail  detection  instead  which  won't  work  for
size-neutral changes.

New mail for Maildir is assumed if there is one message in the new/ subdirectory
which is not marked deleted (see  $maildir_trash). For MH folders, a mailbox  is
considered having  new mail  if there's  at least  one message  in the  "unseen"
sequence as specified  by $mh_seq_unseen. Optionally,  $new_mail_command can  be
configured to execute an external program every time new mail is detected in the
current inbox.

NeoMutt does not poll POP3 folders for new mail, it only periodically checks the
currently opened folder (if it's a POP3 folder).

For IMAP, by default NeoMutt uses  recent message counts provided by the  server
to detect new mail.  If the $imap_idle  option is set, it'll  use the IMAP  IDLE
extension if advertised by the server.

The $mail_check_recent option  changes whether  NeoMutt will notify  you of  new
mail in an already visited mailbox. When  set (the default) it will only  notify
you of new mail received since the last time you opened the mailbox. When unset,
NeoMutt will notify you of any new mail in the mailbox.

  13.2. Polling For New Mail

When in the index menu and being idle (also see $timeout), NeoMutt  periodically
checks for new mail in all folders which have been configured via the  mailboxes
command (excepting those specified with the -nopoll flag). The interval  depends
on  the  folder  type:  for  local/IMAP  folders  it  consults  $mail_check  and
$pop_check_interval for POP folders.

Outside the index  menu the  directory browser  supports checking  for new  mail
using the <check-new> function  which is unbound by  default. Pressing TAB  will
bring up  a menu  showing the  files  specified by  the mailboxes  command,  and
indicate which contain new messages. NeoMutt will automatically enter this  mode
when invoked from the command line with  the -y option, or from the  index/pager
via the <change-folder> function.

For  the  pager,  index  and  directory  browser  menus,  NeoMutt  contains  the
<mailbox-list> function (bound  to "." by  default) which will  print a list  of
folders with new mail in the command line at the bottom of the screen.

For the index, by default NeoMutt displays the number of mailboxes with new mail
in the status bar, please refer to the $status_format variable for details.

When changing folders, NeoMutt fills the  prompt with the first folder from  the
mailboxes list containing new mail (if any), pressing <Space> will cycle through
folders with new mail. The  (by default unbound) function  <next-unread-mailbox>
in the index can be  used to immediately open the  next folder with unread  mail
(if any).

  13.3. Monitoring New Mail

When the Inotify mechanism for monitoring of files is supported (Linux only) and
not disabled at compilation  time, NeoMutt immediately  notifies about new  mail
for all folders configured via the mailboxes command (excepting those  specified
with the -nopoll  flag). Dependent on  mailbox format also  added old mails  are
tracked (not for Maildir).

No configuration variables are available.  Trace output is given when  debugging
is enabled via command line option -d3. The lower level 2 only shows errors, the
higher level 5 all including raw Inotify events.

  Note

Getting events about new mail is  limited to the capabilities of the  underlying
mechanism. inotify only reports local changes, i. e. new mail notification works
for mails delivered by  an agent on  the same machine as  NeoMutt, but not  when
delivered remotely on a network file system as nfs. also the monitoring  handles
might fail  in rare  conditions, so  you better  don't completely  rely on  this
feature.

  Note

When using Maildir, you don't have  to manually specify all your mailboxes.  You
can use this command instead:

mailboxes `find ~/.mail/ -type d -name cur | sed -e 's:/cur/*$::' -e 's/ /\\ /g' | sort | tr '\n' ' '`

  13.4. Calculating Mailbox Message Counts

If $mail_check_stats is  set, NeoMutt  will periodically  calculate the  unread,
flagged, and total  message counts  for each  mailbox watched  by the  mailboxes
command. (Note:  IMAP mailboxes  only  support unread  and total  counts).  This
calculation takes place at the same time as new mail polling, but is  controlled
by a separate timer: $mail_check_stats_interval.

The sidebar can display these message counts. See $sidebar_format.

14. Editing Threads

NeoMutt has  the ability  to  dynamically restructure  threads that  are  broken
either by misconfigured software or bad behavior from some correspondents.  This
allows to  clean your  mailboxes from  these annoyances  which make  it hard  to
follow a discussion.

  14.1. Linking Threads

Some  mailers  tend  to  "forget"  to  correctly  set  the  "In-Reply-To:"   and
"References:" headers  when  replying  to  a message.  This  results  in  broken
discussions because  NeoMutt has  not enough  information to  guess the  correct
threading. You can fix this by tagging  a number of replies, then moving to  the
parent message and using  the <link-threads> function (bound  to & by  default).
The replies will then be connected to this parent message.

  14.2. Breaking Threads

On mailing lists, some people are in the bad habit of starting a new  discussion
by hitting "reply" to any  message from the list and  changing the subject to  a
totally unrelated one.  You can  fix such  threads by  using the  <break-thread>
function (bound by default  to #), which will  turn the subthread starting  from
the current message into a whole different thread.

15. Delivery Status Notification (DSN) Support

RFC1894 defines a set of MIME  content types for relaying information about  the
status of  electronic  mail  messages.  These  can  be  thought  of  as  "return
receipts."

To support DSN, there are two variables. $dsn_notify is used to request receipts
for different  results  (such  as  failed  message,  message  delivered,  etc.).
$dsn_return requests  how much  of  your message  should  be returned  with  the
receipt (headers or full message).

When using $sendmail for mail delivery, you need to use either Berkeley sendmail
8.8.x (or  greater) a  MTA supporting  DSN command  line options  compatible  to
Sendmail: The -N and -R options can be used by the mail client to make  requests
as to what type of status messages should be returned. Please consider your  MTA
documentation whether DSN is supported.

For SMTP delivery using $smtp_url, it  depends on the capabilities announced  by
the server whether NeoMutt will attempt to request DSN or not.

16. Start a WWW Browser on URLs

If a message contains URLs, it is efficient to get a menu with all the URLs  and
start a  WWW browser  on one  of them.  This functionality  is provided  by  the
external     urlview     program     which      can     be     retrieved      at
ftp://ftp.mutt.org/mutt/contrib/ and the configuration commands:

macro index \cb |urlview\n
macro pager \cb |urlview\n

17. Echoing Text

Usage:

echo message

You can print  messages to  the message window  using the  "echo" command.  This
might be useful after  a macro finishes executing.  After printing the  message,
echo will pause for the number of seconds specified by $sleep_time.

echo "Sourcing muttrc file"
unset confirm_append
macro index ,a "<save-message>=archive<enter><enter-command>echo 'Saved to archive'<enter>"

18. Message Composition Flow

This is a brief overview of the steps NeoMutt takes during message  composition.
It also shows the order and timing of hook execution.

  o  Reply  envelope  settings.  $reverse_name  processing.  To,  Cc,   Subject,
    References header defaults.

  o my_hdr processing for To, Cc, Bcc, Subject headers.

  o  Prompts  for  To,  Cc,   Bcc,  Subject  headers.  See  $ask_cc,   $ask_bcc,
    $fast_reply.

  o From header setting.  Note: this is  so send-hooks below  can match ~P,  but
    From is re-set further below in case a send-hook changes the value.

  o reply-hook

  o send-hook

  o From header setting.

  o my_hdr processing for From,  Reply-To, Message-ID and user-defined  headers.
    The To, Cc, Bcc, Subject, and Return-Path headers are ignored at this stage.

  o Message body and signature generation.

  o send2-hook

  o $real_name part of From header setting.

  o $editor invocation for the message.

  o send2-hook

  o Cryptographic settings.

  o fcc-hook. Fcc setting.

  o Compose  menu. Note:  send2-hook  is evaluated  each  time the  headers  are
    changed.

  o Message encryption and signing. Key selection.

  o Fcc saving if $fcc_before_send is set. (Note the variable documentation  for
    caveats of Fcc'ing before sending.)

  o Message sending.

  o Fcc saving if $fcc_before_send  is unset (the default).  The Fcc used to  be
    saved before sending the message. It is now by default saved afterwards, but
    if the saving fails, the user is prompted.

19. Miscellany

This section documents various features that fit nowhere else.

Address normalization

        NeoMutt normalizes all e-mail addresses  to the simplest form  possible.
        If an address contains a real_name, the form Joe User  <joe@example.com>
        is used and the  pure e-mail address  without angle brackets  otherwise,
        i.e. just joe@example.com.

        This normalization  affects  all  headers  NeoMutt  generates  including
        aliases.

Initial folder selection

        The folder NeoMutt opens at startup is determined as follows: the folder
        specified in the $MAIL environment  variable if present. Otherwise,  the
        value of $MAILDIR is taken into  account. If that isn't present  either,
        NeoMutt takes  the user's  mailbox  in the  mailspool as  determined  at
        compile-time  (which  may  also  reside  in  the  home  directory).  The
        $spool_file setting overrides this  selection. Highest priority has  the
        mailbox given with the -f command line option.

                       Chapter 5. NeoMutt's MIME Support

Table of Contents

1. Using MIME in NeoMutt

             1.1. MIME Overview

             1.2. Viewing MIME Messages in the Pager

             1.3. The Attachment Menu

             1.4. The Compose Menu

2. MIME Type Configuration with mime.types

3. MIME Viewer Configuration with Mailcap

             3.1. The Basics of the Mailcap File

             3.2. Secure Use of Mailcap

             3.3. Advanced Mailcap Usage

             3.4. Example Mailcap Files

4. MIME Autoview

5. MIME Multipart/Alternative

             5.1. Reading Multipart/Alternative Emails

             5.2. Composing Multipart/Alternative Emails

6. MIME Multipart/Multilingual

             6.1. Reading Multipart/Multilingual Emails

             6.2. Composing Multipart/Multilingual Emails

7. MIME Multipart/Related

             7.1. Composing Multipart/Related Emails

8. Attachment Searching and Counting

9. MIME Lookup

Quite a bit of effort has been  made to make NeoMutt the premier text-mode  MIME
MUA. Every effort has been made to provide the functionality that the discerning
MIME user requires, and the conformance to the standards wherever possible. When
configuring NeoMutt for MIME, there are  two extra types of configuration  files
which NeoMutt uses. One  is the mime.types file,  which contains the mapping  of
file extensions  to  IANA MIME  types.  The other  is  the mailcap  file,  which
specifies the external commands to use for handling specific MIME types.

1. Using MIME in NeoMutt

  1.1. MIME Overview

MIME  is  short  for  "Multipurpose  Internet  Mail  Extension"  and   describes
mechanisms  to  internationalize  and   structure  mail  messages.  Before   the
introduction of  MIME, messages  had a  single  text part  and were  limited  to
us-ascii header and content. With MIME, messages can have attachments (and  even
attachments which  itself have  attachments  and thus  form a  tree  structure),
nearly arbitrary  characters  can  be  used for  sender  names,  recipients  and
subjects.

Besides the handling of non-ascii characters in message headers, to NeoMutt  the
most important aspect of  MIME are so-called MIME  types. These are  constructed
using a major and minor type separated by a forward slash. These specify details
about the content that follows. Based upon these, NeoMutt decides how to  handle
this part. The  most popular major  type is  "text" with minor  types for  plain
text, HTML and various other formats. Major types also exist for images,  audio,
video and of course general application data (e.g. to separate cryptographically
signed data with a  signature, send office documents,  and in general  arbitrary
binary data). There's also the multipart major type which represents the root of
a subtree  of MIME  parts.  A list  of  supported MIME  types  can be  found  in
Table 5.1, "Supported MIME types".

MIME also defines a set of  encoding schemes for transporting MIME content  over
the network:  7bit, 8bit,  quoted-printable, base64  and binary.  There're  some
rules when to  choose what  for encoding headers  and/or body  (if needed),  and
NeoMutt will in general make a good choice.

NeoMutt does most of MIME encoding/decoding  behind the scenes to form  messages
conforming to  MIME  on the  sending  side. On  reception,  it can  be  flexibly
configured as to how what MIME  structure is displayed (and if it's  displayed):
these  decisions  are  based  on  the  content's  MIME  type.  There  are  three
areas/menus in  dealing with  MIME: the  pager (while  viewing a  message),  the
attachment menu and the compose menu.

  1.2. Viewing MIME Messages in the Pager

When you select  a message  from the  index and view  it in  the pager,  NeoMutt
decodes as  much of  a message  as possible  to a  text representation.  NeoMutt
internally supports a number of MIME  types, including the text/plain type,  the
message/rfc822 (mail messages) type  and some multipart  types. In addition,  it
recognizes a  variety of  PGP  MIME and  S/MIME  types, including  PGP/MIME  and
application/pgp, and application/pkcs7-mime.

NeoMutt will denote attachments with a couple lines describing them. These lines
are of the form:

[-- Attachment #1: Description --]
[-- Type: text/plain, Encoding: 7bit, Size: 10000 --]

Where the Description is the description  or filename given for the  attachment,
and the Encoding is one of the already mentioned content encodings.

If NeoMutt cannot deal with a MIME type, it will display a message like:

[-- image/gif is unsupported (use 'v' to view this part) --]

  1.3. The Attachment Menu

The default binding for <view-attachments> is "v", which displays the attachment
menu for a message. The attachment menu displays a list of the attachments in  a
message. From the attachment menu, you  can save, print, pipe, delete, and  view
attachments. You can apply these operations  to a group of attachments at  once,
by tagging the attachments and by using the <tag-prefix> operator. You can  also
reply to the current message from this menu, and only the current attachment (or
the attachments tagged) will be quoted  in your reply. You can view  attachments
as text, or view them using the mailcap viewer definition (the mailcap mechanism
is explained later in detail).

Finally,   you   can   apply   the   usual   message-related   functions   (like
<resend-message>,  and   the  <reply>   and  <forward-message>   functions)   to
attachments of type message/rfc822.

See table  Table  9.7, "Default  Attachment  Menu Bindings"  for  all  available
functions.

    1.3.1. Viewing Attachments

There are four(!)  ways of viewing  attachments, so the  functions deserve  some
extra explanation.

<view-mailcap> (default keybinding: m)

        This will use the first matching mailcap entry.

        If no matching mailcap  entries are found, it  will abort with an  error
        message.

<view-attach> (default keybinding: <Enter>)

        NeoMutt will display internally supported  MIME types (see Section  1.2,
        "Viewing MIME Messages in  the Pager") in the  pager. This will  respect
        auto_view settings, to determine whether to use a copiousoutput  mailcap
        entry or just directly display the attachment.

        Other MIME types will use the first matching mailcap entry.

        If no  matching  mailcap  entries  are found,  the  attachment  will  be
        displayed in the pager as raw text.

<view-pager>

        NeoMutt will  use  the first  matching  copiousoutput mailcap  entry  to
        display the attachment in the pager (regardless of auto_view settings).

        If no  matching  mailcap  entries  are found,  the  attachment  will  be
        displayed in the pager as raw text.

<view-text> (default keybinding: T)

        The attachment will always be displayed in the pager as raw text.

    1.3.2. Saving Attachments

<save-entry> (default keybinding: s)

        This will save the attachment to disk.

        The permissions of the saved file will depend on the user's umask.  e.g.
        umask 022 will create a file with permissions rw-r--r--.

        See also: $attach_save_dir, $attach_save_without_prompting, $attach_sep,
        $attach_split

  1.4. The Compose Menu

The compose menu is the menu you see before you send a message. It allows you to
edit the recipient list, the subject, and other aspects of your message. It also
contains a list  of the attachments  of your message,  including the main  body.
From this menu, you  can print, copy, filter,  pipe, edit, compose, review,  and
rename an attachment or a list of tagged attachments. You can also modifying the
attachment information, notably the type, encoding and description.

Attachments appear as follows by default:

- 1 [text/plain, 7bit, 1K]           /tmp/neomutt-euler-8082-0 <no description>
  2 [applica/x-gunzip, base64, 422K] ~/src/neomutt-0.85.tar.gz <no description>

The "-" denotes that NeoMutt will delete the file after sending (or  postponing,
or canceling) the message.  It can be toggled  with the <toggle-unlink>  command
(default: u). The next field is the  MIME content-type, and can be changed  with
the <edit-type> command (default:  ^T). The next field  is the encoding for  the
attachment, which allows a binary message to be encoded for transmission on 7bit
links. It can  be changed with  the <edit-encoding> command  (default: ^E).  The
next field is the size of the attachment, rounded to kilobytes or megabytes. The
next field is the filename, which can be changed with the <rename-file>  command
(default: R). The final field is the  description of the attachment, and can  be
changed with the <edit-description> command (default: d). See $attach_format for
a full list of available expandos to format this display to your needs.

2. MIME Type Configuration with mime.types

To get most out of MIME, it's important that a MIME part's content type  matches
the  content  as  closely  as  possible  so  that  the  recipient's  client  can
automatically select  the right  viewer  for the  content. However,  there's  no
reliable way  for  NeoMutt to  know  how to  detect  every possible  file  type.
Instead, it  uses a  simple plain  text mapping  file that  specifies what  file
extension corresponds to what MIME type. This file is called mime.types.

When you add  an attachment to  your mail message,  NeoMutt searches the  system
mime.types    file     at     /etc/mime.types,     $SYSCONFDIR/mime.types     or
$PKGDATADIR/mime.types   and   then   your    personal   mime.types   file    at
$HOME/.mime.types.

Where $HOME  is  your  home  directory.  The  $PKGDATADIR  and  the  $SYSCONFDIR
directories depend on where NeoMutt is installed: the former is the default  for
shared data, the latter for system configuration files.

Each  line  starts  with   the  full  MIME  type,   followed  by  a  space   and
space-separated list of file extensions. For example you could use:

Example 5.1. mime.types

application/postscript          ps eps
application/pgp                 pgp
audio/x-aiff                    aif aifc aiff

A sample mime.types file comes with the NeoMutt distribution, and should contain
most of the MIME types you are likely to use.

If NeoMutt can  not determine the  MIME type by  the extension of  the file  you
attach, it will run the  command specified in $mime_type_query_command. If  that
command is not specified, NeoMutt will look at the file. If the file is free  of
binary information, NeoMutt will assume that the file is plain text, and mark it
as text/plain. If the file contains  binary information, then NeoMutt will  mark
it as  application/octet-stream.  You can  change  the MIME  type  that  NeoMutt
assigns to an attachment by using the <edit-type> command from the compose  menu
(default: ^T), see Table 5.1, "Supported MIME types" for supported major  types.
NeoMutt recognizes  all  of these  if  the appropriate  entry  is found  in  the
mime.types file. Non-recognized mime types should only be used if the  recipient
of the message is likely to be expecting such attachments.

Table 5.1. Supported MIME types

+-----------------+----------+-------------------------------------------+
| MIME major type | Standard |                Description                |
+-----------------+----------+-------------------------------------------+
| application     | yes      | General application data                  |
+-----------------+----------+-------------------------------------------+
| audio           | yes      | Audio data                                |
+-----------------+----------+-------------------------------------------+
| image           | yes      | Image data                                |
+-----------------+----------+-------------------------------------------+
| message         | yes      | Mail messages, message status information |
+-----------------+----------+-------------------------------------------+
| model           | yes      | VRML and other modeling data              |
+-----------------+----------+-------------------------------------------+
| multipart       | yes      | Container for other MIME parts            |
+-----------------+----------+-------------------------------------------+
| text            | yes      | Text data                                 |
+-----------------+----------+-------------------------------------------+
| video           | yes      | Video data                                |
+-----------------+----------+-------------------------------------------+
| chemical        | no       | Mostly molecular data                     |
+-----------------+----------+-------------------------------------------+

MIME types are not arbitrary, they need to be assigned by IANA.

3. MIME Viewer Configuration with Mailcap

NeoMutt supports RFC1524  MIME Configuration,  in particular  the Unix  specific
format specified in Appendix A of RFC1524. This file format is commonly referred
to as the  "mailcap" format. Many  MIME compliant programs  utilize the  mailcap
format, allowing you to specify handling for all MIME types in one place for all
programs. Programs known to use this format include Firefox, lynx and metamail.

In order to handle various MIME types that NeoMutt doesn't have built-in support
for, it parses  a series  of external configuration  files to  find an  external
handler. The default  search string for  these files is  a colon delimited  list
containing the following files:

 1. $HOME/.mailcap

 2. $PKGDATADIR/mailcap

 3. $SYSCONFDIR/mailcap

 4. /etc/mailcap

 5. /usr/etc/mailcap

 6. /usr/local/etc/mailcap

where $HOME  is  your  home  directory.  The  $PKGDATADIR  and  the  $SYSCONFDIR
directories depend on where NeoMutt is installed: the former is the default  for
shared data, the latter for system configuration files.

The default search path can be obtained by running the following command:

neomutt -nF /dev/null -Q mailcap_path

In particular, the metamail distribution will install a mailcap file, usually as
/usr/local/etc/mailcap, which contains some baseline entries.

  3.1. The Basics of the Mailcap File

A mailcap file  consists of  a series  of lines  which are  comments, blank,  or
definitions.

A comment line consists of a # character followed by anything you want.

A blank line is blank.

A definition line consists of a content type, a view command, and any number  of
optional fields. Each field of a definition  line is divided by a semicolon  ";"
character.

The content type is specified in the MIME standard "type/subtype" notation.  For
example, text/plain, text/html, image/gif, etc. In addition, the mailcap  format
includes two formats for wildcards, one using the special "*" subtype, the other
is the  implicit wild,  where you  only  include the  major type.  For  example,
image/*, or video will match all image types and video types, respectively.

The view command is a Unix command for viewing the type specified. There are two
different types of commands supported.  The default is to  send the body of  the
MIME message to the command on stdin.  You can change this behavior by using  %s
as a parameter to your view command. This will cause NeoMutt to save the body of
the MIME message to a temporary file, and then call the view command with the %s
replaced by the name  of the temporary  file. In both  cases, NeoMutt will  turn
over the terminal to  the view program  until the program  quits, at which  time
NeoMutt will remove  the temporary file  if it exists.  This means that  mailcap
does not work  out of the  box with  programs which detach  themselves from  the
terminal right after starting, like open on  Mac OS X. In order to  nevertheless
use these programs with mailcap, you probably need custom shell scripts.

So, in the  simplest form, you  can send  a text/plain message  to the  external
pager more on standard input:

text/plain; more

Or, you could send the message as a file:

text/plain; more %s

Perhaps you would like to use lynx to interactively view a text/html message:

text/html; lynx %s

In this case, lynx does not support  viewing a file from standard input, so  you
must use the %s syntax.

  Note

Some older versions of lynx contain a bug where they will check the mailcap file
for a viewer for text/html.  They will find the line  which calls lynx, and  run
it. This causes lynx to continuously spawn itself to view the object.

On the other hand, maybe you don't want to use lynx interactively, you just want
to have it convert the text/html to text/plain, then you can use:

text/html; lynx -dump %s | more

Perhaps you wish to use lynx to view  text/html files, and a pager on all  other
text formats, then you would use the following:

text/html; lynx %s
text/*; more

  3.2. Secure Use of Mailcap

The interpretation of shell meta-characters embedded in MIME parameters can lead
to security problems in general. NeoMutt tries to quote parameters in  expansion
of %s syntaxes properly, and avoids  risky characters by substituting them,  see
the $mailcap_sanitize variable.

Although NeoMutt's procedures to invoke programs  with mailcap seem to be  safe,
there are other  applications parsing  mailcap, maybe  taking less  care of  it.
Therefore you should pay attention to the following rules:

Keep the %-expandos  away from shell  quoting. Don't quote  them with single  or
double quotes. NeoMutt does  this for you,  the right way,  as should any  other
program which interprets mailcap.  Don't put them  into backtick expansions.  Be
highly careful with eval statements, and  avoid them if possible at all.  Trying
to fix  broken  behavior  with  quotes  introduces  new  leaks  -  there  is  no
alternative to correct quoting in the first place.

If you have to use the %-expandos'  values in context where you need quoting  or
backtick expansions, put  that value  into a  shell variable  and reference  the
shell variable  where necessary,  as in  the following  example (using  $charset
inside the backtick expansion  is safe, since  it is not  itself subject to  any
further expansion):

text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
        && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1

  3.3. Advanced Mailcap Usage

    3.3.1. Optional Fields

In addition to the  required content-type and view  command fields, you can  add
semi-colon ";"  separated  fields  to  set  flags  and  other  options.  NeoMutt
recognizes the following optional fields:

copiousoutput

        This flag tells NeoMutt that  the command passes possibly large  amounts
        of text  on standard  output.  This causes  NeoMutt  to invoke  a  pager
        (either the internal pager  or the external pager  defined by the  pager
        variable) on the output of the view command. Without this flag,  NeoMutt
        assumes that the command is interactive.  One could use this to  replace
        the pipe to more in the lynx -dump example in the Basic section:

 text/html; lynx -dump %s ; copiousoutput

        This will cause lynx  to format the text/html  output as text/plain  and
        NeoMutt will use your standard pager to display the results.

        NeoMutt will set the  COLUMNS environment variable to  the width of  the
        pager.  Some   programs   make   use  of   this   environment   variable
        automatically. Others provide a command line argument that can use  this
        to set the output width:

 text/html; lynx -dump -width ${COLUMNS:-80} %s; copiousoutput

        Note that when  using the built-in  pager, only entries  with this  flag
        will be considered a handler for a MIME type - all other entries will be
        ignored.

needsterminal

        NeoMutt uses this flag when viewing attachments with auto_view, in order
        to decide whether it should honor the setting of the $wait_key  variable
        or not. When an attachment is  viewed using an interactive program,  and
        the corresponding mailcap entry has  a needsterminal flag, NeoMutt  will
        use $wait_key and the exit  status of the program  to decide if it  will
        ask you to press  a key after  the external program  has exited. In  all
        other situations it will not prompt you for a key.

compose=<command>

        This flag specifies the command to use  to create a new attachment of  a
        specific MIME type. NeoMutt supports this from the compose menu.

composetyped=<command>

        This flag specifies the command to use  to create a new attachment of  a
        specific MIME type.  This command  differs from the  compose command  in
        that NeoMutt will expect standard MIME headers on the data. This can  be
        used to  specify  parameters,  filename, description,  etc.  for  a  new
        attachment. NeoMutt supports this from the compose menu.

print=<command>

        This flag specifies the  command to use to  print a specific MIME  type.
        NeoMutt supports this from the attachment and compose menus.

edit=<command>

        This flag specifies  the command to  use to edit  a specific MIME  type.
        NeoMutt supports this from the compose menu, and also uses it to compose
        new attachments. NeoMutt will  default to the  defined $editor for  text
        attachments.

nametemplate=<template>

        This field  specifies the  format for  the  file denoted  by %s  in  the
        command fields. Certain programs will require a certain file  extension,
        for instance, to  correctly view a  file. For instance,  lynx will  only
        interpret a file as text/html if the  file ends in .html. So, you  would
        specify lynx as a text/html viewer with a line in the mailcap file like:

 text/html; lynx %s; nametemplate=%s.html

test=<command>

        This field specifies a command to run to test whether this mailcap entry
        should be used. The command is defined with the command expansion  rules
        defined in the  next section. If  the command returns  0, then the  test
        passed, and NeoMutt uses  this entry. If  the command returns  non-zero,
        then the  test failed,  and NeoMutt  continues searching  for the  right
        entry. Note that the content-type must match before NeoMutt performs the
        test. For example:

 text/html; firefox -remote 'openURL(%s)' ; test=RunningX
 text/html; lynx %s

        In this example, NeoMutt will run the program RunningX which will return
        0 if the  X Window  manager is  running, and  non-zero if  it isn't.  If
        RunningX returns  0,  then  NeoMutt  will run  firefox  to  display  the
        text/html object. If RunningX doesn't return 0, then NeoMutt will go  on
        to the next entry and use lynx to display the text/html object.

x-neomutt-keep

        x-neomutt-keep tells NeoMutt to not delete the temporary file after  the
        program has been run.

        Using it  allows you  to control  the lifespan  of the  temporary  file.
        Without this option, the file will be deleted after $timeout seconds.

 text/html; firefox %s & x-neomutt-keep

x-neomutt-nowrap

        x-neomutt-nowrap tells the NeoMutt pager  to ignore the $wrap  parameter
        and to  assume  the  output  from the  mailcap  command  to  already  be
        correctly wrapped.

 text/html; /usr/local/bin/w3m -s -T text/html -o display_link_number=1 %s; nametemplate=%s.html; copiousoutput; x-neomutt-nowrap;

    3.3.2. Search Order

When searching for an  entry in the  mailcap file, NeoMutt  will search for  the
most useful entry for its purpose. For instance, if you are attempting to  print
an image/gif, and you have the  following entries in your mailcap file,  NeoMutt
will search for an entry with the print command:

image/*;        xv %s
image/gif;      ; print=anytopnm %s | pnmtops | lpr; \
                nametemplate=%s.gif

NeoMutt will skip the image/* entry and  use the image/gif entry with the  print
command.

In addition, you can use this with auto_view to denote two commands for  viewing
an  attachment,  one  to  be  viewed  automatically,  the  other  to  be  viewed
interactively from the attachment menu using the <view-mailcap> function  (bound
to "m" by default). In addition, you can then use the test feature to  determine
which viewer to use interactively depending on your environment.

text/html;      firefox -remote 'openURL(%s)' ; test=RunningX
text/html;      lynx %s; nametemplate=%s.html
text/html;      lynx -dump %s; nametemplate=%s.html; copiousoutput

For auto_view, NeoMutt will choose the third entry because of the  copiousoutput
tag. For interactive viewing, NeoMutt will run the program RunningX to determine
if it should use the first entry. If the program returns non-zero, NeoMutt  will
use the  second entry  for interactive  viewing. The  last entry  is for  inline
display in the pager and the <view-attach> function in the attachment menu.

Entries with the copiousoutput  tag should always be  specified as the last  one
per type. For  non-interactive use,  the last entry  will then  actually be  the
first  matching  one   with  the   tag  set.  For   non-interactive  use,   only
copiousoutput-tagged  entries  are  considered.  For  interactive  use,  NeoMutt
ignores this tag  and treats all  entries equally. Therefore,  if not  specified
last, all  following entries  without this  tag would  never be  considered  for
<view-attach> because the copiousoutput before them matched already.

    3.3.3. Command Expansion

The various commands  defined in  the mailcap files  are passed  to the  /bin/sh
shell using the system(3) function. Before the command is passed to /bin/sh  -c,
it is parsed to expand various special parameters with information from NeoMutt.
The keywords NeoMutt expands are:

%s

        As seen in  the basic mailcap  section, this variable  is expanded to  a
        filename specified by the calling  program. This file contains the  body
        of the message to view/print/edit or where the composing program  should
        place the results of composition. In  addition, the use of this  keyword
        causes  NeoMutt  to   not  pass  the   body  of  the   message  to   the
        view/print/edit program on stdin.

%t

        NeoMutt will expand %t to the text representation of the content type of
        the message  in the  same form  as the  first parameter  of the  mailcap
        definition line, i.e. text/html or image/gif.

%{<parameter>}

        NeoMutt will expand this  to the value of  the specified parameter  from
        the Content-Type: line of the mail  message. For instance, if your  mail
        message contains:

 Content-Type: text/plain; charset=iso-8859-1

        then  NeoMutt  will  expand  %{charset}  to  "iso-8859-1".  The  default
        metamail mailcap file uses this feature to test the charset to spawn  an
        xterm using the right charset to view the message.

\%

        This will be replaced by a literal %.

NeoMutt does not currently support the %F and %n keywords specified in  RFC1524.
The main purpose of these parameters is for multipart messages, which is handled
internally by NeoMutt.

  3.4. Example Mailcap Files

This mailcap file is fairly simple and standard:

# I'm always running X :)
video/*;        xanim %s > /dev/null
image/*;        xv %s > /dev/null
# I'm always running firefox (if my computer had more memory, maybe)
text/html;      firefox -remote 'openURL(%s)'

These mailcap files shows how to control the lifespan of the temporary file.

# The `display` program shows an image and doesn't return until the user quits.

# Display an image, but wait for the user to quit the display program.
# When the user quits control will return to NeoMutt.
image/png; display %s;

# Display an image and return to NeoMutt immediately.
image/png; display %s &;

# The file will be automatically deleted after $timeout seconds.

# Some graphical programs return immediately if they're already running.
# We'll add an ampersand (&), just in case they're not.

# View the contents of a 'tar' file.
# The file will be automatically deleted after $timeout seconds.
application/x-tar; file-roller %s &;

# View the contents of a 'tar' file.
# The file will not be deleted.
application/x-tar; file-roller %s &; x-neomutt-keep

# Some programs watch any files they have open.
# If NeoMutt deleted the file, the program would close prematurely.

# Use a custom script to manage the file's lifespan.
application/pdf; my-pdf-script.sh %s; x-neomutt-keep

This mailcap file shows quite a number of examples:

# Use xanim to view all videos Xanim produces a header on startup,
# send that to /dev/null so I don't see it
video/*;        xanim %s > /dev/null
# Send html to a running firefox by remote
text/html;      firefox -remote 'openURL(%s)'; test=RunningFirefox
# If I'm not running firefox but I am running X, start firefox on the
# object
text/html;      firefox %s; test=RunningX
# Else use lynx to view it as text
text/html;      lynx %s
# This version would convert the text/html to text/plain
text/html;      lynx -dump %s; copiousoutput
# I use enscript to print text in two columns to a page
text/*;         more %s; print=enscript -2Gr %s
# Firefox adds a flag to tell itself to view jpegs internally
image/jpeg;     xv %s; x-mozilla-flags=internal
# Use xv to view images if I'm running X
# In addition, this uses the \ to extend the line and set my editor
# for images
image/*;        xv %s; test=RunningX; edit=xpaint %s
# Convert images to text using the netpbm tools
image/*;        (anytopnm %s | pnmscale -xysize 80 46 | ppmtopgm | pgmtopbm | \
                pbmtoascii -1x2) 2>&1 ; copiousoutput
# Send excel spreadsheets to my NT box
application/ms-excel;   open.pl %s

4. MIME Autoview

Usage:

auto_view mime-type [ /mime-subtype ] [ mime-type [ /mime-subtype ] ...]
unauto_view { * | [ mime-type [ /mime-subtype ] ...]}

In addition to explicitly  telling NeoMutt to view  an attachment with the  MIME
viewer defined  in the  mailcap  file from  the  attachments menu,  NeoMutt  has
support for automatically viewing MIME attachments while in the pager.

For this to work, you  must define a viewer in  the mailcap file which uses  the
copiousoutput option to denote that it is non-interactive. Usually, you also use
the entry to convert the attachment to a text representation which you can  view
in the pager.

You then use the auto_view configuration command to list the content-types  that
you wish to view automatically. For instance, if you set it to:

auto_view text/html application/x-gunzip \
  application/postscript image/gif application/x-tar-gz

...NeoMutt would try to find corresponding entries for rendering attachments  of
these types as text. A corresponding mailcap could look like:

text/html;              lynx -dump %s; copiousoutput; nametemplate=%s.html
image/*;                anytopnm %s | pnmscale -xsize 80 -ysize 50 | ppmtopgm | \
                        pgmtopbm | pbmtoascii ; copiousoutput
application/x-gunzip;   gzcat; copiousoutput
application/x-tar-gz;   gunzip -c %s | tar -tf - ; copiousoutput
application/postscript; ps2ascii %s; copiousoutput

unauto_view can be used to remove previous entries from the auto_view list. This
can be  used  with  message-hook  to  autoview  messages  based  on  size,  etc.
"unauto_view *" will remove all previous entries.

5. MIME Multipart/Alternative

A multipart/alternative email has several parts that represent the same  content
in different formats, such  as text/plain and text/html.  This kind of email  is
heavily used by many modern mail user agents to send HTML messages which contain
an  alternative   plain   text   representation.  You   can   read   and   write
multipart/alternative emails in NeoMutt.

  5.1. Reading Multipart/Alternative Emails

NeoMutt  has   some   heuristics  for   determining   which  attachment   of   a
multipart/alternative type to display:

 1. First, NeoMutt will check the alternative_order list to determine if one  of
    the available types is preferred. It consists  of a number of MIME types  in
    order, including support for implicit and explicit wildcards. For example:

 alternative_order text/enriched text/plain text application/postscript image/*

 2. Next, NeoMutt will check if any  of the types have a defined auto_view,  and
    use that.

 3. Failing  that,  NeoMutt  will  look first  for  text/enriched,  followed  by
    text/plain, and finally text/html.

 4. As a last attempt, NeoMutt will look for any type it knows how to handle.

To  remove   a   MIME   type   from  the   alternative_order   list,   use   the
unalternative_order command.

  5.2. Composing Multipart/Alternative Emails

Noemutt includes some primitive ability to compose multipart/alternative emails:

 1. In the Compose  menu, attach the  two (or more)  alternatives as usual.  For
    example,  attach  "invitation.html"  and  then  "invitation.txt".  (You  can
    reorder them using the <move-up> (-) and <move-down> (+) bindings, and  edit
    the descriptions).

 2.   Tag   the   attachments   that    are   alternatives,   and   press    the
    <group-alternatives> (&) binding  to group  them together.  After this,  the
    separate parts will be displayed in a tree structure. Attachments can  still
    be edited separately and reordered within  the group, but must be  ungrouped
    using the <ungroup-attachment> (#) binding for more advanced editing  before
    tagging and grouping together again as described above.

 3. Send the email as usual.

If   all   the   attachments   have    been   grouped   and   form   a    single
multipart/alternative,  part   then   this   message   will   be   sent   as   a
multipart/alternative email,  otherwise it  will be  sent as  a  multipart/mixed
email.

Be aware that when sending a  multipart/alternative email, you have to  manually
prepare the alternative parts  and attach them. However,  you can use  NeoMutt's
macro to perform all the  operations needed, such that  you can compose a  plain
text email as  usual and  turn that into  a multipart/alternative  email in  one
single command,  with one  part being  text/plain and  the other  text/html.  An
example macro which adds an HTML part to the main body of an email and sends  it
could be the following:

macro compose Y "<first-entry><enter-command>set wait_key=no<enter>\
<pipe-entry>pandoc -o /tmp/neomutt-alternative.html<enter>\
<attach-file>/tmp/neomutt-alternative.html<enter>\
<toggle-unlink><toggle-disposition>\
<tag-entry><first-entry><tag-entry><group-alternatives>\
<enter-command>set wait_key=yes<enter><send-message>" \
"send the message as 'multipart/alternative'"

6. MIME Multipart/Multilingual

NeoMutt includes supports for reading and writing multipart/multilingual emails.
A multipart/multilingual  email is  like a  multipart/alternative email,  except
that it  comes  with  parts  of  different  versions  of  languages  instead  of
appearances. Its format is described by RFC8255.

  6.1. Reading Multipart/Multilingual Emails

NeoMutt uses the $preferred_languages variable  to determine which languages  to
display when displaying  a multipart/multilingual  email. You  can have  several
preferred languages, separated by ,

set preferred_languages="fr,en,de"

NeoMutt will try  to match these  strings again the  multilingual header in  the
received emails "by prefix", e.g., en will match both en and en_US.

If $preferred_languages is not set,  it default to None,  and the first part  of
the received multipart/multilingual email will be displayed.

  6.2. Composing Multipart/Multilingual Emails

The procedures of composing a  multipart/multilingual email is similar to  those
in Composing Multipart/Alternative. You have  to prepare every part manually  or
using  some   scripts,  and   then  tag   and  group   them  together   into   a
multipart/multilingual bundle before sending it:

 1. Prepare parts of the multilingual emails.

 2. Attach them as attachments.

 3. Tag them with <tag-entry>

 4.  Edit  the  Content-Language  header   of  every  attachment  with   command
    <edit-language> (default  to  Ctrl-L).  This  is  important,  otherwise  the
    recipient of this email will not  know the corresponding languages. You  can
    set arbitrary string as Content-Language, but it is recommended to set it as
    some common prefixes such as "en", "zh" and "fr".

 5. Group all the tag messages together by <group-multilingual> (default to ^).

 6. Send the email as usual.

As in Composing Multipart/Alternative, you can also use NeoMutt's macro and some
external scripts to combine this procedure into one.

After grouping  the  separate parts  will  be  displayed in  a  tree  structure.
Attachments can still be edited separately  and reordered within the group,  but
must be ungrouped using the  <ungroup-attachment> (#) binding for more  advanced
editing before tagging and grouping together again as described above.

7. MIME Multipart/Related

NeoMutt doesn't  include  any  special  support  for  reading  multipart/related
emails,  but   it  is   possible   to  write   a  multipart/related   email.   A
multipart/related attachment  is intended  for  compound objects  consisting  of
several inter-related body parts which are linked together using the  Content-ID
header. Its format is described by RFC2387.

  7.1. Composing Multipart/Related Emails

The procedure for  composing a  multipart/related email  is similar  to that  in
Composing Multipart/Alternative.  You have  to prepare  every part  manually  or
using  some   scripts,  and   then  tag   and  group   them  together   into   a
multipart/related bundle before sending it:

 1. Prepare parts of the related email.

 2. Attach them as attachments.

 3. Tag them with <tag-entry>

 4. One part can reference another using its Content-ID header. For example,  an
    HTML  part  that  includes  an   embedded  image  needs  to  contain:   <img
    src="cid:content-id"> where an  attached image  has a  Content-ID header  of
    content-id.  The   Content-ID   of   an  attachment   can   be   set   using
    <edit-content-id> (default key  Alt-i). <edit-content-id> sets  a random  ID
    which can then be  changed if desired.  Permitted characters for  Content-ID
    are: -.0-9@A-Z_a-z.

    If the multipart/related  group is  intended to  be inline,  members of  the
    group should also have their Content-Disposition header set to inline  which
    can be toggled using <toggle-disposition> (default key Ctrl-D).

    It can also be desirable  to give referenced files  in the group a  filename
    even when  the Content-Disposition  is set  to  be inline.  To do  this  use
    <rename-attachment> (default key Ctrl-O).

 5. Group all the tagged messages together with <group-related> (default key %).

    Top  level  attachments  (excluding  multipart   ones)  in  the  group   are
    automatically given a random Content-ID if they do not already have one.

 6. Send the email as usual.

Some care needs to be taken  with the construction of a multipart/related  email
to ensure it  is correctly  displayed by the  receiving mail  client. A  typical
email with  a multipart/alternative  part  containing a  text/plain part  and  a
text/html part with an  embedded image, along with  a separate attachment  might
end up like this:

  I     1 <no description>                                         [multipart/related, 7bit, 0K]
  I     2 +-><no description>                                  [multipart/alternative, 7bit, 0K]
- I     3 | +->/tmp/neomutt-hostname-XXXX-XXXXXX-XXXXXXXXXX   [text/plain, 7bit, us-ascii, 0.1K]
- I     4 | +->/tmp/neomutt-alternative.html                      [text/html, 8bit, utf-8, 0.6K]
  I     5 +->image.png                                                  [image/png, base64, 19K]
  A     6 attachment.pdf                                         [application/pdf, quoted, 7.1K]

In the above email /tmp/neomutt-alternative.html would reference image.png using
<img src="cid:content-id">  and image.png  has been  given an  explicit name  of
image.png  using  <rename-attachment>  (regardless  of  its  initial  filename).
<group-related> has set its Content-ID header to a random value.

8. Attachment Searching and Counting

If  you  ever   lose  track   of  attachments  in   your  mailboxes,   NeoMutt's
attachment-counting and -searching support might be  for you. You can make  your
message index display the number of  qualifying attachments in each message,  or
search for messages by  attachment count. You also  can configure what kinds  of
attachments qualify  for this  feature with  the attachments  and  unattachments
commands.

In order to  provide this  information, NeoMutt  needs to  fully MIME-parse  all
messages affected first. This can slow down operation especially for remote mail
folders such as IMAP because all messages have to be downloaded first regardless
whether the user  really wants to  view them  or not though  using Section  8.2,
"Body Caching" usually means to download the message just once.

By default,  NeoMutt will  not search  inside multipart/alternative  containers.
This can be changed via the $count_alternatives configuration variable.

The syntax is:

attachments { + | - } disposition mime-type [ mime-type ...]
unattachments { + | - } disposition mime-type [ mime-type ...]
attachments ?
unattachments *

disposition is  the attachment's  Content-Disposition type  - either  inline  or
attachment. You can abbreviate this to I or A.

Disposition is prefixed by either a "+" symbol  or a "-" symbol. If it's a  "+",
you're saying that you want to allow this disposition and MIME type to  qualify.
If it's a "-", you're saying that this disposition and MIME type is an exception
to previous "+" rules. There are examples below of how this is useful.

mime-type is the MIME type of the  attachment you want the command to affect.  A
MIME type is always of the  format major/minor, where major describes the  broad
category of document you're  looking at, and minor  describes the specific  type
within that category. The major part of  mime-type must be literal text (or  the
special token "*"), but the minor part may be a regular expression.  (Therefore,
"*/.*" matches any MIME type.)

The MIME types you give to the attachments directive are a kind of pattern. When
you use the attachments directive, the patterns you specify are added to a list.
When you use unattachments, the pattern  is removed from the list. The  patterns
are not expanded and matched to specific MIME types at this time - they're  just
text in a list. They're only matched when actually evaluating a message.

Note that the  first MIME  part is treated  slightly differently:  It is  almost
always the  message text.  Thus,  it is  not counted  as  an attachment  if  its
disposition is inline and it is not a multipart/* or message/* MIME-type.

Some examples might help to illustrate. The examples that are not commented  out
define the default configuration of the lists.

Example 5.2. Attachment counting

# Removing a pattern from a list removes that pattern literally. It
# does not remove any type matching the pattern.
#
#  attachments   +A */.*
#  attachments   +A image/jpeg
#  unattachments +A */.*
#
# This leaves "attached" image/jpeg files on the allowed attachments
# list. It does not remove all items, as you might expect, because the
# second */.* is not a matching expression at this time.
#
# Remember: "unattachments" only undoes what "attachments" has done!
# It does not trigger any matching on actual messages.
#
# Qualify any MIME part with an "attachment" disposition, EXCEPT for
# text/vcard, text/x-vcard, application/pgp.*, application/pkcs7-.* and
# application/x-pkcs7-.* parts. (PGP and S/MIME parts are already known
# to NeoMutt, and can be searched for with ~g, ~G, and ~k.)
#
# I've added pkcs7/x-pkcs7 to this, since it functions (for S/MIME)
# analogously to PGP signature attachments. S/MIME isn't supported
# in a stock NeoMutt build, but we can still treat it specially here.
#
attachments  +A */.*
attachments  -A text/vcard text/x-vcard
attachments  -A application/pgp.*
attachments  -A application/pkcs7-.* application/x-pkcs7-.*
# Discount all MIME parts with an "inline" disposition, unless they're
# text/plain. (Why inline a text/plain part unless it's external to the
# message flow?)
attachments  +I text/plain
# These two lines make NeoMutt qualify MIME containers. (So, for example,
# a message/rfc822 forward will count as an attachment.) The first
# line is unnecessary if you already have "attach-allow */.*", of
# course. These are off by default! The MIME elements contained
# within a message/* or multipart/* are still examined, even if the
# containers themselves don't qualify.
# Recursion into multipart/alternatives containers is controlled by the
# $count_alternatives setting.

#attachments  +A message/.* multipart/.*
#attachments  +I message/.* multipart/.*
## You probably don't really care to know about deleted attachments.
attachments  -A message/external-body
attachments  -I message/external-body

Entering the  command  "attachments ?"  as  a  command will  list  your  current
settings in neomuttrc format, so that it can be pasted elsewhere.

Entering the command "unattachments  *" as a command  will Clear all  attachment
settings.

9. MIME Lookup

Usage:

mime_lookup mime-type [ /mime-subtype ] [ mime-type [ /mime-subtype ] ...]
unmime_lookup { * | [ mime-type [ /mime-subtype ] ...]}

NeoMutt's mime_lookup list  specifies a list  of MIME types  that should not  be
treated according to their mailcap entry.  This option is designed to deal  with
binary types such as application/octet-stream. When an attachment's MIME type is
listed in mime_lookup, then  the extension of the  filename will be compared  to
the list of  extensions in the  mime.types file. The  MIME type associated  with
this extension will  then be  used to process  the attachment  according to  the
rules in the mailcap file and according to any other configuration options (such
as auto_view) specified. Common usage would be:

mime_lookup application/octet-stream application/X-Lotus-Manuscript

In addition, the unmime_lookup command may  be used to disable this feature  for
any particular  MIME  type  if  it  had been  set,  for  example,  in  a  global
.neomuttrc.

                          Chapter 6. Optional Features

Table of Contents

1. General Notes

             1.1. Enabling/Disabling Features

             1.2. URL Syntax

2. SSL/TLS Support

             2.1. STARTTLS

             2.2. Tunnel

3. POP3 Support

             3.1. Remote POP3 mailboxes

             3.2. Fetching mail from a POP3 server

4. IMAP Support

             4.1. The IMAP Folder Browser

             4.2. Authentication

5. SMTP Support

6. OAUTHBEARER and XOAUTH2 Support

7. Managing Multiple Accounts

8. Local Caching

             8.1. Header Caching

             8.2. Body Caching

             8.3. Cache Directories

             8.4. Maintenance

9. Account Command Feature

             9.1. Support

             9.2. Introduction

             9.3. Usage

             9.4. Known Bugs

             9.5. Credits

10. Attach Headers Color Feature

             10.1. Support

             10.2. Introduction

             10.3. Usage

             10.4. neomuttrc

             10.5. See Also

             10.6. Known Bugs

             10.7. Credits

11. Command-line Crypto (-C) Feature

             11.1. Support

             11.2. Introduction

             11.3. Usage

             11.4. neomuttrc

             11.5. gitconfig

             11.6. Credits

12. Compose Message Preview Feature

             12.1. Support

             12.2. Introduction

             12.3. Variables

             12.4. Functions

             12.5. Limitations

             12.6. Credits

13. Compose to Sender Feature

             13.1. Support

             13.2. Introduction

             13.3. Functions

             13.4. neomuttrc

             13.5. Known Bugs

             13.6. Credits

14. Compressed Folders Feature

             14.1. Support

             14.2. Introduction

             14.3. Commands

             14.4. neomuttrc

             14.5. See Also

             14.6. Credits

15. Conditional Dates Feature

             15.1. Support

             15.2. Introduction

             15.3. Variables

             15.4. neomuttrc

             15.5. See Also

             15.6. Known Bugs

             15.7. Credits

16. Encrypt-to-Self Feature

             16.1. Support

             16.2. Introduction

             16.3. Variables

             16.4. neomuttrc

             16.5. Known Bugs

             16.6. Credits

17. Encryption information block

             17.1. Support

             17.2. Introduction

             17.3. Usage

             17.4. Credits

18. Fmemopen Feature

             18.1. Support

             18.2. Introduction

             18.3. See Also

             18.4. Known Bugs

             18.5. Credits

19. Forgotten Attachment Feature

             19.1. Support

             19.2. Introduction

             19.3. Variables

             19.4. neomuttrc

             19.5. See Also

             19.6. Known Bugs

             19.7. Credits

20. Global Hooks

             20.1. Introduction

             20.2. Commands

             20.3. neomuttrc

             20.4. See Also

             20.5. Known Bugs

             20.6. Credits

21. Header Cache Compression Feature

             21.1. Support

             21.2. Introduction

             21.3. Variables

             21.4. neomuttrc

             21.5. Known Bugs

             21.6. Credits

22. Ifdef Feature

             22.1. Support

             22.2. Introduction

             22.3. Commands

             22.4. neomuttrc

             22.5. Known Bugs

             22.6. Credits

23. Index Color Feature

             23.1. Support

             23.2. Introduction

             23.3. Colors

             23.4. neomuttrc

             23.5. See Also

             23.6. Known Bugs

             23.7. Credits

24. Initials Expando Feature

             24.1. Support

             24.2. Introduction

             24.3. Variables

             24.4. neomuttrc

             24.5. See Also

             24.6. Known Bugs

             24.7. Credits

25. Kyoto Cabinet Feature

             25.1. Support

             25.2. Introduction

             25.3. See Also

             25.4. Known Bugs

             25.5. Credits

26. Limit Current Thread Feature

             26.1. Support

             26.2. Introduction

             26.3. Functions

             26.4. neomuttrc

             26.5. Known Bugs

             26.6. Credits

27. LMDB Feature

             27.1. Support

             27.2. Introduction

             27.3. See Also

             27.4. Known Bugs

             27.5. Credits

28. Multiple FCC Feature

             28.1. Support

             28.2. Introduction

             28.3. See Also

             28.4. Known Bugs

             28.5. Credits

29. Nested If Feature

             29.1. Support

             29.2. Introduction

             29.3. Variables

             29.4. neomuttrc

             29.5. See Also

             29.6. Known Bugs

             29.7. Credits

30. New Mail Feature

             30.1. Support

             30.2. Introduction

             30.3. Variables

             30.4. neomuttrc

             30.5. See Also

             30.6. Known Bugs

             30.7. Credits

31. NNTP Feature

             31.1. Support

             31.2. Introduction

             31.3. Variables

             31.4. Functions

             31.5. neomuttrc

             31.6. Known Bugs

             31.7. Credits

32. Custom backend based Tags Feature

             32.1. Support

             32.2. Introduction

             32.3. Variables

             32.4. Functions

             32.5. Commands

             32.6. Colors

             32.7. neomuttrc

             32.8. Credits

33. Notmuch Feature

             33.1. Support

             33.2. Introduction

             33.3. Using Notmuch

             33.4. Variables

             33.5. Functions

             33.6. Colors

             33.7. neomuttrc

             33.8. See Also

             33.9. Known Bugs

             33.10. Credits

34. Pager Read Delay Feature

             34.1. Support

             34.2. Introduction

             34.3. Functions

             34.4. Variables

             34.5. neomuttrc

             34.6. Known Bugs

             34.7. Credits

35. Progress Bar Feature

             35.1. Support

             35.2. Introduction

             35.3. Colors

             35.4. neomuttrc

             35.5. See Also

             35.6. Known Bugs

             35.7. Credits

36. Quasi-Delete Feature

             36.1. Support

             36.2. Introduction

             36.3. Functions

             36.4. neomuttrc

             36.5. See Also

             36.6. Known Bugs

             36.7. Credits

37. Reply With X-Original-To Feature

             37.1. Support

             37.2. Introduction

             37.3. Variables

             37.4. neomuttrc

             37.5. Credits

38. Sensible Browser Feature

             38.1. Support

             38.2. Introduction

             38.3. See Also

             38.4. Known Bugs

             38.5. Credits

39. Sidebar Feature

             39.1. Support

             39.2. Introduction

             39.3. Variables

             39.4. Functions

             39.5. Commands

             39.6. Colors

             39.7. Sort

             39.8. neomuttrc

             39.9. See Also

             39.10. Known Bugs

             39.11. Credits

40. Skip Quoted Feature

             40.1. Support

             40.2. Introduction

             40.3. Functions

             40.4. Variables

             40.5. neomuttrc

             40.6. Known Bugs

             40.7. Credits

41. Status Color Feature

             41.1. Support

             41.2. Introduction

             41.3. Commands

             41.4. Colors

             41.5. neomuttrc

             41.6. See Also

             41.7. Known Bugs

             41.8. Credits

42. TLS-SNI Feature

             42.1. Support

             42.2. Introduction

             42.3. Known Bugs

             42.4. Credits

43. Trash Folder Feature

             43.1. Support

             43.2. Introduction

             43.3. Variables

             43.4. Functions

             43.5. neomuttrc

             43.6. See Also

             43.7. Known Bugs

             43.8. Credits

44. Use Threads Feature

             44.1. Support

             44.2. Introduction

             44.3. Functions

             44.4. Variables

             44.5. Use Threads

             44.6. neomuttrc

             44.7. Known Bugs

             44.8. Credits

45. Autocrypt

             45.1. Requirements

             45.2. First Run

             45.3. Compose Menu

             45.4. Account Management

             45.5. Alternative Key and Keyring Strategies

1. General Notes

  1.1. Enabling/Disabling Features

NeoMutt supports several of optional features  which can be enabled or  disabled
at compile-time  by giving  the configure  script certain  arguments. These  are
listed in the "Optional features" section of the configure --help output.

Which features are enabled or disabled  can later be determined from the  output
of neomutt -v. If a compile option starts with "+" it is enabled and disabled if
prefixed with  "-".  For example,  if  NeoMutt  was compiled  using  GnuTLS  for
encrypted communication instead of OpenSSL, neomutt -v would contain:

-openssl +gnutls

  1.2. URL Syntax

NeoMutt optionally supports the IMAP, POP3  and SMTP protocols which require  to
access servers using URLs. The canonical  syntax for specifying URLs in  NeoMutt
is (an item enclosed in [] means it is optional and may be omitted):

proto[s]://[username[:password]@]server[:port][/path]

proto is the communication protocol:  imap for IMAP, pop  for POP3 and smtp  for
SMTP. If "s"  for "secure communication"  is appended, NeoMutt  will attempt  to
establish an encrypted communication using SSL or TLS.

Since all protocols supported  by NeoMutt support/require authentication,  login
credentials may be specified  in the URL. This  has the advantage that  multiple
IMAP, POP3 or  SMTP servers may  be specified (which  isn't possible using,  for
example, $imap_user). The username may contain the "@" symbol being used by many
mail systems as part of  the login name. The  special characters "/" (%2F),  ":"
(%3A) and "%" (%25) have to be URL-encoded in usernames using the %-notation.

A password can be given, too but is not recommended if the URL is specified in a
configuration file on disk.

If no port number is given, NeoMutt will use the system's default for the  given
protocol (usually consulting /etc/services).

The optional path is only relevant for IMAP and ignored elsewhere.

Example 6.1. URLs

pops://host/
imaps://user@host/INBOX/Sent
smtp://user@host:587/

2. SSL/TLS Support

If NeoMutt is  compiled with  IMAP, POP3  and/or SMTP  support, it  can also  be
compiled with support for SSL or TLS using either OpenSSL or GnuTLS (by  running
the configure script with the --ssl=...  option for OpenSSL or --gnutls=...  for
GnuTLS). NeoMutt can then attempt  to encrypt communication with remote  servers
if these protocols are suffixed with "s" for "secure communication".

  2.1. STARTTLS

When non-secure URL protocols imap://, pop://, and smtp:// are used, the initial
connection to the server will be unencrypted. STARTTLS can be used to  negotiate
an encrypted connection after the initial unencrypted connection and exchange.

Two  configuration   variables  control   NeoMutt's  behavior   with   STARTTLS.
$ssl_starttls will initiate STARTTLS  if the server  advertises support for  it.
$ssl_force_tls will always  try to  initiate it, whether  the server  advertises
support or not.

NeoMutt highly recommends setting $ssl_force_tls  unless you need to connect  to
an unencrypted  server. It's  possible  for an  attacker to  spoof  interactions
during the initial  connection and hide  support for STARTTLS.  The only way  to
prevent  these  attacks   is  by  forcing   STARTTLS  with  the   $ssl_force_tls
configuration variable.

  2.2. Tunnel

When connecting through  a $tunnel  and $tunnel_is_secure  is set(the  default),
NeoMutt will assume  the connection to  the server through  the pipe is  already
secured. NeoMutt will  ignore $ssl_starttls and  $ssl_force_tls, behaving as  if
TLS has already been negotiated.

When  $tunnel_is_secure  is   unset,  NeoMutt   will  respect   the  values   of
$ssl_starttls and $ssl_force_tls. It is highly recommended to set $ssl_force_tls
in this case,  to force STARTTLS  negotiation. Note that  doing so will  prevent
connection to an IMAP server  configured for preauthentication(PREAUTH). If  you
use this configuration, it is recommended to use a secure tunnel.

3. POP3 Support

NeoMutt has POP3 support and has the ability to work with mailboxes located on a
remote POP3 server and fetch mail for local browsing.

Remote POP3  servers  can be  accessed  using URLs  with  the pop  protocol  for
unencrypted and pops for encrypted communication, see Section 1.2, "URL  Syntax"
for details.

  3.1. Remote POP3 mailboxes

Polling for new mail is more expensive  over POP3 than locally. For this  reason
the frequency at which NeoMutt will check for mail remotely can be controlled by
the $pop_check_interval variable, which defaults to every 60 seconds.

Due to limitations in POP3, this method doesn't allow for some features such  as
editing messages, changing  their flags  or even deleting  them. However,  using
Section 8.1, "Header Caching" and Section 8.2, "Body Caching", NeoMutt simulates
the new/old/read flags  as well  as flagged  and replied.  NeoMutt applies  some
logic on top of remote messages but cannot change them so that modifications  of
flags are lost  when messages  are downloaded from  the POP3  server (either  by
NeoMutt or other tools).

# A sample configuration file for setting up a remote POP3 mailbox

# If an SMTP password has been set, use this to set the same password for POP3.
set pop_pass=$smtp_pass

# Set the POP3 server and user
set pop_host="pops://user@example.com"

# Use the remote server as the mailbox
set folder=$pop_host
set spool_file=+

  3.2. Fetching mail from a POP3 server

Another way to access your POP3 mail is the <fetch-mail> function (default:  G).
It allows to connect to $pop_host, fetch all  your new mail and place it in  the
local $spool_file. After  this point, NeoMutt  runs exactly as  if the mail  had
always been local. The <fetch-mail> function will ask whether you want to delete
the messages on the remote server, leaving only your local copies.

  Note

If you only need to fetch all  messages to a local mailbox, you should  consider
using a specialized program, such as fetchmail(1), getmail(1) or similar.

# A sample configuration file for fetching mail from a POP3 server

# The spool file contains the local copies of your messages. If it doesn't
# exist, initialize it as an empty file.
set spool_file="/home/user/.mailspool"

# The POP3 server and user from which to fetch messages
set pop_host="pops://user@example.com"

4. IMAP Support

NeoMutt has IMAP support and has the  ability to work with folders located on  a
remote IMAP server.

You can  access  the remote  inbox  by selecting  the  folder by  its  URL  (see
Section 1.2,  "URL  Syntax" for  details)  using  the imap  or  imaps  protocol.
Alternatively,   a   pine-compatible   notation   is   also   supported,    i.e.
{[username@]imapserver[:port][/ssl]}path/to/folder

Note that not  all servers use  "/" as the  hierarchy separator. NeoMutt  should
correctly notice which separator is being  used by the server and convert  paths
accordingly.

The IMAP protocol has a subscription feature where the server manages a list  of
of subscribed folders.  To add  or remove  a folder  to the  list of  subscribed
folders use the commands:

subscribe-to imap-folder-uri
unsubscribe-from imap-folder-uri

imap-folder-uri must be an  IMAP URI, from  which the server  and the folder  is
derived, e.g.

subscribe-to imaps://mail.example.org/inbox

Instead of the above commands you can also use the <subscribe> and <unsubscribe>
functions of the browser (default keys s  and u) to subscribe to or  unsubscribe
from a folder while browsing the folders on the IMAP server. The browser can  be
instructed  to  only  display  the  folders  you  are  subscribed  to  with  the
<toggle-subscribed> functions. See also the $imap_list_subscribed variable.

Because the list of  subscribed folders is managed  by the IMAP server,  NeoMutt
can also ask the server for that list. If $imap_check_subscribed is set, NeoMutt
will do that and add those folders to its mailboxes list just as if you had used
the mailboxes  command  on each  of  them, so  that  these folders  get  checked
periodically for new mail.

Polling for new mail on an IMAP  server can cause noticeable delays. So,  you'll
want to carefully tune the $mail_check and $timeout variables. Reasonable values
are:

set mail_check=90
set timeout=15

with relatively good results even over slow modem lines.

  Note

Note that  if you  are using  mbox as  the mail  store on  UW servers  prior  to
v12.250, the server has been reported  to disconnect a client if another  client
selects the same folder.

  4.1. The IMAP Folder Browser

As of version 1.2, NeoMutt supports  browsing mailboxes on an IMAP server.  This
is mostly the same as the local file browser, with the following differences:

  o In lieu of  file permissions, NeoMutt displays  the string "IMAP",  possibly
    followed by the symbol "+", indicating that the entry contains both messages
    and subfolders.  On  Cyrus-like  servers folders  will  often  contain  both
    messages and subfolders. A mailbox  name with a trailing delimiter  (usually
    "/" or ".") indicates subfolders.

  o For the case where  an entry can contain  both messages and subfolders,  the
    selection key (bound to  enter by default) will  choose to descend into  the
    subfolder view. If you wish  to view the messages  in that folder, you  must
    use view-file instead (bound to space by default).

  o You  can create,  delete  and rename  mailboxes with  the  <create-mailbox>,
    <delete-mailbox>, and <rename-mailbox> commands (default bindings: C, d  and
    r, respectively). You  may also <subscribe>  and <unsubscribe> to  mailboxes
    (normally these are bound to s and u, respectively).

  4.2. Authentication

NeoMutt supports four  authentication methods with  IMAP servers: SASL,  GSSAPI,
CRAM-MD5, and LOGIN. There  is also support  for the pseudo-protocol  ANONYMOUS,
which allows you to log in to a public IMAP server without having an account. To
use ANONYMOUS, simply make your username blank or "anonymous".

SASL is a  special super-authenticator,  which selects  among several  protocols
(including GSSAPI, CRAM-MD5, ANONYMOUS, and  DIGEST-MD5) the most secure  method
available on your host  and the server. Using  some of these methods  (including
DIGEST-MD5 and  possibly GSSAPI),  your  entire session  will be  encrypted  and
invisible to those teeming network snoops. It is the best option if you have it.
To use it, you  must have the  Cyrus SASL library installed  on your system  and
compile NeoMutt with the --with-sasl flag.

NeoMutt will try whichever methods are compiled in and available on the  server,
in the following order: SASL, ANONYMOUS, GSSAPI, CRAM-MD5, LOGIN.

There are a few variables which control authentication:

  o $imap_user - controls the username under which you request authentication on
    the IMAP server, for all authenticators.  This is overridden by an  explicit
    username in the  mailbox path  (i.e. by  using a  mailbox name  of the  form
    {user@host}).

  o $imap_pass -  a password which  you may preset,  used by all  authentication
    methods where a password is needed.

  o $imap_authenticators - a colon-delimited list of IMAP authentication methods
    to try, in  the order you  wish to  try them. If  specified, this  overrides
    NeoMutt's default (attempt everything, in the order listed above).

5. SMTP Support

Besides supporting  traditional  mail  delivery  through  a  sendmail-compatible
program, NeoMutt supports delivery through SMTP.

If the configuration variable $smtp_url is  set, NeoMutt will contact the  given
SMTP server to deliver messages;  if it is unset,  NeoMutt will use the  program
specified by $sendmail.

For details on the URL syntax, please see Section 1.2, "URL Syntax".

The built-in SMTP support supports encryption  (the smtps protocol using SSL  or
TLS) as well as  SMTP authentication using  SASL. The authentication  mechanisms
for SASL are specified in $smtp_authenticators defaulting to an empty list which
makes NeoMutt try all available methods from most-secure to least-secure.

6. OAUTHBEARER and XOAUTH2 Support

Preliminary OAUTH  support for  IMAP, POP,  and SMTP  is provided  via  external
scripts.

At  least  for  Gmail,   you  can  use  the   oauth2.py  script  from   Google's
gmail-oauth2-tools:
https://github.com/google/gmail-oauth2-tools/blob/master/python/oauth2.py

You'll  need  to  get  your  own  oauth  client  credentials  for  Gmail   here:
https://console.developers.google.com/apis/credentials

Then, you'd use oauth2.py with  --generate_oauth2_token to get a refresh  token,
and configure NeoMutt with:

set imap_authenticators="oauthbearer"
set imap_oauth_refresh_command="/path/to/oauth2.py --quiet --user=[email_address]\
    --client_id=[client_id] --client_secret=[client_secret]\
    --refresh_token=[refresh_token]"

For Office365,  you  can use  the  mutt_oauth2.py script  written  by  Alexander
Perlis:
https://github.com/neomutt/neomutt/blob/main/contrib/oauth2/mutt_oauth2.py

You'll need to  get your own  oauth client credentials  by following the  script
instructions:
https://github.com/neomutt/neomutt/blob/main/contrib/oauth2/README.md

set imap_authenticators="xoauth2"
set imap_oauth_refresh_command="/path/to/mutt_oauth2.py /path/to/token"

Substitute pop or smtp for  imap in the above  examples to configure for  those.
Please note that xoauth2 support has not yet been implemented for pop.

7. Managing Multiple Accounts

Usage:

account-hook regex command

If you happen to have  accounts on multiple IMAP,  POP and/or SMTP servers,  you
may find managing all the authentication settings inconvenient and  error-prone.
The account-hook  command may  help. This  hook works  like folder-hook  but  is
invoked whenever NeoMutt needs to access a remote mailbox (including inside  the
folder browser), not just when you open the mailbox. This includes (for example)
polling for new mail, storing Fcc messages and saving messages to a folder. As a
consequence, account-hook should only be used to set connection-related settings
such as passwords or tunnel commands but not settings such as sender address  or
name  (because  in   general  it  should   be  considered  unpredictable   which
account-hook was last used).

Some examples:

account-hook . 'unset imap_user; unset imap_pass; unset tunnel'
account-hook imap://host1/ 'set imap_user=me1 imap_pass=foo'
account-hook imap://host2/ 'set tunnel="ssh host2 /usr/libexec/imapd"'
account-hook smtp://user@host3/ 'set tunnel="ssh host3 /usr/libexec/smtpd"'

To manage multiple accounts  with, for example, different  values of $record  or
sender addresses, folder-hook  has to  be be  used together  with the  mailboxes
command.

Example 6.2. Managing multiple accounts

mailboxes imap://user@host1/INBOX
folder-hook imap://user@host1/ 'set folder=imap://host1/ ; set record=+INBOX/Sent'
mailboxes imap://user@host2/INBOX
folder-hook imap://user@host2/ 'set folder=imap://host2/ ; set record=+INBOX/Sent'

In example Example  6.2, "Managing  multiple accounts" the  folders are  defined
using mailboxes so NeoMutt  polls them for new  mail. Each folder-hook  triggers
when one mailbox  below each  IMAP account  is opened  and sets  $folder to  the
account's root folder. Next, it sets $record to the INBOX/Sent folder below  the
newly set $folder. Please notice that the value the "+" mailbox shortcut  refers
to depends  on  the  current value  of  $folder  and therefore  has  to  be  set
separately per  account.  Setting  other  values like  $from  or  $signature  is
analogous to setting $record.

8. Local Caching

NeoMutt contains two types of local caching: (1) the so-called "header  caching"
and (2) the so-called "body caching" which are both described in this section.

Header caching is optional as it depends on external libraries, body caching  is
always enabled if NeoMutt is compiled with POP and/or IMAP support as these  use
it (body caching requires no external library).

  8.1. Header Caching

NeoMutt provides optional support for caching message headers for the  following
types of folders: IMAP,  POP, Maildir and MH.  Header caching greatly speeds  up
opening large folders because for remote  folders, headers usually only need  to
be downloaded once. For Maildir and MH,  reading the headers from a single  file
is much faster than looking at possibly thousands of single files (since Maildir
and MH use one file per message.)

Header caching can be enabled by  configuring one of the database backends.  One
of bdb, gdbm, kyotocabinet, lmdb, qdbm, rocksdb, tdb, tokyocabinet.

If enabled, $header_cache can be used to either point to a file or a  directory.
If set to point to a file, one database file for all folders will be used (which
may result in  lower performance), but  one file per  folder if it  points to  a
directory.

Additionally, $header_cache_backend can be set to specify which backend to  use.
The list of available backends can be specified at configure time with a set  of
--with-<backend> options. Currently, the following backends are supported:  bdb,
gdbm, kyotocabinet, lmdb, qdbm, rocksdb, tdb, tokyocabinet.

Take a  look at  the  benchmark script  provided  in the  following  repository:
contrib-hcache-benchmark. There  you  can find  a  way of  finding  the  storage
backend for your needs.

  8.2. Body Caching

Both cache methods can be combined using the same directory for storage (and for
IMAP/POP even provide meaningful file names) which simplifies manual maintenance
tasks.

In addition  to caching  message  headers only,  NeoMutt  can also  cache  whole
message bodies. This  results in  faster display of  messages for  POP and  IMAP
folders because messages usually have to be downloaded only once.

For configuration, the  variable $message_cache_dir must  point to a  directory.
There, NeoMutt will create a hierarchy of subdirectories named like the  account
and mailbox path the cache is for.

  8.3. Cache Directories

For using both,  header and body  caching, $header_cache and  $message_cache_dir
can be safely set to the same value.

In a header or body cache directory, NeoMutt creates a directory hierarchy named
like: proto:user@hostname where proto is  either "pop" or "imap." Within  there,
for each folder, NeoMutt  stores messages in single  files and header caches  in
files with the ".hcache" extension.  All files can be  removed as needed if  the
consumed disk space  becomes an  issue as  NeoMutt will  silently fetch  missing
items again. Pathnames are always stored in UTF-8 encoding.

For Maildir and MH, the header cache  files are named after the MD5 checksum  of
the path.

  8.4. Maintenance

NeoMutt does not (yet)  support maintenance features  for header cache  database
files so that files have to be removed in case they grow too big. It depends  on
the database  library  used for  header  caching  whether disk  space  freed  by
removing messages is reused.

For body  caches, NeoMutt  can keep  the local  cache in  sync with  the  remote
mailbox if the $message_cache_clean  variable is set.  Cleaning means to  remove
messages from the cache which  are no longer present  in the mailbox which  only
happens when other mail clients or  instances of NeoMutt using a different  body
cache location delete messages (NeoMutt itself removes deleted messages from the
cache when syncing a mailbox). As cleaning can take a noticeable amount of time,
it should not be set in general but only occasionally.

9. Account Command Feature

  Populate account credentials via an external command

  9.1. Support

Since: NeoMutt 2022-05-16

Dependencies: None

  9.2. Introduction

NeoMutt provides dedicated config variables  to specify credentials for  network
servers. These include  imap_user, imap_pass, smtp_user,  smtp_pass, etc.  There
are a  few downsides  to this  approach.  For one  thing, their  use  encourages
storing usernames and  passwords in  plain text  inside a  NeoMutt config  file.
People have come up with solutions to this, including using gpg-encrypted  files
and   populating   my_   variables   via   external   scripts   through   source
"/path/to/script|". However,  once the  variables are  set, the  secrets can  be
inspected with the  set command. Also,  because these config  variables are  not
account-specific, they have been the cause  of a proliferation of ways to  mimic
per-account setups using a combination of convoluted hooks and macros to  modify
them on folder change or on a keypress.

The goal of this feature is to get rid of most _user and _pass variables. To  do
so, we provide a way of specifying an external command that NeoMutt will call to
populate account credentials for network servers such as IMAP, POP, or SMTP. The
external command  is called  with a  number of  arguments indicating  the  known
properties of the account  such as the account  type and hostname; the  external
command provides NeoMutt with a list  of additional properties such as  username
and password.

  9.3. Usage

The variable account_command configures an external program to be used to gather
account credentials.

set account_command = "/path/to/my/script.sh"

The program  specified will  be called  by NeoMutt  with a  number of  key-value
command line arguments.

  o --hostname val: the network host name of the service

  o --username val: the username for the account. This might be specified in the
    URL itself, e.g., set folder="imaps://me@example.com@example.com" or with  a
    dedicated existing variable, e.g. set imap_user=me@example.com.

  o --type val: the type of the account,  one of imap, pop, smtp, nntp, with  an
    optional trailing s if SSL/TLS is required.

The program specified will  have to respond  by printing to  stdout a number  of
key: value lines. NeoMutt currently recognizes the following keys.

  o login

  o username

  o password

Because password can contain any  characters, including spaces, we expect  lines
to match the regex ^([[:alpha:]]+): (.*)$ exactly.

  9.4. Known Bugs

None

  9.5. Credits

Pietro Cerutti

10. Attach Headers Color Feature

  Color attachment headers using regex, just like mail bodies

  10.1. Support

Since: NeoMutt 2016-09-10

Dependencies: None

  10.2. Introduction

This feature allows specifying regexes to color attachment headers just like the
mail body would.  The headers  are the parts  colored by  the attachment  color.
Coloring them is useful to highlight the results of GPGME's signature checks  or
simply the mimetype  or size of  the attachment.  Only the part  matched by  the
regex is colored.

  10.3. Usage

The attach_headers color should be used just like the body color.

color attach_headers foreground background pattern

  10.4. neomuttrc

# Example NeoMutt config file for the attach-headers-color feature.

# Color if the attachment is autoviewed
color   attach_headers     brightgreen     default    "Autoview"
# Color only the brackets around the headers
color   attach_headers     brightyellow    default    "^\\[--"
color   attach_headers     brightyellow    default    "--]$"
# Color the mime type and the size
color   attach_headers     green           default    "Type: [a-z]+/[a-z0-9\-]+"
color   attach_headers     green           default    "Size: [0-9\.]+[KM]"
# Color GPGME signature checks
color   attach_headers     brightgreen     default    "Good signature from.*"
color   attach_headers     brightred       default    "Bad signature from.*"
color   attach_headers     brightred       default    "BAD signature from.*"
color   attach_headers     brightred       default    "Note: This key has expired!"
color   attach_headers     brightmagenta   default    "Problem signature from.*"
color   attach_headers     brightmagenta   default    "WARNING: This key is not certified with a trusted signature!"
color   attach_headers     brightmagenta   default    "         There is no indication that the signature belongs to the owner."
color   attach_headers     brightmagenta   default    "can't handle these multiple signatures"
color   attach_headers     brightmagenta   default    "signature verification suppressed"
color   attach_headers     brightmagenta   default    "invalid node with packet of type"

# vim: syntax=neomuttrc

  10.5. See Also

  o Color command

  o Regular Expressions

  10.6. Known Bugs

None

  10.7. Credits

Guillaume Brogi

11. Command-line Crypto (-C) Feature

  Enable message security in modes that by default don't enable it

  11.1. Support

Since: NeoMutt 2024-01-21

Dependencies: Gpgme

  11.2. Introduction

This feature allows enabling message security  in modes that don't enable it  by
default. Those include batch mode, sending a postponed message, and resending  a
message.

This allows using NeoMutt as a driver for git-send-email(1), to send patches  in
signed and/or encrypted mail.

  11.3. Usage

To send an email from a file, enabling cryptographic operations as when  sending
interactively, simply use the -C flag.

$ neomutt -C -H - < /mail/to/be/sent

  11.4. neomuttrc

# Example NeoMutt config file for the cli-crypto feature.

set pgp_default_key = "1111111111111111111111111111111111111111"
# Sign all mail
set crypt_autosign = yes
# Encrypt mail if all recipients have valid public keys
set crypt_opportunistic_encrypt = yes
# Self encrypt mail
set crypt_self_encrypt = yes

# vim: syntax=neomuttrc

  11.5. gitconfig

# Example .gitconfig config file for the cli-crypto feature.

[sendemail]
sendmailcmd = neomutt -C -H - && true

  11.6. Credits

Alejandro Colomar, Richard Russon, Jenya Sovetkin

12. Compose Message Preview Feature

  Show a preview of the message in the Compose Dialog

  12.1. Support

Since: NeoMutt 2024-12-12

Dependencies: None

  12.2. Introduction

NeoMutt shows you a preview of the message you are about to send in the  compose
dialog.

  12.3. Variables

Table 6.1. Message Preview Variables

+-----------------------------------+---------+---------+----------------------+
|               Name                |  Type   | Default |     Description      |
+-----------------------------------+---------+---------+----------------------+
|                                   |         |         | Show the message     |
| compose_preview_above_attachments | boolean | no      | preview above the    |
|                                   |         |         | attachments list.    |
+-----------------------------------+---------+---------+----------------------+
|                                   |         |         | Hide the preview if  |
| compose_preview_min_rows          | number  | 5       | it has fewer than    |
|                                   |         |         | this number of rows  |
+-----------------------------------+---------+---------+----------------------+
|                                   |         |         | Enable or disable    |
| compose_show_preview              | boolean | no      | the message preview  |
|                                   |         |         | feature              |
+-----------------------------------+---------+---------+----------------------+

  12.4. Functions

The message preview is controller by the following functions.

Table 6.2. Message Preview Functions

+---------+---------------------+---------------------------------+------------+
|  Menus  |      Function       |           Description           |  Default   |
+---------+---------------------+---------------------------------+------------+
| compose | <preview-page-down> | show the next page of the       | <PageDown> |
|         |                     | message                         |            |
+---------+---------------------+---------------------------------+------------+
| compose | <preview-page-up>   | show the previous page of the   | <PageUp>   |
|         |                     | message                         |            |
+---------+---------------------+---------------------------------+------------+

  12.5. Limitations

This is  a  new feature  and  it's still  under  development. If  you  find  any
problems, or you'd like to help improve it, please let us know.

  o Pager displays simple text, no colour or attributes

  o Smart text wrapping is not supported

  12.6. Credits

Dennis Schoen

13. Compose to Sender Feature

  Send new mail to the sender of the current mail

  13.1. Support

Since: NeoMutt 2016-10-02

Dependencies: None

  13.2. Introduction

The compose-to-sender feature adds a new command to start composing a new  email
to the sender of the current message. This is not a reply, but a new,  separate,
message.

It works on tagged messages too, sending one email to all of the senders of  the
tagged messages.

  13.3. Functions

compose-to-sender adds the following function to NeoMutt. By default, it is  not
bound to a key.

Table 6.3. compose-to-sender Functions

+-------------+---------------------+------------------------------------------+
|    Menus    |      Function       |               Description                |
+-------------+---------------------+------------------------------------------+
| index,pager | <compose-to-sender> | compose a new email to the sender of the |
|             |                     | current email                            |
+-------------+---------------------+------------------------------------------+

  13.4. neomuttrc

# Example NeoMutt config file for the compose-to-sender feature.

# --------------------------------------------------------------------------
# FUNCTIONS - shown with an example mapping
# --------------------------------------------------------------------------
# Compose a new email (not a reply) to the sender
bind index,pager @ compose-to-sender

# vim: syntax=neomuttrc

  13.5. Known Bugs

None

  13.6. Credits

Brian Medley, Guillaume Brogi

14. Compressed Folders Feature

  Read from/write to compressed mailboxes

  14.1. Support

Since: NeoMutt 2016-05-30

Dependencies: None

  14.2. Introduction

The Compressed Folder  feature allows  NeoMutt to  read mailbox  files that  are
compressed. But  it  isn't limited  to  compressed  files. It  works  well  with
encrypted files, too. In fact, if you can create a program/script to convert  to
and from your format, then NeoMutt can read it.

The feature adds three hooks to NeoMutt: open-hook, close-hook and  append-hook.
They define commands to: uncompress a file; compress a file; append messages  to
an already compressed file.

There are some examples of both compressed and encrypted files, later. For  now,
the documentation will just concentrate on compressed files.

  14.3. Commands

open-hook regex "shell-command"
close-hook regex "shell-command"
append-hook regex "shell-command"

The shell-command must contain two placeholders for filenames: %f and %t.  These
represent "from" and "to" filenames. These placeholders should be placed  inside
single-quotes to prevent unintended shell expansions.

If you need the exact string "%f" or "%t" in your command, simply double up  the
"%" character, e.g. "%%f" or "%%t".

Table 6.4. Not all Hooks are Required

+------+-------+--------+-----------------------------+------------------------+
| Open | Close | Append |           Effect            |       Useful if        |
+------+-------+--------+-----------------------------+------------------------+
| Open | --    | --     | Folder is readonly          | The folder is just a   |
|      |       |        |                             | backup                 |
+------+-------+--------+-----------------------------+------------------------+
|      |       |        | Folder is read/write, but   | Your compression       |
| Open | Close | --     | the entire folder must be   | format doesn't support |
|      |       |        | written if anything is      | appending              |
|      |       |        | changed                     |                        |
+------+-------+--------+-----------------------------+------------------------+
|      |       |        | Folder is read/write and    | Your compression       |
| Open | Close | Append | emails can be efficiently   | format supports        |
|      |       |        | added to the end            | appending              |
+------+-------+--------+-----------------------------+------------------------+
|      |       |        | Folder is readonly, but can | You want to store      |
| Open | --    | Append | be appended to              | emails, but never      |
|      |       |        |                             | change them            |
+------+-------+--------+-----------------------------+------------------------+

  Note

The command:

  o should return a non-zero exit status on failure

  o should not delete any files

    14.3.1. Read from compressed mailbox

open-hook regex "shell-command"

If NeoMutt is unable to  open a file, it then  looks for open-hook that  matches
the filename.

If your compression program doesn't have a well-defined extension, then you  can
use . as the regex.

Example 6.3. Example of open-hook

open-hook '\.gz$' "gzip --stdout --decompress '%f' > '%t'"

  o NeoMutt finds a file, "example.gz", that it can't read

  o NeoMutt has an open-hook whose regex matches the filename: \.gz$

  o NeoMutt uses the  command gzip -cd  to create a temporary  file that it  can
    read

    14.3.2. Write to a compressed mailbox

close-hook regex "shell-command"

When NeoMutt has  finished with a  compressed mail  folder, it will  look for  a
matching close-hook to recompress the file. This hook is optional.

  Note

If the folder has not been modified, the close-hook will not be called.

Example 6.4. Example of close-hook

close-hook '\.gz$' "gzip --stdout '%t' > '%f'"

  o NeoMutt  has finished  with  a folder,  "example.gz",  that it  opened  with
    open-hook

  o The folder has been modified

  o NeoMutt has a close-hook whose regex matches the filename: \.gz$

  o NeoMutt uses the command gzip -c to create a new compressed file

  Note

The close-hook can also include extra options, e.g. compression level: --best

    14.3.3. Append to a compressed mailbox

append-hook regex "shell-command"

When NeoMutt wants to append an email to a compressed mail folder, it will  look
for a matching append-hook. This hook is optional.

Using the append-hook will save time, but NeoMutt won't be able to determine the
type of the mail folder inside the compressed file.

NeoMutt will assume the type to be that of the $mbox_type variable. NeoMutt also
uses this type for temporary files.

NeoMutt will only use the append-hook for existing files. The close-hook will be
used for empty, or missing files.

  Note

If your  command  writes  to  stdout,  it  is vital  that  you  use  >>  in  the
"append-hook". If not, data will be lost.

Example 6.5. Example of append-hook

append-hook '\.gz$' "gzip --stdout '%t' >> '%f'"

  o NeoMutt wants to append an email  to a folder, "example.gz", that it  opened
    with open-hook

  o NeoMutt has an append-hook whose regex matches the filename: \.gz$

  o NeoMutt knows the mailbox type from the $mbox variable

  o NeoMutt uses the command gzip -c to append to an existing compressed file

  Note

The append-hook can also include extra options, e.g. compression level: --best

    14.3.4. Empty Files

NeoMutt assumes that an empty file  is not compressed. In this situation,  unset
$save_empty, so that the compressed  file will be removed  if you delete all  of
the messages.

    14.3.5. Security

Encrypted files  are decrypted  into temporary  files which  are stored  in  the
$tmp_dir directory. This could be a security risk.

  14.4. neomuttrc

# Example NeoMutt config file for the compress feature.

# This feature adds three hooks to NeoMutt which allow it to
# work with compressed, or encrypted, mailboxes.

# The hooks are of the form:
#       open-hook   regex "shell-command"
#       close-hook  regex "shell-command"
#       append-hook regex "shell-command"
# The 'append-hook' is optional.

# Handler for gzip compressed mailboxes
open-hook   '\.gz$' "gzip --stdout --decompress '%f' >  '%t'"
close-hook  '\.gz$' "gzip --stdout              '%t' >  '%f'"
append-hook '\.gz$' "gzip --stdout              '%t' >> '%f'"
# Handler for bzip2 compressed mailboxes
open-hook   '\.bz2$' "bzip2 --stdout --decompress '%f' >  '%t'"
close-hook  '\.bz2$' "bzip2 --stdout              '%t' >  '%f'"
append-hook '\.bz2$' "bzip2 --stdout              '%t' >> '%f'"
# Handler for xz compressed mailboxes
open-hook   '\.xz$' "xz --stdout --decompress '%f' >  '%t'"
close-hook  '\.xz$' "xz --stdout              '%t' >  '%f'"
append-hook '\.xz$' "xz --stdout              '%t' >> '%f'"
# Handler for pgp encrypted mailboxes
# PGP does not support appending to an encrypted file
open-hook   '\.pgp$' "pgp -f < '%f' > '%t'"
close-hook  '\.pgp$' "pgp -fe YourPgpUserIdOrKeyId < '%t' > '%f'"
# Handler for gpg encrypted mailboxes
# gpg does not support appending to an encrypted file
open-hook   '\.gpg$' "gpg --decrypt < '%f' > '%t'"
close-hook  '\.gpg$' "gpg --encrypt --recipient YourGpgUserIdOrKeyId < '%t' > '%f'"

# vim: syntax=neomuttrc

  14.5. See Also

  o Regular Expressions

  o $tmp_dir

  o $mbox_type

  o $save_empty

  o folder-hook

  14.6. Credits

Roland Rosenfeld, Alain  Penders, Christoph "Myon"  Berg, Evgeni Golov,  Richard
Russon

15. Conditional Dates Feature

  Use rules to choose date format

  15.1. Support

Since: NeoMutt 2016-03-07

Dependencies:

        nested-if feature

  15.2. Introduction

The  "Conditional  Dates"   feature  allows  you   to  construct   $index_format
expressions based on the age of the email.

NeoMutt's  default   $index_format   displays   email   dates   in   the   form:
abbreviated-month day-of-month - "Jan 14".

The format is  configurable but  only per-mailbox.  This feature  allows you  to
configure the display depending on the age of the email.

Table 6.5. Potential Formatting Scheme

+-------------------+--------+---------+
|    Email Sent     | Format | Example |
+-------------------+--------+---------+
| Today             | %H:%M  | 13:23   |
+-------------------+--------+---------+
| This Month        | %a %d  | Thu 17  |
+-------------------+--------+---------+
| This Year         | %b %d  | Dec 10  |
+-------------------+--------+---------+
| Older than 1 Year | %m/%y  | 06/14   |
+-------------------+--------+---------+

For an explanation of the date formatting strings, see strftime(3).

By carefully picking your formats, the dates can remain unambiguous and compact.

NeoMutt's conditional format strings have  the form: (whitespace introduced  for
clarity)

%< TEST ? TRUE & FALSE >

The examples below  use the test  "%[" - the  date of the  message in the  local
timezone. They  will also  work with  "%(" -  the local  time that  the  message
arrived.

The date tests are of the form:

%<[nX? TRUE & FALSE >

  o "n" is an optional count (defaults to 1 if missing)

  o "X" is the time period

Table 6.6. Date Formatting Codes

+--------+-------------+
| Letter | Time Period |
+--------+-------------+
| y      | Years       |
+--------+-------------+
| m      | Months      |
+--------+-------------+
| w      | Weeks       |
+--------+-------------+
| d      | Days        |
+--------+-------------+
| H      | Hours       |
+--------+-------------+
| M      | Minutes     |
+--------+-------------+

Table 6.7. Example Date Tests

+------+----------------------+
| Test |       Meaning        |
+------+----------------------+
| %[y  | This year            |
+------+----------------------+
| %[1y | This year            |
+------+----------------------+
| %[6m | In the last 6 months |
+------+----------------------+
| %[w  | This week            |
+------+----------------------+
| %[d  | Today                |
+------+----------------------+
| %[4H | In the last 4 hours  |
+------+----------------------+

    15.2.1. Example 1

We start with a one-condition test.

Table 6.8. Example 1

+------+------------+---------------+------------+
| Test | Date Range | Format String |  Example   |
+------+------------+---------------+------------+
| %[1m | This month | %[%b %d]      | Dec 10     |
+------+------------+---------------+------------+
|      | Older      | %[%Y-%m-%d]   | 2015-04-23 |
+------+------------+---------------+------------+

The $index_format string would contain:

%<[1m?%[%b %d]&%[%Y-%m-%d]>

Reparsed a little,  for clarity,  you can  see the  test condition  and the  two
format strings.

%<[1m?        &           >

      %[%b %d] %[%Y-%m-%d]

    15.2.2. Example 2

This example contains three test conditions and four date formats.

Table 6.9. Example 2

+------+------------+---------------+---------+
| Test | Date Range | Format String | Example |
+------+------------+---------------+---------+
| %[d  | Today      | %[%H:%M ]     | 12:34   |
+------+------------+---------------+---------+
| %[m  | This month | %[%a %d]      | Thu 12  |
+------+------------+---------------+---------+
| %[y  | This year  | %[%b %d]      | Dec 10  |
+------+------------+---------------+---------+
|      | Older      | %[%m/%y ]     | 06/15   |
+------+------------+---------------+---------+

The $index_format string would contain:

%<[y?%<[m?%<[d?%[%H:%M ]&%[%a %d]>&%[%b %d]>&%[%m/%y ]>

Reparsed a little, for  clarity, you can  see the test  conditions and the  four
format strings.

%<[y?                                       &%[%m/%y ]>  Older
     %<[m?                        &%[%b %d]>             This year
          %<[d?         &%[%a %d]>                       This month
               %[%H:%M ]                                 Today

This a another view of the same example, with some whitespace for clarity.

%<[y? %<[m? %<[d? AAA & BBB > & CCC > & DDD >

AAA = %[%H:%M ] BBB = %[%a %d] CCC = %[%b %d] DDD = %[%m/%y ]

  15.3. Variables

The "Conditional Dates" feature doesn't have any config of its own. It  modifies
the behavior of the format strings.

  15.4. neomuttrc

# Example NeoMutt config file for the cond-date feature.

#
# The default index_format is:
#       '%4C %Z %{%b %d} %-15.15L (%<l?%4l&%4c>) %s'
#
# We replace the date field '%{%b %d}', giving:
set index_format='%4C %Z %<[y?%<[m?%<[d?%[%H:%M ]&%[%a %d]>&%[%b %d]>&%[%m/%y ]> %-15.15L (%<l?%4l&%4c>) %s'
# Test  Date Range  Format String  Example
# --------------------------------------------
# %[d   Today       %[%H:%M ]      12:34
# %[m   This month  %[%a %d]       Thu 12
# %[y   This year   %[%b %d]       Dec 10
#  --    Older       %[%m/%y ]      06/15

# vim: syntax=neomuttrc

  15.5. See Also

  o $index_format

  o nested-if feature

  o strftime(3)

  15.6. Known Bugs

Date parsing doesn't quite  do what you  expect. "1w" doesn't  mean the "in  the
last 7 days", but "this week".  This doesn't match the normal NeoMutt  behavior:
for example ~d>1w means emails dated in the last 7 days.

  15.7. Credits

Aaron Schrab, Eric Davis, Richard Russon

16. Encrypt-to-Self Feature

  Save a self-encrypted copy of emails

  16.1. Support

Since: NeoMutt 2016-07-23

Dependencies: None

  16.2. Introduction

Once you  encrypt an  email to  someone you  cannot read  it. This  is good  for
security, but  bad for  record-keeping.  If you  wanted to  keep  a copy  of  an
encrypted email you could set $fcc_clear.

A better option is to enable $smime_self_encrypt, then set $smime_default_key to
your personal S/MIME key id.

set smime_self_encrypt = yes
set smime_default_key  = bb345e23.0

Or, if  you  use  PGP,  $pgp_self_encrypt, then  set  $pgp_default_key  to  your
personal PGP key id.

set pgp_self_encrypt = yes
set pgp_default_key  = A4AF18C5582473BD35A1E9CE78BB3D480042198E

If you  have  different  key for  signing,  then  you can  set  $pgp_sign_as  or
$smime_sign_as respectively.

  16.3. Variables

Table 6.10. encrypt-self Variables

+--------------------+---------+---------+
|        Name        |  Type   | Default |
+--------------------+---------+---------+
| pgp_default_key    | string  | (empty) |
+--------------------+---------+---------+
| pgp_self_encrypt   | boolean | yes     |
+--------------------+---------+---------+
| pgp_sign_as        | string  | (empty) |
+--------------------+---------+---------+
| smime_default_key  | string  | (empty) |
+--------------------+---------+---------+
| smime_self_encrypt | boolean | yes     |
+--------------------+---------+---------+
| smime_sign_as      | string  | (empty) |
+--------------------+---------+---------+

  16.4. neomuttrc

# Example NeoMutt config file for the encrypt-to-self feature.

# --------------------------------------------------------------------------
# VARIABLES - shown with their default values
# --------------------------------------------------------------------------
# Save a copy of outgoing email, encrypted to yourself
set pgp_self_encrypt = "yes"
set pgp_default_key = "PGP-KEY"
# set pgp_sign_as = "PGP-SIGNING-KEY"

# Save a copy of outgoing email, encrypted to yourself
set smime_self_encrypt = "yes"
set smime_default_key = "SMIME-KEY"
# set smime_sign_as = "SMIME-SIGNING-KEY"

# vim: syntax=neomuttrc

  16.5. Known Bugs

None

  16.6. Credits

Omen Wild, Richard Russon, Guillaume Brogi

17. Encryption information block

  Show a block of encryption information about a message

  17.1. Support

Since: NeoMutt 2024-04-10

Dependencies: Gpgme

  17.2. Introduction

This feature shows  a block of  information that provides  information about  an
encrypted message; mainly  about its recipients.  Here is an  example of such  a
block:

[-- Begin encryption information --]
Recipient: RSA key, ID 00C14A7DBBDD521C
Recipient: RSA key, ID 0000000000000000
[-- End encryption information --]

  17.3. Usage

It's enabled by default. The variable to control it is crypt_encryption_info.

  17.4. Credits

Alejandro Colomar, Richard Russon, nab

18. Fmemopen Feature

  Replace some temporary files with memory buffers

  18.1. Support

Since: NeoMutt 2016-03-07

Dependencies:

        open_memstream(), fmemopen() from glibc

This feature can be enabled by running configure with the option --fmemopen

  18.2. Introduction

The "fmemopen" feature speeds up some searches.

This feature changes  a few  places where  NeoMutt creates  temporary files.  It
replaces them with in-memory buffers.  This should improve the performance  when
searching the header or body using the $thorough_search option.

There are no user-configurable parts.

This feature depends on  open_memstream() and fmemopen().  They are provided  by
glibc. Without them, NeoMutt will simply create temporary files.

  18.3. See Also

  o Compile-Time Features

  o fmemopen(3)

  18.4. Known Bugs

debian bug 834408

  18.5. Credits

Julius Plenz, Richard Russon

19. Forgotten Attachment Feature

  Alert user when (s)he forgets to attach a file to an outgoing email.

  19.1. Support

Since: NeoMutt 2016-09-10

Dependencies: None

  19.2. Introduction

The "forgotten-attachment"  feature  provides a  new  setting for  NeoMutt  that
alerts the user if the message body contains a certain keyword but there are  no
attachments added. This  is meant to  ensure that  the user does  not forget  to
attach a file after promising to do so in the mail. The attachment keyword  will
not be scanned in text matched by $quote_regex.

  19.3. Variables

Table 6.11. forgotten-attachment Variables

+----------------------+----------------+--------------------------------------+
|         Name         |      Type      |               Default                |
+----------------------+----------------+--------------------------------------+
| abort_noattach_regex | regular        | \\<(attach|attached|attachments?)\\> |
|                      | expression     |                                      |
+----------------------+----------------+--------------------------------------+
| abort_noattach       | quadoption     | no                                   |
+----------------------+----------------+--------------------------------------+

  19.4. neomuttrc

# Example NeoMutt config file for the forgotten-attachment feature.

# The 'forgotten-attachment' feature provides a new setting for NeoMutt that
# alerts the user if the message body contains a certain regular expression but there are
# no attachments added. This is meant to ensure that the user does not forget
# to attach a file after promising to do so in the mail.

# Ask if the user wishes to abort sending if $abort_noattach_regex is found in the
# body, but no attachments have been added
# It can be set to:
#    "yes"     : always abort
#    "ask-yes" : ask whether to abort
#    "no"      : send the mail
set abort_noattach = no
# Search for the following regular expression in the body of the email
# English: attach, attached, attachment, attachments
set abort_noattach_regex = "\\<attach(|ed|ments?)\\>"
# Nederlands:
# set abort_noattach_regex = "\\<(bijvoegen|bijgevoegd|bijlage|bijlagen)\\>"
# Deutsch:
# set abort_noattach_regex = "\\<(anhaengen|angehaengt|anhang|anhaenge|haengt an)\\>"
# Franc,ais:
# set abort_noattach_regex = "\\<(attache|attaches|attache|attachons|joint|jointe|joints|jointes|joins|joignons)\\>"

# vim: syntax=neomuttrc

  19.5. See Also

  o The Attachment Menu

  o The Attachment Menu key mappings

  19.6. Known Bugs

None

  19.7. Credits

Darshit Shah, Richard Russon, Johannes Weissl, Steven Ragnaroek

20. Global Hooks

  Define actions to run globally within NeoMutt

  20.1. Introduction

These hooks are called when global events take place in NeoMutt.

Run a command...

  o timeout-hook - periodically

  o startup-hook - when NeoMutt starts up, before opening the first mailbox

  o shutdown-hook - NeoMutt shuts down, before closing the last mailbox

The commands are NeoMutt commands. If you want to run an external shell command,
you need to run them like this:

startup-hook 'echo `action.sh ARGS`'

The single quotes prevent  the backticks from being  expanded. The echo  command
prevents an empty command error.

    20.1.1. Timeout Hook

      Run a command periodically

Since: NeoMutt 2016-08-08

This feature implements  a new  hook that  is called  periodically when  NeoMutt
checks for new mail. This hook is called every $timeout seconds.

    20.1.2. Startup Hook

      Run a command when NeoMutt starts up, before opening the first mailbox

Since: NeoMutt 2016-11-25

This feature implements a new hook that is called when NeoMutt first starts  up,
but before opening the first mailbox. This is most likely to be useful to  users
of notmuch.

    20.1.3. Shutdown Hook

      Run a command when NeoMutt shuts down, before closing the last mailbox

Since: NeoMutt 2016-11-25

This feature  implements a  hook that  is called  when NeoMutt  shuts down,  but
before closing the last mailbox.  This is most likely to  be useful to users  of
notmuch.

  20.2. Commands

timeout-hook command

startup-hook command

shutdown-hook command

  20.3. neomuttrc

# Example NeoMutt config file for the global hooks feature.

# --------------------------------------------------------------------------
# COMMANDS - shown with an example argument
# --------------------------------------------------------------------------
# After $timeout seconds of inactivity, run this NeoMutt command
timeout-hook 'exec sync-mailbox'
# When NeoMutt first loads, run this NeoMutt command
startup-hook 'exec sync-mailbox'
# When NeoMutt quits, run this NeoMutt command
shutdown-hook 'exec sync-mailbox'

# vim: syntax=neomuttrc

  20.4. See Also

  o $timeout

  20.5. Known Bugs

None

  20.6. Credits

Armin Wolfermann, Richard Russon, Thomas Adam

21. Header Cache Compression Feature

  Options for compressing the header cache files

  21.1. Support

Since: NeoMutt 2020-02-22

Dependencies: header cache

  21.2. Introduction

The Header Cache Compression Feature can be used for speeding up the loading  of
large mailboxes.  Also the  space used  on disk  can be  shrunk by  about 50%  -
depending on the compression method being used.

The implementation sits on  top of the header  caching functions. So the  header
cache compression can be used together with all available database backends.

  21.3. Variables

Table 6.12. Header Cache Compression Variables

+------------------------------+--------+---------+
|             Name             |  Type  | Default |
+------------------------------+--------+---------+
| header_cache_compress_method | string | (empty) |
+------------------------------+--------+---------+
| header_cache_compress_level  | number | 1       |
+------------------------------+--------+---------+

The header_cache_compress_method can be  (empty) - which  means, that no  header
cache compression should be used. But when set  to lz4, zlib or zstd - then  the
compression is turned on.

The header_cache_compress_level defines the  compression level, which should  be
used  together  with  the  selected  header_cache_compress_method.  Here  is  an
overview of the possible settings:

Table 6.13. Header Cache Compression Methods and it's Levels

+-------------+-----+-----+
| Method Name | Min | Max |
+-------------+-----+-----+
| lz4         | 1   | 12  |
+-------------+-----+-----+
| zlib        | 1   | 9   |
+-------------+-----+-----+
| zstd        | 1   | 22  |
+-------------+-----+-----+

  21.4. neomuttrc

# Example NeoMutt config file for the header cache compression feature.

# --------------------------------------------------------------------------
# VARIABLES - shown with their default values
# --------------------------------------------------------------------------
set header_cache_compress_level = 1
set header_cache_compress_method = ""

# vim: syntax=neomuttrc

  21.5. Known Bugs

None

  21.6. Credits

Tino Reichardt

22. Ifdef Feature

  Conditional config options

  22.1. Support

Since: NeoMutt 2016-03-07

Dependencies: None

  22.2. Introduction

The "ifdef" feature introduces three new  commands to NeoMutt and allows you  to
share one  config file  between  versions of  NeoMutt  that may  have  different
features compiled in.

ifdef  symbol "config-command [args...]"  # If a symbol is defined
ifndef symbol "config-command [args...]"  # If a symbol is not defined
finish                                    # Finish reading the current file

Table 6.14. ifdef Symbols

+-----------------------------------+----------------------+
|          Example Symbol           |     Description      |
+-----------------------------------+----------------------+
| sidebar_format                    | Config variable      |
+-----------------------------------+----------------------+
| status-color, imap                | Compiled-in feature  |
+-----------------------------------+----------------------+
| pgp-menu, group-related           | Function             |
+-----------------------------------+----------------------+
| index-format-hook, tag-transforms | Command              |
+-----------------------------------+----------------------+
| indicator, sidebar_new            | Colour               |
+-----------------------------------+----------------------+
| my_var                            | My variable          |
+-----------------------------------+----------------------+
| lmdb, tokyocabinet                | Store (database)     |
+-----------------------------------+----------------------+
| HOME, COLUMNS                     | Environment variable |
+-----------------------------------+----------------------+

A list of compile-time symbols can be seen in the output of the command

neomutt -v

(in the "Compile options" section).

finish is particularly useful when combined with ifndef. e.g.

# Sidebar config file
ifndef sidebar finish

  22.3. Commands

ifdef symbol "config-command [args...]"
ifndef symbol "config-command [args...]"
finish

  22.4. neomuttrc

# Example NeoMutt config file for the ifdef feature.

# This feature introduces three useful commands which allow you to share
# one config file between versions of NeoMutt that may have different
# features compiled in.

#   ifdef  symbol "config-command [args...]"
#   ifndef symbol "config-command [args...]"
#   finish
# The 'ifdef' command tests whether NeoMutt understands the name of
# a variable, environment variable, function, command or compile-time symbol.

# If it does, then it executes a config command.

# The 'ifndef' command tests whether a symbol does NOT exist.

# The 'finish' command tells NeoMutt to stop reading current config file.

# If the 'trash' variable exists, set it.
ifdef trash 'set trash=~/Mail/trash'
# If the 'PS1' environment variable exists, source config file.
ifdef PS1 'source .neomutt/interactive.rc'
# If the 'tag-pattern' function exists, bind a key to it.
ifdef tag-pattern 'bind index <F6> tag-pattern'
# If the 'imap-fetch-mail' command exists, read my IMAP config.
ifdef imap-fetch-mail 'source ~/.neomutt/imap.rc'
# If the compile-time symbol 'sidebar' does not exist, then
# stop reading the current config file.
ifndef sidebar finish

# vim: syntax=neomuttrc

  22.5. Known Bugs

None

  22.6. Credits

Cedric Duval, Matteo F. Vescovi, Richard Russon

23. Index Color Feature

  Custom rules for theming the email index

  23.1. Support

Since: NeoMutt 2016-03-07

Dependencies:

        status-color feature

  23.2. Introduction

The "index-color" feature allows you to  specify colors for individual parts  of
the email index. e.g. Subject, Author, Flags.

First choose which part of the index you'd like to color. Then, if needed,  pick
a pattern to match.

Note: The pattern does not have to refer to the object you wish to color. e.g.

color index_author red default "~sneomutt"

The author appears red when the subject (~s) contains "neomutt".

  23.3. Colors

All the colors default to default, i.e. unset.

The index objects can be themed using the color command and an optional pattern.
A missing pattern is equivalent to a match-all .* pattern.

color index-object foreground background [pattern]

Table 6.15. Index Colors

+-----------------+----------------------------------------------+
|     Object      |                  Highlights                  |
+-----------------+----------------------------------------------+
| index           | Entire index line                            |
+-----------------+----------------------------------------------+
| index_author    | Author name, %A %a %F %L %n                  |
+-----------------+----------------------------------------------+
| index_collapsed | Number of messages in a collapsed thread, %M |
+-----------------+----------------------------------------------+
| index_date      | Date field                                   |
+-----------------+----------------------------------------------+
| index_flags     | Message flags, %S %Z                         |
+-----------------+----------------------------------------------+
| index_label     | Message label, %y %Y                         |
+-----------------+----------------------------------------------+
| index_number    | Message number, %C                           |
+-----------------+----------------------------------------------+
| index_size      | Message size, %c %cr %l                      |
+-----------------+----------------------------------------------+
| index_subject   | Subject, %s                                  |
+-----------------+----------------------------------------------+
| index_tag       | Message tags, %G                             |
+-----------------+----------------------------------------------+
| index_tags      | Transformed message tags, %g %J              |
+-----------------+----------------------------------------------+

  23.4. neomuttrc

# Example NeoMutt config file for the index-color feature.

# Entire index line
color index white black '.*'
# Author name, %A %a %F %L %n
# Give the author column a dark grey background
color index_author default color234 '.*'
# Highlight a particular from (~f)
color index_author brightyellow color234 '~fRay Charles'
# Message flags, %S %Z
# Highlight the flags for flagged (~F) emails
color index_flags default red '~F'
# Subject, %s
# Look for a particular subject (~s)
color index_subject brightcyan default '~s\(closes #[0-9]+\)'
# Number of messages in a collapsed thread, %M
color index_collapsed default brightblue
# Date field
color index_date green default
# Message label, %y %Y
color index_label default brightgreen
# Message number, %C
color index_number red default
# Message size, %c %cr %l
color index_size cyan default

# vim: syntax=neomuttrc

  23.5. See Also

  o Regular Expressions

  o Patterns

  o $index_format

  o Color command

  o Status-Color feature

  23.6. Known Bugs

None

  23.7. Credits

Christian Aichinger,  Christoph "Myon"  Berg,  Elimar Riesebieter,  Eric  Davis,
Vladimir Marek, Richard Russon

24. Initials Expando Feature

  Expando for author's initials

  24.1. Support

Since: NeoMutt 2016-03-07

Dependencies: None

  24.2. Introduction

The "initials" feature adds an expando (%I) for an author's initials.

The index panel  displays a  list of  emails. Its  layout is  controlled by  the
$index_format variable. Using this expando saves space in the index panel.  This
can be useful if you are regularly working with a small set of people.

  24.3. Variables

This feature has no config of its own.  It adds an expando which can be used  in
the $index_format variable.

  24.4. neomuttrc

# Example NeoMutt config file for the initials feature.

# The 'initials' feature has no config of its own.

# It adds an expando for an author's initials,
# which can be used in the 'index_format' variable.

# The default 'index_format' is:
set index_format='%4C %Z %{%b %d} %-15.15L (%<l?%4l&%4c>) %s'
# Where %L represents the author/recipient
# This might look like:
#       1   + Nov 17 David Bowie   Changesbowie    ( 689)
#       2   ! Nov 17 Stevie Nicks  Rumours         ( 555)
#       3   + Nov 16 Jimi Hendrix  Voodoo Child    ( 263)
#       4   + Nov 16 Debbie Harry  Parallel Lines  ( 540)
# Using the %I expando:
set index_format='%4C %Z %{%b %d} %I (%<l?%4l&%4c>) %s'
# This might look like:
#       1   + Nov 17 DB Changesbowie    ( 689)
#       2   ! Nov 17 SN Rumours         ( 555)
#       3   + Nov 16 JH Voodoo Child    ( 263)
#       4   + Nov 16 DH Parallel Lines  ( 540)

# vim: syntax=neomuttrc

  24.5. See Also

  o $index_format

  o index-color feature

  o folder-hook

  24.6. Known Bugs

None

  24.7. Credits

Vsevolod Volkov, Richard Russon

25. Kyoto Cabinet Feature

  Kyoto Cabinet backend for the header cache

  25.1. Support

Since: NeoMutt 2016-10-02

Dependencies:

        Kyoto Cabinet libraries

To check if NeoMutt supports Kyoto Cabinet, look for

  o "kyoto" in the NeoMutt version.

  o "+hcache" in the compile options

  o "hcache backend: kyotocabinet" in the NeoMutt version

  25.2. Introduction

This feature  adds support  for  using Kyoto  Cabinet,  the successor  to  Tokyo
Cabinet, as a storage backend for NeoMutt's header cache (hcache). It is enabled
at configure time with the --with-kyotocabinet=<path> switch.

  25.3. See Also

  o Local Caching

  o Kyoto Cabinet

  25.4. Known Bugs

None

  25.5. Credits

Clemens Lang

26. Limit Current Thread Feature

  Focus on one Email Thread

  26.1. Support

Since: NeoMutt 2016-03-28

Dependencies: None

  26.2. Introduction

This  feature   adds   a   new   way   of   using   the   Limit   Command.   The
<limit-current-thread> function restricts the view  to just the current  thread.
Setting the limit (the l key) to "all" will restore the full email list.

  26.3. Functions

Limit-current-thread adds the following function  to NeoMutt. By default, it  is
not bound to a key.

Table 6.16. Limit-Current-Thread Functions

+-------+------------------------+------------------------------+
| Menus |        Function        |         Description          |
+-------+------------------------+------------------------------+
| index | <limit-current-thread> | Limit view to current thread |
+-------+------------------------+------------------------------+

  26.4. neomuttrc

# Example NeoMutt config file for the limit-current-thread feature.

# Limit view to current thread
bind index <esc>L limit-current-thread

# vim: syntax=neomuttrc

  26.5. Known Bugs

None

  26.6. Credits

David Sterba, Richard Russon

27. LMDB Feature

  LMDB backend for the header cache

  27.1. Support

Since: NeoMutt 2016-07-23

Dependencies: None

  27.2. Introduction

This feature adds  support for  using LMDB as  a storage  backend for  NeoMutt's
header  cache   (hcache).   It  is   enabled   at  configure   time   with   the
--with-lmdb=<path> switch.

  Note

It is not recommended to store the lmdb database on a shared drive.

  27.3. See Also

  o Local Caching

  27.4. Known Bugs

None

  27.5. Credits

Pietro Cerutti, Jan-Piet Mens, Clemens Lang

28. Multiple FCC Feature

  Save multiple copies of outgoing mail

  28.1. Support

Since: NeoMutt 2016-08-08

Dependencies: None

  28.2. Introduction

This feature allows the user to save outgoing emails in multiple folders.

Folders should be listed separated by commas, but no spaces.

The "fcc" field of an email can be set in two ways:

  o The <edit-fcc> command in the compose menu (default key: "f")

  o Creating a fcc-hook in your .neomuttrc

  28.3. See Also

  o $record

  o fcc-hook

  28.4. Known Bugs

None

  28.5. Credits

Omen Wild, Richard Russon

29. Nested If Feature

  Allow complex nested conditions in format strings

  29.1. Support

Since: NeoMutt 2016-03-07

Dependencies: None

  29.2. Introduction

NeoMutt's format strings can contain embedded if-then-else conditions. They  are
of the form:

%?VAR?TRUE&FALSE?

If the variable "VAR" has  a value greater than  zero, print the "TRUE"  string,
otherwise print the "FALSE" string.

e.g. %?S?Size: %S&Empty?

Which can be read as:

if (%S > 0) { print "Size: %S" } else { print "Empty" }

These conditions are  useful, but in  NeoMutt they cannot  be nested within  one
another. This feature uses the notation %<VAR?TRUE&FALSE> and allows them to  be
nested.

The %<...> notation was used  to format the current  local time. but that's  not
really very  useful  since  NeoMutt  has  no  means  of  refreshing  the  screen
periodically.

A simple nested  condition might be:  (Some whitespace has  been introduced  for
clarity)

%<x? %<y? XY & X > & %<y? Y & NONE > >  Conditions
     %<y? XY & X >                      x>0
          XY                            x>0,y>0
               X                        x>0,y=0

%<x? %<y? XY & X > & %<y? Y & NONE > >  Conditions
                     %<y? Y & NONE >    x=0
                          Y             x=0,y>0
                              NONE      x=0,y=0

Equivalent to:

if (x > 0) {
  if (y > 0) {
    print 'XY'
  } else {
    print 'X'
  }
} else {
  if (y > 0) {
    print 'Y'
  } else {
    print 'NONE'
  }
}

Examples:

set index_format='%4C %Z %{%b %d} %-25.25n %s%> %<M?%M Msgs &%<l?%l Lines&%c Bytes>>'

if a thread is folded display the number of messages (%M)
else if we know how many lines in the message display lines in message (%l)
else display the size of the message in bytes (%c)

set index_format='%4C %Z %{%b %d} %-25.25n %<M?[%M] %s&%s%* %<l?%l&%c>>'

if a thread is folded display the number of messages (%M) and the subject (%s)
else if we know how many lines are in the message display subject (%s) and the lines in message (%l)
else display the subject (%s) and the size of the message in bytes (%c)

  Note

If you wish to use angle brackets < > in a nested condition, then it's necessary
to escape them, e.g.

set index_format='%<M?\<%M\>&%s>'

  29.3. Variables

The "nested-if" feature  doesn't have  any config of  its own.  It modifies  the
behavior of the format strings.

  29.4. neomuttrc

# Example NeoMutt config file for the nested-if feature.

# This feature uses the format: '%<VAR?TRUE&FALSE>' for conditional
# format strings that can be nested.

# Example 1
# if a thread is folded
#       display the number of messages (%M)
# else if we know how many lines in the message
#       display lines in message (%l)
# else display the size of the message in bytes (%c)
set index_format='%4C %Z %{%b %d} %-25.25n %s%> %<M?%M Msgs &%<l?%l Lines&%c Bytes>>'

# Example 2
# if a thread is folded
#       display the number of messages (%M)
#       display the subject (%s)
# else if we know how many lines in the message
#       display lines in message (%l)
# else
#       display the size of the message in bytes (%c)
set index_format='%4C %Z %{%b %d} %-25.25n %<M?[%M] %s&%s%* %<l?%l&%c>>'

# vim: syntax=neomuttrc

  29.5. See Also

  o cond-date feature

  o $index_format

  o $status_format

  29.6. Known Bugs

This feature is hard to understand

  29.7. Credits

David Champion, Richard Russon, Aleksa Sarai

30. New Mail Feature

  Execute a command upon the receipt of new mail.

  30.1. Support

Since: NeoMutt 2016-07-23

Dependencies: None

  30.2. Introduction

This feature enables the new_mail_command setting, which can be used to  execute
a custom script (e.g. a notification handler) upon receiving a new mail.

The command  string can  contain expandos,  such as  %n for  the number  of  new
messages. For a complete list, see: $status_format.

  Note

When the notification is sent,  the folder of the new  mail is no longer  known.
This is a limitation of NeoMutt. The `%f` expando will show the open folder.

When using Maildir local mailboxes, you must set $check_new config variable  for
this feature to work.

For  example  in  Linux  you   can  use  (most  distributions  already   provide
notify-send):

set new_mail_command="notify-send --icon='/home/santiago/Pictures/neomutt.png' \
  'New Email' '%n new messages, %u unread.' &"

And in OS X you will need  to install a command line interface for  Notification
Center, for example terminal-notifier:

set new_mail_command="terminal-notifier -title '%v' -subtitle 'New Mail' \
  -message '%n new messages, %u unread.' -activate 'com.apple.Terminal'"

  30.3. Variables

Table 6.17. New Mail Command Variables

+------------------+--------+---------+
|       Name       |  Type  | Default |
+------------------+--------+---------+
| new_mail_command | string | (empty) |
+------------------+--------+---------+

  30.4. neomuttrc

# Example NeoMutt config file for the new-mail feature.

# --------------------------------------------------------------------------
# VARIABLES - shown with their default values
# --------------------------------------------------------------------------
# Set the command you want NeoMutt to execute upon the receipt of a new email
set new_mail_command = ""
# Linux example:
# set new_mail_command="notify-send --icon='/home/santiago/Pictures/neomutt.png' \
#   'New Email in %f' '%n new messages, %u unread.' &"
# OS X example:
# set new_mail_command="terminal-notifier -title '%v' -subtitle 'New Mail in %f' \
#   -message '%n new messages, %u unread.' -activate 'com.apple.Terminal'"
# --------------------------------------------------------------------------

# vim: syntax=neomuttrc

  30.5. See Also

  o folder-hook

  30.6. Known Bugs

None

  30.7. Credits

Yoshiki Vazquez-Baeza, Santiago Torres-Arias, Richard Russon

31. NNTP Feature

  Talk to a Usenet news server

  31.1. Support

Since: NeoMutt 2016-05-30

Dependencies: None

  31.2. Introduction

Reading news via NNTP

NeoMutt can read from a news server using NNTP.

The default  news  server  can  be obtained  from  the  $NNTPSERVER  environment
variable  or  from  the  /etc/nntpserver  file.  Like  in  other  news  readers,
information about the subscribed  newsgroups is saved in  the file specified  by
the  $newsrc   variable.  You   can   open  a   newsgroup  with   the   function
<change-newsgroup>

When browsing the list of newsgroups on the server the function <subscribe>  can
be used to tell NeoMutt  the groups of interest to  you. This list is stored  in
the  $newsrc  file,  so  NeoMutt  remembers  it  across  invocations  (see  also
$save_unsubscribed). With the <unsubscribe> function a group can be deleted from
that list.  You  can  also specify  the  list  of interesting  groups  with  the
mailboxes command in your config file.

When checking for new messages, NeoMutt only polls the subscribed newsgroups.

The variable $news_cache_dir can be used  to point to a directory. NeoMutt  will
create a hierarchy of  subdirectories named like the  account and newsgroup  the
cache is for. The hierarchy  is also used to store  header cache if NeoMutt  was
compiled with header cache support.

  31.3. Variables

Table 6.18. NNTP Variables

+-----------------------+---------+--------------------------+
|         Name          |  Type   |         Default          |
+-----------------------+---------+--------------------------+
| ask_followup_to       | boolean | no                       |
+-----------------------+---------+--------------------------+
| ask_x_comment_to      | boolean | no                       |
+-----------------------+---------+--------------------------+
| catchup_newsgroup     | quad    | ask-yes                  |
+-----------------------+---------+--------------------------+
| followup_to_poster    | quad    | ask-yes                  |
+-----------------------+---------+--------------------------+
| group_index_format    | string  | %4C %M%N %5s %-45.45f %d |
+-----------------------+---------+--------------------------+
| inews                 | string  | (empty)                  |
+-----------------------+---------+--------------------------+
| newsgroups_charset    | string  | utf-8                    |
+-----------------------+---------+--------------------------+
| newsrc                | string  | ~/.newsrc                |
+-----------------------+---------+--------------------------+
| news_cache_dir        | string  | ~/.neomutt               |
+-----------------------+---------+--------------------------+
| news_server           | string  | (empty)                  |
+-----------------------+---------+--------------------------+
| nntp_authenticators   | string  | (empty)                  |
+-----------------------+---------+--------------------------+
| nntp_context          | number  | 1000                     |
+-----------------------+---------+--------------------------+
| nntp_listgroup        | boolean | yes                      |
+-----------------------+---------+--------------------------+
| nntp_load_description | boolean | yes                      |
+-----------------------+---------+--------------------------+
| nntp_pass             | string  | (empty)                  |
+-----------------------+---------+--------------------------+
| nntp_poll             | number  | 60                       |
+-----------------------+---------+--------------------------+
| nntp_user             | string  | (empty)                  |
+-----------------------+---------+--------------------------+
| post_moderated        | quad    | ask-yes                  |
+-----------------------+---------+--------------------------+
| save_unsubscribed     | boolean | no                       |
+-----------------------+---------+--------------------------+
| show_new_news         | boolean | yes                      |
+-----------------------+---------+--------------------------+
| show_only_unread      | boolean | no                       |
+-----------------------+---------+--------------------------+
| x_comment_to          | boolean | no                       |
+-----------------------+---------+--------------------------+

  31.4. Functions

NNTP adds the following functions to NeoMutt. By default, none of them are bound
to keys.

Table 6.19. NNTP Functions

+--------------------+-----------------------------+---------------------------+
|       Menus        |          Function           |        Description        |
+--------------------+-----------------------------+---------------------------+
| browser,index      | <catchup>                   | mark all articles in      |
|                    |                             | newsgroup as read         |
+--------------------+-----------------------------+---------------------------+
| index,pager        | <change-newsgroup>          | open a different          |
|                    |                             | newsgroup                 |
+--------------------+-----------------------------+---------------------------+
| compose            | <edit-followup-to>          | edit the Followup-To      |
|                    |                             | field                     |
+--------------------+-----------------------------+---------------------------+
| compose            | <edit-newsgroups>           | edit the newsgroups list  |
+--------------------+-----------------------------+---------------------------+
| compose            | <edit-x-comment-to>         | edit the X-Comment-To     |
|                    |                             | field                     |
+--------------------+-----------------------------+---------------------------+
| attach,index,pager | <followup-message>          | followup to newsgroup     |
+--------------------+-----------------------------+---------------------------+
| index,pager        | <post-message>              | post message to newsgroup |
+--------------------+-----------------------------+---------------------------+
|                    |                             | load list of all          |
| browser            | <reload-active>             | newsgroups from NNTP      |
|                    |                             | server                    |
+--------------------+-----------------------------+---------------------------+
| browser            | <subscribe>                 | subscribe to current mbox |
|                    |                             | (IMAP/NNTP only)          |
+--------------------+-----------------------------+---------------------------+
| browser            | <subscribe-pattern>         | subscribe to newsgroups   |
|                    |                             | matching a pattern        |
+--------------------+-----------------------------+---------------------------+
| browser            | <uncatchup>                 | mark all articles in      |
|                    |                             | newsgroup as unread       |
+--------------------+-----------------------------+---------------------------+
| browser            | <unsubscribe>               | unsubscribe from current  |
|                    |                             | mbox (IMAP/NNTP only)     |
+--------------------+-----------------------------+---------------------------+
|                    |                             | unsubscribe from          |
| browser            | <unsubscribe-pattern>       | newsgroups matching a     |
|                    |                             | pattern                   |
+--------------------+-----------------------------+---------------------------+
|                    |                             | open a different          |
| index,pager        | <change-newsgroup-readonly> | newsgroup in read only    |
|                    |                             | mode                      |
+--------------------+-----------------------------+---------------------------+
| attach,index,pager | <forward-to-group>          | forward to newsgroup      |
+--------------------+-----------------------------+---------------------------+
| index              | <get-children>              | get all children of the   |
|                    |                             | current message           |
+--------------------+-----------------------------+---------------------------+
| index              | <get-parent>                | get parent of the current |
|                    |                             | message                   |
+--------------------+-----------------------------+---------------------------+
|                    |                             | reconstruct thread        |
| index              | <reconstruct-thread>        | containing current        |
|                    |                             | message                   |
+--------------------+-----------------------------+---------------------------+
| index              | <get-message>               | get message with          |
|                    |                             | Message-Id                |
+--------------------+-----------------------------+---------------------------+

  31.5. neomuttrc

# Example NeoMutt config file for the nntp feature.

# --------------------------------------------------------------------------
# VARIABLES - shown with their default values
# --------------------------------------------------------------------------
set ask_followup_to = no
set ask_x_comment_to = no
set catchup_newsgroup = ask-yes
set followup_to_poster = ask-yes
set group_index_format = '%4C %M%N %5s  %-45.45f %d'
set inews = ''
set newsgroups_charset = utf-8
set newsrc = '~/.newsrc'
set news_cache_dir = '~/.neomutt'
set news_server = ''
set nntp_authenticators = ''
set nntp_context = 1000
set nntp_listgroup = yes
set nntp_load_description = yes
set nntp_pass = ''
set nntp_poll = 60
set nntp_user = ''
set post_moderated = ask-yes
set save_unsubscribed = no
set show_new_news = yes
set show_only_unread = no
set x_comment_to = no
# --------------------------------------------------------------------------
# FUNCTIONS - shown with an example mapping
# --------------------------------------------------------------------------
# mark all articles in newsgroup as read
bind browser,index y catchup
# open a different newsgroup
bind index,pager i change-newsgroup
# edit the Followup-To field
bind compose o edit-followup-to
# edit the newsgroups list
bind compose N edit-newsgroups
# edit the X-Comment-To field
bind compose x edit-x-comment-to
# followup to newsgroup
bind attach,index,pager F followup-message
# post message to newsgroup
bind index,pager P post-message
# load list of all newsgroups from NNTP server
bind browser g reload-active
# subscribe to current mbox (IMAP/NNTP only)
bind browser s subscribe
# subscribe to newsgroups matching a pattern
bind browser S subscribe-pattern
# mark all articles in newsgroup as unread
bind browser Y uncatchup
# unsubscribe from current mbox (IMAP/NNTP only)
bind browser u unsubscribe
# unsubscribe from newsgroups matching a pattern
bind browser U unsubscribe-pattern
# open a different newsgroup in read only mode
bind index,pager \ei change-newsgroup-readonly
# forward to newsgroup
bind attach,index,pager \eF forward-to-group
# get all children of the current message
# bind index ??? get-children
# get parent of the current message
bind index \eG get-parent
# reconstruct thread containing current message
# bind index ??? reconstruct-thread
# get message with Message-Id
bind index \CG get-message
# --------------------------------------------------------------------------

# vim: syntax=neomuttrc

  31.6. Known Bugs

None

  31.7. Credits

Vsevolod Volkov, Felix von Leitner, Richard Russon

32. Custom backend based Tags Feature

  Implements Notmuch tags and Imap keywords

  32.1. Support

Since: NeoMutt 2017-10-16

Dependencies:

  o quasi-delete feature

  o index-color feature

  32.2. Introduction

Some backends allow to index  and tag mail without  storing the tags within  the
mail envelope. Two  backends are  currently implementing  this feature.  Notmuch
handles them natively and IMAP stores them in custom IMAP keywords.

  32.3. Variables

Table 6.20. Custom tags Variables

+-------------+--------+-----------------------------------------------------------------+
|    Name     |  Type  |                             Default                             |
+-------------+--------+-----------------------------------------------------------------+
|hidden_tags  |string  |unread,draft,flagged,passed,replied,attachment,signed,encrypted  |
+-------------+--------+-----------------------------------------------------------------+

  32.4. Functions

Notmuch adds the following  functions to NeoMutt. By  default, none of them  are
bound to keys.

Table 6.21. Notmuch/IMAP Functions

+-------------+---------------------------+------------------------------------+
|    Menus    |         Function          |            Description             |
+-------------+---------------------------+------------------------------------+
|             |                           | add, remove, or toggle tags: IMAP: |
|             |                           | edit the tags list Notmuch:        |
| index,pager | <modify-labels>           | [+]<tag> to add, -<tag> to remove, |
|             |                           | !<tag> to toggle(notmuch) tags.    |
|             |                           | Note: Tab completion of tag names  |
|             |                           | is available                       |
+-------------+---------------------------+------------------------------------+
|             |                           | add, remove, or toggle tags IMAP:  |
|             |                           | edit the tags list Notmuch:        |
|             |                           | [+]<tag> to add, -<tag> to remove, |
|             |                           | !<tag> to toggle labels and then   |
|             |                           | hide or unhide the message by      |
| index,pager | <modify-labels-then-hide> | changing the "quasi-deleted" to    |
|             |                           | match if it would be shown when    |
|             |                           | requerying. Normal redisplay rules |
|             |                           | apply here, so the user must call  |
|             |                           | <sync-mailbox> for the changes to  |
|             |                           | be displayed. Note: Tab completion |
|             |                           | of tag names is available.         |
+-------------+---------------------------+------------------------------------+

  32.5. Commands

tag-transforms tag transformed-string { tag transformed-string ...}
tag-formats tag format-string { tag format-string ...}

  32.6. Colors

Adds the  objects,  below, to  index-color  feature.  The objects  can  take  an
optional pattern.

Table 6.22. Index Colors

+------------+----------------------------------------------+
|   Object   |                  Highlights                  |
+------------+----------------------------------------------+
| index_tag  | an individual message tag, %G, uses tag name |
+------------+----------------------------------------------+
| index_tags | the transformed message tags, %g or %J       |
+------------+----------------------------------------------+

  32.7. neomuttrc

# Example NeoMutt config file for the custom tags feature.

# VARIABLES - shown with their default values
# --------------------------------------------------------------------------
# This variable specifies private notmuch tags which should not be printed
# on screen (index, pager).
set hidden_tags = "unread,draft,flagged,passed,replied,attachment,signed,encrypted"
# --------------------------------------------------------------------------
# FUNCTIONS - shown with an example mapping
# --------------------------------------------------------------------------
# modify (notmuch/imap) tags
bind index,pager \` modify-labels
# modify (notmuch/imap) tag non-interactively.
macro index,pager tt "<modify-labels>!todo\n" "Toggle the 'todo' tag"
# modify labels and then hide message
# bind index,pager ??? modify-labels-then-hide
# --------------------------------------------------------------------------
# COMMANDS - shown with an example
# --------------------------------------------------------------------------
# Replace some tags with icons
# tag-transforms tag transformed-string { tag transformed-string ...}
# tag-transforms "inbox"   "i"   \
#                "unread"  "u"   \
#                "replied" "* "  \
#                "sent"    "** "  \
#                "todo"    "T"   \
#                "deleted" "DEL" \
#                "invites" "CAL"

# The formats must start with 'G' and the entire sequence is case sensitive.
# tag-formats tag format-string { tag format-string ...}
# tag-formats "inbox"   "GI" \
#             "unread"  "GU" \
#             "replied" "GR" \
#             "sent"    "GS" \
#             "todo"    "Gt" \
#             "deleted" "GD" \
#             "invites" "Gi"

# Now instead of using '%g' or '%J' in your $index_format, which lists all tags
# in a non-deterministic order, you can something like the following which puts
# a transformed tag name in a specific spot on the index line:
# set index_format='%4C %S %[%y.%m.%d] %-18.18n %<GU?%GU& > %<GR?%GR& > %<GI?%GI& > %s'

# The %G formatting sequence may display all tags including tags hidden by
# hidden_tags.
#
# --------------------------------------------------------------------------
# COLORS - some unpleasant examples are given
# --------------------------------------------------------------------------
# These symbols are added to the index-color feature:
# an individual message tag, %G, uses tag name
color index_tag red white "inbox"
# the transformed message tags, %g
color index_tags green default
# --------------------------------------------------------------------------

# vim: syntax=neomuttrc

  32.8. Credits

Mehdi Abaakouk, Richard Russon, Bernard 'Guyzmo' Pratz

33. Notmuch Feature

  Email search engine

  33.1. Support

Since: NeoMutt 2016-03-17

Dependencies:

  o quasi-delete feature

  o index-color feature

  o Notmuch libraries

  33.2. Introduction

Notmuch is an email fulltext indexing and tagging engine.

  o For more information, see: https://notmuchmail.org/

  o More examples: https://notmuchmail.org/mutttips/

  33.3. Using Notmuch

    33.3.1. Folders URL

notmuch://[<path>][?<item>=<name>[& ...]]

The <path> is an absolute  path to the directory  where the notmuch database  is
found as returned by "notmuch config  get database.path" command. Note that  the
<path> should NOT include .notmuch directory name.

If the "<path>"  is not  defined then $nm_default_url  or $folder  is used,  for
example:

set nm_default_url = "notmuch:///home/foo/maildir"
named-mailboxes "My INBOX" "notmuch://?query=tag:inbox"

    33.3.2. Items

query=<string>

See  SEARCH  SYNTAX  in  notmuch  man  page.  Don't  forget  to  use   operators
("and"/"or") in your queries.

Note that proper URL should not contain  blank space and all "bad" chars  should
be encoded, for example

tag:AAA and tag:BBB - encoding -> tag:AAA%20and%20tag:BBB

but NeoMutt  config  file parser  is  smart enough  to  accept space  in  quoted
strings. It means that you can use

notmuch:///foo?query=tag:AAA and tag:BBB

in your config files to keep things readable.

For       more       details       about       Xapian       queries,        see:
https://xapian.org/docs/queryparser.html

limit=<number>

Restricts number  of  messages/threads  in  the result.  The  default  limit  is
nm_db_limit.

Due to a  limitation with libnotmuch,  unread and flagged  message count may  be
inaccurate with limit statements. libnotmuch cannot return a specific tag  count
within the first X messages of a query.

type=<threads|messages>

Reads all  matching messages  or  whole-threads. The  default is  'messages'  or
nm_query_type.

  33.4. Variables

Table 6.23. Notmuch Variables

+--------------------------------+-------+--------+----------------------------------+
|              Name              | Type  |Default |               Note               |
+--------------------------------+-------+--------+----------------------------------+
|                                |       |        |Configuration file for the notmuch|
|                                |       |        |database. Either a path, auto for |
|nm_config_file                  |path   |auto    |detecting a config. file, or empty|
|                                |       |        |for no configuration file. Only   |
|                                |       |        |useful for notmuch 0.32+.         |
+--------------------------------+-------+--------+----------------------------------+
|                                |       |        |Configuration profile for the     |
|nm_config_profile               |string |(empty) |notmuch database. Only useful for |
|                                |       |        |notmuch 0.32+.                    |
+--------------------------------+-------+--------+----------------------------------+
|nm_db_limit                     |number |0       |                                  |
+--------------------------------+-------+--------+----------------------------------+
|nm_default_url                  |string |(empty) |Must use format:                  |
|                                |       |        |notmuch://<absolute path>         |
+--------------------------------+-------+--------+----------------------------------+
|nm_exclude_tags                 |string |(empty) |                                  |
+--------------------------------+-------+--------+----------------------------------+
|nm_flagged_tag                  |string |flagged |                                  |
+--------------------------------+-------+--------+----------------------------------+
|nm_open_timeout                 |number |5       |                                  |
+--------------------------------+-------+--------+----------------------------------+
|nm_query_type                   |string |messages|                                  |
+--------------------------------+-------+--------+----------------------------------+
|nm_query_window_current_position|number |0       |Position of current search window |
+--------------------------------+-------+--------+----------------------------------+
|nm_query_window_current_search  |string |(empty) |Current search parameters         |
+--------------------------------+-------+--------+----------------------------------+
|                                |       |        |Duration between start and end    |
|                                |       |        |dates for windowed notmuch query. |
|                                |       |        |This corresponds to a bounded     |
|nm_query_window_duration        |number |0       |notmuch date: query. See          |
|                                |       |        |notmuch-search-terms manual page  |
|                                |       |        |for more info. Value of 0 disables|
|                                |       |        |windowed queries unless           |
|                                |       |        |nm_query_window_enable=yes        |
+--------------------------------+-------+--------+----------------------------------+
|nm_query_window_enable          |boolean|no      |Enables windowed notmuch queries  |
|                                |       |        |for nm_query_window_duration = 0  |
+--------------------------------+-------+--------+----------------------------------+
|                                |       |        |Additional notmuch search terms to|
|                                |       |        |always include in the window even |
|                                |       |        |if they're outside the date range.|
|                                |       |        |This turns the window from        |
|nm_query_window_or_terms        |string |(empty) |date:... to date:... or           |
|                                |       |        |(additional search terms.) For    |
|                                |       |        |example, to always include        |
|                                |       |        |flagged, unread emails, set to    |
|                                |       |        |tag:flagged and tag:unread        |
+--------------------------------+-------+--------+----------------------------------+
|                                |       |        |Time base for windowed notmuch    |
|nm_query_window_timebase        |string |week    |queries. Must be one of: hour,    |
|                                |       |        |day, week, month, or year         |
+--------------------------------+-------+--------+----------------------------------+
|nm_record                       |boolean|no      |                                  |
+--------------------------------+-------+--------+----------------------------------+
|nm_record_tags                  |string |(empty) |                                  |
+--------------------------------+-------+--------+----------------------------------+
|nm_unread_tag                   |string |unread  |                                  |
+--------------------------------+-------+--------+----------------------------------+

More variables about  tags configuration  can be  found in  Custom backend  Tags
Feature

  33.5. Functions

Notmuch adds the following  functions to NeoMutt. By  default, none of them  are
bound to keys.

Table 6.24. Notmuch Functions

+-------------+-------------------------------+--------------------------------+
|    Menus    |           Function            |          Description           |
+-------------+-------------------------------+--------------------------------+
|             |                               | switch to another virtual      |
|             |                               | folder, a new folder maybe be  |
|             |                               | specified by vfolder           |
| index,pager | <change-vfolder>              | description (see               |
|             |                               | named-mailboxes) or URL. the   |
|             |                               | default is next vfolder with   |
|             |                               | unread messages                |
+-------------+-------------------------------+--------------------------------+
| index,pager | <entire-thread>               | read entire thread of the      |
|             |                               | current message                |
+-------------+-------------------------------+--------------------------------+
|             |                               | generate virtual folder from   |
| index,pager | <vfolder-from-query>          | notmuch search query. Note:    |
|             |                               | TAB completion of 'tag:' names |
|             |                               | is available.                  |
+-------------+-------------------------------+--------------------------------+
|             |                               | The same as                    |
| index,pager | <vfolder-from-query-readonly> | <vfolder-from-query>; however, |
|             |                               | the mailbox will be read-only. |
+-------------+-------------------------------+--------------------------------+
|             |                               | generate virtual folder by     |
| index       | <vfolder-window-forward>      | moving the query's time window |
|             |                               | forward                        |
+-------------+-------------------------------+--------------------------------+
|             |                               | generate virtual folder by     |
| index       | <vfolder-window-backward>     | moving the query's time window |
|             |                               | backward                       |
+-------------+-------------------------------+--------------------------------+
|             |                               | generate virtual folder by     |
| index       | <vfolder-window-reset>        | moving the query's time window |
|             |                               | to the present                 |
+-------------+-------------------------------+--------------------------------+

More functions about tags can be found in Custom backend Tags Feature

  33.6. Colors

See Custom backend Tags colors

  33.7. neomuttrc

# Example NeoMutt config file for the notmuch feature.

# --------------------------------------------------------------------------
# VARIABLES - shown with their default values
# --------------------------------------------------------------------------
# This variable specifies notmuch query limit.
set nm_db_limit = 0
# This variable specifies the default Notmuch database in format:
# notmuch://<absolute path>
set nm_default_url = ""
# The messages tagged with these tags are excluded and not loaded
# from notmuch DB to NeoMutt unless specified explicitly.
set nm_exclude_tags = ""
# This option specifies timeout for Notmuch database. Default is 5 seconds.
set nm_open_timeout = 5
# This variable specifies notmuch query type, supported types: 'threads' and
# 'messages'.
set nm_query_type = messages
# When writing a message in the NeoMutt record (see $record in the NeoMutt docs),
# also add it to the notmuch DB. Replies inherit the tags from the original email.
set nm_record = no
# Tags modifications to the messages stored in the NeoMutt record.
# example:
#   set record = "~/sent-mails"
#   set nm_record = yes
#   set nm_record_tags = "-inbox,archive,me"
set nm_record_tags = ""
# This variable specifies the notmuch tag used for unread messages.
set nm_unread_tag = unread
# setup time window preferences
# first setup the duration, and then the time unit of that duration
# when set to 0 (the default) the search window feature is disabled
# unless explicitly enabled with nm_query_window_enable.
set nm_query_window_enable=yes
set nm_query_window_duration=2
set nm_query_window_timebase="week" # or "hour", "day", "week", "month", "year"
# Extend query window to always show mail matching these terms.
set nm_query_window_or_terms="tag:unread and tag:flagged"
# --------------------------------------------------------------------------
# FUNCTIONS - shown with an example mapping
# --------------------------------------------------------------------------
# open a different virtual folder
bind index,pager X change-vfolder
# read entire thread of the current message
bind index,pager + entire-thread
# generate virtual folder from query
bind index,pager \eX vfolder-from-query
# generate virtual folder from query with time window
bind index < vfolder-window-backward
bind index > vfolder-window-forward
# --------------------------------------------------------------------------

# vim: syntax=neomuttrc

  33.8. See Also

  o Compile-Time Features

  33.9. Known Bugs

None

  33.10. Credits

Karel Zak,  Chris Mason,  Christoph Rissner,  David Riebenbauer,  David  Sterba,
David Wilson, Don  Zickus, Eric  Davis, Jan  Synacek, Jeremiah  C. Foster,  Josh
Poimboeuf, Kirill A. Shutemov, Luke  Macken, Mantas Mikulenas, Patrick  Brisbin,
Philippe Le Brouster, Raghavendra D  Prabhu, Sami Farin, Stefan Assmann,  Stefan
Kuhn, Tim Stoakes, Vladimir  Marek, Victor Manuel  Jaquez Leal, Richard  Russon,
Bernard 'Guyzmo' Pratz

34. Pager Read Delay Feature

  Delay when the pager marks a previewed message as read

  34.1. Support

Since: NeoMutt 2021-06-16

Dependencies: None

  34.2. Introduction

The "Pager Read Delay" feature adds a new config variable to allow the pager  to
operate in a preview mode.  A new message is not  marked as read merely  because
the pager opened it, but only after the pager remains on the message for a given
length of time.

  34.3. Functions

The "Pager Read Delay" feature adds no new functions to NeoMutt. Existing  pager
functions for navigating  to a  different message now  check whether  to mark  a
message as read.

  34.4. Variables

The "Pager Read Delay" feature adds one new config variable,  $pager_read_delay,
which is  an integer  for how  many seconds  the pager  must remain  on a  given
message before marking it as read. The  variable defaults to 0 for the  original
behavior of marking a message as read the moment the pager visits it.

  34.5. neomuttrc

# Example NeoMutt config file for the pager-read-delay feature.

# Stay at least 5 seconds on a message before the pager marks it as read
set pager_read_delay = 5

# vim: syntax=neomuttrc

  34.6. Known Bugs

When $pager_index_lines  is non-zero,  the "N"  status indicator  from the  "%Z"
expando of $index_format does not  actively reflect the current new/read  status
of the message.

  34.7. Credits

Eric Blake

35. Progress Bar Feature

  Show a visual progress bar on slow operations

  35.1. Support

Since: NeoMutt 2016-03-07

Dependencies: None

  35.2. Introduction

The "progress"  feature shows  a visual  progress  bar on  slow tasks,  such  as
indexing a large folder over the net.

  35.3. Colors

Table 6.25. Progress Colors

+----------+---------------+---------------------+
|   Name   | Default Color |     Description     |
+----------+---------------+---------------------+
| progress | default       | Visual progress bar |
+----------+---------------+---------------------+

  35.4. neomuttrc

# Example NeoMutt config file for the progress feature.

# The 'progress' feature provides clear visual feedback for
# slow tasks, such as indexing a large folder over the net.

# Set the color of the progress bar
# White text on a red background
color progress white red

# vim: syntax=neomuttrc

  35.5. See Also

  o Color command

  35.6. Known Bugs

None

  35.7. Credits

Rocco Rutte, Vincent Lefevre, Stefan Kuhn, Karel Zak, Richard Russon

36. Quasi-Delete Feature

  Mark emails that should be hidden, but not deleted

  36.1. Support

Since: NeoMutt 2016-03-07

Dependencies: None

  36.2. Introduction

The "quasi-delete" function marks an email that should be hidden from the index,
but NOT deleted. The email will disappear from the index when <sync-mailbox>  is
called.

On its  own, this  feature isn't  very useful.  It forms  a useful  part of  the
notmuch plugin.

  36.3. Functions

Table 6.26. Quasi-Delete Functions

+-------------+-------------+----------------+---------------------------------+
|    Menus    | Default Key |    Function    |           Description           |
+-------------+-------------+----------------+---------------------------------+
| index,pager | (none)      | <quasi-delete> | delete from NeoMutt, don't      |
|             |             |                | touch on disk                   |
+-------------+-------------+----------------+---------------------------------+

  36.4. neomuttrc

# Example NeoMutt config file for the quasi-delete feature.

# The 'quasi-delete' function marks an email that should be hidden
# from the index, but NOT deleted.
bind index,pager Q quasi-delete

# vim: syntax=neomuttrc

  36.5. See Also

  o notmuch feature

  36.6. Known Bugs

None

  36.7. Credits

Karel Zak, Richard Russon

37. Reply With X-Original-To Feature

  Direct reply to email using X-Original-To header

  37.1. Support

Since: NeoMutt 2016-09-10

Dependencies: None

  37.2. Introduction

Adds a reply_with_xorig for NeoMutt  configuration files. If enabled, allows  to
reply to an email using the email address in the first X-Original-To: header  of
a mail as the From: header of the answer.

  37.3. Variables

Table 6.27. Reply With X-Original-To Variables

+------------------+---------+---------+
|       Name       |  Type   | Default |
+------------------+---------+---------+
| reply_with_xorig | Boolean | no      |
+------------------+---------+---------+

  37.4. neomuttrc

# Example NeoMutt config file for the reply-with-xorig feature.

# --------------------------------------------------------------------------
# VARIABLES - shown with their default values
# --------------------------------------------------------------------------
# Use X-Original-To header to reply when reverse is disabled or no alternate
# is found.
set reply_with_xorig = "yes"

# vim: syntax=neomuttrc

  37.5. Credits

Pierre-Elliott Becue

38. Sensible Browser Feature

  Make the file browser behave

  38.1. Support

Since: NeoMutt 2016-09-10

Dependencies: None

  38.2. Introduction

The "sensible browser" is  a set of small  changes to NeoMutt's mailbox  browser
which make the browser behave in a more predictable way.

The behavior is divided into two use cases: Fixed Order; Variable Order.

    38.2.1. A Fixed Order of Mailboxes

This is for users who like their mailboxes in a fixed order, e.g.  alphabetical,
or unsorted (in the order of the config file).

# Fixed order
set browser_sort = "alpha"
set browser_sort = "unsorted"

When you  first  start  the  browser,  e.g. c?  your  current  mailbox  will  be
highlighted.

When you  navigate  to  a  parent  mailbox  ("..")  your  old  mailbox  will  be
highlighted.

".." will always be listed at the top, however the rest of the list is sorted.

    38.2.2. A Variable Order of Mailboxes

This is  for users  who like  their mailboxes  sorted by  a characteristic  that
changes, e.g. count of new mail, or the size of mailbox.

# Variable order
set browser_sort = "reverse-count"
set browser_sort = "reverse-size"

When you first start  the browser, e.g.  c? the highlight will  be on the  first
mailbox, e.g. the one with the most new mail.

When you  navigate  to  a  parent  mailbox  ("..")  your  old  mailbox  will  be
highlighted.

".." will always be listed at the top, however the rest of the list is sorted.

  38.3. See Also

  o $folder_format

  38.4. Known Bugs

None

  38.5. Credits

Pierre-Elliott Becue, Haakon Riiser, Richard Russon

39. Sidebar Feature

  Overview of mailboxes

  39.1. Support

Since: NeoMutt 2016-09-10, NeoMutt 1.7.0

Dependencies: None

  39.2. Introduction

The Sidebar shows a list  of all your mailboxes. The  list can be turned on  and
off, it can be themed and the list style can be configured.

This part of the manual is a reference guide. If you want a simple  introduction
with examples see the Sidebar Howto. If you just want to get started, you  could
use the sample Sidebar neomuttrc.

  39.3. Variables

Table 6.28. Sidebar Variables

+--------------------------------+---------+-----------------+
|              Name              |  Type   |     Default     |
+--------------------------------+---------+-----------------+
| sidebar_component_depth        | number  | 0               |
+--------------------------------+---------+-----------------+
| sidebar_delim_chars            | string  | /.              |
+--------------------------------+---------+-----------------+
| sidebar_divider_char           | string  | |               |
+--------------------------------+---------+-----------------+
| sidebar_folder_indent          | boolean | no              |
+--------------------------------+---------+-----------------+
| sidebar_format                 | string  | %D%* %n         |
+--------------------------------+---------+-----------------+
| sidebar_indent_string          | string  |    (two spaces) |
+--------------------------------+---------+-----------------+
| sidebar_new_mail_only          | boolean | no              |
+--------------------------------+---------+-----------------+
| sidebar_next_new_wrap          | boolean | no              |
+--------------------------------+---------+-----------------+
| sidebar_non_empty_mailbox_only | boolean | no              |
+--------------------------------+---------+-----------------+
| sidebar_on_right               | boolean | no              |
+--------------------------------+---------+-----------------+
| sidebar_short_path             | boolean | no              |
+--------------------------------+---------+-----------------+
| sidebar_sort                   | enum    | unsorted        |
+--------------------------------+---------+-----------------+
| sidebar_visible                | boolean | no              |
+--------------------------------+---------+-----------------+
| sidebar_width                  | number  | 20              |
+--------------------------------+---------+-----------------+

For more  details, and  examples,  about the  $sidebar_format, see  the  Sidebar
Intro.

  39.4. Functions

Sidebar adds the following  functions to NeoMutt. By  default, none of them  are
bound to keys.

Table 6.29. Sidebar Functions

+-------------+--------------------------+-------------------------------------+
|    Menus    |         Function         |             Description             |
+-------------+--------------------------+-------------------------------------+
| index,pager | <sidebar-next>           | Move the highlight to next mailbox  |
+-------------+--------------------------+-------------------------------------+
| index,pager | <sidebar-next-new>       | Move the highlight to next mailbox  |
|             |                          | with new mail                       |
+-------------+--------------------------+-------------------------------------+
| index,pager | <sidebar-open>           | Open highlighted mailbox            |
+-------------+--------------------------+-------------------------------------+
| index,pager | <sidebar-page-down>      | Scroll the Sidebar down 1 page      |
+-------------+--------------------------+-------------------------------------+
| index,pager | <sidebar-page-up>        | Scroll the Sidebar up 1 page        |
+-------------+--------------------------+-------------------------------------+
| index,pager | <sidebar-prev>           | Move the highlight to previous      |
|             |                          | mailbox                             |
+-------------+--------------------------+-------------------------------------+
| index,pager | <sidebar-prev-new>       | Move the highlight to previous      |
|             |                          | mailbox with new mail               |
+-------------+--------------------------+-------------------------------------+
| index,pager | <sidebar-toggle-visible> | Make the Sidebar (in)visible        |
+-------------+--------------------------+-------------------------------------+

  39.5. Commands

sidebar_pin mailbox [ mailbox ...]
sidebar_unpin { * | mailbox ... }

This command specifies mailboxes that will  always be displayed in the  sidebar,
even if $sidebar_new_mail_only is set and the mailbox does not contain new mail.

The "sidebar_unpin" command is used to remove a mailbox from the list of  always
displayed mailboxes. Use "sidebar_unpin *" to remove all mailboxes.

  39.6. Colors

Table 6.30. Sidebar Colors

+--------------------+-------------------+-------------------------------------+
|        Name        |   Default Color   |             Description             |
+--------------------+-------------------+-------------------------------------+
| sidebar_background | default           | The entire sidebar panel            |
+--------------------+-------------------+-------------------------------------+
| sidebar_divider    | default           | The dividing line between the       |
|                    |                   | Sidebar and the Index/Pager panels  |
+--------------------+-------------------+-------------------------------------+
| sidebar_flagged    | default           | Mailboxes containing flagged mail   |
+--------------------+-------------------+-------------------------------------+
| sidebar_highlight  | underline         | Cursor to select a mailbox          |
+--------------------+-------------------+-------------------------------------+
| sidebar_indicator  | neomutt indicator | The mailbox open in the Index panel |
+--------------------+-------------------+-------------------------------------+
| sidebar_new        | default           | Mailboxes containing new mail       |
+--------------------+-------------------+-------------------------------------+
| sidebar_ordinary   | default           | Mailboxes that have no new/flagged  |
|                    |                   | mails, etc.                         |
+--------------------+-------------------+-------------------------------------+
| sidebar_spool_file | default           | Mailbox that receives incoming mail |
+--------------------+-------------------+-------------------------------------+
| sidebar_unread     | default           | Mailboxes containing unread mail    |
+--------------------+-------------------+-------------------------------------+

If the sidebar_indicator  color isn't  set, then the  default NeoMutt  indicator
color will be used (the color used in the index panel).

  39.7. Sort

Table 6.31. Sidebar Sort

+----------+----------------------------------------+
|   Sort   |              Description               |
+----------+----------------------------------------+
| alpha    | Alphabetically by path or label        |
+----------+----------------------------------------+
| count    | Total number of messages               |
+----------+----------------------------------------+
| desc     | Descriptive name of the mailbox        |
+----------+----------------------------------------+
| flagged  | Number of flagged messages             |
+----------+----------------------------------------+
| name     | Alphabetically by path or label        |
+----------+----------------------------------------+
| new      | Number of unread messages              |
+----------+----------------------------------------+
| path     | Alphabetically by path (ignores label) |
+----------+----------------------------------------+
| unread   | Number of unread messages              |
+----------+----------------------------------------+
| unsorted | Order of the mailboxes command         |
+----------+----------------------------------------+

  39.8. neomuttrc

# Example NeoMutt config file for the sidebar feature.

# --------------------------------------------------------------------------
# VARIABLES - shown with their default values
# --------------------------------------------------------------------------
# Should the Sidebar be shown?
set sidebar_visible = no
# How wide should the Sidebar be in screen columns?

# Note: Some characters, e.g. Chinese, take up two columns each.
set sidebar_width = 20
# Should the mailbox paths be abbreviated?
set sidebar_short_path = no
# Number of top-level mailbox path subdirectories to truncate for display
set sidebar_component_depth = 0
# When abbreviating mailbox path names, use any of these characters as path
# separators. Only the part after the last separators will be shown.
# For file folders '/' is good. For IMAP folders, often '.' is useful.
set sidebar_delim_chars = '/.'
# If the mailbox path is abbreviated, should it be indented?
set sidebar_folder_indent = no
# Indent mailbox paths with this string.
set sidebar_indent_string = '  '
# Make the Sidebar only display mailboxes that contain new, or flagged,
# mail.
set sidebar_new_mail_only = no
# Any mailboxes that are pinned will always be visible, even if the
# sidebar_new_mail_only option is enabled.
set sidebar_non_empty_mailbox_only = no
# Only show mailboxes that contain some mail
sidebar_pin '/home/user/mailbox1'
sidebar_pin '/home/user/mailbox2'
# When searching for mailboxes containing new mail, should the search wrap
# around when it reaches the end of the list?
set sidebar_next_new_wrap = no
# Show the Sidebar on the right-hand side of the screen
set sidebar_on_right = no
# The character to use as the divider between the Sidebar and the other NeoMutt
# panels.
set sidebar_divider_char = '|'
# Enable extended mailbox mode to calculate total, new, and flagged
# message counts for each mailbox.
set mail_check_stats
# Display the Sidebar mailboxes using this format string.
set sidebar_format = '%B%<F? [%F]>%* %<N?%N/>%S'
# Sort the mailboxes in the Sidebar using this method:
#       count    - total number of messages
#       flagged  - number of flagged messages
#       unread   - number of unread messages
#       path     - mailbox path
#       unsorted - do not sort the mailboxes
set sidebar_sort = 'unsorted'
# --------------------------------------------------------------------------
# FUNCTIONS - shown with an example mapping
# --------------------------------------------------------------------------
# Move the highlight to the previous mailbox
bind index,pager \Cp sidebar-prev
# Move the highlight to the next mailbox
bind index,pager \Cn sidebar-next
# Open the highlighted mailbox
bind index,pager \Co sidebar-open
# Move the highlight to the previous page
# This is useful if you have a LOT of mailboxes.
bind index,pager <F3> sidebar-page-up
# Move the highlight to the next page
# This is useful if you have a LOT of mailboxes.
bind index,pager <F4> sidebar-page-down
# Move the highlight to the previous mailbox containing new, or flagged,
# mail.
bind index,pager <F5> sidebar-prev-new
# Move the highlight to the next mailbox containing new, or flagged, mail.
bind index,pager <F6> sidebar-next-new
# Toggle the visibility of the Sidebar.
bind index,pager B sidebar-toggle-visible
# --------------------------------------------------------------------------
# COLORS - some unpleasant examples are given
# --------------------------------------------------------------------------
# Note: All color operations are of the form:
#       color OBJECT FOREGROUND BACKGROUND
# Color of the current, open, mailbox
# Note: This is a general NeoMutt option which colors all selected items.
color indicator cyan black
# Sidebar-specific color of the selected item
color sidebar_indicator cyan black
# Color of the highlighted, but not open, mailbox.
color sidebar_highlight black color8
# Color of the entire Sidebar panel
color sidebar_background default black
# Color of the divider separating the Sidebar from NeoMutt panels
color sidebar_divider color8 black
# Color to give mailboxes containing flagged mail
color sidebar_flagged red black
# Color to give mailboxes containing new mail
color sidebar_new green black
# Color to give mailboxes containing no new/flagged mail, etc.
color sidebar_ordinary color245 default
# Color to give the spool_file mailbox
color sidebar_spool_file color207 default
# Color to give mailboxes containing no unread mail
color sidebar_unread color136 default
# --------------------------------------------------------------------------

# vim: syntax=neomuttrc

  39.9. See Also

  o Regular Expressions

  o Patterns

  o Color command

  o notmuch feature

  39.10. Known Bugs

None

  39.11. Credits

Justin Hibbits, Thomer M. Gil, David Sterba, Evgeni Golov, Fabian Groffen, Jason
DeTiberus, Stefan Assmann, Steve Kemp, Terry Chan, Tyler Earnest, Richard Russon

40. Skip Quoted Feature

  Managing quoted text in the pager

  40.1. Support

Since: $skip_quoted_offset in NeoMutt 2016-03-28, $toggle_quoted_show_levels  in
NeoMutt 2019-10-25, <skip-headers> in NeoMutt 2021-02-05

Dependencies: None

  40.2. Introduction

When viewing an email,  the <skip-quoted> function (by  default the S key)  will
scroll past any  email headers or  quoted text. Sometimes,  a little context  is
useful. By setting the $skip_quoted_offset variable, you can select how much  of
the quoted text is left visible.

When using  the <toggle-quoted>  function (by  default  the T  key), it  can  be
convenient to hide text that has been quoted multiple times while still  leaving
quoted text that is relevant to the  unquoted reply intact. This can be done  by
setting the $toggle_quoted_show_levels variable.

Also, it can be handy to jump directly  to the start of the email body with  the
<skip-headers> function (by default the H key).

  40.3. Functions

Table 6.32. Skip Quoted Functions

+-------+-------------+----------------+----------------------------------+
| Menus | Default Key |    Function    |           Description            |
+-------+-------------+----------------+----------------------------------+
| pager | H           | <skip-headers> | jump to first line after headers |
+-------+-------------+----------------+----------------------------------+

  40.4. Variables

Table 6.33. Skip-Quoted Variables

+---------------------------+---------+---------------------------+
|           Name            |  Type   |          Default          |
+---------------------------+---------+---------------------------+
| pager_skip_quoted_context | number  | 0                         |
+---------------------------+---------+---------------------------+
| skip_quoted_offset        | synonym | pager_skip_quoted_context |
+---------------------------+---------+---------------------------+
| toggle_quoted_show_levels | number  | 0                         |
+---------------------------+---------+---------------------------+

  40.5. neomuttrc

# Example NeoMutt config file for the skip-quoted feature.

# The 'S' (skip-quoted) command scrolls the pager past the quoted text (usually
# indented with '> '. Setting 'pager_skip_quoted_context leaves some lines
# of quoted text on screen for context.

# Show three quoted lines before the reply
set pager_skip_quoted_context = 3

# The 'T' (toggle-quoted) command hides quoted text, but can
# be limited to only hiding deeply-nested quotes.

# Preserve the first level of quoted text
set toggle_quoted_show_levels = 1

# vim: syntax=neomuttrc

  40.6. Known Bugs

None

  40.7. Credits

David Sterba, Richard Russon

41. Status Color Feature

  Custom rules for theming the status bar

  41.1. Support

Since: NeoMutt 2016-03-07

Dependencies: None

  41.2. Introduction

The "status-color" feature allows you to theme different parts of the status bar
(also when it's used by the index).

Unlike normal color commands, color status can now take up to 2 extra parameters
(regex, num).

  41.3. Commands

color status foreground background [ regex [ num ]]

With zero parameters, NeoMutt will set  the default color for the entire  status
bar.

With one parameter, NeoMutt will only color the parts matching the regex.

With two parameters, NeoMutt will only color the num'th sub-match of the regex.

  41.4. Colors

Table 6.34. Status Colors

+--------+---------------+-------------+
|  Name  | Default Color | Description |
+--------+---------------+-------------+
| status | reverse       | Status bar  |
+--------+---------------+-------------+

  41.5. neomuttrc

# Example NeoMutt config file for the status-color feature.

# The 'status-color' feature allows you to theme different parts of
# the status bar (also when it's used by the index).

# For the examples below, set some defaults
set status_format='-%r-NeoMutt: %f [Msgs:%<M?%M/>%m%<n? New:%n>%<o? Old:%o>%<d? Del:%d>\
%<F? Flag:%F>%<t? Tag:%t>%<p? Post:%p>%<b? Inc:%b>%<l? %l>]---(%s/%S)-%>-(%P)---'
set index_format='%4C %Z %{%b %d} %-15.15L (%<l?%4l&%4c>) %s'
set use_threads=yes
set sort=last-date-received
set sort_aux=date
# 'status color' can take up to 2 extra parameters
# color status foreground background [ regex [ num ]]
# 0 extra parameters
# Set the default color for the entire status line
color status blue white
# 1 extra parameter
# Set the color for a matching pattern
# color status foreground background regex
# Highlight New, Deleted, or Flagged emails
color status brightred white '(New|Del|Flag):[0-9]+'
# Highlight mailbox ordering if it's different from the default
# First, highlight anything (*/*)
color status brightred default '\([^)]+/[^)]+\)'
# Then override the color for one specific case
color status default default '\(threads/last-date-received\)'
# 2 extra parameters
# Set the color for the nth submatch of a pattern
# color status foreground background regex num
# Highlight the contents of the []s but not the [] themselves
color status red default '\[([^]]+)\]' 1
# The '1' refers to the first regex submatch, which is the inner
# part in ()s
# Highlight the mailbox
color status brightwhite default 'NeoMutt: ([^ ]+)' 1
# Search for 'NeoMutt: ' but only highlight what comes after it

# vim: syntax=neomuttrc

  41.6. See Also

  o Compile-Time Features

  o Regular Expressions

  o Patterns

  o index-color feature

  o Color command

  41.7. Known Bugs

None

  41.8. Credits

David Sterba, Thomas Glanzmann, Kirill A. Shutemov, Richard Russon

42. TLS-SNI Feature

  Negotiate with a server for a TLS/SSL certificate

  42.1. Support

Since: NeoMutt 2016-03-07

Dependencies:

        OpenSSL

  42.2. Introduction

The "TLS-SNI" feature adds support for TLS virtual hosting. If your mail  server
doesn't support this everything will still work normally.

TLS supports sending the expected server hostname during the handshake, via  the
SNI extension. This can be used to  select a server certificate to issue to  the
client, permitting virtual-hosting without requiring multiple IP addresses.

This has  been tested  against Exim  4.80,  which optionally  logs SNI  and  can
perform vhosting.

To verify TLS SNI support by a server, you can use:

openssl s_client -host <imap server> -port <port> -tls1 -servername <imap server>

  42.3. Known Bugs

None

  42.4. Credits

Jeremy Katz, Phil Pennock, Richard Russon

43. Trash Folder Feature

  Automatically move deleted emails to a trash bin

  43.1. Support

Since: NeoMutt 2016-09-10, NeoMutt 1.7.0

Dependencies:

        If IMAP is enabled, the trash folder will use it wisely

  43.2. Introduction

In NeoMutt, when you  "delete" an email  it is first  marked deleted. The  email
isn't really gone  until <sync-mailbox> is  called. This happens  when the  user
leaves the folder, or the function is called manually.

After <sync-mailbox> has been called the email is gone forever.

The $trash variable defines  a folder in  which to keep  old emails. As  before,
first you mark emails for deletion. When <sync-mailbox> is called the emails are
moved to the trash folder.

The $trash path can be  either a full directory, or  be relative to the  $folder
variable, like the mailboxes command.

  Note

Emails deleted from the trash folder are gone forever.

  43.3. Variables

Table 6.35. Trash Variables

+-------+--------+---------+
| Name  |  Type  | Default |
+-------+--------+---------+
| trash | string | (none)  |
+-------+--------+---------+

  43.4. Functions

Table 6.36. Trash Functions

+-------------+-------------+-----------------+--------------------------------+
|    Menus    | Default Key |    Function     |          Description           |
+-------------+-------------+-----------------+--------------------------------+
|             |             |                 | really delete the current      |
| index,pager | (none)      | <purge-message> | entry, bypassing the trash     |
|             |             |                 | folder                         |
+-------------+-------------+-----------------+--------------------------------+

  43.5. neomuttrc

# Example NeoMutt config file for the 'trash' feature.

# This feature defines a new 'trash' folder.

# When mail is deleted it will be moved to this folder.

# Folder in which to put deleted emails
set trash='+Trash'
set trash='/home/flatcap/Mail/Trash'
# The default delete key 'd' will move an email to the 'trash' folder
# Bind 'D' to REALLY delete an email
bind index D purge-message
# Note: Deleting emails from the 'trash' folder will REALLY delete them.

# vim: syntax=neomuttrc

  43.6. See Also

  o folder-hook

  43.7. Known Bugs

None

  43.8. Credits

Cedric Duval, Benjamin Kuperman, Paul Miller, Richard Russon

44. Use Threads Feature

  Improve the experience with viewing threads in the index

  44.1. Support

Since: NeoMutt 2021-08-01

Dependencies: None

  44.2. Introduction

The "Use  Threads" feature  adds a  new config  variable to  allow more  precise
control of how threads are displayed in the index. Whether threads are in use is
now orthogonal from how messages are sorted.

  44.3. Functions

The "Use  Threads"  feature adds  no  new  functions to  NeoMutt.  The  existing
functions <sort-mailbox> and <sort-reverse> are  updated to toggle the state  of
$use_threads  once  it  has  been  set,  while  preserving  backwards-compatible
behavior on $sort if this feature is not used.

  44.4. Variables

The "Use Threads" feature adds one  new config variable, $use_threads, which  is
an enumeration of possible thread views. The variable defaults to unset for  the
original behavior of overloading $sort=threads to enable sorting. It can be  set
to flat (or no) for an unthreaded view based on $sort, to threads (or yes) for a
threaded view where roots  appear above children, or  to reverse for a  threaded
view where children appear above roots.

When sorting by threads,  the value of $sort  determines which thread floats  to
the top. If  $sort does  not contain  reverse-, the  latest thread  goes to  the
bottom for  use_threads=threads  and to  the  top for  use_threads=reverse;  the
direction of float  is swapped if  $sort also uses  reverse-. If $sort  includes
last-, the overall thread is sorted by  its descendant at any depth which  would
sort last in a flat view; otherwise, the overall thread is sorted solely by  the
thread root. The last- prefix is ignored when use_threads=flat.

Within a  single thread,  the value  of $sort_aux  determines how  siblings  are
sorted. The same prefixes apply as for $sort, although it is less common to  use
the last- prefix.

The  "Use  Threads"   feature  also  modifies   the  existing  config   variable
$status_format, adding the %T expando which shows the current threading method.

  44.5. Use Threads

Table 6.37. Use Threads

+-------------+------+---------+
|    Name     | Type | Default |
+-------------+------+---------+
| use_threads | enum | unset   |
+-------------+------+---------+

  44.6. neomuttrc

# Example NeoMutt config file for the use-threads feature.

# ------------------------------------------------------------
# Default configuration: flat view sorted by date
# selecting threads with <sort-mailbox> changes $sort
#set use_threads=unset sort=date sort_aux=date
# Modern configuration: explicit flat view sorted by date
# selecting threads with <sort-mailbox> changes $use_threads
set use_threads=no sort=date sort_aux=date
#   Anne     12:01  cover letter for thread 1
#   Anne     12:02  part 1 of thread 1
#   Anne     12:03  part 2 of thread 1
#   Anne     12:04  part 3 of thread 1
#   Barbara  12:05  thread 2
#   Claire   12:06  thread 3
#   Diane    12:07  re: part 2 of thread 1
#   Erica    12:08  re: thread 2

# ------------------------------------------------------------
# Legacy configuration: sorting threads by date started
#set sort=threads sort_aux=date
# Modern configuration for the same
# Latest root message sorts last
set use_threads=yes sort=date sort_aux=date
#   Anne     12:01  cover letter for thread 1
#   Anne     12:02  |->part 1 of thread 1
#   Anne     12:03  |->part 2 of thread 1
#   Diane    12:07  | `->re: part 2 of thread 1
#   Anne     12:04  `->part 3 of thread 1
#   Barbara  12:05  thread 2
#   Erica    12:08  `->re: thread 2
#   Claire   12:06  thread 3

# ------------------------------------------------------------
# Legacy configuration: display threads upside-down
#set sort=reverse-threads sort_aux=date
# Modern configuration for the same
# Latest root message sorts first
set use_threads=reverse sort=date sort_aux=date
#   Claire   12:06  thread 3
#   Erica    12:08  ,->re: thread 2
#   Barbara  12:05  thread 2
#   Anne     12:04  ,->part 3 of thread 1
#   Diane    12:07  | ,->re: part 2 of thread 1
#   Anne     12:03  |->part 2 of thread 1
#   Anne     12:02  |->part 1 of thread 1
#   Anne     12:01  cover letter for thread 1

# ------------------------------------------------------------
# Legacy configuration: recently active thread/subthread first
#set sort=threads sort_aux=reverse-last-date
# Modern configuration for the same
# Note that subthreads are also rearranged
set use_threads=threads sort=reverse-last-date sort_aux=reverse-last-date
#   Barbara  12:05  thread 2
#   Erica    12:08  `->re: thread 2
#   Anne     12:01  cover letter for thread 1
#   Anne     12:03  |->part 2 of thread 1
#   Diane    12:07  | `->re: part 2 of thread 1
#   Anne     12:04  |->part 3 of thread 1
#   Anne     12:02  `->part 1 of thread 1
#   Claire   12:06  thread 3

# ------------------------------------------------------------
# Modern configuration: threads keep date order, recently active thread last
# (not possible with legacy configuration)
set use_threads=threads sort=last-date sort_aux=date
#   Claire   12:06  thread 3
#   Anne     12:01  cover letter for thread 1
#   Anne     12:02  |->part 1 of thread 1
#   Anne     12:03  |->part 2 of thread 1
#   Diane    12:07  | `->re: part 2 of thread 1
#   Anne     12:04  `->part 3 of thread 1
#   Barbara  12:05  thread 2
#   Erica    12:08  `->re: thread 2

# vim: syntax=neomuttrc

  44.7. Known Bugs

Even though use_threads accepts the values yes and no, it does not behave like a
boolean or quad-option variable. A bare set use_threads performs a query  rather
than setting it to yes, and the variable is not usable with toggle.

  44.8. Credits

Eric Blake

45. Autocrypt

NeoMutt can be  compiled with Autocrypt  support by running  configure with  the
--autocrypt flag. Autocrypt  provides easy  to use,  passive protection  against
data collection. Keys are distributed via an Autocrypt: header added to  emails.
It does not protect against active adversaries, and so should not be  considered
a substitute for normal encryption via  your keyring, using key signing and  the
web of trust to verify identities.  With an understanding of these  limitations,
Autocrypt still provides an easy way  to minimize cleartext emails sent  between
common  correspondents,  without  having  to  explicitly  exchange  keys.   More
information can be found at https://autocrypt.org/.

  45.1. Requirements

Autocrypt requires support  for ECC  cryptography, and NeoMutt  by default  will
generate ECC keys.  Therefore GnuPG  2.1 or greater  is required.  Additionally,
NeoMutt's Autocrypt  implementation uses  GPGME and  requires at  least  version
1.8.0.

Account and peer  information is stored  in a sqlite3  database, and so  NeoMutt
must be configured with the --with-sqlite flag when autocrypt is enabled.

It is highly  recommended that  NeoMutt be  configured with  --idn2 (enabled  by
default) so that Autocrypt can properly deal with international domain names.

While NeoMutt uses GPGME for Autocrypt,  normal keyring operations can still  be
performed via classic mode (i.e. with $crypt_use_gpgme unset). However, to avoid
unnecessary prompts,  it  is  recommended  gpg not  be  configured  in  loopback
pinentry mode, and that $pgp_use_gpg_agent remain set (the default).

  45.2. First Run

To enable  Autocrypt,  set  $autocrypt,  and if  desired  change  the  value  of
$autocrypt_dir in your  muttrc. The first  time NeoMutt is  run after that,  you
will be  prompted  to create  $autocrypt_dir.  NeoMutt will  then  automatically
create an sqlite3 database and GPG  keyring in that directory. Note since  these
files should be considered private, NeoMutt will create this directory with mode
700. If you create the directory manually, you should do the same.

NeoMutt recommends  keeping the  $autocrypt_dir directory  set differently  from
your GnuPG keyring  directory (e.g. ~/.gnupg).  Keys are automatically  imported
into the keyring from  Autocrypt: headers. Compared to  standard "web of  trust"
keys, Autocrypt keys are somewhat ephemeral, and the autocrypt database is  used
to track when keys change  or fall out of use.  Having these keys mixed in  with
your normal  keyring  will  make it  more  difficult  to use  features  such  as
$crypt_opportunistic_encrypt and Autocrypt at the same time.

The $autocrypt_dir  variable is  not designed  to be  changed while  NeoMutt  is
running. The database is created (if necessary) and connected to during startup.
Changing the variable can result in a situation where NeoMutt is looking in  one
place for the database and a different  place for the GPG keyring, resulting  in
strange behavior.

Once the directory, keyring, and database are created, NeoMutt will ask  whether
you would like to  create an account.  In order to  use Autocrypt, each  sending
address needs an account. As a convenience you can create an account during  the
first run. If you would like to add additional accounts later, this can be  done
via the <autocrypt-acct-menu> function in the index, by default bound to A.

Account creation will  first ask you  for an  email address. Next,  it will  ask
whether you  want to  create a  new key  or select  an existing  key. (Note  key
selection takes place from  the $autocrypt_dir keyring,  which will normally  be
empty during first run). Finally, it will ask whether this address should prefer
encryption or not.  Autocrypt 1.1  allows automatically  enabling encryption  if
both sender and receiver have set "prefer encryption". Otherwise, you will  need
to manually enable autocrypt encryption in  the compose menu. For more  details,
see the compose menu section below.

After optionally creating an account, NeoMutt will prompt you to scan  mailboxes
for Autocrypt headers. This step occurs  because header cached messages are  not
re-scanned for Autocrypt  headers. Scanning  during this  step will  temporarily
disable the header  cache while opening  each mailbox.  If you wish  to do  this
manually later, you can simulate the  same thing by unsetting $header_cache  and
opening a mailbox.

A final technical note:  the first run process  takes place between reading  the
muttrc and opening the initial mailbox. Some muttrc files will push macros to be
run after opening the mailbox. To  prevent this from interfering with the  first
run prompts, NeoMutt disables all macros during the first run.

  45.3. Compose Menu

When enabled, Autocrypt will  add a line  to the compose  menu with two  fields:
Autocrypt: and Recommendation:.

The Autocrypt: field shows  whether the message will  be encrypted by  Autocrypt
when sent. It has two values: Encrypt and Off. Encrypt can be enabled using  the
<autocrypt-menu> function, by default bound to o.

The Recommendation:  field  shows the  output  of the  Autocrypt  recommendation
engine. This can have one of five values:

  o Off  means the  engine is  disabled. This  can happen  if the  From  address
    doesn't have  an autocrypt  account, or  if the  account has  been  manually
    disabled.

  o No means one  or more recipients  are missing an autocrypt  key, or the  key
    found is unusable (i.e. expired,  revoked, disabled, invalid, or not  usable
    for encryption.)

  o Discouraged means a key was found for every recipient, but the engine is not
    confident the message will be decryptable by the recipient. This can  happen
    if the key hasn't been used recently (compared to their last seen email).

    It can  also happen  if the  key  wasn't seen  first-hand from  the  sender.
    Autocrypt  has  a  feature   where  recipient  keys   can  be  included   in
    group-encrypted emails. This allows you to reply to a conversation where you
    don't have a key first-hand from one of the other recipients. However, those
    keys are not trusted as much as from first-hand emails, so the engine  warns
    you with a Discouraged status.

  o Available means a key was found for every recipient, and the engine believes
    all keys are recent and seen from the recipient first hand. However,  either
    you or one of the recipients chose not to specify "prefer encryption".

  o Yes is the same as Available, with the addition that you and all  recipients
    have specified  "prefer encryption".  This value  will automatically  enable
    encryption, unless  you have  manually switched  it off  or enabled  regular
    encryption or signing via the <pgp-menu>.

As mentioned above the <autocrypt-menu> function, by default bound to o, can  be
used to change the  Encrypt: field value. (e)ncrypt  will toggle encryption  on.
(c)lear will toggle  encryption off. If  either of these  are chosen, the  field
will remain in that state despite what the Recommendation: field shows.  Lastly,
(a)utomatic will set the value based on the recommendation engine's output.

Autocrypt encryption  defers  to normal  encryption  or signing.  Anything  that
enables normal encryption  or signing  will cause autocrypt  encryption to  turn
off. The only exception is when  replying to an autocrypt-encrypted email  (i.e.
an email decrypted from the  $autocrypt_dir keyring). Then, if  $autocrypt_reply
is  set,   autocrypt  mode   will  be   forced  on,   overriding  the   settings
$crypt_auto_sign, $crypt_auto_encrypt, $crypt_reply_encrypt,  $crypt_reply_sign,
$crypt_reply_sign_encrypted, and $crypt_opportunistic_encrypt.

When postponing a  message, autocrypt will  respect $postpone_encrypt, but  will
use  the  autocrypt  account  key  to  encrypt  the  message.  Be  sure  to  set
$postpone_encrypt to ensure postponed  messages marked for autocrypt  encryption
are encrypted.

  45.4. Account Management

The   Autocrypt   Account    Menu   is    available   from    the   index    via
<autocrypt-acct-menu>, by default bound to A. See Autocrypt Account Menu for the
list of functions and their default keybindings.

In this menu, you  can create new accounts,  delete accounts, toggle an  account
active/inactive, and toggle the "prefer encryption" flag for an account.

Deleting an account only removes the account  from the database. The GPG key  is
kept, to ensure you still have the ability to read past encrypted emails.

The Autocrypt 1.1  "Setup Message"  feature is not  available yet,  but will  be
added in the future.

  45.5. Alternative Key and Keyring Strategies

NeoMutt by default partitions Autocrypt from normal keyring  encryption/signing.
It does this by using a separate GPG keyring (in $autocrypt_dir) and creating  a
new ECC key in that keyring for accounts. There are good reasons for doing  this
by default. It keeps random keys found  inside email headers out of your  normal
keyring. ECC keys are compact and better suited for email headers. Autocrypt key
selection is completely different  from "web of trust"  key selection, based  on
last-seen rules as  opposed to  trust and validity.  It also  allows NeoMutt  to
distinguish Autocrypt encrypted  emails from regular  encrypted emails, and  set
the mode appropriately when replying to each type of email.

Still, some users may want to use an existing key from their normal keyring  for
Autocrypt too. There are two ways this can be accomplished. The recommended  way
is to  set $autocrypt_dir  to  your normal  keyring directory  (e.g.  ~/.gnupg).
During account creation, choosing "(s)elect existing GPG key" will then list and
allow selecting your existing key for the new account.

An alternative is to copy your key over to the Autocrypt keyring, but there is a
severe downside. NeoMutt  first tries  to decrypt messages  using the  Autocrypt
keyring, and  if that  fails tries  the normal  keyring second.  This means  all
encrypted emails to  that key will  be decrypted, and  have signatures  verified
from, the Autocrypt keyring. Keys signatures  and web of trust from your  normal
keyring will no longer show up in signatures when decrypting.

For that reason, if you want to use an existing key from your normal keyring, it
is recommended  to just  set $autocrypt_dir  to ~/.gnupg.  This allows  "web  of
trust" to show an appropriate signature message for verified messages. Autocrypt
header keys will be imported into your keyring, but if you don't want them mixed
you should strongly consider using a separate autocrypt key and keyring instead.

Both methods have a couple additional caveats:

  o Replying to an Autocrypt decrypted message by default forces Autocrypt  mode
    on. By sharing the same key, all replies will then start in Autocrypt  mode,
    even  if  a   message  wasn't  sent   by  one  of   your  Autocrypt   peers.
    $autocrypt_reply can  be unset  to allow  manual control  of the  mode  when
    replying.

  o When NeoMutt creates an account from  a GPG key, it exports the public  key,
    base64 encodes it, and stores that value in the sqlite3 database. The  value
    is then used in the Autocrypt header added to outgoing emails. The ECC  keys
    NeoMutt creates don't change, but if you use external keys that expire, when
    you resign to extend the expiration you will need to recreate the  Autocrypt
    account using the account menu. Otherwise the Autocrypt header will  contain
    the old expired exported keydata.

                       Chapter 7. Security Considerations

Table of Contents

1. Passwords

2. Temporary Files

3. Information Leaks

             3.1. Message-Id: headers

             3.2. mailto:-style Links

4. External Applications

First of all, NeoMutt contains no  security holes included by intention but  may
contain unknown security holes. As a  consequence, please run NeoMutt only  with
as few permissions  as possible.  Especially, do not  run NeoMutt  as the  super
user.

When configuring NeoMutt, there're  some points to note  about secure setups  so
please read this chapter carefully.

1. Passwords

Although NeoMutt can be  told the various passwords  for accounts, please  never
store passwords  in configuration  files.  Besides the  fact that  the  system's
operator can always read them, you could forget to mask it out when reporting  a
bug or asking for help via a mailing list. Even worse, your mail including  your
password could be  archived by  internet search  engines, mail-to-news  gateways
etc. It may already be too late before you notice your mistake.

2. Temporary Files

NeoMutt uses  many  temporary  files for  viewing  messages,  verifying  digital
signatures, etc. As long as being used,  these files are visible by other  users
and maybe even readable in case of misconfiguration. Also, a different  location
for these files may be desired which can be changed via the $tmp_dir variable.

3. Information Leaks

  3.1. Message-Id: headers

Since 2023-02-18 NeoMutt generates random Message-Id: headers, which do not leak
any information beyond their randomness.

  3.2. mailto:-style Links

As NeoMutt be can be set up to be the mail client to handle mailto: style  links
in websites, there're security considerations, too. Arbitrary header fields  can
be embedded in these links which could override existing header fields or attach
arbitrary files using the Attach: pseudoheader.  This may be problematic if  the
$edit-headers variable is unset, i.e. the user doesn't want to see header fields
while editing the message and doesn't pay enough attention to the compose menu's
listing of attachments.

For example, following a link like

mailto:joe@host?Attach=~/.gnupg/secring.gpg

will send out the user's private gnupg  keyring to joe@host if the user  doesn't
follow the information on screen carefully enough.

To prevent these issues, NeoMutt by default only accepts the Subject, Body,  Cc,
In-Reply-To, and References headers.  Allowed headers can  be adjusted with  the
mailto_allow and unmailto_allow commands.

4. External Applications

NeoMutt in many places has to  rely on external applications or for  convenience
supports mechanisms involving external applications.

One of these is  the mailcap mechanism  as defined by  RFC1524. Details about  a
secure use of the  mailcap mechanisms is  given in Section  3.2, "Secure Use  of
Mailcap".

Besides the mailcap mechanism, NeoMutt uses a number of other external utilities
for operation, for example to provide  crypto support, in backtick expansion  in
configuration files or format string  filters. The same security  considerations
apply for these as for tools involved via mailcap.

                         Chapter 8. Performance Tuning

Table of Contents

1. Reading and Writing Mailboxes

2. Reading Messages from Remote Folders

3. Searching and Limiting

1. Reading and Writing Mailboxes

NeoMutt's performance when reading mailboxes can be improved in two ways:

 1. For remote  folders (IMAP  and POP) as  well as  folders using  one-file-per
    message storage  (Maildir  and MH),  NeoMutt's  performance can  be  greatly
    improved using header caching. using a single database per folder.

 2. NeoMutt provides the $read_inc and $write_inc variables to specify at  which
    rate to update progress counters. If  these values are too low, NeoMutt  may
    spend more time on updating the progress counter than it spends on  actually
    reading/writing folders.

    For example, when opening a maildir folder with a few thousand messages, the
    default value  for $read_inc  may  be too  low.  It can  be  tuned on  on  a
    folder-basis using folder-hooks:

 # use very high $read_inc to speed up reading hcache'd maildirs
 folder-hook . 'set read_inc=1000'
 # use lower value for reading slower remote IMAP folders
 folder-hook ^imap 'set read_inc=100'
 # use even lower value for reading even slower remote POP folders
 folder-hook ^pop 'set read_inc=1'

These settings work  on a per-message  basis. However, as  messages may  greatly
differ in  size  and  certain  operations are  much  faster  than  others,  even
per-folder settings of  the increment  variables may  not be  desirable as  they
produce either too  few or too  much progress updates.  Thus, NeoMutt allows  to
limit the  number of  progress updates  per second  it'll actually  send to  the
terminal using the $time_inc variable.

2. Reading Messages from Remote Folders

Reading messages from remote folders such as IMAP an POP can be slow  especially
for large mailboxes since NeoMutt only caches a very limited number of  recently
viewed messages (usually 10) per session (so  that it will be gone for the  next
session.)

To improve performance and permanently cache whole messages and headers,  please
refer to body caching and header caching for details.

Additionally, it may be  worth trying some  of NeoMutt's experimental  features.
$imap_qresync (which requires  header caching)  can provide a  huge speed  boost
opening mailboxes  if  your  IMAP  server  supports  it.  $imap_deflate  enables
compression, which can also noticeably reduce download time for large  mailboxes
and messages.

3. Searching and Limiting

When searching  mailboxes  either via  a  search or  a  limit action,  for  some
patterns NeoMutt distinguishes between  regular expression and string  searches.
For regular expressions, patterns are prefixed with "~" and with "=" for  string
searches.

Even though a regular expression search is fast, it's several times slower  than
a pure  string search  which is  noticeable especially  on large  folders. As  a
consequence, a string  search should  be used  instead of  a regular  expression
search if the user already knows enough about the search pattern.

For example, when  limiting a  large folder  to all messages  sent to  or by  an
author, it's much faster to search for the initial part of an e-mail address via
=Luser@ instead of ~Luser@. This is especially true for searching message bodies
since a larger amount of input has to be searched.

As for regular  expressions, a lower  case string search  pattern makes  NeoMutt
perform a  case-insensitive search  except for  IMAP (because  for IMAP  NeoMutt
performs server-side searches which don't support case-insensitivity).

                              Chapter 9. Reference

Table of Contents

1. Command-Line Options

2. Configuration Commands

3. Configuration Variables

4. Functions

             4.1. Generic Menu

             4.2. Index Menu

             4.3. Pager Menu

             4.4. Alias Menu

             4.5. Query Menu

             4.6. Attachment Menu

             4.7. Compose Menu

             4.8. Postpone Menu

             4.9. Browser Menu

             4.10. Pgp Menu

             4.11. Smime Menu

             4.12. Editor Menu

             4.13. Autocrypt Account Menu

1. Command-Line Options

Running neomutt with no arguments will  make NeoMutt attempt to read your  spool
mailbox. However, it is  possible to read other  mailboxes and to send  messages
from the command line as well.

Table 9.1. Command line options

+-------------+----------------------------------------------------------------+
|   Option    |                          Description                           |
+-------------+----------------------------------------------------------------+
|             | Special argument forces NeoMutt to stop option parsing and     |
| --          | treat remaining arguments as addresses even if they start with |
|             | a dash                                                         |
+-------------+----------------------------------------------------------------+
| -A alias    | Print an expanded version of the given alias to stdout and     |
|             | exit                                                           |
+-------------+----------------------------------------------------------------+
|             | Attach one or more files to a message (must be the last        |
|             | option). Add any addresses after the '--' argument, e.g.:      |
| -a file     |                                                                |
|             |neomutt -a image.jpg -- address1                                |
|             |neomutt -a image.jpg *.png -- address1 address2                 |
+-------------+----------------------------------------------------------------+
| -b address  | Specify a blind carbon copy (Bcc) recipient                    |
+-------------+----------------------------------------------------------------+
|             | Enable cryptographic operations in the cases in which they're  |
| -C          | disabled by default. Those include batch mode, sending a       |
|             | postponed message, and resending a message.                    |
+-------------+----------------------------------------------------------------+
| -c address  | Specify a carbon copy (Cc) recipient                           |
+-------------+----------------------------------------------------------------+
| -D          | Dump all config variables as 'name=value' pairs to stdout      |
+-------------+----------------------------------------------------------------+
| -D -D (or   | Like -D, but only show the config that has changed             |
| -DD)        |                                                                |
+-------------+----------------------------------------------------------------+
| -D -O       | Like -D, but show one-liner documentation                      |
+-------------+----------------------------------------------------------------+
| -D -S       | Like -D, but hide the value of sensitive variables             |
+-------------+----------------------------------------------------------------+
|             | Log debugging output to a file (default is                     |
|             | "~/.neomuttdebug0"). The level can range from 1-5 and affects  |
| -d level    | verbosity (a value of 2 is recommended). Using this option     |
|             | along with -l is useful to log the early startup process       |
|             | (before reading any configuration and hence $debug_level and   |
|             | $debug_file)                                                   |
+-------------+----------------------------------------------------------------+
| -E          | Edit draft (-H) or include (-i) file during message            |
|             | composition                                                    |
+-------------+----------------------------------------------------------------+
| -e command  | Specify a command to be run after reading the config files     |
+-------------+----------------------------------------------------------------+
|             | Specify an alternative initialization file to read, see        |
| -F config   | section Location of Initialization Files for a list of regular |
|             | configuration files                                            |
+-------------+----------------------------------------------------------------+
| -f mailbox  | Specify a mailbox (as defined with mailboxes command) to load  |
+-------------+----------------------------------------------------------------+
| -G          | Start NeoMutt with a listing of subscribed newsgroups          |
+-------------+----------------------------------------------------------------+
| -g server   | Like -G, but start at specified news server                    |
+-------------+----------------------------------------------------------------+
| -H draft    | Specify a draft file with header and body for message          |
|             | composing                                                      |
+-------------+----------------------------------------------------------------+
| -h          | Print this help message and exit                               |
+-------------+----------------------------------------------------------------+
| -i include  | Specify an include file to be embedded in the body of a        |
|             | message                                                        |
+-------------+----------------------------------------------------------------+
|             | Specify a file for debugging output (default                   |
| -l file     | "~/.neomuttdebug0"). This overrules $debug_file setting and    |
|             | NeoMutt keeps up to five debug logs ({ file | $debug_file |    |
|             | ~/.neomuttdebug }[0-4]) before override the oldest file        |
+-------------+----------------------------------------------------------------+
|             | Specify a default mailbox format type for newly created        |
| -m type     | folders. The type is either MH, MMDF, Maildir or mbox          |
|             | (case-insensitive)                                             |
+-------------+----------------------------------------------------------------+
| -n          | Do not read the system-wide configuration file                 |
+-------------+----------------------------------------------------------------+
| -p          | Resume a prior postponed message, if any                       |
+-------------+----------------------------------------------------------------+
|             | Query a configuration variable and print its value to stdout   |
| -Q variable | (after the config has been read and any commands executed).    |
|             | Adding -O will display one-liner documentation.                |
+-------------+----------------------------------------------------------------+
| -R          | Open mailbox in read-only mode                                 |
+-------------+----------------------------------------------------------------+
| -s subject  | Specify a subject (must be enclosed in quotes if it has        |
|             | spaces)                                                        |
+-------------+----------------------------------------------------------------+
| -v          | Print the NeoMutt version and compile-time definitions and     |
|             | exit                                                           |
+-------------+----------------------------------------------------------------+
| -vv         | Print the NeoMutt license and copyright information and exit   |
+-------------+----------------------------------------------------------------+
| -y          | Start NeoMutt with a listing of all defined mailboxes          |
+-------------+----------------------------------------------------------------+
| -Z          | Open the first mailbox with new message or exit immediately    |
|             | with exit code 1 if none is found in all defined mailboxes     |
+-------------+----------------------------------------------------------------+
| -z          | Open the first or specified (-f) mailbox if it holds any       |
|             | message or exit immediately with exit code 1 otherwise         |
+-------------+----------------------------------------------------------------+

To read messages in a mailbox or exit immediately

neomutt [ -nz ] [ -F config ] [ -m type ] [ -f mailbox ]

To compose a new message

neomutt [ -Enx ] [ -F config ] [ -b address  ] [ -c address ] [ -H draft ] [  -i
include ] [ -s subject ] [ -a file [...] -- ] { address | mailto_url ...}

NeoMutt also supports a "batch" mode to send prepared messages. Simply  redirect
input from the file you wish to send. For example,

neomutt -s "data set for run #2" professor@bigschool.edu < ~/run2.dat

will send a message to <professor@bigschool.edu> with a subject of "data set for
run #2".  In  the  body  of  the  message will  be  the  contents  of  the  file
"~/run2.dat".

An include file passed  with -i will be  used as the body  of the message.  When
combined with  -E, the  include  file will  be  directly edited  during  message
composition. The file will be modified regardless of whether the message is sent
or aborted.

A draft file passed with -H will be used as the initial header and body for  the
message. Multipart messages can be used as  a draft file, and are processed  the
same in interactive and batch mode;  they are not passed through untouched.  For
example, encrypted draft  files will be  decrypted. When combined  with -E,  the
draft file will be updated to the final state of the message after  composition,
regardless of whether the message is sent, aborted, or even postponed. Note that
if the message is sent  encrypted or signed, the draft  file will be saved  that
way too.

All files passed with -a file will be attached as a MIME part to the message. To
attach a  single  or several  files,  use --  to  separate files  and  recipient
addresses:

neomutt -a image.png -- some@one.org

or

neomutt -a *.png -- some@one.org

  Note

The -a option must be last in the option list.

In addition to accepting a list of  email addresses, NeoMutt also accepts a  URL
with the mailto: schema as specified in RFC2368. This is useful when configuring
a web browser to launch NeoMutt when clicking on mailto links.

neomutt mailto:some@one.org?subject=test&cc=other@one.org

2. Configuration Commands

The following are the commands understood by NeoMutt:

  o account-hook regex command

  o alias [ -group name ...] key address [ , address ...]
    unalias [ -group name ...] { * | key ... }

  o alternates [ -group name ...] regex [ regex ...]
    unalternates [ -group name ...] { * | regex ... }

  o alternative_order mime-type [ /mime-subtype ] [ mime-type [ /mime-subtype  ]
    ...]
    unalternative_order { * | [ mime-type [ /mime-subtype ] ...]}

  o attachments { + | - } disposition mime-type [ mime-type ...]
    unattachments { + | - } disposition mime-type [ mime-type ...]
    attachments ?
    unattachments *

  o auto_view mime-type [ /mime-subtype ] [ mime-type [ /mime-subtype ] ...]
    unauto_view { * | [ mime-type [ /mime-subtype ] ...]}

  o bind map [ ,map ...] key function
    unbind { * | map [ ,map ...] } [ key ]

  o cd directory

  o charset-hook alias charset
    iconv-hook charset local-charset

  o color object [ attribute ...] foreground background
    color { header | body } [ attribute ...] foreground background regex
    color index [ attribute ...] foreground background [ pattern ]
    uncolor { index | header | body } { * | pattern ... }

  o crypt-hook regex keyid

  o exec function [ function ...]

  o fcc-save-hook pattern mailbox
    fcc-hook pattern mailbox
    save-hook pattern mailbox

  o folder-hook regex command

  o group [ -group name ...] { -rx regex ... | -addr address ... }
    ungroup [ -group name ...] { * | -rx regex ... | -addr address ... }

  o hdr_order header [ header ...]
    unhdr_order { * | header ... }

  o ifdef symbol "config-command [args...]"
    ifndef symbol "config-command [args...]"
    finish

  o ignore string [ string ...]
    unignore { * | string ... }

  o index-format-hook name [!]pattern format-string

  o lists [ -group name ...] regex [ regex ...]
    unlists [ -group name ...] { * | regex ... }
    subscribe [ -group name ...] regex [ regex ...]
    unsubscribe [ -group name ...] { * | regex ... }

  o macro menu [ ,menu ...] key sequence [ description ]
    unmacro { * | map [ ,map ...] } [ key ]

  o mailboxes mailbox [ mailbox ...]
    named-mailboxes description mailbox [ description mailbox ...]
    unmailboxes { * | mailbox ... }

  o mailto_allow { * | header-field ... }
    unmailto_allow { * | header-field ... }

  o mbox-hook [ -noregex ] regex mailbox

  o message-hook pattern command

  o mime_lookup mime-type [ /mime-subtype ] [ mime-type [ /mime-subtype ] ...]
    unmime_lookup { * | [ mime-type [ /mime-subtype ] ...]}

  o mono object attribute
    mono { header | body } attribute regex
    mono index-object attribute pattern
    unmono { index-object | header | body } { * | pattern ... }

  o my_hdr string
    unmy_hdr { * | field ... }

  o open-hook regex "shell-command"
    close-hook regex "shell-command"
    append-hook regex "shell-command"

  o push string

  o reply-hook pattern command
    send-hook pattern command
    send2-hook pattern command

  o score pattern value
    unscore { * | pattern ... }

  o set { [ no | inv | & | ? ] variable | variable=value } [...]
    unset variable [ variable ...]
    reset variable [ variable ...]
    toggle variable [ variable ...]

  o setenv { ?variable | variable value }
    unsetenv variable

  o sidebar_pin mailbox [ mailbox ...]
    sidebar_unpin { * | mailbox ... }

  o source filename

  o spam regex format
    nospam { * | regex }

  o subjectrx regex replacement
    unsubjectrx { * | regex }

  o subscribe-to imap-folder-uri
    unsubscribe-from imap-folder-uri

  o timeout-hook command
    startup-hook command
    shutdown-hook command

  o unhook { * | hook-type }

3. Configuration Variables

  3.1. abort_backspace

Type: boolean
Default: yes

If set, hitting backspace against an empty prompt aborts the prompt.

  3.2. abort_key

Type: string
Default: "007"

Specifies the key that can be used to  abort prompts. The format is the same  as
used in "bind" commands.  The default is equivalent  to "Ctrl-G". Note that  the
specified key should not be used in  other bindings, as the abort operation  has
higher precedence and the binding will not have the desired effect.

Example:

set abort_key = "<Esc>"

Please note that when using <Esc> as the abort key, you may also want to set the
environment variable ESCDELAY to  a low value  or even 0  which will reduce  the
time that ncurses waits to distinguish singular <Esc> key presses from the start
of a terminal escape  sequence. The default time  is 1000 milliseconds and  thus
quite noticeable.

  3.3. abort_noattach

Type: quadoption
Default: no

If set  to  yes,  when  composing messages  containing  the  regular  expression
specified by  $abort_noattach_regex and  no attachments  are given,  composition
will be aborted. If set to no, composing messages as such will never be aborted.

Example:

set abort_noattach_regex = "\\<attach(|ed|ments?)\\>"

  3.4. abort_noattach_regex

Type: regular expression
Default: "\<(attach|attached|attachments?)\>"

Specifies a regular  expression to  match against the  body of  the message,  to
determine if  an  attachment  was  mentioned but  mistakenly  forgotten.  If  it
matches, $abort_noattach will be consulted to determine if message sending  will
be aborted.

Like other regular expressions in NeoMutt,  the search is case sensitive if  the
pattern contains at least one upper case letter, and case insensitive otherwise.

  3.5. abort_nosubject

Type: quadoption
Default: ask-yes

If set to yes, when  composing messages and no subject  is given at the  subject
prompt, composition will be  aborted. If set to  no, composing messages with  no
subject given at the subject prompt will never be aborted.

  3.6. abort_unmodified

Type: quadoption
Default: yes

If set to yes,  composition will automatically abort  after editing the  message
body if no changes are made to the file (this check only happens after the first
edit of the file). When set to no, composition will never be aborted.

  3.7. account_command

Type: command
Default: (empty)

If set, this  command is used  to retrieve account  credentials. The command  is
invoked passing a  number of  --key value arguments  with the  specifics of  the
account to lookup. The command writes to standard output a number of key:  value
lines. Currently  supported arguments  are --hostname,  --username, and  --type,
where type can be any of imap,  imaps, pop, pops, smtp, smtps, nntp, and  nntps.
Currently supported output lines are login, username, and password.

  3.8. alias_file

Type: path
Default: "~/.neomuttrc"

The default  file  in  which  to save  aliases  created  by  the  <create-alias>
function. Entries added to this file are encoded in the character set  specified
by $config_charset if it is set or the current character set otherwise.

Note: NeoMutt will not automatically source  this file; you must explicitly  use
the "source" command  for it  to be  executed in case  this option  points to  a
dedicated alias file.

The  default  for  this  option  is  the  currently  used  neomuttrc  file,   or
"~/.neomuttrc" if no user neomuttrc was found.

  3.9. alias_format

Type: string
Default: "%3i %f%t %-15a %-56A | %C%> %Y"

Specifies the format of the data  displayed for the "alias" menu. The  following
printf(3)-style sequences are available:

+-----+-----------------------------------------------------------------+
| %a  | Alias name                                                      |
+-----+-----------------------------------------------------------------+
| %A  | Full Address (Name and Email)                                   |
+-----+-----------------------------------------------------------------+
| %C  | Comment                                                         |
+-----+-----------------------------------------------------------------+
| %E  | Email Address                                                   |
+-----+-----------------------------------------------------------------+
| %f  | Flags - currently, a "d" for an alias marked for deletion       |
+-----+-----------------------------------------------------------------+
| %i  | Index number                                                    |
+-----+-----------------------------------------------------------------+
| %N  | Real name                                                       |
+-----+-----------------------------------------------------------------+
| %t  | Alias is tagged (selected)                                      |
+-----+-----------------------------------------------------------------+
| %Y  | User-defined tags (labels)                                      |
+-----+-----------------------------------------------------------------+
| %>X | right justify the rest of the string and pad with character "X" |
+-----+-----------------------------------------------------------------+
| %|X | pad to the end of the line with character "X"                   |
+-----+-----------------------------------------------------------------+
| %*X | soft-fill with character "X" as pad                             |
+-----+-----------------------------------------------------------------+

For an explanation of "soft-fill", see the $index_format documentation.

The following sequences are deprecated; they will be removed in the future.

+----+----------------+
| %c | Use %C instead |
+----+----------------+
| %n | Use %i instead |
+----+----------------+
| %r | Use %A instead |
+----+----------------+

  3.10. alias_sort

Type: sort order
Default: alias

Specifies how the entries in the "alias" and "query" menus are sorted.

+----------+---------------------------------------+
| Value    | Sort by                               |
+----------+---------------------------------------+
| alias    | Alias short name                      |
+----------+---------------------------------------+
| email    | Email Address                         |
+----------+---------------------------------------+
| name     | Real Name                             |
+----------+---------------------------------------+
| unsorted | The order the Aliases were configured |
+----------+---------------------------------------+

+------------------+------------------+
| Deprecated Value | Use this instead |
+------------------+------------------+
| address          | email            |
+------------------+------------------+

Prefixing the value with reverse- sorts  the entries in reverse order, e.g.  set
alias_sort = "reverse-alias"

Note: This also affects the entries of the address query menu, thus  potentially
overruling the order of entries as generated by $query_command.

  3.11. allow_8bit

Type: boolean
Default: yes

Controls whether 8-bit data is converted to 7-bit using either Quoted- Printable
or Base64 encoding when sending mail.

  3.12. allow_ansi

Type: boolean
Default: no

Controls whether  ANSI color  codes in  messages (and  color tags  in rich  text
messages) are to be interpreted. Messages  containing these codes are rare,  but
if this option is set,  their text will be  colored accordingly. Note that  this
may override your color  choices, and even present  a security problem, since  a
message could include a line like

[-- PGP output follows ...

and give it the same color as your attachment color (see also $crypt_timestamp).

  3.13. arrow_cursor

Type: boolean
Default: no

When set, an arrow ("->")  will be used to indicate  the current entry in  menus
instead of highlighting the whole line. On slow network or modem links this will
make response faster because there is less that has to be redrawn on the  screen
when moving to the next or previous entries in the menu.

  3.14. arrow_string

Type: string
Default: "->"

Specifies the string of arrow_cursor when arrow_cursor enabled.

  3.15. ascii_chars

Type: boolean
Default: no

If set,  NeoMutt will  use plain  ASCII characters  when displaying  thread  and
attachment trees, instead of the default ACS characters.

  3.16. ask_bcc

Type: boolean
Default: no

If set, NeoMutt will  prompt you for  blind-carbon-copy (Bcc) recipients  before
editing an outgoing message.

  3.17. ask_cc

Type: boolean
Default: no

If set, NeoMutt will prompt you  for carbon-copy (Cc) recipients before  editing
the body of an outgoing message.

  3.18. ask_followup_to

Type: boolean
Default: no

If set, NeoMutt will prompt you for follow-up groups before editing the body  of
an outgoing message.

  3.19. ask_x_comment_to

Type: boolean
Default: no

If set, NeoMutt will prompt you  for x-comment-to field before editing the  body
of an outgoing message.

  3.20. assumed_charset

Type: string list
Default: (empty)

This variable  is  a colon-separated  list  of character  encoding  schemes  for
messages without character encoding indication. Header field values and  message
body content without character  encoding indication would  be assumed that  they
are written in one of this list.  By default, all the header fields and  message
body without any charset indication are assumed to be in "us-ascii".

For example, Japanese users might prefer this:

set assumed_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"

However, only the first content is valid for the message body.

  3.21. attach_charset

Type: string list
Default: (empty)

This variable is a colon-separated list  of character encoding schemes for  text
file attachments. NeoMutt uses this setting to guess which encoding files  being
attached are encoded  in to  convert them  to a  proper character  set given  in
$send_charset.

If unset, the value of $charset will be used instead. For example, the following
configuration would work for Japanese text handling:

set attach_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"

Note: for Japanese users, "iso-2022-*" must be  put at the head of the value  as
shown above if included.

  3.22. attach_format

Type: string
Default: "%u%D%I %t%4n %T%d %> [%.7m/%.10M, %.6e%<C?, %C>, %s] "

This variable  describes the  format  of the  "attachment" menu.  The  following
printf(3)-style sequences are understood:

+-----+------------------------------------------------------------------------+
| %C  | Charset                                                                |
+-----+------------------------------------------------------------------------+
| %c  | Requires charset conversion ("n" or "c")                               |
+-----+------------------------------------------------------------------------+
| %D  | Deleted flag                                                           |
+-----+------------------------------------------------------------------------+
| %d  | Description (if none, falls back to %F)                                |
+-----+------------------------------------------------------------------------+
| %e  | MIME content-transfer-encoding                                         |
+-----+------------------------------------------------------------------------+
| %f  | Filename                                                               |
+-----+------------------------------------------------------------------------+
| %F  | Filename in content-disposition header (if none, falls back to %f)     |
+-----+------------------------------------------------------------------------+
| %I  | Disposition ("I" for inline, "A" for attachment)                       |
+-----+------------------------------------------------------------------------+
| %m  | Major MIME type                                                        |
+-----+------------------------------------------------------------------------+
| %M  | MIME subtype                                                           |
+-----+------------------------------------------------------------------------+
| %n  | Attachment number                                                      |
+-----+------------------------------------------------------------------------+
| %Q  | "Q", if MIME part qualifies for attachment counting                    |
+-----+------------------------------------------------------------------------+
| %s  | Size (see formatstrings-size)                                          |
+-----+------------------------------------------------------------------------+
| %T  | Graphic tree characters                                                |
+-----+------------------------------------------------------------------------+
| %t  | Tagged flag                                                            |
+-----+------------------------------------------------------------------------+
| %u  | Unlink (=to delete) flag                                               |
+-----+------------------------------------------------------------------------+
| %X  | Number of qualifying MIME parts in this part and its children (please  |
|     | see the "attachments" section for possible speed effects)              |
+-----+------------------------------------------------------------------------+
| %>X | Right justify the rest of the string and pad with character "X"        |
+-----+------------------------------------------------------------------------+
| %|X | Pad to the end of the line with character "X"                          |
+-----+------------------------------------------------------------------------+
| %*X | Soft-fill with character "X" as pad                                    |
+-----+------------------------------------------------------------------------+

For an explanation of "soft-fill", see the $index_format documentation.

  3.23. attach_save_dir

Type: path
Default: "./"

The directory where attachments are saved.

  3.24. attach_save_without_prompting

Type: boolean
Default: no

This variable, when  set to  true, will  cause attachments  to be  saved to  the
'attach_save_dir' location without prompting the user for the filename.

  3.25. attach_sep

Type: string
Default: "\n"

The separator  to  add between  attachments  when operating  (saving,  printing,
piping, etc) on a list of tagged attachments.

  3.26. attach_split

Type: boolean
Default: yes

If this variable is unset, when  operating (saving, printing, piping, etc) on  a
list of tagged attachments,  NeoMutt will concatenate  the attachments and  will
operate on them as a single attachment. The $attach_sep separator is added after
each attachment. When set, NeoMutt will operate on the attachments one by one.

  3.27. attribution_intro

Type: string
Default: "On %d, %n wrote:"

This is the string that will precede a replied-to message which is quoted in the
main body of the reply (this is the case when $include is set).

For a  full listing  of  defined printf(3)-like  sequences  see the  section  on
$index_format. See also $attribution_locale.

  3.28. attribution_locale

Type: string
Default: (empty)

The locale used by strftime(3) to format dates in the attribution strings. Valid
values are the strings your system  accepts for the locale environment  variable
$LC_TIME.

This variable  is to  allow the  attribution  date format  to be  customized  by
recipient or  folder using  hooks.  By default,  NeoMutt  will use  your  locale
environment, so there is no need to set this except to override that default.

Affected    variables     are:     $attribution_intro,     $attribution_trailer,
$forward_attribution_intro, $forward_attribution_trailer, $indent_string.

  3.29. attribution_trailer

Type: string
Default: (empty)

Similar to the $attribution_intro  variable, this is the  string that will  come
after a replied-to message which is quoted  in the main body of the reply  (this
is the case when $include is set).

For a  full listing  of  defined printf(3)-like  sequences  see the  section  on
$index_format. See also $attribution_locale.

  3.30. auto_edit

Type: boolean
Default: no

When set  along with  $edit_headers,  NeoMutt will  skip the  initial  send-menu
(prompting for  subject  and recipients)  and  allow you  to  immediately  begin
editing the body of your message. The  send-menu may still be accessed once  you
have finished editing the body of your message.

Note: when this  option is  set, you  can't use  send-hooks that  depend on  the
recipients when composing  a new  (non-reply) message,  as the  initial list  of
recipients is empty.

Also see $fast_reply.

  3.31. auto_subscribe

Type: boolean
Default: no

When set, NeoMutt assumes the presence of a List-Post header means the recipient
is subscribed to the list.  Unless the mailing list  is in the "unsubscribe"  or
"unlist" lists, it will be added  to the "subscribe" list. Parsing and  checking
these things slows header reading down, so this option is disabled by default.

  3.32. auto_tag

Type: boolean
Default: no

When set, functions in the index menu which affect a message will be applied  to
all tagged messages  (if there  are any).  When unset,  you must  first use  the
<tag-prefix> function (bound to ";" by default) to make the next function  apply
to all tagged messages.

  3.33. autocrypt

Type: boolean
Default: no

When set, enables autocrypt, which  provides passive encryption protection  with
keys exchanged  via headers.  See "autocryptdoc"  for more  details.  (Autocrypt
only)

  3.34. autocrypt_acct_format

Type: string
Default: "%4n %-30a %20p %10s"

This variable  describes  the  format  of  the  "autocrypt  account"  menu.  The
following printf(3)-style sequences are understood

+-----+-----------------------------------------------------------------+
| %a  | email address                                                   |
+-----+-----------------------------------------------------------------+
| %k  | gpg keyid                                                       |
+-----+-----------------------------------------------------------------+
| %n  | current entry number                                            |
+-----+-----------------------------------------------------------------+
| %p  | prefer-encrypt flag                                             |
+-----+-----------------------------------------------------------------+
| %s  | status flag (active/inactive)                                   |
+-----+-----------------------------------------------------------------+
| %>X | right justify the rest of the string and pad with character "X" |
+-----+-----------------------------------------------------------------+
| %|X | pad to the end of the line with character "X"                   |
+-----+-----------------------------------------------------------------+
| %*X | soft-fill with character "X" as pad                             |
+-----+-----------------------------------------------------------------+

(Autocrypt only)

  3.35. autocrypt_dir

Type: path
Default: "~/.mutt/autocrypt"

This variable sets where autocrypt files  are stored, including the GPG  keyring
and SQLite database. See "autocryptdoc" for more details. (Autocrypt only)

  3.36. autocrypt_reply

Type: boolean
Default: yes

When set, replying to an autocrypt email automatically enables autocrypt in  the
reply. You may want to unset this if you're using the same key for autocrypt  as
normal web-of-trust,  so  that  autocrypt  isn't forced  on  for  all  encrypted
replies. (Autocrypt only)

  3.37. beep

Type: boolean
Default: yes

When this variable is set, NeoMutt will beep when an error occurs.

  3.38. beep_new

Type: boolean
Default: no

When this  variable is  set, NeoMutt  will  beep whenever  it prints  a  message
notifying you of  new mail.  This is  independent of  the setting  of the  $beep
variable.

  3.39. bounce

Type: quadoption
Default: ask-yes

Controls whether you will be asked to  confirm bouncing messages. If set to  yes
you don't get asked if you want to bounce a message. Setting this variable to no
is not generally  useful, and thus  not recommended, because  you are unable  to
bounce messages.

  3.40. bounce_delivered

Type: boolean
Default: yes

When this  variable  is set,  NeoMutt  will include  Delivered-To  headers  when
bouncing messages. Postfix users may wish to unset this variable.

  3.41. braille_friendly

Type: boolean
Default: no

When this variable is set, NeoMutt will place the cursor at the beginning of the
current line in menus, even when the $arrow_cursor variable is unset, making  it
easier for  blind persons  using Braille  displays to  follow these  menus.  The
option is unset by default because many visual terminals don't permit making the
cursor invisible.

  3.42. browser_abbreviate_mailboxes

Type: boolean
Default: yes

When this variable is set, NeoMutt will abbreviate mailbox names in the  browser
mailbox list, using '~' and '=' shortcuts.

The default "alpha"  setting of $browser_sort  uses locale-based sorting  (using
strcoll(3)), which ignores some  punctuation. This can  lead to some  situations
where the  order  doesn't  make intuitive  sense.  In  those cases,  it  may  be
desirable to unset this variable.

  3.43. browser_sort

Type: sort order
Default: alpha

Specifies how to sort entries in the file browser.

+----------+-----------------------+
| Value    | Sort by               |
+----------+-----------------------+
| alpha    | Name                  |
+----------+-----------------------+
| count    | Total message count   |
+----------+-----------------------+
| date     | Date                  |
+----------+-----------------------+
| desc     | Description           |
+----------+-----------------------+
| size     | Count of new messages |
+----------+-----------------------+
| new      | Size                  |
+----------+-----------------------+
| unsorted | Unsorted              |
+----------+-----------------------+

+------------------+------------------+
| Deprecated Value | Use this instead |
+------------------+------------------+
| unread           | new              |
+------------------+------------------+

Prefixing the value with reverse- sorts  the entries in reverse order, e.g.  set
browser_sort = "reverse-date"

  3.44. browser_sort_dirs_first

Type: boolean
Default: no

If this variable is set, the browser will group directories before files.

  3.45. catchup_newsgroup

Type: quadoption
Default: ask-yes

If this variable is  set, NeoMutt will  mark all articles  in newsgroup as  read
when you quit the newsgroup (catchup newsgroup).

  3.46. certificate_file

Type: path
Default: "~/.mutt_certificates"

This variable specifies  the file where  the certificates you  trust are  saved.
When an unknown certificate is  encountered, you are asked  if you accept it  or
not. If  you accept  it, the  certificate can  also be  saved in  this file  and
further connections are automatically accepted.

You can also manually add CA  certificates in this file. Any server  certificate
that is signed with one of these CA certificates is also automatically accepted.

Example:

set certificate_file=~/.neomutt/certificates

(OpenSSL and GnuTLS only)

  3.47. change_folder_next

Type: boolean
Default: no

When this variable is set, the <change-folder> function mailbox suggestion  will
start at the next folder  in your "mailboxes" list,  instead of starting at  the
first folder in the list.

  3.48. charset

Type: string
Default: (empty)

Character set your terminal uses to display  and enter textual data. It is  also
the fallback for $send_charset.

Upon startup NeoMutt tries to derive this value from environment variables  such
as $LC_CTYPE or $LANG.

Note: It  should  only be  set  in case  NeoMutt  isn't able  to  determine  the
character set used correctly.

  3.49. check_mbox_size

Type: boolean
Default: no

When this  variable is  set, NeoMutt  will use  file size  attribute instead  of
access time when checking for new mail in mbox and mmdf folders.

This variable is  unset by  default and  should only  be enabled  when new  mail
detection for these folder types is unreliable or doesn't work.

Note that enabling this variable should happen before any "mailboxes" directives
occur in  configuration files  regarding mbox  or mmdf  folders because  NeoMutt
needs to determine the initial new mail status of such a mailbox by performing a
fast mailbox scan when it is defined. Afterwards the new mail status is  tracked
by file size changes.

  3.50. check_new

Type: boolean
Default: yes

Note: this option only affects maildir and MH style mailboxes.

When set, NeoMutt will check for new  mail delivered while the mailbox is  open.
Especially with MH mailboxes, this operation  can take quite some time since  it
involves scanning the directory and checking each file to see if it has  already
been looked at. If this  variable is unset, no check  for new mail is  performed
while the mailbox is open.

  3.51. collapse_all

Type: boolean
Default: no

When set, NeoMutt will collapse all threads when entering a folder.

  3.52. collapse_flagged

Type: boolean
Default: yes

When unset,  NeoMutt will  not collapse  a  thread if  it contains  any  flagged
messages.

  3.53. collapse_unread

Type: boolean
Default: yes

When unset,  NeoMutt  will not  collapse  a thread  if  it contains  any  unread
messages.

  3.54. color_directcolor

Type: boolean
Default: no

When set,  NeoMutt  will  use  and  allow  24-bit  colours  (aka  truecolor  aka
directcolor). For colours to work properly support from the terminal is required
as well as a  properly set TERM environment  variable advertising the  terminals
directcolor capability, e.g. "TERM=xterm-direct".

NeoMutt tries to detect whether the terminal supports 24-bit colours and enables
this variable if it does.  If this fails for some  reason, you can force  24-bit
colours by setting this variable manually. You  may also try to force a  certain
TERM environment variable by starting NeoMutt  from a terminal as follows  (this
results in wrong colours if the terminal does not implement directcolors):

TERM=xterm-direct neomutt

Note: This variable must be set before using any `color` commands.

  3.55. compose_confirm_detach_first

Type: boolean
Default: yes

When set, NeoMutt will prompt for confirmation when trying to use  <detach-file>
on the first entry  in the compose  menu. This is  to help prevent  irreversible
loss of the typed message by accidentally hitting 'D' in the menu.

Note: NeoMutt only prompts for the first  entry. It doesn't keep track of  which
message is the typed message if the entries are reordered, or if the first entry
was already deleted.

  3.56. compose_format

Type: string
Default: "-- NeoMutt: Compose  [Approx. msg size: %l   Atts: %a]%>-"

Controls the format  of the status  line displayed in  the "compose" menu.  This
string is  similar to  $status_format, but  has its  own set  of  printf(3)-like
sequences:

+-----+------------------------------------------------------------------------+
| %a  | Total number of attachments                                            |
+-----+------------------------------------------------------------------------+
| %h  | Local hostname                                                         |
+-----+------------------------------------------------------------------------+
| %l  | Approximate size (in bytes) of the current message (see                |
|     | formatstrings-size)                                                    |
+-----+------------------------------------------------------------------------+
| %v  | NeoMutt version string                                                 |
+-----+------------------------------------------------------------------------+
| %>X | right justify the rest of the string and pad with character "X"        |
+-----+------------------------------------------------------------------------+
| %|X | pad to the end of the line with character "X"                          |
+-----+------------------------------------------------------------------------+
| %*X | soft-fill with character "X" as pad                                    |
+-----+------------------------------------------------------------------------+

See the text describing the $status_format option for more information on how to
set $compose_format.

  3.57. compose_preview_min_rows

Type: number
Default: 5

This variable specifies the minimum number of rows that have to be available for
the message preview window to shown.

  3.58. compose_preview_above_attachments

Type: boolean
Default: no

Show the message  preview above  the attachments list.  By default  it is  shown
below it.

  3.59. compose_show_preview

Type: boolean
Default: yes

When set, NeoMutt will display a preview of message in the compose view.

  3.60. compose_show_user_headers

Type: boolean
Default: yes

When set, NeoMutt  will display  user-defined headers  (set via  my_hdr or  from
editing with edit-headers).

  3.61. config_charset

Type: string
Default: (empty)

When defined, NeoMutt will recode commands in rc files from this encoding to the
current  character  set  as  specified  by  $charset  and  aliases  written   to
$alias_file from the current character set.

Please  note  that  if  setting  $charset   it  must  be  done  before   setting
$config_charset.

Recoding should be avoided as it may render unconvertible characters as question
marks which  can  lead  to  undesired  side  effects  (for  example  in  regular
expressions).

  3.62. confirm_append

Type: boolean
Default: yes

When set, NeoMutt  will prompt for  confirmation when appending  messages to  an
existing mailbox.

  3.63. confirm_create

Type: boolean
Default: yes

When set, NeoMutt will prompt for confirmation when saving messages to a mailbox
which does not yet exist before creating it.

  3.64. confirm_empty_to

Type: boolean
Default: no

When set, NeoMutt will  prompt for confirmation when  sending an e-mail with  an
empty To recipients list.

  3.65. content_type

Type: string
Default: "text/plain"

Sets the default Content-Type for the body of newly composed messages.

  3.66. copy

Type: quadoption
Default: yes

This variable controls whether or not  copies of your outgoing messages will  be
saved for  later  references.  Also see  $record,  $save_name,  $force_name  and
"fcc-hook".

  3.67. copy_decode_weed

Type: boolean
Default: no

Controls whether NeoMutt will  weed headers when  invoking the <decode-copy>  or
<decode-save> functions.

  3.68. count_alternatives

Type: boolean
Default: no

When set, NeoMutt  will recurse inside  multipart/alternatives while  performing
attachment searching and counting(see attachments).

Traditionally, multipart/alternative  parts  have simply  represented  different
encodings of the  main content of  the email. Unfortunately,  some mail  clients
have started to place email attachments inside one of alternatives. Setting this
will allow NeoMutt  to find  and count  matching attachments  hidden there,  and
include them in the index via %X or through ~X pattern matching.

  3.69. crypt_auto_encrypt

Type: boolean
Default: no

Setting this  variable will  cause  NeoMutt to  always  attempt to  PGP  encrypt
outgoing messages. This is probably only useful in connection to the "send-hook"
command. It can be  overridden by use  of the pgp menu,  when encryption is  not
required or signing  is requested  as well.  If $smime_is_default  is set,  then
OpenSSL is used instead to create S/MIME messages and settings can be overridden
by use of the smime menu instead. (Crypto only)

  3.70. crypt_auto_pgp

Type: boolean
Default: yes

This variable  controls whether  or  not NeoMutt  may automatically  enable  PGP
encryption/signing    for     messages.    See     also     $crypt_auto_encrypt,
$crypt_reply_encrypt, $crypt_auto_sign, $crypt_reply_sign and $smime_is_default.

  3.71. crypt_auto_sign

Type: boolean
Default: no

Setting this variable will cause NeoMutt to always attempt to  cryptographically
sign outgoing messages.  This can be  overridden by  use of the  pgp menu,  when
signing is not required or encryption is requested as well. If $smime_is_default
is set, then OpenSSL is used instead to create S/MIME messages and settings  can
be overridden by use of the smime menu instead of the pgp menu. (Crypto only)

  3.72. crypt_auto_smime

Type: boolean
Default: yes

This variable controls whether  or not NeoMutt  may automatically enable  S/MIME
encryption/signing    for     messages.    See     also     $crypt_auto_encrypt,
$crypt_reply_encrypt, $crypt_auto_sign, $crypt_reply_sign and $smime_is_default.

  3.73. crypt_chars

Type: character string
Default: "SPsK "

Controls the characters used in cryptography flags.

+-----------+---------+--------------------------------------------------------+
| Character | Default | Description                                            |
+-----------+---------+--------------------------------------------------------+
| 1         | S       | The mail is signed, and the signature is successfully  |
|           |         | verified.                                              |
+-----------+---------+--------------------------------------------------------+
| 2         | P       | The mail is PGP encrypted.                             |
+-----------+---------+--------------------------------------------------------+
| 3         | s       | The mail is signed.                                    |
+-----------+---------+--------------------------------------------------------+
| 4         | K       | The mail contains a PGP public key.                    |
+-----------+---------+--------------------------------------------------------+
| 5         | <space> | The mail has no crypto info.                           |
+-----------+---------+--------------------------------------------------------+

  3.74. crypt_confirm_hook

Type: boolean
Default: yes

If set,  then you  will be  prompted for  confirmation of  keys when  using  the
crypt-hook command. If  unset, no  such confirmation prompt  will be  presented.
This is generally considered unsafe, especially where typos are concerned.

  3.75. crypt_opportunistic_encrypt

Type: boolean
Default: no

Setting this variable  will cause  NeoMutt to automatically  enable and  disable
encryption, based  on whether  all  message recipient  keys  can be  located  by
NeoMutt.

When this option is  enabled, NeoMutt will  enable/disable encryption each  time
the TO, CC, and BCC lists are edited. If $edit_headers is set, NeoMutt will also
do so each time the message is edited.

While this is  set, encryption can't  be manually enabled/disabled.  The pgp  or
smime menus  provide a  selection to  temporarily disable  this option  for  the
current message.

If $crypt_auto_encrypt or $crypt_reply_encrypt enable encryption for a  message,
this option will be disabled for that message. It can be manually re-enabled  in
the pgp or smime menus. (Crypto only)

  3.76. crypt_opportunistic_encrypt_strong_keys

Type: boolean
Default: no

When set, this  modifies the  behavior of  $crypt_opportunistic_encrypt to  only
search for "strong  keys", that  is, keys with  full validity  according to  the
web-of-trust algorithm.  A key  with marginal  or no  validity will  not  enable
opportunistic encryption.

For S/MIME, the behavior depends on the backend. Classic S/MIME will filter  for
certificates with the 't'(trusted)  flag in the .index  file. The GPGME  backend
will use the  same filters as  with OpenPGP,  and depends on  GPGME's logic  for
assigning the GPGME_VALIDITY_FULL and GPGME_VALIDITY_ULTIMATE validity flag.

  3.77. crypt_protected_headers_read

Type: boolean
Default: yes

When set, NeoMutt will display protected  headers ("Memory Hole") in the  pager,
When set, NeoMutt will display protected  headers in the pager, and will  update
the index and header cache with revised headers.

Protected headers are stored inside the encrypted or signed part of an email, to
prevent    disclosure    or    tampering.     For    more    information     see
https://github.com/autocrypt/protected-headers Currently  NeoMutt only  supports
the Subject header.

Encrypted messages using protected headers often substitute the exposed  Subject
header with a dummy  value (see $crypt_protected_headers_subject). NeoMutt  will
update its concept of the correct subject after the message is opened, i.e.  via
the <display-message> function.  If you reply  to a message  before opening  it,
NeoMutt will end up using  the dummy Subject header, so  be sure to open such  a
message first. (Crypto only)

  3.78. crypt_protected_headers_save

Type: boolean
Default: no

When $crypt_protected_headers_read  is  set,  and a  message  with  a  protected
Subject is opened, NeoMutt will save  the updated Subject into the header  cache
by default. This allows searching/limiting based on the protected Subject header
if the mailbox is  re-opened, without having to  re-open the message each  time.
However, for mbox/mh  mailbox types, or  if header  caching is not  set up,  you
would need to re-open the message each time the mailbox was reopened before  you
could see or search/limit on the protected subject again.

When this variable is set, NeoMutt additionally saves the protected Subject back
in the clear-text message headers. This provides better usability, but with  the
tradeoff of  reduced security.  The  protected Subject  header, which  may  have
previously been encrypted, is now stored  in clear-text in the message  headers.
Copying the message elsewhere, via NeoMutt or external tools, could expose  this
previously encrypted data. Please make  sure you understand the consequences  of
this before you enable this variable. (Crypto only)

  3.79. crypt_protected_headers_subject

Type: string
Default: "..."

When $crypt_protected_headers_write  is  set,  and the  message  is  marked  for
encryption, this  will be  substituted into  the Subject  field in  the  message
headers.

To prevent a subject from being substituted,  unset this variable, or set it  to
the empty string. (Crypto only)

  3.80. crypt_protected_headers_weed

Type: boolean
Default: no

Controls whether NeoMutt will weed protected header fields. (Crypto only)

  3.81. crypt_protected_headers_write

Type: boolean
Default: yes

When set,  NeoMutt will  generate  protected headers  for signed  and  encrypted
emails.

Protected headers are stored inside the encrypted or signed part of an email, to
prevent    disclosure    or    tampering.     For    more    information     see
https://github.com/autocrypt/protected-headers

Currently NeoMutt only supports the Subject header. (Crypto only)

  3.82. crypt_reply_encrypt

Type: boolean
Default: yes

If set,  automatically PGP  or OpenSSL  encrypt replies  to messages  which  are
encrypted. (Crypto only)

  3.83. crypt_reply_sign

Type: boolean
Default: no

If set, automatically PGP or OpenSSL sign replies to messages which are signed.

Note: this does  not work  on messages that  are encrypted  and signed!  (Crypto
only)

  3.84. crypt_reply_sign_encrypted

Type: boolean
Default: no

If set,  automatically  PGP  or  OpenSSL sign  replies  to  messages  which  are
encrypted. This makes sense in combination with $crypt_reply_encrypt, because it
allows you to sign  all messages which are  automatically encrypted. This  works
around the problem noted in $crypt_reply_sign, that NeoMutt is not able to  find
out whether an encrypted message is also signed. (Crypto only)

  3.85. crypt_encryption_info

Type: boolean
Default: yes

If set, NeoMutt will include an informative block before an encrypted part, with
details about the encryption. (Crypto only)

  3.86. crypt_timestamp

Type: boolean
Default: yes

If set, NeoMutt will include a time stamp in the lines surrounding PGP or S/MIME
output, so spoofing such  lines is more  difficult. If you  are using colors  to
mark these lines, and rely on these, you may unset this setting. (Crypto only)

  3.87. crypt_use_gpgme

Type: boolean
Default: yes

This variable controls the  use of the GPGME-enabled  crypto backends. If it  is
set and NeoMutt was built with GPGME support, the gpgme code for S/MIME and  PGP
will be used instead of the classic code. Note that you need to set this  option
in .neomuttrc; it won't have any effect when used interactively.

Note  that  the  GPGME  backend  does  not  support  creating  old-style  inline
(traditional) PGP encrypted or signed messages (see $pgp_auto_inline).

  3.88. crypt_use_pka

Type: boolean
Default: no

Controls         whether         NeoMutt          uses         PKA          (see
http://www.g10code.de/docs/pka-intro.de.pdf) during signature verification (only
supported by the GPGME backend).

  3.89. crypt_verify_sig

Type: quadoption
Default: yes

If "yes", always  attempt to verify  PGP or S/MIME  signatures. If "ask-*",  ask
whether or  not  to verify  the  signature. If  "no",  never attempt  to  verify
cryptographic signatures. (Crypto only)

  3.90. date_format

Type: string
Default: "!%a, %b %d, %Y at %I:%M:%S%p %Z"

Instead of using $date_format it is  encouraged to use "%[fmt]" directly in  the
corresponding format strings,  where "fmt"  is the value  of $date_format.  This
allows for a more fine grained control of the different menu needs.

This variable controls the format  of the date printed  by the "%d" sequence  in
$index_format. This is passed to the  strftime(3) function to process the  date,
see the man page for the proper syntax.

Unless the first character in the string is a bang ("!"), the month and week day
names are expanded according to the locale. If the first character in the string
is a bang, the bang is discarded, and  the month and week day names in the  rest
of the string are expanded in the C locale (that is in US English).

Format strings using this variable are:

UI: $folder_format, $index_format, $mailbox_folder_format, $message_format

Composing:            $attribution_intro,            $forward_attribution_intro,
$forward_attribution_trailer, $forward_format, $indent_string.

  3.91. debug_file

Type: path
Default: "~/.neomuttdebug"

Debug logging  is  controlled by  the  variables $debug_file  and  $debug_level.
$debug_file specifies the root of the filename. NeoMutt will add "0" to the end.
Each time NeoMutt  is run with  logging enabled,  the log files  are rotated.  A
maximum of five log files are kept, numbered 0 (most recent) to 4 (oldest).

This option can be enabled on the command line, "neomutt -l mylog"

See also: $debug_level

  3.92. debug_level

Type: number
Default: 0

Debug logging is controlled by the variables $debug_file and $debug_level.

The debug level controls how much information  is saved to the log file. If  you
have a problem  with NeoMutt,  then enabling logging  may help  find the  cause.
Levels 1-3 will  usually provide enough  information for writing  a bug  report.
Levels 4,5 will be extremely verbose.

Warning: Logging at high levels may save private information to the file.

This option can be enabled on the command line, "neomutt -d 2"

See also: $debug_file

  3.93. default_hook

Type: string
Default: "~f %s !~P | (~P ~C %s)"

This variable controls  how some  hooks are interpreted  if their  pattern is  a
plain string or a regex. i.e. they don't contain a pattern, like ~f

The  hooks  are:   fcc-hook,  fcc-save-hook,  index-format-hook,   message-hook,
reply-hook, save-hook, send-hook and send2-hook.

The hooks are expanded  when they are  declared, so a  hook will be  interpreted
according to the value of this variable at the time the hook is declared.

The default value  matches if the  message is  either from a  user matching  the
regular expression given,  or if it  is from  you (if the  from address  matches
"alternates") and  is  to  or  cc'ed  to  a  user  matching  the  given  regular
expression.

  3.94. delete

Type: quadoption
Default: ask-yes

Controls  whether  or  not   messages  are  really   deleted  when  closing   or
synchronizing a  mailbox. If  set  to yes,  messages  marked for  deleting  will
automatically be purged  without prompting. If  set to no,  messages marked  for
deletion will be kept in the mailbox.

  3.95. delete_untag

Type: boolean
Default: yes

If this  option  is set,  NeoMutt  will untag  messages  when marking  them  for
deletion. This applies when you either explicitly delete a message, or when  you
save it to another folder.

  3.96. devel_security

Type: boolean
Default: no

If this option is  set, NeoMutt will enable  the Security development  features.
See: https://github.com/neomutt/neomutt/discussions/4251

  3.97. digest_collapse

Type: boolean
Default: yes

If this option  is set, NeoMutt's  received-attachments menu will  not show  the
subparts of individual messages  in a multipart/digest.  To see these  subparts,
press "v" on that menu.

  3.98. display_filter

Type: command
Default: (empty)

When set, specifies a command used to filter messages. When a message is  viewed
it is passed as standard input  to $display_filter, and the filtered message  is
read from the standard output.

When preparing the message, NeoMutt inserts some escape sequences into the text.
They are of the form: <esc>]9;XXX<bel> where "XXX" is a random 64-bit number.

If these escape sequences interfere with your filter, they can be removed  using
a tool like ansifilter or sed 's/^\x1b]9;[0-9]\+\x7//'

If they are removed, then PGP and MIME headers will no longer be coloured.  This
can be fixed by adding this to your config: color body magenta default '^\[-- .*
--\]$'.

  3.99. dsn_notify

Type: string
Default: (empty)

This variable sets  the request for  when notification is  returned. The  string
consists of a comma separated list (no spaces!) of one or more of the following:
never, to  never  request  notification, failure,  to  request  notification  on
transmission failure, delay, to  be notified of message  delays, success, to  be
notified of successful transmission.

Example:

set dsn_notify="failure,delay"

Note: when using $sendmail for delivery,  you should not enable this unless  you
are  either   using  Sendmail   8.8.x  or   greater  or   a  MTA   providing   a
sendmail(1)-compatible interface  supporting the  -N option  for DSN.  For  SMTP
delivery, DSN support is auto-detected so that it depends on the server  whether
DSN will be used or not.

  3.100. dsn_return

Type: string
Default: (empty)

This variable controls how much of your message is returned in DSN messages.  It
may be set to either hdrs to return  just the message header, or full to  return
the full message.

Example:

set dsn_return=hdrs

Note: when using $sendmail for delivery,  you should not enable this unless  you
are  either   using  Sendmail   8.8.x  or   greater  or   a  MTA   providing   a
sendmail(1)-compatible interface  supporting the  -R option  for DSN.  For  SMTP
delivery, DSN support is auto-detected so that it depends on the server  whether
DSN will be used or not.

  3.101. duplicate_threads

Type: boolean
Default: yes

This variable controls whether  NeoMutt, when $sort is  set to threads,  threads
messages with the same Message-Id together. If it is set, it will indicate  that
it thinks they are duplicates  of each other with an  equals sign in the  thread
tree.

  3.102. edit_headers

Type: boolean
Default: no

This option allows you to edit the  header of your outgoing messages along  with
the body of your message.

Although the compose menu may have localized header labels, the labels passed to
your editor will be standard RFC2822 headers, (e.g. To:, Cc:, Subject:). Headers
added in your editor must also be RFC2822 headers, or one of the pseudo  headers
listed in "edit-header".  NeoMutt will not  understand localized header  labels,
just as it would not when parsing an actual email.

Note that changes  made to  the References: and  Date: headers  are ignored  for
interoperability reasons.

  3.103. editor

Type: command
Default: (empty)

This variable specifies  which editor  is used by  NeoMutt. It  defaults to  the
value of the $VISUAL, or $EDITOR, environment variable, or to the string "vi" if
neither of those are set.

The $editor string may contain a %s  escape, which will be replaced by the  name
of the file to be edited. If the  %s escape does not appear in $editor, a  space
and the name to be edited are appended.

The resulting string is then executed by running

sh -c 'string'

where string is the expansion of $editor described above.

  3.104. empty_subject

Type: string
Default: "Re: your mail"

This variable specifies the subject to be used when replying to an email with an
empty subject. It defaults to "Re: your mail".

  3.105. encode_from

Type: boolean
Default: no

When set, NeoMutt will  quoted-printable encode messages  when they contain  the
string "From " (note  the trailing space)  in the beginning of  a line. This  is
useful to avoid the tampering certain mail delivery and transport agents tend to
do with messages (in order to prevent  tools from misinterpreting the line as  a
mbox message separator).

  3.106. envelope_from_address

Type: e-mail address
Default: (empty)

Manually sets the envelope sender for  outgoing messages. This value is  ignored
if $use_envelope_from is unset.

  3.107. external_search_command

Type: command
Default: (empty)

If set, contains the name  of the external program  used by "~I" patterns.  This
will usually be a  wrapper script around mairix,  mu, or similar indexers  other
than notmuch (for which there is optional special support).

Here is an example how it works. Let's assume $external_search_command is set to
"mairix_filter", and mairix_filter is a script which runs the old but well loved
mairix indexer with the arguments given  to mairix_filter, in the "raw" mode  of
mairix, producing on the standard output a list of Message-IDs, one per line.

If possible, it also filters down the results coming from mairix such that  only
messages in the current folder remain. It  can do this because it gets a  hidden
first argument which is the path to the  folder. (This can be the type of  clean
and simple script called a one-liner.)

Now if NeoMutt  gets a  limit or  tag command followed  by the  pattern "~I  '-t
s:bleeping='", mairix_filter  runs mairix  with the  arguments from  inside  the
quotes (the quotes are needed because of the space after "-t"), mairix finds all
messages with "bleeping" in the Subject  plus all messages sharing threads  with
these and outputs their file names, and mairix_filter translates the file  names
into Message-IDs.  Finally,  NeoMutt  reads  the  Message-IDs  and  targets  the
matching messages with the command given to it.

You, the  user, still  have to  rewrite the  mairix_filter script  to match  the
behavior of your  indexer, but  this should help  users of  indexers other  than
notmuch to integrate them cleanly with NeoMutt.

  3.108. fast_reply

Type: boolean
Default: no

When set,  the initial  prompt for  recipients  (to, cc,  bcc) and  subject  are
skipped when the relevant information  is already provided. These cases  include
replying to  messages  and passing  the  relevant command  line  arguments.  The
initial prompt for recipients  is also skipped when  composing a new message  to
the current message sender, while the initial prompt for subject is also skipped
when forwarding messages.

Note: this variable has no effect when the $auto_edit variable is set.

See also: $auto_edit, $edit_headers, $ask_cc, $ask_bcc

  3.109. fcc_attach

Type: quadoption
Default: yes

This variable controls whether or not attachments on outgoing messages are saved
along with the main body of your message.

Note: $fcc_before_send forces the default (set) behavior of this option.

  3.110. fcc_before_send

Type: boolean
Default: no

When this variable is  set, FCCs will occur  before sending the message.  Before
sending, the message cannot be manipulated, so it will be stored the exact  same
as sent:  $fcc_attach  and  $fcc_clear  will be  ignored  (using  their  default
values).

When unset, the default,  FCCs will occur  after sending. Variables  $fcc_attach
and $fcc_clear will be respected, allowing  it to be stored without  attachments
or encryption/signing if desired.

  3.111. fcc_clear

Type: boolean
Default: no

When this variable is  set, FCCs will be  stored unencrypted and unsigned,  even
when the actual message is encrypted and/or signed.

Note: $fcc_before_send forces the default (unset) behavior of this option.  (PGP
only)

See also $pgp_self_encrypt, $smime_self_encrypt

  3.112. flag_chars

Type: character string
Default: "*!DdrONon- "

Controls the characters used in several flags.

+-----------+---------+-----------------------------------------------+
| Character | Default | Description                                   |
+-----------+---------+-----------------------------------------------+
| 1         | *       | The mail is tagged.                           |
+-----------+---------+-----------------------------------------------+
| 2         | !       | The mail is flagged as important.             |
+-----------+---------+-----------------------------------------------+
| 3         | D       | The mail is marked for deletion.              |
+-----------+---------+-----------------------------------------------+
| 4         | d       | The mail has attachments marked for deletion. |
+-----------+---------+-----------------------------------------------+
| 5         | r       | The mail has been replied to.                 |
+-----------+---------+-----------------------------------------------+
| 6         | O       | The mail is Old (Unread but seen).            |
+-----------+---------+-----------------------------------------------+
| 7         | N       | The mail is New (Unread but not seen).        |
+-----------+---------+-----------------------------------------------+
| 8         | o       | The mail thread is Old (Unread but seen).     |
+-----------+---------+-----------------------------------------------+
| 9         | n       | The mail thread is New (Unread but not seen). |
+-----------+---------+-----------------------------------------------+
| 10        | -       | The mail is read - %S expando.                |
+-----------+---------+-----------------------------------------------+
| 11        | <space> | The mail is read - %Z expando.                |
+-----------+---------+-----------------------------------------------+

  3.113. flag_safe

Type: boolean
Default: no

If set, flagged messages can't be deleted.

  3.114. folder

Type: mailbox
Default: "~/Mail"

Specifies the default location of your mailboxes. A "+" or "=" at the  beginning
of a pathname will be expanded to the  value of this variable. Note that if  you
change this variable (from  the default) value  you need to  make sure that  the
assignment occurs  before you  use "+"  or  "=" for  any other  variables  since
expansion takes place when handling the "mailboxes" command.

  3.115. folder_format

Type: string
Default: "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %i"

This variable allows you to customize the file browser display to your  personal
taste. This  string  is  similar  to  $index_format, but  has  its  own  set  of
printf(3)-like sequences:

+--------+---+-----------------------------------------------------------------+
| %a     |   | Alert: 1 if user is notified of new mail                        |
+--------+---+-----------------------------------------------------------------+
| %C     |   | Current file number                                             |
+--------+---+-----------------------------------------------------------------+
| %d     |   | Date/time folder was last modified                              |
+--------+---+-----------------------------------------------------------------+
|        |   | Date/time folder was last modified using $date_format. It is    |
| %D     |   | encouraged to use "%[fmt]" instead, where "fmt" is the value of |
|        |   | $date_format.                                                   |
+--------+---+-----------------------------------------------------------------+
| %f     |   | Filename ("/" is appended to directory names, "@" to symbolic   |
|        |   | links and "*" to executable files)                              |
+--------+---+-----------------------------------------------------------------+
| %F     |   | File permissions                                                |
+--------+---+-----------------------------------------------------------------+
| %g     |   | Group name (or numeric gid, if missing)                         |
+--------+---+-----------------------------------------------------------------+
| %i     |   | Description of the folder                                       |
+--------+---+-----------------------------------------------------------------+
| %l     |   | Number of hard links                                            |
+--------+---+-----------------------------------------------------------------+
| %m     | * | Number of messages in the mailbox                               |
+--------+---+-----------------------------------------------------------------+
| %n     | * | Number of unread messages in the mailbox                        |
+--------+---+-----------------------------------------------------------------+
| %N     |   | "N" if mailbox has new mail, " " (space) otherwise              |
+--------+---+-----------------------------------------------------------------+
| %p     |   | Poll: 1 if Mailbox is checked for new mail                      |
+--------+---+-----------------------------------------------------------------+
| %s     |   | Size in bytes (see formatstrings-size)                          |
+--------+---+-----------------------------------------------------------------+
| %t     |   | "*" if the file is tagged, blank otherwise                      |
+--------+---+-----------------------------------------------------------------+
| %u     |   | Owner name (or numeric uid, if missing)                         |
+--------+---+-----------------------------------------------------------------+
| %[fmt] |   | Date/time folder was last modified using an strftime(3)         |
|        |   | expression                                                      |
+--------+---+-----------------------------------------------------------------+
| %>X    |   | Right justify the rest of the string and pad with character "X" |
+--------+---+-----------------------------------------------------------------+
| %|X    |   | Pad to the end of the line with character "X"                   |
+--------+---+-----------------------------------------------------------------+
| %*X    |   | Soft-fill with character "X" as pad                             |
+--------+---+-----------------------------------------------------------------+

For an explanation of "soft-fill", see the $index_format documentation.

* = can be optionally printed if nonzero

%m, %n, and %N only work for monitored mailboxes. %m requires  $mail_check_stats
to be set. %n requires $mail_check_stats to be set (except for IMAP mailboxes).

  3.116. followup_to

Type: boolean
Default: yes

Controls whether or not the  "Mail-Followup-To:" header field is generated  when
sending mail. When set, NeoMutt will  generate this field when you are  replying
to a known mailing list, specified with the "subscribe" or "lists" commands.

This field  has two  purposes. First,  preventing you  from receiving  duplicate
copies of  replies to  messages which  you send  to mailing  lists, and  second,
ensuring that you do get a reply separately for any messages sent to known lists
to which you are not subscribed.

The header will contain only the  list's address for subscribed lists, and  both
the list address and your own email address for unsubscribed lists. Without this
header, a group reply to your message sent to a subscribed list will be sent  to
both the list and your  address, resulting in two copies  of the same email  for
you.

  3.117. followup_to_poster

Type: quadoption
Default: ask-yes

If this  variable is  set and  the keyword  "poster" is  present in  Followup-To
header, follow-up to newsgroup  function is not permitted.  The message will  be
mailed to the submitter of the message via mail.

  3.118. force_name

Type: boolean
Default: no

This variable is similar to $save_name, except that NeoMutt will store a copy of
your outgoing message by the username of the address you are sending to even  if
that mailbox does not exist.

Also see the $record variable.

  3.119. forward_attachments

Type: quadoption
Default: ask-yes

When forwarding  inline (i.e.  $mime_forward  unset or  answered with  "no"  and
$forward_decode set), attachments which cannot be decoded in a reasonable manner
will be attached  to the newly  composed message  if this quadoption  is set  or
answered with "yes".

  3.120. forward_attribution_intro

Type: string
Default: "----- Forwarded message from %f -----"

This is the string that will precede  a message which has been forwarded in  the
main body of  a message (when  $mime_forward is  unset). For a  full listing  of
defined printf(3)-like  sequences see  the section  on $index_format.  See  also
$attribution_locale.

  3.121. forward_attribution_trailer

Type: string
Default: "----- End forwarded message -----"

This is the string that  will follow a message which  has been forwarded in  the
main body of  a message (when  $mime_forward is  unset). For a  full listing  of
defined printf(3)-like  sequences see  the section  on $index_format.  See  also
$attribution_locale.

  3.122. forward_decode

Type: boolean
Default: yes

Controls the decoding of complex MIME messages into text/plain when forwarding a
message. The message header is also RFC2047 decoded. This variable is only used,
if $mime_forward is unset, otherwise $mime_forward_decode is used instead.

  3.123. forward_decrypt

Type: boolean
Default: yes

Controls the handling of encrypted messages when forwarding a message. When set,
the outer layer of  encryption is stripped  off. This variable  is only used  if
$mime_forward is set and $mime_forward_decode is unset.

  3.124. forward_edit

Type: quadoption
Default: yes

This quadoption controls whether or not the user is automatically placed in  the
editor when forwarding messages.  For those who always  want to forward with  no
modification, use a setting of "no".

  3.125. forward_format

Type: string
Default: "[%a: %s]"

This variable controls the  default subject when forwarding  a message. It  uses
the same format sequences as the $index_format variable.

  3.126. forward_quote

Type: boolean
Default: no

When set, forwarded  messages included  in the main  body of  the message  (when
$mime_forward is unset) will be quoted using $indent_string.

  3.127. forward_references

Type: boolean
Default: no

When set, forwarded messages set the "In-Reply-To:" and "References:" headers in
the same way as normal replies  would. Hence the forwarded message becomes  part
of the original thread instead of starting a new one.

  3.128. from

Type: e-mail address
Default: (empty)

When set, this variable contains a default "from" address. It can be  overridden
using "my_hdr" (including from a  "send-hook") and $reverse_name. This  variable
is ignored if $use_from is unset.

If not specified, then it may be read from the environment variable $EMAIL.

  3.129. from_chars

Type: character string
Default: (empty)

Controls the character used to prefix the %F and %L fields in the index.

+-----------+------------------------------------------------------------------+
| Character | Description                                                      |
+-----------+------------------------------------------------------------------+
| 1         | Mail is written by you and has a To address, or has a known      |
|           | mailing list in the To address.                                  |
+-----------+------------------------------------------------------------------+
| 2         | Mail is written by you and has a Cc address, or has a known      |
|           | mailing list in the Cc address.                                  |
+-----------+------------------------------------------------------------------+
| 3         | Mail is written by you and has a Bcc address.                    |
+-----------+------------------------------------------------------------------+
| 4         | All remaining cases.                                             |
+-----------+------------------------------------------------------------------+

If this is empty or unset (default), the traditional long "To ", "Cc " and  "Bcc
" prefixes  are  used. If  set  but  too short  to  include a  character  for  a
particular case, a single space will be  prepended to the field. To prevent  any
prefix at all from being  added in a particular case,  use the special value  CR
(aka ^M) for the corresponding character.

This slightly  odd interface  is necessitated  by NeoMutt's  handling of  string
variables; one can't tell a variable that is  unset from one that is set to  the
empty string.

  3.130. gecos_mask

Type: regular expression
Default: "^[^,]*"

A regular expression  used by NeoMutt  to parse  the GECOS field  of a  password
entry when expanding the alias. The default  value will return the string up  to
the first "," encountered. If the GECOS field contains a string like  "lastname,
firstname" then you should set it to ".*".

This can be useful if you see  the following behavior: you address an e-mail  to
user ID  "stevef"  whose full  name  is  "Steve Franklin".  If  NeoMutt  expands
"stevef" to '"Franklin" stevef@foo.bar' then you should set the $gecos_mask to a
regular expression  that  will match  the  whole  name so  NeoMutt  will  expand
"Franklin" to "Franklin, Steve".

  3.131. greeting

Type: string
Default: (empty)

When set, this  is the  string that  will precede  every message  as a  greeting
phrase to the recipients.

"Format strings" are similar to the strings  used in the "C" function printf  to
format output (see the  man page for more  detail). The following sequences  are
defined in NeoMutt:

+----+--------------------------------+
| %n | Recipient's real name          |
+----+--------------------------------+
| %u | User (login) name of recipient |
+----+--------------------------------+
| %v | First name of recipient        |
+----+--------------------------------+

  3.132. group_index_format

Type: string
Default: "%4C %M%N %5s  %-45.45f %d"

This variable allows  you to  customize the  newsgroup browser  display to  your
personal taste. This string is similar to "index_format", but has its own set of
printf()-like sequences:

+-----+--------------------------------------------------------------------+
| %a  | Alert: 1 if user is notified of new mail                           |
+-----+--------------------------------------------------------------------+
| %C  | Current newsgroup number                                           |
+-----+--------------------------------------------------------------------+
| %d  | Description of newsgroup (becomes from server)                     |
+-----+--------------------------------------------------------------------+
| %f  | Newsgroup name                                                     |
+-----+--------------------------------------------------------------------+
| %M  | - if newsgroup not allowed for direct post (moderated for example) |
+-----+--------------------------------------------------------------------+
| %N  | N if newsgroup is new, u if unsubscribed, blank otherwise          |
+-----+--------------------------------------------------------------------+
| %n  | Number of new articles in newsgroup                                |
+-----+--------------------------------------------------------------------+
| %p  | Poll: 1 if Mailbox is checked for new mail                         |
+-----+--------------------------------------------------------------------+
| %s  | Number of unread articles in newsgroup                             |
+-----+--------------------------------------------------------------------+
| %>X | Right justify the rest of the string and pad with character "X"    |
+-----+--------------------------------------------------------------------+
| %|X | Pad to the end of the line with character "X"                      |
+-----+--------------------------------------------------------------------+
| %*X | Soft-fill with character "X" as pad                                |
+-----+--------------------------------------------------------------------+

  3.133. hdrs

Type: boolean
Default: yes

When unset, the  header fields normally  added by the  "my_hdr" command are  not
created. This variable must be unset before composing a new message or  replying
in order to take  effect. If set,  the user defined header  fields are added  to
every new message.

  3.134. header

Type: boolean
Default: no

When set, this variable causes NeoMutt to include the header of the message  you
are replying to into the edit buffer. The $weed setting applies.

  3.135. header_cache

Type: path
Default: (empty)

This variable points  to the header  cache database.  If the path  points to  an
existing directory, NeoMutt will  create a dedicated  header cache database  per
folder. Otherwise, the path points to a  regular file, which will be created  as
needed and used as a shared global  header cache for all folders. By default  it
is unset so no header caching will be used.

Header caching can greatly  improve speed when opening  POP, IMAP MH or  Maildir
folders, see "caching" in the NeoMutt Guide for details.

  3.136. header_cache_backend

Type: string
Default: (empty)

This variable specifies the  header cache backend. If  no backend is  specified,
the first available backend will be  used in the following order:  tokyocabinet,
kyotocabinet, qdbm, rocksdb, gdbm, bdb, tdb, lmdb.

  3.137. header_cache_compress_level

Type: number
Default: 1

When NeoMutt is  compiled with lz4,  zstd or zlib,  this option can  be used  to
setup the compression level.

  3.138. header_cache_compress_method

Type: string
Default: (empty)

When NeoMutt is compiled with  lz4, zstd or zlib,  the header cache backend  can
use these compression methods for compressing  the cache files. This results  in
much smaller cache file sizes and may even improve speed.

  3.139. header_color_partial

Type: boolean
Default: no

When set, color header regexes behave like color body regexes: color is  applied
to the exact  text matched by  the regex. When  unset, color is  applied to  the
entire header.

One use of this option might be to apply color to just the header labels.

See "color" for more details.

  3.140. help

Type: boolean
Default: yes

When set, help lines describing the bindings for the major functions provided by
each menu are displayed on the first line of the screen.

Note: The binding will not be displayed correctly if the function is bound to  a
sequence rather than a single keystroke. Also, the help line may not be  updated
if a  binding  is changed  while  NeoMutt is  running.  Since this  variable  is
primarily aimed at new users, neither of these should present a major problem.

  3.141. hidden_host

Type: boolean
Default: no

When set, NeoMutt will skip the host name part of $hostname variable when adding
the domain part to addresses.

  3.142. hidden_tags

Type: string list
Default: "unread,draft,flagged,passed,replied,attachment,signed,encrypted"

This variable  specifies a  list of  comma-separated private  notmuch/imap  tags
which should not be printed on screen.

  3.143. hide_limited

Type: boolean
Default: no

When set, NeoMutt  will not show  the presence  of messages that  are hidden  by
limiting, in the thread tree.

  3.144. hide_missing

Type: boolean
Default: yes

When set, NeoMutt will not show the  presence of missing messages in the  thread
tree.

  3.145. hide_thread_subject

Type: boolean
Default: yes

When set, NeoMutt will not show the subject of messages in the thread tree  that
have the same subject as their parent or closest previously displayed sibling.

  3.146. hide_top_limited

Type: boolean
Default: no

When set, NeoMutt  will not show  the presence  of messages that  are hidden  by
limiting, at the top of threads in the thread tree. Note that when $hide_limited
is set, this option will have no effect.

  3.147. hide_top_missing

Type: boolean
Default: yes

When set, NeoMutt will not show the  presence of missing messages at the top  of
threads in the  thread tree. Note  that when $hide_missing  is set, this  option
will have no effect.

  3.148. history

Type: number
Default: 10

This variable controls the size (in number of strings remembered) of the  string
history buffer per  category. The buffer  is cleared each  time the variable  is
set.

Note that strings (e.g.  commands) starting with a  space are never recorded  in
the history. This is for example useful to prevent leaking sensitive information
into the history file or for one off tests.

Also note that a string  is not added to the  history if it exactly matches  its
immediate predecessor, e.g. executing the same command twice in a row results in
only one copy being added to the history. To prevent duplicates over all entries
use $history_remove_dups.

  3.149. history_file

Type: path
Default: "~/.mutthistory"

The file in which NeoMutt will save its history.

Also see $save_history.

  3.150. history_format

Type: string
Default: "%s"

Controls the format of the entries of  the history list. This string is  similar
to $index_format, but has its own set of printf(3)-like sequences:

+-----+-----------------------------------------------------------------+
| %C  | Line number                                                     |
+-----+-----------------------------------------------------------------+
| %s  | History match                                                   |
+-----+-----------------------------------------------------------------+
| %>X | right justify the rest of the string and pad with character "X" |
+-----+-----------------------------------------------------------------+
| %|X | pad to the end of the line with character "X"                   |
+-----+-----------------------------------------------------------------+
| %*X | soft-fill with character "X" as pad                             |
+-----+-----------------------------------------------------------------+

  3.151. history_remove_dups

Type: boolean
Default: no

When set, all of the  string history will be scanned  for duplicates when a  new
entry is added. Duplicate entries in the $history_file will also be removed when
it is periodically compacted.

  3.152. honor_disposition

Type: boolean
Default: no

When  set,  NeoMutt  will  not   display  attachments  with  a  disposition   of
"attachment" inline even if it could render  the part to plain text. These  MIME
parts can only be viewed from the attachment menu.

If unset, NeoMutt will render all MIME parts it can properly transform to  plain
text.

  3.153. honor_followup_to

Type: quadoption
Default: yes

This variable controls whether or not a Mail-Followup-To header is honored  when
group-replying to a message.

  3.154. hostname

Type: string
Default: (empty)

Specifies the  fully-qualified hostname  of  the system  NeoMutt is  running  on
containing the host's name and the DNS domain  it belongs to. It is used as  the
domain part (after "@") for local email addresses.

If not  specified in  a config  file, then  NeoMutt will  try to  determine  the
hostname itself.

Optionally, NeoMutt can be compiled with a fixed domain name.

Also see $use_domain and $hidden_host.

  3.155. idn_decode

Type: boolean
Default: yes

When set, NeoMutt will  show you international domain  names decoded. Note:  You
can use IDNs for  addresses even if  this is unset.  This variable only  affects
decoding. (IDN only)

  3.156. idn_encode

Type: boolean
Default: yes

When set, NeoMutt will encode international  domain names using IDN. Unset  this
if your SMTP server can handle newer (RFC6531) UTF-8 encoded domains. (IDN only)

  3.157. ignore_list_reply_to

Type: boolean
Default: no

Affects the behavior  of the  <reply> function  when replying  to messages  from
mailing lists (as defined by the "subscribe" or "lists" commands). When set,  if
the "Reply-To:" field  is set  to the  same value  as the  "To:" field,  NeoMutt
assumes that  the "Reply-To:"  field was  set by  the mailing  list to  automate
responses to the list, and will ignore  this field. To direct a response to  the
mailing  list  when  this  option   is  set,  use  the  <list-reply>   function;
<group-reply> will reply to both the sender and the list.

  3.158. imap_authenticators

Type: string list
Default: (empty)

This is a colon-separated list of authentication methods NeoMutt may attempt  to
use to  log  in to  an  IMAP  server, in  the  order NeoMutt  should  try  them.
Authentication methods  are  either  "login"  or  the  right  side  of  an  IMAP
"AUTH=xxx" capability string,  e.g. "digest-md5", "gssapi"  or "cram-md5".  This
option is case-insensitive.  If it's unset  (the default) NeoMutt  will try  all
available methods, in order from most-secure to least-secure.

Example:

set imap_authenticators="gssapi:cram-md5:login"

Note: NeoMutt  will  only fall  back  to  other authentication  methods  if  the
previous methods are unavailable.  If a method  is available but  authentication
fails, NeoMutt will not connect to the IMAP server.

  3.159. imap_check_subscribed

Type: boolean
Default: no

When set, NeoMutt  will fetch  the set of  subscribed folders  from your  server
whenever a mailbox is selected,  and add them to the  set of mailboxes it  polls
for new mail just as if you had issued individual "mailboxes" commands.

  3.160. imap_condstore

Type: boolean
Default: no

When set, NeoMutt will  use the CONDSTORE extension  (RFC7162) if advertised  by
the server. NeoMutt's  current implementation  is basic, used  only for  initial
message fetching and flag updates.

For some IMAP servers, enabling this will slightly speed up downloading  initial
messages. Unfortunately, Gmail is not one those, and displays worse  performance
when enabled. Your mileage may vary.

  3.161. imap_deflate

Type: boolean
Default: yes

When  set,  NeoMutt  will  use  the  COMPRESS=DEFLATE  extension  (RFC4978)   if
advertised by the server.

In general  a good  compression  efficiency can  be  achieved, which  speeds  up
reading large mailboxes also on fairly good connections.

  3.162. imap_delim_chars

Type: string
Default: "/."

This contains the list of characters that NeoMutt will use as folder  separators
for IMAP paths, when no separator is provided on the IMAP connection.

  3.163. imap_fetch_chunk_size

Type: number (long)
Default: 0

When set to a value greater than 0, new headers will be downloaded in groups  of
this many headers  per request. If  you have  a very large  mailbox, this  might
prevent a timeout and  disconnect when opening the  mailbox, by sending a  FETCH
per set of this many headers, instead of a single FETCH for all new headers.

  3.164. imap_headers

Type: string
Default: (empty)

NeoMutt requests  these  header  fields  in  addition  to  the  default  headers
("Date:",  "From:",   "Sender:",   "Subject:",  "To:",   "Cc:",   "Message-Id:",
"References:",    "Content-Type:",    "Content-Description:",    "In-Reply-To:",
"Reply-To:",  "Lines:",  "List-Post:",  "X-Label:")  from  IMAP  servers  before
displaying the index menu. You may want to add more headers for spam detection.

Note: This is a space separated list, items should be uppercase and not  contain
the  colon,   e.g.  "X-BOGOSITY   X-SPAM-STATUS"  for   the  "X-Bogosity:"   and
"X-Spam-Status:" header fields.

  3.165. imap_idle

Type: boolean
Default: no

When set, NeoMutt will attempt to use  the IMAP IDLE extension to check for  new
mail in the current mailbox. Some servers (dovecot was the inspiration for  this
option) react badly  to NeoMutt's  implementation. If your  connection seems  to
freeze up periodically, try unsetting this.

  3.166. imap_keep_alive

Type: number
Default: 300

This variable specifies the maximum amount of time in seconds that NeoMutt  will
wait before polling open  IMAP connections, to prevent  the server from  closing
them before  NeoMutt has  finished with  them. The  default is  well within  the
RFC-specified minimum amount of time (30 minutes) before a server is allowed  to
do this, but in practice  the RFC does get violated  every now and then.  Reduce
this number if you find yourself getting disconnected from your IMAP server  due
to inactivity.

  3.167. imap_list_subscribed

Type: boolean
Default: no

This variable  configures  whether  IMAP  folder browsing  will  look  for  only
subscribed folders or all folders. This can be toggled in the IMAP browser  with
the <toggle-subscribed> function.

  3.168. imap_login

Type: string
Default: (empty)

Your login name on the IMAP server.

This variable defaults to the value of $imap_user.

  3.169. imap_oauth_refresh_command

Type: command
Default: (empty)

The command  to run  to generate  an OAUTH  refresh token  for authorizing  your
connection to your  IMAP server. This  command will be  run on every  connection
attempt that  uses the  OAUTHBEARER or  XOAUTH2 authentication  mechanisms.  See
"oauth" for details.

  3.170. imap_pass

Type: string
Default: (empty)

Specifies the password for your IMAP account. If unset, NeoMutt will prompt  you
for your password when you invoke the <imap-fetch-mail> function or try to  open
an IMAP folder.

Warning: you  should only  use  this option  when you  are  on a  fairly  secure
machine, because the superuser can read your neomuttrc even if you are the  only
one who can read the file.

  3.171. imap_passive

Type: boolean
Default: yes

When set, NeoMutt  will not open  new IMAP  connections to check  for new  mail.
NeoMutt will only  check for new  mail over existing  IMAP connections. This  is
useful if  you don't  want to  be prompted  for user/password  pairs on  NeoMutt
invocation, or if opening the connection is slow.

  3.172. imap_peek

Type: boolean
Default: yes

When set, NeoMutt will avoid implicitly  marking your mail as read whenever  you
fetch a message from the  server. This is generally a  good thing, but can  make
closing an IMAP  folder somewhat  slower. This  option exists  to appease  speed
freaks.

  3.173. imap_pipeline_depth

Type: number
Default: 15

Controls the number of IMAP commands that may be queued up before they are  sent
to the server. A deeper  pipeline reduces the amount  of time NeoMutt must  wait
for the server, and can make IMAP servers feel much more responsive. But not all
servers correctly handle pipelined commands, so  if you have problems you  might
want to try setting this variable to 0.

Note: Changes to this variable have no effect on open connections.

  3.174. imap_poll_timeout

Type: number
Default: 15

This variable specifies the maximum amount of time in seconds that NeoMutt  will
wait for a response  when polling IMAP connections  for new mail, before  timing
out and closing the connection. Set to 0 to disable timing out.

  3.175. imap_qresync

Type: boolean
Default: no

When set, NeoMutt will use the QRESYNC extension (RFC7162) if advertised by  the
server. NeoMutt's current implementation is basic, used only for initial message
fetching and flag updates.

Note:  this  feature  is  currently  experimental.  If  you  experience  strange
behavior, such as duplicate or missing messages please file a bug report to  let
us know.

  3.176. imap_rfc5161

Type: boolean
Default: yes

When set,  NeoMutt  will use  the  IMAP  ENABLE extension  (RFC5161)  to  select
CAPABILITIES. Some servers (notably Coremail System IMap Server) do not properly
respond to  ENABLE  commands,  which  might  cause  NeoMutt  to  hang.  If  your
connection  seems   to  freeze   at  login,   try  unsetting   this.  See   also
https://github.com/neomutt/neomutt/issues/1689

  3.177. imap_send_id

Type: boolean
Default: no

When set, NeoMutt  will send an  IMAP ID  command (RFC2971) to  the server  when
logging in if advertised by the server. This command provides information  about
the IMAP client, such as "NeoMutt" and the current version.

  3.178. imap_server_noise

Type: boolean
Default: yes

When set, NeoMutt will  display warning messages from  the IMAP server as  error
messages.  Since  these  messages  are  often  harmless,  or  generated  due  to
configuration problems on the server which are out of the users' hands, you  may
wish to suppress them at some point.

  3.179. imap_user

Type: string
Default: (empty)

The name of the user whose mail you intend to access on the IMAP server.

This variable defaults to your user name on the local machine.

  3.180. implicit_auto_view

Type: boolean
Default: no

If set to "yes", NeoMutt will look for a mailcap entry with the  "copiousoutput"
flag set for every  MIME attachment it doesn't  have an internal viewer  defined
for. If such  an entry is  found, NeoMutt will  use the viewer  defined in  that
entry to convert the body part to text form.

  3.181. include

Type: quadoption
Default: ask-yes

Controls whether or not a copy of the message(s) you are replying to is included
in your reply.

  3.182. include_encrypted

Type: boolean
Default: no

Controls  whether  or  not  NeoMutt  includes  separately  encrypted  attachment
contents when replying.

This variable was  added to  prevent accidental exposure  of encrypted  contents
when replying to an attacker. If a previously encrypted message were attached by
the attacker, they could trick an unwary recipient into decrypting and including
the message in their reply.

  3.183. include_only_first

Type: boolean
Default: no

Controls whether  or not  NeoMutt  includes only  the  first attachment  of  the
message you are replying.

  3.184. indent_string

Type: string
Default: "> "

Specifies the string  to prepend to  each line of  text quoted in  a message  to
which you are replying. You are strongly encouraged not to change this value, as
it tends to agitate the more fanatical netizens.

The value of this option is ignored if $text_flowed is set, because the  quoting
mechanism is strictly defined for format=flowed.

This option is a format string, please see the description of $index_format  for
supported printf(3)-style sequences.

  3.185. index_format

Type: string
Default: "%4C %Z %{%b %d} %-15.15L (%<l?%4l&%4c>) %s"

This variable allows you to customize the message index display to your personal
taste.

"Format strings" are similar to the strings used in the C function printf(3)  to
format output (see the  man page for  more details). For  an explanation of  the
%<...> construct, see the status_format description. The following sequences are
defined in NeoMutt:

+---------+--------------------------------------------------------------------+
| %a      | Address of the author                                              |
+---------+--------------------------------------------------------------------+
| %A      | Reply-to address (if present; otherwise: address of author)        |
+---------+--------------------------------------------------------------------+
| %b      | Filename of the original message folder (think mailbox)            |
+---------+--------------------------------------------------------------------+
| %B      | Same as %K                                                         |
+---------+--------------------------------------------------------------------+
| %c      | Number of characters (bytes) in the body of the message (see       |
|         | formatstrings-size)                                                |
+---------+--------------------------------------------------------------------+
| %C      | Current message number                                             |
+---------+--------------------------------------------------------------------+
| %cr     | Number of characters (bytes) in the raw message, including the     |
|         | header (see formatstrings-size)                                    |
+---------+--------------------------------------------------------------------+
|         | Date and time of message using date_format and sender's timezone   |
| %d      | It is encouraged to use "%{fmt}" instead, where "fmt" is the value |
|         | of $date_format.                                                   |
+---------+--------------------------------------------------------------------+
|         | Date and time of message using date_format and local timezone It   |
| %D      | is encouraged to use "%[fmt]" instead, where "fmt" is the value of |
|         | $date_format.                                                      |
+---------+--------------------------------------------------------------------+
| %e      | Current message number in thread                                   |
+---------+--------------------------------------------------------------------+
| %E      | Number of messages in current thread                               |
+---------+--------------------------------------------------------------------+
| %f      | Sender (address + real name), either From: or Return-Path:         |
+---------+--------------------------------------------------------------------+
| %F      | Author name, or recipient name if the message is from you          |
+---------+--------------------------------------------------------------------+
| %Fp     | Like %F, but plain. No contextual formatting is applied to         |
|         | recipient name                                                     |
+---------+--------------------------------------------------------------------+
| %g      | Message tags (e.g. notmuch tags/imap flags)                        |
+---------+--------------------------------------------------------------------+
| %Gx     | Individual message tag (e.g. notmuch tags/imap flags)              |
+---------+--------------------------------------------------------------------+
| %H      | Spam attribute(s) of this message                                  |
+---------+--------------------------------------------------------------------+
| %i      | Message-id of the current message                                  |
+---------+--------------------------------------------------------------------+
| %I      | Initials of author                                                 |
+---------+--------------------------------------------------------------------+
| %J      | Message tags (if present, tree unfolded, and != parent's tags)     |
+---------+--------------------------------------------------------------------+
| %K      | The list to which the letter was sent (if any; otherwise: empty)   |
+---------+--------------------------------------------------------------------+
| %l      | number of lines in the unprocessed message (may not work with      |
|         | maildir, mh, and IMAP folders)                                     |
+---------+--------------------------------------------------------------------+
|         | If an address in the "To:" or "Cc:" header field matches an        |
| %L      | address Defined by the user's "subscribe" command, this displays   |
|         | "To <list-name>", otherwise the same as %F                         |
+---------+--------------------------------------------------------------------+
| %m      | Total number of message in the mailbox                             |
+---------+--------------------------------------------------------------------+
| %M      | Number of hidden messages if the thread is collapsed               |
+---------+--------------------------------------------------------------------+
| %n      | Author's real name (or address if missing)                         |
+---------+--------------------------------------------------------------------+
| %N      | Message score                                                      |
+---------+--------------------------------------------------------------------+
| %O      | Original save folder where NeoMutt would formerly have Stashed the |
|         | message: list name or recipient name If not sent to a list         |
+---------+--------------------------------------------------------------------+
| %P      | Progress indicator for the built-in pager (how much of the file    |
|         | has been displayed)                                                |
+---------+--------------------------------------------------------------------+
| %q      | Newsgroup name (if compiled with NNTP support)                     |
+---------+--------------------------------------------------------------------+
| %r      | Comma separated list of "To:" recipients                           |
+---------+--------------------------------------------------------------------+
| %R      | Comma separated list of "Cc:" recipients                           |
+---------+--------------------------------------------------------------------+
| %s      | Subject of the message                                             |
+---------+--------------------------------------------------------------------+
| %S      | Single character status of the message                             |
|         | ("N"/"O"/"D"/"d"/"!"/"r"/"*")                                      |
+---------+--------------------------------------------------------------------+
| %t      | "To:" field (recipients)                                           |
+---------+--------------------------------------------------------------------+
| %T      | The appropriate character from the $to_chars string                |
+---------+--------------------------------------------------------------------+
| %u      | User (login) name of the author                                    |
+---------+--------------------------------------------------------------------+
| %v      | First name of the author, or the recipient if the message is from  |
|         | you                                                                |
+---------+--------------------------------------------------------------------+
| %W      | Name of organization of author ("Organization:" field)             |
+---------+--------------------------------------------------------------------+
| %x      | "X-Comment-To:" field (if present and compiled with NNTP support)  |
+---------+--------------------------------------------------------------------+
| %X      | Number of MIME attachments (please see the "attachments" section   |
|         | for possible speed effects)                                        |
+---------+--------------------------------------------------------------------+
| %y      | "X-Label:" field, if present                                       |
+---------+--------------------------------------------------------------------+
|         | "X-Label:" field, if present, and (1) not at part of a thread      |
| %Y      | tree, (2) at the top of a thread, or (3) "X-Label:" is different   |
|         | from Preceding message's "X-Label:"                                |
+---------+--------------------------------------------------------------------+
|         | A three character set of message status flags. The first character |
|         | is new/read/replied flags ("n"/"o"/"r"/"O"/"N"). The second is     |
| %Z      | deleted or encryption flags ("D"/"d"/"S"/"P"/"s"/"K"). The third   |
|         | is either tagged/flagged ("*"/"!"), or one of the characters       |
|         | Listed in $to_chars.                                               |
+---------+--------------------------------------------------------------------+
| %zc     | Message crypto flags                                               |
+---------+--------------------------------------------------------------------+
| %zs     | Message status flags                                               |
+---------+--------------------------------------------------------------------+
| %zt     | Message tag flags                                                  |
+---------+--------------------------------------------------------------------+
| %@name@ | insert and evaluate format-string from the matching                |
|         | "index-format-hook" command                                        |
+---------+--------------------------------------------------------------------+
|         | the date and time of the message is converted to sender's time     |
|         | zone, and "fmt" is expanded by the library function strftime(3);   |
|         | if the first character inside the braces is a bang ("!"), the date |
| %{fmt}  | is formatted ignoring any locale settings. Note that the sender's  |
|         | time zone might only be available as a numerical offset, so "%Z"   |
|         | behaves like "%z". %{fmt} behaves like %[fmt] on systems where     |
|         | struct tm doesn't have a tm_gmtoff member.                         |
+---------+--------------------------------------------------------------------+
|         | the date and time of the message is converted to the local time    |
| %[fmt]  | zone, and "fmt" is expanded by the library function strftime(3);   |
|         | if the first character inside the brackets is a bang ("!"), the    |
|         | date is formatted ignoring any locale settings.                    |
+---------+--------------------------------------------------------------------+
|         | the local date and time when the message was received, and "fmt"   |
| %(fmt)  | is expanded by the library function strftime(3); if the first      |
|         | character inside the parentheses is a bang ("!"), the date is      |
|         | formatted ignoring any locale settings.                            |
+---------+--------------------------------------------------------------------+
| %>X     | right justify the rest of the string and pad with character "X"    |
+---------+--------------------------------------------------------------------+
| %|X     | pad to the end of the line with character "X"                      |
+---------+--------------------------------------------------------------------+
| %*X     | soft-fill with character "X" as pad                                |
+---------+--------------------------------------------------------------------+

Date format expressions can  be constructed based on  relative dates. Using  the
date formatting operators along with nested conditionals, the date format can be
modified based on how old a message  is. See the section on "Conditional  Dates"
for an explanation and examples

Note that  for mbox/mmdf,  "%l"  applies to  the  unprocessed message,  and  for
maildir/mh, the value  comes from the  "Lines:" header field  when present  (the
meaning is normally the same). Thus the  value depends on the encodings used  in
the different parts of the message and has little meaning in practice.

"Soft-fill" deserves  some explanation:  Normal right-justification  will  print
everything to the left of the "%>", displaying padding and whatever lies to  the
right only  if  there's room.  By  contrast,  soft-fill gives  priority  to  the
right-hand side, guaranteeing space  to display it and  showing padding only  if
there's still room. If necessary, soft-fill will eat text leftwards to make room
for rightward text.

Note  that  these  expandos  are   supported  in  "save-hook",  "fcc-hook"   and
"fcc-save-hook", too.

  3.186. inews

Type: command
Default: (empty)

If set,  specifies the  program and  arguments used  to deliver  news posted  by
NeoMutt. Otherwise,  NeoMutt  posts article  using  current connection  to  news
server. The following printf-style sequence is understood:

+----+-------------------+
| %a | account url       |
+----+-------------------+
| %p | port              |
+----+-------------------+
| %P | port if specified |
+----+-------------------+
| %s | news server name  |
+----+-------------------+
| %S | url schema        |
+----+-------------------+
| %u | username          |
+----+-------------------+

Example:

set inews="/usr/local/bin/inews -hS"

  3.187. ispell

Type: command
Default: "ispell"

How to invoke ispell (GNU's spell-checking software).

  3.188. keep_flagged

Type: boolean
Default: no

If set,  read messages  marked as  flagged will  not be  moved from  your  spool
mailbox to your $mbox mailbox or to the "mbox" specified by a mbox-hook command.

Note that $keep_flagged only has an effect if $move is set.

  3.189. local_date_header

Type: boolean
Default: yes

If set, the date  in the Date  header of emails  that you send  will be in  your
local timezone.  If unset  a UTC  date will  be used  instead to  avoid  leaking
information about your current location.

  3.190. mail_check

Type: number
Default: 5

This variable configures  how often  (in seconds)  NeoMutt should  look for  new
mail. Also see the $timeout variable.

  3.191. mail_check_recent

Type: boolean
Default: yes

When set, NeoMutt will  only notify you  about new mail  that has been  received
since the last time you opened the mailbox. When unset, NeoMutt will notify  you
if any new mail exists in the mailbox, regardless of whether you have visited it
recently.

  3.192. mail_check_stats

Type: boolean
Default: no

When set, NeoMutt will  periodically calculate message  statistics of a  mailbox
while polling for new mail. It will check for unread, flagged, and total message
counts. (Note: IMAP mailboxes only support unread and total counts).

Because this operation is more performance intensive, it defaults to unset,  and
has a  separate  option, $mail_check_stats_interval,  to  control how  often  to
update these counts.

Message  statistics  can   also  be  explicitly   calculated  by  invoking   the
<check-stats> function.

  3.193. mail_check_stats_interval

Type: number
Default: 60

When $mail_check_stats is set, this  variable configures how often (in  seconds)
NeoMutt will update message counts.

  3.194. mailbox_folder_format

Type: string
Default: "%2C %<n?%6n&      > %6m %i"

This variable allows you to customize the file browser display to your  personal
taste. It's only used to customize network mailboxes (e.g. imap). This string is
identical in formatting to the one used by "$folder_format".

  3.195. mailcap_path

Type: string list
Default: "~/.mailcap:/usr/share/neomutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap"

This variable  specifies  a  list  of  colon-separated  files  to  consult  when
attempting to display MIME bodies not directly supported by NeoMutt. The default
value is generated during startup: see the "mailcap" section of the manual.

$mailcap_path is overridden by the environment variable $MAILCAPS.

The default search path is from RFC1524.

  3.196. mailcap_sanitize

Type: boolean
Default: yes

If set, NeoMutt  will restrict possible  characters in mailcap  % expandos to  a
well-defined set of safe characters.  This is the safe  setting, but we are  not
sure it doesn't break some more advanced MIME stuff.

DON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE DOING!

  3.197. maildir_check_cur

Type: boolean
Default: no

If set, NeoMutt will poll both the  new and cur directories of a maildir  folder
for new messages. This  might be useful if  other programs interacting with  the
folder (e.g. dovecot) are  moving new messages to  the cur directory. Note  that
setting this option  may slow down  polling for new  messages in large  folders,
since NeoMutt has to scan all cur messages.

  3.198. maildir_field_delimiter

Type: string
Default: ":"

Use the value  as maildir field  delimiter. This is  a single-character used  to
accommodate maildir  mailboxes  on platforms  where  `:`  is not  allowed  in  a
filename. The recommended alternative on such platforms is `;`. NeoMutt supports
all non-alphanumeric  values except  for `-`,  `.`, `\`,  `/`. Note:  this  only
applies to maildir-style  mailboxes. Setting  it will  have no  effect on  other
mailbox types.

  3.199. maildir_header_cache_verify

Type: boolean
Default: yes

Check for Maildir unaware  programs other than  NeoMutt having modified  maildir
files when the header cache is in use. This incurs one stat(2) per message every
time the folder is opened (which can be very slow for NFS folders).

  3.200. maildir_trash

Type: boolean
Default: no

If set, messages marked as deleted will  be saved with the maildir trashed  flag
instead of unlinked. Note: this only applies to maildir-style mailboxes. Setting
it will have no effect on other mailbox types.

  3.201. mark_macro_prefix

Type: string
Default: "'"

Prefix  for  macros  created  using  mark-message.  A  new  macro  automatically
generated with <mark-message>a will be composed from this prefix and the  letter
a.

  3.202. mark_old

Type: boolean
Default: yes

Controls whether or not NeoMutt marks new  unread messages as old if you exit  a
mailbox without reading  them. With  this option set,  the next  time you  start
NeoMutt, the messages will show up with an  "O" next to them in the index  menu,
indicating that they are old.

  3.203. markers

Type: boolean
Default: yes

Controls the display  of wrapped  lines in  the internal  pager. If  set, a  "+"
marker is displayed at the beginning of wrapped lines.

Also see the $smart_wrap variable.

  3.204. mask

Type: regular expression
Default: "!^\.[^.]"

A regular expression used  in the file browser,  optionally preceded by the  not
operator "!". Only files whose names match this mask will be shown. The match is
always case-sensitive.

  3.205. mbox

Type: mailbox
Default: "~/mbox"

This specifies the folder into which  read mail in your $spool_file folder  will
be appended.

Also see the $move variable.

  3.206. mbox_type

Type: enumeration
Default: mbox

The default mailbox type used when creating  new folders. May be any of  "mbox",
"MMDF", "MH" or "Maildir".

This can also be set using the -m command-line option.

  3.207. me_too

Type: boolean
Default: no

If unset, NeoMutt will remove your  address (see the "alternates" command)  from
the list of recipients when replying to a message.

  3.208. message_id_format

Type: string
Default: "<%z@%f>"

This variable  allows you  to choose  a custom  format for  the Message-Id  when
sending messages. The value  may end in  "|" to invoke  an external filter.  See
formatstrings-filters.

Please note  that the  Message-ID value  follows a  strict syntax,  and you  are
responsible for ensuring  correctness if you  change this from  the default.  In
particular, the  value must  follow the  syntax in  RFC 5322:  ""<" id-left  "@"
id-right  ">"".  No  spaces   are  allowed,  and   id-left  should  follow   the
dot-atom-text syntax in the RFC. The id-right should generally be left as "%f".

If unset, NeoMutt will use a long random format.

If the format doesn't begin/end with "<", ">" they will be added.

The   old   Message-ID   format    can   be   used    by   setting   this    to:
"<%Y%02m%02d%02H%02M%02S.G%c%p@%f>"

The following printf(3)-style sequences are understood:

+----+-------------------------------------------------------------------------+
| %c | Step counter looping from "A" to "Z"                                    |
+----+-------------------------------------------------------------------------+
| %d | Current day of the month (GMT)                                          |
+----+-------------------------------------------------------------------------+
| %f | $hostname                                                               |
+----+-------------------------------------------------------------------------+
| %H | Current hour using a 24-hour clock (GMT)                                |
+----+-------------------------------------------------------------------------+
| %m | Current month number (GMT)                                              |
+----+-------------------------------------------------------------------------+
| %M | Current minute of the hour (GMT)                                        |
+----+-------------------------------------------------------------------------+
| %p | Pid of the running mutt process                                         |
+----+-------------------------------------------------------------------------+
| %r | 3 bytes of pseudo-random data encoded in Base64Url                      |
+----+-------------------------------------------------------------------------+
| %S | Current second of the minute (GMT)                                      |
+----+-------------------------------------------------------------------------+
| %x | 1 byte of pseudo-random data hex encoded (example: '1b')                |
+----+-------------------------------------------------------------------------+
| %Y | Current year using 4 digits (GMT)                                       |
+----+-------------------------------------------------------------------------+
|    | 4 byte timestamp + 8 bytes of pseudo-random data encoded in Base64Url   |
| %z |                                                                         |
|    | See                          also:                           Base64Url: |
|    | https://datatracker.ietf.org/doc/html/rfc4648#section-5                 |
+----+-------------------------------------------------------------------------+

  3.209. menu_context

Type: number
Default: 0

This variable  controls the  number of  lines  of context  that are  given  when
scrolling through menus. (Similar to $pager_context.)

  3.210. menu_move_off

Type: boolean
Default: yes

When unset, the bottom entry  of menus will never scroll  up past the bottom  of
the screen, unless there are less entries than lines. When set, the bottom entry
may move off the bottom.

  3.211. menu_scroll

Type: boolean
Default: no

When set, menus will be  scrolled up or down one  line when you attempt to  move
across a  screen boundary.  If unset,  the screen  is cleared  and the  next  or
previous page of  the menu is  displayed (useful  for slow links  to avoid  many
redraws).

  3.212. message_cache_clean

Type: boolean
Default: no

If set, NeoMutt will clean out obsolete entries from the message cache when  the
mailbox is synchronized. You probably only want to set it every once in a while,
since it can be a little slow (especially for large folders).

  3.213. message_cache_dir

Type: path
Default: (empty)

Set this to a directory and NeoMutt will cache copies of messages from your IMAP
and POP servers here. You are free to remove entries at any time.

When setting this variable to a  directory, NeoMutt needs to fetch every  remote
message only once  and can perform  regular expression searches  as fast as  for
local folders.

Also see the $message_cache_clean variable.

  3.214. message_format

Type: string
Default: "%s"

This is the string  displayed in the "attachment"  menu for attachments of  type
message/rfc822. For a full listing  of defined printf(3)-like sequences see  the
section on $index_format.

  3.215. meta_key

Type: boolean
Default: no

If set, forces NeoMutt to interpret keystrokes with the high bit (bit 8) set  as
if the user had pressed  the Esc key and whatever  key remains after having  the
high bit removed. For example,  if the key pressed has  an ASCII value of  0xf8,
then this is treated as  if the user had pressed  Esc then "x". This is  because
the result  of removing  the high  bit from  0xf8 is  0x78, which  is the  ASCII
character "x".

  3.216. mh_purge

Type: boolean
Default: no

When unset, NeoMutt  will mimic  mh's behavior  and rename  deleted messages  to
,<old file name> in mh folders instead of really deleting them. This leaves  the
message on disk but makes programs reading the folder ignore it. If the variable
is set, the message files will simply be deleted.

This option is similar to $maildir_trash for Maildir folders.

  3.217. mh_seq_flagged

Type: string
Default: "flagged"

The name of the MH sequence used for flagged messages.

  3.218. mh_seq_replied

Type: string
Default: "replied"

The name of the MH sequence used to tag replied messages.

  3.219. mh_seq_unseen

Type: string
Default: "unseen"

The name of the MH sequence used for unseen messages.

  3.220. mime_forward

Type: quadoption
Default: no

When set,  the  message  you are  forwarding  will  be attached  as  a  separate
message/rfc822 MIME part instead  of included in the  main body of the  message.
This is useful for  forwarding MIME messages so  the receiver can properly  view
the message as it was delivered to you.  If you like to switch between MIME  and
not MIME from mail to mail, set this variable to "ask-no" or "ask-yes".

Also see $forward_decode and $mime_forward_decode.

  3.221. mime_forward_decode

Type: boolean
Default: no

Controls the decoding of complex MIME messages into text/plain when forwarding a
message while $mime_forward is set. Otherwise $forward_decode is used instead.

  3.222. mime_forward_rest

Type: quadoption
Default: yes

When forwarding multiple attachments of a MIME message from the attachment menu,
attachments which can't be  decoded in a reasonable  manner will be attached  to
the newly composed message if this option is set.

  3.223. mime_type_query_command

Type: command
Default: (empty)

This specifies a command to run, to determine the mime type of a new  attachment
when composing a message. Unless  $mime_type_query_first is set, this will  only
be run if the attachment's extension is not found in the mime.types file.

The string may  contain a "%s",  which will be  substituted with the  attachment
filename. NeoMutt  will  add  quotes  around the  string  substituted  for  "%s"
automatically according to shell quoting rules, so you should avoid adding  your
own. If no  "%s" is  found in  the string,  NeoMutt will  append the  attachment
filename to the end of the string.

The command should output a single line containing the attachment's mime type.

Suggested values are "xdg-mime query filetype" or "file -bi".

  3.224. mime_type_query_first

Type: boolean
Default: no

When set, the $mime_type_query_command will be run before the mime.types lookup.

  3.225. move

Type: quadoption
Default: no

If this variable is set,  then NeoMutt will move  read messages from your  spool
mailbox to your $mbox mailbox or to the "mbox" specified by a mbox-hook command.

See also $keep_flagged.

  3.226. narrow_tree

Type: boolean
Default: no

This variable, when set, makes the thread tree narrower, allowing deeper threads
to fit on the screen.

  3.227. net_inc

Type: number
Default: 10

Operations that expect to transfer a large amount of data over the network  will
update their  progress  every $net_inc  kilobytes.  If  set to  0,  no  progress
messages will be displayed.

See also $read_inc, $write_inc and $net_inc.

  3.228. new_mail_command

Type: command
Default: (empty)

If set, NeoMutt will call this command after a new message is received. See  the
$status_format documentation  for the  values that  can be  formatted into  this
command.

  3.229. news_cache_dir

Type: path
Default: "~/.neomutt"

This variable pointing to directory where NeoMutt will save cached news articles
and headers in. If unset, articles and headers will not be saved at all and will
be reloaded from the server each time.

  3.230. news_server

Type: string
Default: (empty)

This variable specifies domain name or address of NNTP server.

You can also specify username and an alternative port for each news server, e.g.
[[s]news://][username[:password]@]server[:port]

This option can also be set using the command line option "-g", the  environment
variable $NNTPSERVER, or putting the server name in the file "/etc/nntpserver".

  3.231. newsgroups_charset

Type: string
Default: "utf-8"

Character set of newsgroups descriptions.

  3.232. newsrc

Type: path
Default: "~/.newsrc"

The file, containing  info about subscribed  newsgroups - names  and indexes  of
read articles. The following printf-style sequence is understood:

+---------+-------------------+---------------------+
| Expando | Description       | Example             |
+---------+-------------------+---------------------+
| %a      | Account url       | news:news.gmane.org |
+---------+-------------------+---------------------+
| %p      | Port              | 119                 |
+---------+-------------------+---------------------+
| %P      | Port if specified | 10119               |
+---------+-------------------+---------------------+
| %s      | News server name  | news.gmane.org      |
+---------+-------------------+---------------------+
| %S      | Url schema        | news                |
+---------+-------------------+---------------------+
| %u      | Username          | username            |
+---------+-------------------+---------------------+

  3.233. nm_config_file

Type: path
Default: "auto"

Configuration file for notmuch. Use 'auto' to detect configuration.

  3.234. nm_config_profile

Type: string
Default: (empty)

Configuration profile for notmuch.

  3.235. nm_db_limit

Type: number
Default: 0

This variable specifies the default limit used in notmuch queries.

  3.236. nm_default_url

Type: string
Default: (empty)

This   variable   specifies   the    default   Notmuch   database   in    format
notmuch://<absolute path>.

  3.237. nm_exclude_tags

Type: string
Default: (empty)

The messages tagged with these tags are excluded and not loaded from notmuch  DB
to NeoMutt unless specified explicitly.

  3.238. nm_flagged_tag

Type: string
Default: "flagged"

This variable specifies  notmuch tag  which is  used for  flagged messages.  The
variable is used to count flagged messages  in DB and set the flagged flag  when
modifying tags. All other NeoMutt commands use standard (e.g. maildir) flags.

  3.239. nm_open_timeout

Type: number
Default: 5

This variable specifies the timeout for database open in seconds.

  3.240. nm_query_type

Type: string
Default: "messages"

This variable specifies  the default query  type (threads or  messages) used  in
notmuch queries.

  3.241. nm_query_window_current_position

Type: number
Default: 0

This variable  contains the  position of  the current  search for  window  based
vfolder.

  3.242. nm_query_window_current_search

Type: string
Default: (empty)

This variable  contains the  currently  setup notmuch  search for  window  based
vfolder.

  3.243. nm_query_window_duration

Type: number
Default: 0

This variable  sets the  time duration  of a  windowed notmuch  query.  Accepted
values all non negative integers. A value of 0 disables the feature.

  3.244. nm_query_window_enable

Type: boolean
Default: no

This variable enables windowed notmuch queries even if window duration is 0.

  3.245. nm_query_window_or_terms

Type: string
Default: (empty)

This variable contains additional notmuch search terms for messages to be  shown
regardless of date.

Example:

Using  "notmuch://?query=tag:inbox"  as   the  mailbox   and  "tag:flagged   and
tag:unread" as the or terms, NeoMutt will produce a query window such as:

notmuch://?query=tag:inbox and (date:... or (tag:flagged and tag:unread))

  3.246. nm_query_window_timebase

Type: string
Default: "week"

This variable sets the  time base of a  windowed notmuch query. Accepted  values
are 'minute', 'hour', 'day', 'week', 'month', 'year'

  3.247. nm_record

Type: boolean
Default: no

This variable  specifies  whether,  when  writing a  just-sent  message  to  the
$record, the message should also be added to the notmuch DB. Replies inherit the
notmuch tags from the  original message. See $nm_record_tags  for how to  modify
the set of notmuch tags assigned to sent messages written to the record.

  3.248. nm_record_tags

Type: string
Default: (empty)

This variable  specifies  the  notmuch  tag  modifications  (addition,  removal,
toggling) applied to  messages added to  the NeoMutt record  when $nm_record  is
true. See the description of the <modify-labels> function for the syntax.

  3.249. nm_replied_tag

Type: string
Default: "replied"

This variable specifies  notmuch tag  which is  used for  replied messages.  The
variable is used to set the replied flag when modifying tags. All other  NeoMutt
commands use standard (e.g. maildir) flags.

  3.250. nm_unread_tag

Type: string
Default: "unread"

This variable  specifies notmuch  tag which  is used  for unread  messages.  The
variable is used to  count unread messages  in DB and set  the unread flag  when
modifying tags. All other NeoMutt commands use standard (e.g. maildir) flags.

  3.251. nntp_authenticators

Type: string
Default: (empty)

This is a colon-delimited list of authentication methods NeoMutt may attempt  to
use to  log  in  to a  news  server,  in  the order  NeoMutt  should  try  them.
Authentication  methods  are   either  "user"  or   any  SASL  mechanism,   e.g.
"digest-md5", "gssapi" or "cram-md5". This  option is case-insensitive. If  it's
unset (the  default) NeoMutt  will  try all  available  methods, in  order  from
most-secure to least-secure.

Example:

set nntp_authenticators="digest-md5:user"

Note: NeoMutt  will  only fall  back  to  other authentication  methods  if  the
previous methods are unavailable.  If a method  is available but  authentication
fails, NeoMutt will not connect to the IMAP server.

  3.252. nntp_context

Type: number (long)
Default: 1000

This variable defines number of articles  which will be in index when  newsgroup
entered. If  active  newsgroup  have  more articles  than  this  number,  oldest
articles will be ignored. Also controls how many articles headers will be  saved
in cache when you quit newsgroup.

  3.253. nntp_listgroup

Type: boolean
Default: yes

This variable controls whether or not existence of each article is checked  when
newsgroup is entered.

  3.254. nntp_load_description

Type: boolean
Default: yes

This variable controls whether  or not descriptions for  each newsgroup must  be
loaded when newsgroup is added to list (first time list loading or new newsgroup
adding).

  3.255. nntp_pass

Type: string
Default: (empty)

Your password for NNTP account.

  3.256. nntp_poll

Type: number
Default: 60

The time in seconds  until any operations on  newsgroup except post new  article
will cause recheck for new news. If set to 0, NeoMutt will recheck newsgroup  on
each operation in index (stepping, read article, etc.).

  3.257. nntp_user

Type: string
Default: (empty)

Your login  name  on  the  NNTP  server.  If  unset  and  NNTP  server  requires
authentication, NeoMutt will prompt you for  your account name when you  connect
to news server.

  3.258. pager

Type: command
Default: (empty)

This variable specifies which pager you would like to use to view messages. When
empty, NeoMutt  will use  the  built-in pager,  otherwise this  variable  should
specify the pathname of the external pager you would like to use.

Using an external pager may  have some disadvantages: Additional keystrokes  are
necessary because you can't call NeoMutt functions directly from the pager,  and
screen resizes cause lines longer than the screen width to be badly formatted in
the help menu.

  3.259. pager_context

Type: number
Default: 0

This variable  controls the  number of  lines  of context  that are  given  when
displaying the next or previous page in the internal pager. By default,  NeoMutt
will display the line after the  last one on the screen  at the top of the  next
page (0 lines of context).

This variable also specifies the amount of context given for search results.  If
positive, this many lines will be given before a match, if 0, the match will  be
top-aligned.

  3.260. pager_format

Type: string
Default: "-%Z- %C/%m: %-20.20n   %s%*  -- (%P)"

This variable controls  the format  of the one-line  message "status"  displayed
before each  message in  either the  internal or  an external  pager. The  valid
sequences are listed in the $index_format section.

  3.261. pager_index_lines

Type: number
Default: 0

Determines the number of lines of a mini-index which is shown when in the pager.
The current  message, unless  near the  top or  bottom of  the folder,  will  be
roughly one third of the way down this mini-index, giving the reader the context
of a few messages before and after the message. This is useful, for example,  to
determine how many messages remain to be read in the current thread. A value  of
0 results in no index being shown.

  3.262. pager_read_delay

Type: number
Default: 0

Determines the number  of seconds  that must elapse  after first  opening a  new
message in the pager before  that message will be marked  as read. A value of  0
results in  the message  being marked  read unconditionally;  for other  values,
navigating to another message or exiting the pager before the timeout will leave
the message marked unread. This setting is ignored if $pager is set.

  3.263. pager_skip_quoted_context

Type: number
Default: 0

Determines the number of lines of context to show before the unquoted text  when
using the <skip-quoted>  function. When set  to a positive  number at most  that
many lines of the previous quote are displayed. If the previous quote is shorter
the whole quote is displayed.

  3.264. pager_stop

Type: boolean
Default: no

When set, the internal-pager will not move  to the next message when you are  at
the end of a message and invoke the <next-page> function.

  3.265. pattern_format

Type: string
Default: "%2n %-15e  %d"

This variable  describes  the  format  of the  "pattern  completion"  menu.  The
following printf(3)-style sequences are understood:

+-----+-----------------------------------------------------------------+
| %d  | pattern description                                             |
+-----+-----------------------------------------------------------------+
| %e  | pattern expression                                              |
+-----+-----------------------------------------------------------------+
| %n  | index number                                                    |
+-----+-----------------------------------------------------------------+
| %>X | right justify the rest of the string and pad with character "X" |
+-----+-----------------------------------------------------------------+
| %|X | pad to the end of the line with character "X"                   |
+-----+-----------------------------------------------------------------+
| %*X | soft-fill with character "X" as pad                             |
+-----+-----------------------------------------------------------------+

  3.266. pgp_auto_decode

Type: boolean
Default: no

If set, NeoMutt will automatically  attempt to decrypt traditional PGP  messages
whenever the user  performs an operation  which ordinarily would  result in  the
contents of the message being operated on.  For example, if the user displays  a
pgp-traditional  message  which   has  not  been   manually  checked  with   the
<check-traditional-pgp> function, NeoMutt will  automatically check the  message
for traditional pgp.

  3.267. pgp_auto_inline

Type: boolean
Default: no

This option controls  whether NeoMutt generates  old-style inline  (traditional)
PGP encrypted  or  signed messages  under  certain circumstances.  This  can  be
overridden by  use of  the pgp  menu, when  inline is  not required.  The  GPGME
backend does not support this option.

Note that NeoMutt might automatically use PGP/MIME for messages which consist of
more than a single MIME  part. NeoMutt can be  configured to ask before  sending
PGP/MIME messages when inline (traditional) would not work.

Also see the $pgp_mime_auto variable.

Also note that using  the old-style PGP message  format is strongly  deprecated.
(PGP only)

  3.268. pgp_check_exit

Type: boolean
Default: yes

If set, NeoMutt will check the exit  code of the PGP subprocess when signing  or
encrypting. A non-zero exit code means that the subprocess failed. (PGP only)

  3.269. pgp_check_gpg_decrypt_status_fd

Type: boolean
Default: yes

If  set,   NeoMutt   will  check   the   status  file   descriptor   output   of
$pgp_decrypt_command and $pgp_decode_command for  GnuPG status codes  indicating
successful decryption.  This will  check for  the presence  of  DECRYPTION_OKAY,
absence  of  DECRYPTION_FAILED,  and  that  all  PLAINTEXT  occurs  between  the
BEGIN_DECRYPTION and END_DECRYPTION status codes.

If  unset,   NeoMutt  will   instead  match   the  status   fd  output   against
$pgp_decryption_okay. (PGP only)

  3.270. pgp_clear_sign_command

Type: command
Default: (empty)

This format is used to create an old-style "clearsigned" PGP message. Note  that
the use of this format is strongly deprecated.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences.  Note that  in this  case, %r  expands to  the  search
string, which is  a list of  one or more  quoted values such  as email  address,
name, or keyid. (PGP only)

  3.271. pgp_decode_command

Type: command
Default: (empty)

This format strings specifies a command which is used to decode  application/pgp
attachments.

The PGP command formats have their own set of printf(3)-like sequences:

+----+-------------------------------------------------------------------------+
| %a | The value of $pgp_sign_as if set, otherwise the value of                |
|    | $pgp_default_key.                                                       |
+----+-------------------------------------------------------------------------+
| %f | Expands to the name of a file containing a message.                     |
+----+-------------------------------------------------------------------------+
| %p | Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty string |
|    | otherwise. Note: This may be used with a %<...> construct.              |
+----+-------------------------------------------------------------------------+
| %r | One or more key IDs (or fingerprints if available).                     |
+----+-------------------------------------------------------------------------+
| %s | Expands to the name of a file containing the signature part of a        |
|    | multipart/signed attachment when verifying it.                          |
+----+-------------------------------------------------------------------------+

(PGP only)

  3.272. pgp_decrypt_command

Type: command
Default: (empty)

This command is used to decrypt a PGP encrypted message.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences. (PGP only)

Note: When decrypting messages using gpg, a pinentry program needs to be invoked
unless the  password is  cached within  gpg-agent. Currently,  the  pinentry-tty
program (usually  distributed with  gpg)  isn't suitable  for being  invoked  by
NeoMutt. You are  encouraged to  use a different  pinentry-program when  running
NeoMutt in order to avoid problems.

See also: https://github.com/neomutt/neomutt/issues/1014

  3.273. pgp_decryption_okay

Type: regular expression
Default: (empty)

If you assign  text to  this variable,  then an  encrypted PGP  message is  only
considered  successfully  decrypted  if  the  output  from  $pgp_decrypt_command
contains the text. This is used to protect against a spoofed encrypted  message,
with multipart/encrypted headers  but containing  a block that  is not  actually
encrypted. (e.g. simply signed and ascii armored text).

Note that if $pgp_check_gpg_decrypt_status_fd is set, this variable is  ignored.
(PGP only)

  3.274. pgp_default_key

Type: string
Default: (empty)

This is the  default key-pair to  use for PGP  operations. It will  be used  for
encryption (see $postpone_encrypt and $pgp_self_encrypt).

It will also be used for signing unless $pgp_sign_as is set.

(PGP only)

  3.275. pgp_encrypt_only_command

Type: command
Default: (empty)

This command is used to encrypt a body part without signing it.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences.  Note that  in this  case, %r  expands to  the  search
string, which is  a list of  one or more  quoted values such  as email  address,
name, or keyid. (PGP only)

  3.276. pgp_encrypt_sign_command

Type: command
Default: (empty)

This command is used to both sign and encrypt a body part.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences. (PGP only)

  3.277. pgp_entry_format

Type: string
Default: "%4n %t%f %4l/0x%k %-4a %2c %u"

This variable  allows  you to  customize  the PGP  key  selection menu  to  your
personal taste.  If $crypt_use_gpgme  is  set, then  it  applies to  S/MIME  key
selection menu also. This  string is similar to  $index_format, but has its  own
set of printf(3)-like sequences:

+--------+-----------------------------------------------------------------+
| %a     | Algorithm                                                       |
+--------+-----------------------------------------------------------------+
| %c     | Capabilities                                                    |
+--------+-----------------------------------------------------------------+
| %f     | Flags                                                           |
+--------+-----------------------------------------------------------------+
| %i     | Key fingerprint (or long key id if non-existent)                |
+--------+-----------------------------------------------------------------+
| %k     | Key id                                                          |
+--------+-----------------------------------------------------------------+
| %l     | Key length                                                      |
+--------+-----------------------------------------------------------------+
| %n     | Number                                                          |
+--------+-----------------------------------------------------------------+
| %p     | Protocol                                                        |
+--------+-----------------------------------------------------------------+
| %t     | Trust/validity of the key-uid association                       |
+--------+-----------------------------------------------------------------+
| %u     | User id                                                         |
+--------+-----------------------------------------------------------------+
| %[<s>] | Date of the key where <s> is an strftime(3) expression          |
+--------+-----------------------------------------------------------------+
| %>X    | Right justify the rest of the string and pad with character "X" |
+--------+-----------------------------------------------------------------+
| %|X    | Pad to the end of the line with character "X"                   |
+--------+-----------------------------------------------------------------+
| %*X    | Soft-fill with character "X" as pad                             |
+--------+-----------------------------------------------------------------+

See the  section "Sending  Cryptographically Signed/Encrypted  Messages" of  the
user manual for the meaning of the letters some of these sequences expand to.

(Crypto only) or (PGP only when GPGME disabled)

  3.278. pgp_export_command

Type: command
Default: (empty)

This command is used to export a public key from the user's key ring.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences. (PGP only)

  3.279. pgp_get_keys_command

Type: command
Default: (empty)

This command  is  invoked  whenever  NeoMutt  needs  to  fetch  the  public  key
associated  with   an   email   address.   Of   the   sequences   supported   by
$pgp_decode_command, %r  is  the only  printf(3)-like  sequence used  with  this
format. Note that in this case, %r expands to the email address, not the  public
key ID (the key ID is unknown,  which is why NeoMutt is invoking this  command).
(PGP only)

  3.280. pgp_good_sign

Type: regular expression
Default: (empty)

If you assign a text to this  variable, then a PGP signature is only  considered
verified if  the output  from $pgp_verify_command  contains the  text. Use  this
variable if the exit code  from the command is 0  even for bad signatures.  (PGP
only)

  3.281. pgp_ignore_subkeys

Type: boolean
Default: yes

Setting this variable will cause NeoMutt to ignore OpenPGP subkeys. Instead, the
principal key will inherit the subkeys' capabilities. Unset this if you want  to
play interesting key selection games. (PGP only)

  3.282. pgp_import_command

Type: command
Default: (empty)

This command is used to import a key  from a message into the user's public  key
ring.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences. (PGP only)

  3.283. pgp_list_pubring_command

Type: command
Default: (empty)

This command is used to list the  public key ring's contents. The output  format
must be analogous to the one used by

gpg --list-keys --with-colons --with-fingerprint

Note: gpg's fixed-list-mode option should not  be used. It produces a  different
date format which may result in NeoMutt showing incorrect key generation dates.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences. (PGP only)

  3.284. pgp_list_secring_command

Type: command
Default: (empty)

This command is used to list the  secret key ring's contents. The output  format
must be analogous to the one used by:

gpg --list-keys --with-colons --with-fingerprint

Note: gpg's fixed-list-mode option should not  be used. It produces a  different
date format which may result in NeoMutt showing incorrect key generation dates.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences. (PGP only)

  3.285. pgp_key_sort

Type: sort order
Default: address

Specifies how the entries in the pgp menu are sorted.

+---------+-------------+
| Value   | Sort by     |
+---------+-------------+
| address | Address     |
+---------+-------------+
| date    | Date        |
+---------+-------------+
| keyid   | Key id      |
+---------+-------------+
| trust   | Trust level |
+---------+-------------+

Prefixing the value with reverse- sorts  the entries in reverse order, e.g.  set
pgp_key_sort = "reverse-date"

(PGP only)

  3.286. pgp_long_ids

Type: boolean
Default: yes

If set, use 64-bit PGP  key IDs, if unset use  the normal 32-bit key IDs.  NOTE:
Internally, NeoMutt has transitioned to using fingerprints (or long key IDs as a
fallback). This option  now only  controls the  display of  key IDs  in the  key
selection menu and a few other places. (PGP only)

  3.287. pgp_mime_auto

Type: quadoption
Default: ask-yes

This option controls whether NeoMutt will prompt you for automatically sending a
(signed/encrypted) message using PGP/MIME  when inline (traditional) fails  (for
any reason).

Also note that using  the old-style PGP message  format is strongly  deprecated.
(PGP only)

  3.288. pgp_reply_inline

Type: boolean
Default: no

Setting this variable will cause NeoMutt  to always attempt to create an  inline
(traditional) message when replying to  a message which is PGP  encrypted/signed
inline. This  can be  overridden by  use of  the pgp  menu, when  inline is  not
required. This option does not automatically detect if the (replied-to)  message
is inline; instead it relies on NeoMutt internals for previously checked/flagged
messages.

Note that NeoMutt might automatically use PGP/MIME for messages which consist of
more than a single MIME  part. NeoMutt can be  configured to ask before  sending
PGP/MIME messages when inline (traditional) would not work.

Also see the $pgp_mime_auto variable.

Also note that using  the old-style PGP message  format is strongly  deprecated.
(PGP only)

  3.289. pgp_retainable_sigs

Type: boolean
Default: no

If set, signed and  encrypted messages will  consist of nested  multipart/signed
and multipart/encrypted body parts.

This is useful for applications like  encrypted and signed mailing lists,  where
the outer layer  (multipart/encrypted) can  be easily removed,  while the  inner
multipart/signed part is retained. (PGP only)

  3.290. pgp_self_encrypt

Type: boolean
Default: yes

When set,  PGP  encrypted messages  will  also be  encrypted  using the  key  in
$pgp_default_key. (PGP only)

  3.291. pgp_show_unusable

Type: boolean
Default: yes

If set, NeoMutt will display non-usable keys on the PGP key selection menu. This
includes keys which  have been  revoked, have expired,  or have  been marked  as
"disabled" by the user. (PGP only)

  3.292. pgp_sign_as

Type: string
Default: (empty)

If you have a different key pair to use for signing, you should set this to  the
signing key.  Most  people  will  only  need  to  set  $pgp_default_key.  It  is
recommended that you use the keyid  form to specify your key (e.g.  0x00112233).
(PGP only)

  3.293. pgp_sign_command

Type: command
Default: (empty)

This command is used to create the detached PGP signature for a multipart/signed
PGP/MIME body part.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences. (PGP only)

  3.294. pgp_strict_enc

Type: boolean
Default: yes

If  set,  NeoMutt  will  automatically   encode  PGP/MIME  signed  messages   as
quoted-printable. Please note that unsetting this variable may lead to  problems
with non-verifyable PGP signatures, so only change this if you know what you are
doing. (PGP only)

  3.295. pgp_timeout

Type: number (long)
Default: 300

The number of seconds after which a  cached passphrase will expire if not  used.
(PGP only)

  3.296. pgp_use_gpg_agent

Type: boolean
Default: yes

If  set,  NeoMutt  expects  a  gpg-agent(1)  process  will  handle  private  key
passphrase prompts. If unset, NeoMutt will prompt for the passphrase and pass it
via stdin to the pgp command.

Note that as of  version 2.1, GnuPG automatically  spawns an agent and  requires
the agent be used for passphrase management. Since that version is  increasingly
prevalent, this variable now defaults set.

NeoMutt works with a GUI or curses  pinentry program. A TTY pinentry should  not
be used.

If you are using an older version of GnuPG without an agent running, or  another
encryption program without an agent, you will need to unset this variable.  (PGP
only)

  3.297. pgp_verify_command

Type: command
Default: (empty)

This command is used to verify PGP signatures.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences. (PGP only)

  3.298. pgp_verify_key_command

Type: command
Default: (empty)

This command is used to verify key information from the key selection menu.

This is  a  format string,  see  the $pgp_decode_command  command  for  possible
printf(3)-like sequences. (PGP only)

  3.299. pipe_decode

Type: boolean
Default: no

Used in connection with  the <pipe-message> function.  When unset, NeoMutt  will
pipe the messages without any preprocessing.  When set, NeoMutt will attempt  to
decode the messages first.

Also see $pipe_decode_weed, which controls  whether headers will be weeded  when
this is set.

  3.300. pipe_decode_weed

Type: boolean
Default: yes

For <pipe-message>,  when $pipe_decode  is set,  this further  controls  whether
NeoMutt will weed headers.

  3.301. pipe_sep

Type: string
Default: "\n"

The separator to add between messages when  piping a list of tagged messages  to
an external Unix command.

  3.302. pipe_split

Type: boolean
Default: no

Used in connection with the  <pipe-message> function following <tag-prefix>.  If
this variable  is unset,  when piping  a list  of tagged  messages NeoMutt  will
concatenate the messages and will pipe them all concatenated. When set,  NeoMutt
will pipe the messages one by one. In  both cases the messages are piped in  the
current sorted order, and the $pipe_sep separator is added after each message.

  3.303. pop_auth_try_all

Type: boolean
Default: yes

If set,  NeoMutt will  try  all available  authentication methods.  When  unset,
NeoMutt will only  fall back  to other  authentication methods  if the  previous
methods are  unavailable. If  a method  is available  but authentication  fails,
NeoMutt will not connect to the POP server.

  3.304. pop_authenticators

Type: string list
Default: (empty)

This is a colon-separated list of authentication methods NeoMutt may attempt  to
use to  log  in  to an  POP  server,  in  the order  NeoMutt  should  try  them.
Authentication methods are  either "user",  "apop" or any  SASL mechanism,  e.g.
"digest-md5", "gssapi" or "cram-md5". This  option is case-insensitive. If  this
option is unset (the default) NeoMutt  will try all available methods, in  order
from most-secure to least-secure.

Example:

set pop_authenticators="digest-md5:apop:user"

  3.305. pop_check_interval

Type: number
Default: 60

This variable configures how often (in seconds) NeoMutt should look for new mail
in the currently selected mailbox if it is a POP mailbox.

  3.306. pop_delete

Type: quadoption
Default: ask-no

If set, NeoMutt will delete successfully downloaded messages from the POP server
when using the <fetch-mail> function. When unset, NeoMutt will download messages
but also leave them on the POP server.

  3.307. pop_host

Type: string
Default: (empty)

The name of your POP server for the <fetch-mail> function. You can also  specify
an alternative port, username and password, i.e.:

[pop[s]://][username[:password]@]popserver[:port]

where "[...]" denotes an optional part.

  3.308. pop_last

Type: boolean
Default: no

If this variable  is set, NeoMutt  will try to  use the "LAST"  POP command  for
retrieving only unread messages from the POP server when using the  <fetch-mail>
function.

  3.309. pop_oauth_refresh_command

Type: command
Default: (empty)

The command  to run  to generate  an OAUTH  refresh token  for authorizing  your
connection to your  POP server.  This command will  be run  on every  connection
attempt that  uses the  OAUTHBEARER authentication  mechanism. See  "oauth"  for
details.

  3.310. pop_pass

Type: string
Default: (empty)

Specifies the password for your POP  account. If unset, NeoMutt will prompt  you
for your password when you open a POP mailbox.

Warning: you  should only  use  this option  when you  are  on a  fairly  secure
machine, because the superuser can read your neomuttrc even if you are the  only
one who can read the file.

  3.311. pop_reconnect

Type: quadoption
Default: ask-yes

Controls whether or not NeoMutt will try  to reconnect to the POP server if  the
connection is lost.

  3.312. pop_user

Type: string
Default: (empty)

Your login name on the POP server.

This variable defaults to your user name on the local machine.

  3.313. post_moderated

Type: quadoption
Default: ask-yes

If set to yes, NeoMutt will post article to newsgroup that have not  permissions
to posting (e.g. moderated).  Note: if news server  does not support posting  to
that newsgroup or totally read-only, that posting will not have an effect.

  3.314. postpone

Type: quadoption
Default: ask-yes

Controls whether or not  messages are saved in  the $postponed mailbox when  you
elect not to send immediately. If set to ask-yes or ask-no, you will be prompted
with "Save (postpone) draft message?" when quitting from the "compose" screen.

Also see the $recall variable.

  3.315. postpone_encrypt

Type: boolean
Default: no

When  set,  postponed  messages   that  are  marked   for  encryption  will   be
self-encrypted. NeoMutt will first try to  encrypt using the value specified  in
$pgp_default_key or $smime_default_key. (Crypto only)

  3.316. postponed

Type: mailbox
Default: "~/postponed"

NeoMutt allows you to  indefinitely "postpone sending a  message" which you  are
editing. When you choose to postpone a message, NeoMutt saves it in the  mailbox
specified by this variable.

Also see the $postpone variable.

  3.317. preconnect

Type: string
Default: (empty)

If set,  a  shell  command to  be  executed  if NeoMutt  fails  to  establish  a
connection to the server. This is useful for setting up secure connections, e.g.
with ssh(1). If the command returns  a nonzero status, NeoMutt gives up  opening
the server. Example:

set preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net \
sleep 20 < /dev/null > /dev/null"

Mailbox "foo" on "mailhost.net" can now be reached as "{localhost:1234}foo".

Note: For this example to work, you must be able to log in to the remote machine
without having to enter a password.

  3.318. preferred_languages

Type: string list
Default: (empty)

This variable  specifies a  list of  comma-separated languages.  RFC8255 :  user
preferred languages to be searched in parts and display. Example:

set preferred_languages="en,fr,de"

  3.319. print

Type: quadoption
Default: ask-no

Controls whether or not NeoMutt really prints messages. This is set to  "ask-no"
by default, because some people accidentally hit "p" often.

  3.320. print_command

Type: command
Default: "lpr"

This specifies the command pipe that should be used to print messages.

  3.321. print_decode

Type: boolean
Default: yes

Used in connection with the <print-message> function. If this option is set, the
message is decoded  before it  is passed to  the external  command specified  by
$print_command. If this option  is unset, no processing  will be applied to  the
message when printing it. The latter setting may be useful if you are using some
advanced printer filter  which is able  to properly format  e-mail messages  for
printing.

Also see $print_decode_weed, which controls whether headers will be weeded  when
this is set.

  3.322. print_decode_weed

Type: boolean
Default: yes

For <print-message>, when  $print_decode is set,  this further controls  whether
NeoMutt will weed headers.

  3.323. print_split

Type: boolean
Default: no

Used in connection with the <print-message> function. If this option is set, the
command specified by $print_command is executed  once for each message which  is
to be printed. If this option is unset, the command specified by  $print_command
is executed only once, and all the  messages are concatenated, with a form  feed
as the message separator.

Those who use the enscript(1) program's mail-printing mode will most likely want
to set this option.

  3.324. prompt_after

Type: boolean
Default: yes

If you  use an  external $pager,  setting this  variable will  cause NeoMutt  to
prompt you for a command when the pager exits rather than returning to the index
menu. If unset, NeoMutt will  return to the index  menu when the external  pager
exits.

  3.325. query_command

Type: command
Default: (empty)

This specifies the command  NeoMutt will use to  make external address  queries.
The string may contain a "%s", which  will be substituted with the query  string
the user types. NeoMutt will add  quotes around the string substituted for  "%s"
automatically according to shell quoting rules, so you should avoid adding  your
own. If no "%s" is found in the string, NeoMutt will append the user's query  to
the        end         of         the        string.         See         "query"
(https://neomutt.org/guide/advancedusage.html#query) for more information.

  3.326. query_format

Type: string
Default: "%3i %t %-25N %-25E | %C%> %Y"

This  variable  describes  the  format  of  the  "query"  menu.  The   following
printf(3)-style sequences are understood:

+-----+-------------------------------------------------------+
| %A  | Full Address (Name and Email)                         |
+-----+-------------------------------------------------------+
| %C  | Comment                                               |
+-----+-------------------------------------------------------+
| %E  | Email Address                                         |
+-----+-------------------------------------------------------+
| %i  | Index number                                          |
+-----+-------------------------------------------------------+
| %N  | Real name                                             |
+-----+-------------------------------------------------------+
| %t  | Alias is tagged (selected)                            |
+-----+-------------------------------------------------------+
| %Y  | User-defined tags (labels)                            |
+-----+-------------------------------------------------------+
| %>X | Right justify the rest of the string and pad with "X" |
+-----+-------------------------------------------------------+
| %|X | Pad to the end of the line with "X"                   |
+-----+-------------------------------------------------------+
| %*X | Soft-fill with character "X" as pad                   |
+-----+-------------------------------------------------------+

For an explanation of "soft-fill", see the $index_format documentation.

The following sequences are deprecated; they will be removed in the future.

+----+----------------+
| %a | Use %E instead |
+----+----------------+
| %c | Use %i instead |
+----+----------------+
| %e | Use %C instead |
+----+----------------+
| %n | Use %N instead |
+----+----------------+

  3.327. quit

Type: quadoption
Default: yes

This variable controls whether "quit" and "exit" actually quit from NeoMutt.  If
this option is set, they do quit, if it is unset, they have no effect, and if it
is set to ask-yes or ask-no, you  are prompted for confirmation when you try  to
quit.

In order to  quit from  NeoMutt if  this variable is  unset, you  must send  the
signal SIGINT to NeoMutt. This can usually be achieved by pressing CTRL-C in the
terminal.

  3.328. quote_regex

Type: regular expression
Default: "^([ \t]*[|>:}#])+"

A regular expression used in the internal pager to determine quoted sections  of
text in  the body  of a  message.  Quoted text  may be  filtered out  using  the
<toggle-quoted> command, or colored  according to the  "color quoted" family  of
directives.

Higher levels of  quoting may  be colored differently  ("color quoted1",  "color
quoted2", etc.). The quoting level is determined by removing the last  character
from the matched text and recursively reapplying the regular expression until it
fails to produce a match.

Match detection may be overridden by the $smileys regular expression.

  3.329. read_inc

Type: number
Default: 10

If set to  a value  greater than  0, NeoMutt will  display which  message it  is
currently on when reading  a mailbox or when  performing search actions such  as
search and limit. The message is printed after this many messages have been read
or searched (e.g.,  if set to  25, NeoMutt will  print a message  when it is  at
message 25, and then again when it  gets to message 50). This variable is  meant
to indicate progress when  reading or searching large  mailboxes which may  take
some time. When set to 0, only  a single message will appear before the  reading
the mailbox.

Also see  the $write_inc,  $net_inc  and $time_inc  variables and  the  "tuning"
section of the manual for performance considerations.

  3.330. read_only

Type: boolean
Default: no

If set, all folders are opened in read-only mode.

  3.331. real_name

Type: string
Default: (empty)

This variable  specifies what  "real" or  "personal" name  should be  used  when
sending messages.

If not specified,  then the user's  "real name" will  be read from  /etc/passwd.
This option will not be used, if "$from" is set.

  3.332. recall

Type: quadoption
Default: ask-yes

Controls whether or not NeoMutt recalls postponed messages when composing a  new
message.

Setting this variable to yes is not generally useful, and thus not  recommended.
Note that the <recall-message> function can be used to manually recall postponed
messages.

Also see $postponed variable.

  3.333. record

Type: mailbox
Default: "~/sent"

This specifies the file  into which your outgoing  messages should be  appended.
(This is meant as  the primary method  for saving a copy  of your messages,  but
another way to do this  is using the "my_hdr" command  to create a "Bcc:"  field
with your email address in it.)

The value of $record is overridden by the $force_name and $save_name  variables,
and the "fcc-hook" command. Also see $copy and $write_bcc.

  3.334. reflow_space_quotes

Type: boolean
Default: yes

This option controls how quotes from format=flowed messages are displayed in the
pager and when replying  (with $text_flowed unset). When  set, this option  adds
spaces after each level of quote marks, turning ">>>foo" into "> > > foo".

Note: If $reflow_text  is unset, this  option has no  effect. Also, this  option
does not affect replies when $text_flowed is set.

  3.335. reflow_text

Type: boolean
Default: yes

When  set,  NeoMutt  will  reformat   paragraphs  in  text/plain  parts   marked
format=flowed. If unset, NeoMutt will display paragraphs unaltered from how they
appear in the message body. See RFC3676 for details on the format=flowed format.

Also see $reflow_wrap, and $wrap.

  3.336. reflow_wrap

Type: number
Default: 78

This variable controls the maximum paragraph width when reformatting  text/plain
parts when $reflow_text is set. When the value is 0, paragraphs will be  wrapped
at the  terminal's right  margin.  A positive  value  sets the  paragraph  width
relative to the left margin. A  negative value set the paragraph width  relative
to the right margin.

Be aware that the reformatted lines of  a paragraph are still subject to  $wrap.
This means  if $reflow_wrap  is 40  and $wrap  is 30,  then the  paragraph  gets
reformatted to 40 characters  a line (due to  $reflow_wrap) and afterwards  each
40-character-line is  split  at  30  characters (due  to  $wrap),  resulting  in
alternating line lengths of 30 and 10 characters.

Also see $wrap.

  3.337. reply_regex

Type: regular expression
Default: "^((re|aw|sv)(\[[0-9]+\])*:[ \t]*)*"

A regular  expression  used  to  recognize reply  messages  when  threading  and
replying. The default value corresponds to the standard Latin "Re:" prefix.

This value may  have been localized  by the translator  for your locale,  adding
other prefixes that are common in the  locale. You can add your own prefixes  by
appending inside "^(re)". For example: "^(re|sv)" or "^(re|aw|sv)".

The second  parenthesized  expression matches  zero  or more  bracketed  numbers
following the  prefix, such  as "Re[1]:  ". The  initial "\\["  means a  literal
left-bracket character. Note the  backslash must be doubled  when used inside  a
double quoted string in the neomuttrc. "[0-9]+" means one or more numbers. "\\]"
means a literal right-bracket. Finally the whole parenthesized expression has  a
"*" suffix, meaning it can occur zero or more times.

The last part matches a colon followed by an optional space or tab. Note "\t" is
converted to a literal tab  inside a double quoted string.  If you use a  single
quoted string, you would have to type an actual tab character, and would need to
convert the double-backslashes to single backslashes.

Note: the result of this regex match against the subject is stored in the header
cache. Mutt  isn't smart  enough to  invalidate a  header cache  entry based  on
changing $reply_regex, so if you aren't seeing correct values in the index,  try
temporarily turning off the header cache.  If that fixes the problem, then  once
the variable is set  to your liking,  remove your stale  header cache files  and
turn the header cache back on.

  3.338. reply_self

Type: boolean
Default: no

If unset and you are replying to a message sent by you, NeoMutt will assume that
you want to reply to the recipients of that message rather than to yourself.

Also see the "alternates" command.

  3.339. reply_to

Type: quadoption
Default: ask-yes

If set, when replying to a message,  NeoMutt will use the address listed in  the
Reply-to: header  as the  recipient of  the reply.  If unset,  it will  use  the
address in the From: header field instead.  This option is useful for reading  a
mailing list that sets the  Reply-To: header field to  the list address and  you
want to send a private message to the author of a message.

  3.340. reply_with_xorig

Type: boolean
Default: no

This variable provides a toggle. When active, the From: header will be extracted
from the  current mail's  'X-Original-To:' header.  This setting  does not  have
precedence over "reverse_real_name".

Assuming 'fast_reply'  is disabled,  this option  will prompt  the user  with  a
prefilled From: header.

  3.341. resolve

Type: boolean
Default: yes

When set,  the cursor  in a  list will  be automatically  advanced to  the  next
(possibly undeleted) message/attachment/entry whenever  a command that  modifies
the current message/attachment/entry is executed.

Examples of such commands are tagging a message, deleting an entry, or saving an
attachment.

  3.342. resume_draft_files

Type: boolean
Default: no

If set,  draft  files  (specified by  -H  on  the command  line)  are  processed
similarly to when resuming a postponed message. Recipients are not prompted for;
send-hooks are  not  evaluated; no  alias  expansion takes  place;  user-defined
headers and signatures are not added to the message.

  3.343. resume_edited_draft_files

Type: boolean
Default: yes

If set, draft files previously edited (via -E -H on the command line) will  have
$resume_draft_files automatically set when they are used as a draft file again.

The  first  time   a  draft  file   is  saved,  NeoMutt   will  add  a   header,
X-Mutt-Resume-Draft to the saved file. The next time the draft file is read  in,
if NeoMutt sees the header, it will set $resume_draft_files.

This option is  designed to prevent  multiple signatures, user-defined  headers,
and other processing effects from being made multiple times to the draft file.

  3.344. reverse_alias

Type: boolean
Default: no

This variable controls whether or not  NeoMutt will display the "personal"  name
from your  aliases in  the index  menu if  it finds  an alias  that matches  the
message's sender. For example, if you have the following alias:

alias juser abd30425@somewhere.net (Joe User)

and then you receive mail which contains the following header:

From: abd30425@somewhere.net

It  would  be   displayed  in  the   index  menu  as   "Joe  User"  instead   of
"abd30425@somewhere.net." This is useful when the person's e-mail address is not
human friendly.

  3.345. reverse_name

Type: boolean
Default: no

It may sometimes arrive  that you receive  mail to a  certain machine, move  the
messages to another machine, and reply to some the messages from there. If  this
variable is set, the default From: line of the reply messages is built using the
address where you  received the  messages you are  replying to  if that  address
matches your "alternates". If the variable  is unset, or the address that  would
be used doesn't match your "alternates", the From: line will use your address on
the current machine.

Also see the "alternates" command and $reverse_real_name.

  3.346. reverse_real_name

Type: boolean
Default: yes

This variable fine-tunes the behavior of the $reverse_name feature.

When it is unset, NeoMutt will remove the real name part of a matching  address.
This allows the use  of the email  address without having to  also use what  the
sender put in the real name field.

When it is set, NeoMutt will use the matching address as-is.

In either case, a missing real name will be filled in afterwards using the value
of $real_name.

  3.347. rfc2047_parameters

Type: boolean
Default: yes

When this variable is set, NeoMutt will decode RFC2047-encoded MIME  parameters.
You want to set this variable when  NeoMutt suggests you to save attachments  to
files named like:

=?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?=
=?utf-8?Q?z=C4=99ta.png?=

When this variable is  set interactively, the change  won't be active until  you
change folders.

Note that  this  use of  RFC2047's  encoding  is explicitly  prohibited  by  the
standard, but  nevertheless  encountered in  the  wild and  produced  by,  e.g.,
Outlook.

Also note that  setting this  parameter will not  have the  effect that  NeoMutt
generates this kind of encoding.  Instead, NeoMutt will unconditionally use  the
encoding specified in RFC2231.

  3.348. save_address

Type: boolean
Default: no

If set, NeoMutt  will take  the sender's full  address when  choosing a  default
folder for saving a mail. If $save_name or $force_name is set too, the selection
of the Fcc folder will be changed as well.

  3.349. save_empty

Type: boolean
Default: yes

When unset,  mailboxes which  contain no  saved messages  will be  removed  when
closed (the exception is $spool_file which is never removed). If set,  mailboxes
are never removed.

Note: This only applies to mbox and MMDF folders, NeoMutt does not delete MH and
Maildir directories.

  3.350. save_history

Type: number
Default: 0

This variable  controls the  size of  the history  (per category)  saved in  the
$history_file file.

Setting this to a value greater  than $history is possible. However, there  will
never be more than $history entries to select from even if more are recorded  in
the history file.

  3.351. save_name

Type: boolean
Default: no

This variable controls how  copies of outgoing messages  are saved. When set,  a
check is made  to see if  a mailbox  specified by the  recipient address  exists
(this is done  by searching  for a  mailbox in  the $folder  directory with  the
username part of  the recipient address).  If the mailbox  exists, the  outgoing
message will be saved  to that mailbox,  otherwise the message  is saved to  the
$record mailbox.

Also see the $force_name variable.

  3.352. save_unsubscribed

Type: boolean
Default: no

When set, info about  unsubscribed newsgroups will be  saved into "newsrc"  file
and into cache.

  3.353. score

Type: boolean
Default: yes

When this  variable is  unset, scoring  is turned  off. This  can be  useful  to
selectively disable scoring for certain folders when the $score_threshold_delete
variable and related are used.

  3.354. score_threshold_delete

Type: number
Default: -1

Messages which have been assigned  a score equal to or  lower than the value  of
this variable are automatically  marked for deletion  by NeoMutt. Since  NeoMutt
scores are always greater  than or equal  to zero, the  default setting of  this
variable will never mark a message for deletion.

  3.355. score_threshold_flag

Type: number
Default: 9999

Messages which  have  been  assigned a  score  greater  than or  equal  to  this
variable's value are automatically marked "flagged".

  3.356. score_threshold_read

Type: number
Default: -1

Messages which have been assigned  a score equal to or  lower than the value  of
this variable are automatically marked as read by NeoMutt. Since NeoMutt  scores
are always greater than or equal to  zero, the default setting of this  variable
will never mark a message read.

  3.357. search_context

Type: number
Default: 0

For the pager, this variable specifies  the number of lines shown before  search
results. By default, search results will be top-aligned.

  3.358. send_charset

Type: string list
Default: "us-ascii:iso-8859-1:utf-8"

A colon-delimited list of character sets for outgoing messages. NeoMutt will use
the first character set into  which the text can  be converted exactly. If  your
$charset is not "iso-8859-1"  and recipients may not  understand "UTF-8", it  is
advisable to include in the list  an appropriate widely used standard  character
set (such as "iso-8859-2", "koi8-r" or "iso-2022-jp") either instead of or after
"iso-8859-1".

In case the  text can't be  converted into  one of these  exactly, NeoMutt  uses
$charset as a fallback.

  3.359. sendmail

Type: command
Default: "/usr/sbin/sendmail -oem -oi"

Specifies the  program and  arguments  used to  deliver  mail sent  by  NeoMutt.
NeoMutt expects that  the specified program  interprets additional arguments  as
recipient addresses. NeoMutt appends all recipients after adding a --  delimiter
(if  not  already  present).  Additional  flags,  such  as  for  $use_8bit_mime,
$use_envelope_from,  $dsn_notify,  or  $dsn_return  will  be  added  before  the
delimiter.

Note: This command is invoked differently  from most other commands in  NeoMutt.
It is tokenized by space,  and invoked directly via  execvp(3) with an array  of
arguments - so commands or arguments with spaces in them are not supported.  The
shell is not used to run the command, so shell quoting is also not supported.

See also: $write_bcc.

  3.360. sendmail_wait

Type: number
Default: 0

Specifies the number  of seconds  to wait for  the $sendmail  process to  finish
before giving up and putting delivery in the background.

NeoMutt interprets the value of this variable as follows:

+----+--------------------------------------------------------------------+
| >0 | number of seconds to wait for sendmail to finish before continuing |
+----+--------------------------------------------------------------------+
| 0  | wait forever for sendmail to finish                                |
+----+--------------------------------------------------------------------+
| <0 | always put sendmail in the background without waiting              |
+----+--------------------------------------------------------------------+

Note that if you specify a value other  than 0, the output of the child  process
will be put in a temporary file. If there is some error, you will be informed as
to where to find the output.

  3.361. shell

Type: command
Default: "/bin/sh"

Command to use when spawning a subshell. If not specified, then the user's login
shell from /etc/passwd is used.

  3.362. show_multipart_alternative

Type: string
Default: (empty)

When set to info,  the multipart/alternative information is  shown. When set  to
inline, all  of  the alternatives  are  displayed.  When not  set,  the  default
behavior is to show only the chosen alternative.

  3.363. show_new_news

Type: boolean
Default: yes

If set, news server will  be asked for new  newsgroups on entering the  browser.
Otherwise, it will be done only once for a news server. Also controls whether or
not number of new articles of subscribed newsgroups will be then checked.

  3.364. show_only_unread

Type: boolean
Default: no

If set,  only  subscribed  newsgroups  that  contain  unread  articles  will  be
displayed in browser.

  3.365. sidebar_component_depth

Type: number
Default: 0

By default the  sidebar will show  the mailbox's path,  relative to the  $folder
variable. This specifies the number of  parent directories to hide from  display
in the sidebar. For example: If a  maildir is normally displayed in the  sidebar
as dir1/dir2/dir3/maildir, setting sidebar_component_depth=2 will display it  as
dir3/maildir, having truncated the 2 highest directories.

See also: $sidebar_short_path

  3.366. sidebar_delim_chars

Type: string
Default: "/."

This contains the list  of characters which  you would like  to treat as  folder
separators for displaying paths in the sidebar.

Local mail is often arranged in directories: 'dir1/dir2/mailbox'.

set sidebar_delim_chars='/'

IMAP mailboxes are often named: 'folder1.folder2.mailbox'.

set sidebar_delim_chars='.'

See also: $sidebar_short_path, $sidebar_folder_indent, $sidebar_indent_string.

  3.367. sidebar_divider_char

Type: string
Default: "|"

The default is a Unicode vertical line.

This specifies the characters to be drawn between the sidebar (when visible) and
the  other  NeoMutt  panels.  ASCII  and  Unicode  line-drawing  characters  are
supported.

The divider char can be set to an  empty string for some extra space. If  empty,
setting the sidebar_background color may help distinguish the sidebar from other
panels.

  3.368. sidebar_folder_indent

Type: boolean
Default: no

Set this to indent mailboxes in the sidebar.

See also: $sidebar_short_path, $sidebar_indent_string, $sidebar_delim_chars.

  3.369. sidebar_format

Type: string
Default: "%D%*  %n"

This variable  allows you  to  customize the  sidebar  display. This  string  is
similar to $index_format, but has its own set of printf(3)-like sequences:

+-----+-----+------------------------------------------------------------------+
| %a  |     | Alert: 1 if user is notified of new mail                         |
+-----+-----+------------------------------------------------------------------+
| %B  |     | Name of the mailbox                                              |
+-----+-----+------------------------------------------------------------------+
| %d  | * @ | Number of deleted messages in the mailbox                        |
+-----+-----+------------------------------------------------------------------+
| %D  |     | Descriptive name of the mailbox                                  |
+-----+-----+------------------------------------------------------------------+
| %F  | *   | Number of flagged messages in the mailbox                        |
+-----+-----+------------------------------------------------------------------+
| %L  | * @ | Number of messages after limiting                                |
+-----+-----+------------------------------------------------------------------+
| %n  |     | "N" if mailbox has new mail, " " (space) otherwise               |
+-----+-----+------------------------------------------------------------------+
| %N  | *   | Number of unread messages in the mailbox (seen or unseen)        |
+-----+-----+------------------------------------------------------------------+
| %o  | *   | Number of old messages in the mailbox (unread, seen)             |
+-----+-----+------------------------------------------------------------------+
| %p  |     | Poll: 1 if Mailbox is checked for new mail                       |
+-----+-----+------------------------------------------------------------------+
| %r  | *   | Number of read messages in the mailbox (read, seen)              |
+-----+-----+------------------------------------------------------------------+
| %S  | *   | Size of mailbox (total number of messages)                       |
+-----+-----+------------------------------------------------------------------+
| %t  | * @ | Number of tagged messages in the mailbox                         |
+-----+-----+------------------------------------------------------------------+
| %Z  | *   | Number of new messages in the mailbox (unread, unseen)           |
+-----+-----+------------------------------------------------------------------+
| %!  |     | "!" : one flagged message; "!!" : two flagged messages; "n!" : n |
|     |     | flagged messages (for n > 2). Otherwise prints nothing.          |
+-----+-----+------------------------------------------------------------------+
| %>X |     | Right justify the rest of the string and pad with "X"            |
+-----+-----+------------------------------------------------------------------+
| %|X |     | Pad to the end of the line with "X"                              |
+-----+-----+------------------------------------------------------------------+
| %*X |     | Soft-fill with character "X" as pad                              |
+-----+-----+------------------------------------------------------------------+

* = Can be optionally printed if nonzero

@ = Only applicable to the current folder

In order to use  %S, %N, %F,  and %!, $mail_check_stats must  be set. When  thus
set, a suggested value for this option is "%B%<F? [%F]>%* %<N?%N/>%S".

  3.370. sidebar_indent_string

Type: string
Default: "  "

This specifies the string that  is used to indent  mailboxes in the sidebar.  It
defaults to two spaces.

See also: $sidebar_short_path, $sidebar_folder_indent, $sidebar_delim_chars.

  3.371. sidebar_new_mail_only

Type: boolean
Default: no

When set, the sidebar  will only display mailboxes  containing new, or  flagged,
mail.

See also: sidebar_pin, $sidebar_non_empty_mailbox_only.

  3.372. sidebar_next_new_wrap

Type: boolean
Default: no

When set, the <sidebar-next-new> command will not stop at the end of the list of
mailboxes, but wrap around to  the beginning. The <sidebar-prev-new> command  is
similarly affected, wrapping around to the end of the list.

  3.373. sidebar_non_empty_mailbox_only

Type: boolean
Default: no

When set,  the sidebar  will only  display mailboxes  that contain  one or  more
mails.

See also: $sidebar_new_mail_only, sidebar_pin.

  3.374. sidebar_on_right

Type: boolean
Default: no

When set, the sidebar will appear on the right-hand side of the screen.

  3.375. sidebar_short_path

Type: boolean
Default: no

By default the  sidebar will show  the mailbox's path,  relative to the  $folder
variable. Setting sidebar_shortpath=yes will shorten  the names relative to  the
previous name. Here's an example:

+--------------+---------------+-----------------------------------------------+
| shortpath=no | shortpath=yes | shortpath=yes, folderindent=yes,              |
|              |               | indentstr=".."                                |
+--------------+---------------+-----------------------------------------------+
| fruit        | fruit         | fruit                                         |
+--------------+---------------+-----------------------------------------------+
| fruit.apple  | apple         | ..apple                                       |
+--------------+---------------+-----------------------------------------------+
| fruit.banana | banana        | ..banana                                      |
+--------------+---------------+-----------------------------------------------+
| fruit.cherry | cherry        | ..cherry                                      |
+--------------+---------------+-----------------------------------------------+

See also: $sidebar_delim_chars, $sidebar_folder_indent,  $sidebar_indent_string,
$sidebar_component_depth.

  3.376. sidebar_sort

Type: sort order
Default: unsorted

Specifies how to sort mailbox entries in the sidebar.

+----------+-----------------------------------------+
| Value    | Sort by                                 |
+----------+-----------------------------------------+
| count    | Total message count                     |
+----------+-----------------------------------------+
| desc     | Mailbox description                     |
+----------+-----------------------------------------+
| flagged  | Count of flagged messages               |
+----------+-----------------------------------------+
| path     | Mailbox path (alphabetically)           |
+----------+-----------------------------------------+
| unread   | Count of unread messages                |
+----------+-----------------------------------------+
| unsorted | The order the mailboxes were configured |
+----------+-----------------------------------------+

+------------------+------------------+
| Deprecated Value | Use this instead |
+------------------+------------------+
| alpha            | path             |
+------------------+------------------+
| mailbox-order    | unsorted         |
+------------------+------------------+
| name             | path             |
+------------------+------------------+
| new              | unread           |
+------------------+------------------+

  3.377. sidebar_visible

Type: boolean
Default: no

This specifies whether or not to show  sidebar. The sidebar shows a list of  all
your mailboxes.

See also: $sidebar_format, $sidebar_width

  3.378. sidebar_width

Type: number
Default: 30

This controls the width of  the sidebar. It is  measured in screen columns.  For
example: sidebar_width=20  could  display 20  ASCII  characters, or  10  Chinese
characters.

  3.379. sig_dashes

Type: boolean
Default: yes

If set, a  line containing  "-- "  (note the  trailing space)  will be  inserted
before your  $signature. It  is strongly  recommended that  you not  unset  this
variable unless your signature contains just  your name. The reason for this  is
because many  software  packages use  "--  \n"  to detect  your  signature.  For
example, NeoMutt has the ability to highlight the signature in a different color
in the built-in pager.

  3.380. sig_on_top

Type: boolean
Default: no

If set, the signature will be included  before any quoted or forwarded text.  It
is strongly recommended that you do not set this variable unless you really know
what you  are  doing,  and  are  prepared to  take  some  heat  from  netiquette
guardians.

  3.381. signature

Type: path
Default: "~/.signature"

Specifies the filename  of your  signature, which  is appended  to all  outgoing
messages. If the filename ends with a pipe ("|"), it is assumed that filename is
a shell command and input should be read from its standard output.

  3.382. simple_search

Type: string
Default: "~f %s | ~s %s"

Specifies how NeoMutt should expand a simple search into a real search  pattern.
A simple search is one that does  not contain any of the "~" pattern  operators.
See "patterns" for more information on search patterns.

simple_search applies  to  several functions,  e.g.  <delete-pattern>,  <limit>,
searching in the index, and all of the index colors.

For example, if you simply type "joe" at a search or limit prompt, NeoMutt  will
automatically expand it  to the value  specified by this  variable by  replacing
"%s" with the supplied  string. For the default  value, "joe" would be  expanded
to: "~f joe | ~s joe".

  3.383. size_show_bytes

Type: boolean
Default: no

If set, message sizes will  display bytes for values  less than 1 kilobyte.  See
formatstrings-size.

  3.384. size_show_fractions

Type: boolean
Default: yes

If set, message sizes will  be displayed with a  single decimal value for  sizes
from 0 to 10 kilobytes and 1 to 10 megabytes. See formatstrings-size.

  3.385. size_show_mb

Type: boolean
Default: yes

If set, message sizes will display megabytes for values greater than or equal to
1 megabyte. See formatstrings-size.

  3.386. size_units_on_left

Type: boolean
Default: no

If set, message sizes  units will be  displayed to the left  of the number.  See
formatstrings-size.

  3.387. sleep_time

Type: number
Default: 1

Specifies time,  in seconds,  to pause  while displaying  certain  informational
messages, while moving from folder to  folder and after expunging messages  from
the current folder. The default is to pause  one second, so a value of zero  for
this option suppresses the pause.

  3.388. smart_wrap

Type: boolean
Default: yes

Controls the  display of  lines longer  than the  screen width  in the  internal
pager. If set, long lines  are wrapped at a word  boundary. If unset, lines  are
simply wrapped at the screen edge. Also see the $markers variable.

  3.389. smileys

Type: regular expression
Default: "(>From )|(:[-^]?[][)(><}{|/DP])"

The  pager  uses  this  variable  to  catch  some  common  false  positives   of
$quote_regex, most notably  smileys and not  consider a line  quoted text if  it
also matches $smileys. This mostly happens at the beginning of a line.

  3.390. smime_ask_cert_label

Type: boolean
Default: yes

This flag  controls  whether you  want  to  be asked  to  enter a  label  for  a
certificate about to  be added to  the database or  not. It is  set by  default.
(S/MIME only)

  3.391. smime_ca_location

Type: path
Default: (empty)

This variable contains the name of either a directory, or a file which  contains
trusted certificates for use with OpenSSL. (S/MIME only)

  3.392. smime_certificates

Type: path
Default: (empty)

Since for S/MIME there is no pubring/secring as with PGP, NeoMutt has to  handle
storage and retrieval of keys by itself. This is very basic right now, and  keys
and certificates are  stored in  two different  directories, both  named as  the
hash-value retrieved  from  OpenSSL.  There  is an  index  file  which  contains
mailbox-address keyid  pairs, and  which  can be  manually edited.  This  option
points to the location of the certificates. (S/MIME only)

  3.393. smime_decrypt_command

Type: command
Default: (empty)

This  format   string   specifies  a   command   which  is   used   to   decrypt
application/pkcs7-mime attachments.

The OpenSSL  command formats  have  their own  set of  printf(3)-like  sequences
similar to PGP's:

+----+-------------------------------------------------------------------------+
| %a | The algorithm used for encryption.                                      |
+----+-------------------------------------------------------------------------+
| %c | One or more certificate IDs.                                            |
+----+-------------------------------------------------------------------------+
|    | CA location: Depending on whether $smime_ca_location points to a        |
| %C | directory or file, this expands to "-CApath $smime_ca_location" or      |
|    | "-CAfile $smime_ca_location".                                           |
+----+-------------------------------------------------------------------------+
| %d | The message digest algorithm specified with $smime_sign_digest_alg.     |
+----+-------------------------------------------------------------------------+
| %f | Expands to the name of a file containing a message.                     |
+----+-------------------------------------------------------------------------+
| %i | Intermediate certificates                                               |
+----+-------------------------------------------------------------------------+
| %k | The key-pair specified with $smime_default_key                          |
+----+-------------------------------------------------------------------------+
| %s | Expands to the name of a file containing the signature part of a        |
|    | multipart/signed attachment when verifying it.                          |
+----+-------------------------------------------------------------------------+

For examples on how to configure these formats, see the smime.rc in the samples/
subdirectory  which   has  been   installed  on   your  system   alongside   the
documentation. (S/MIME only)

  3.394. smime_decrypt_use_default_key

Type: boolean
Default: yes

If set  (default) this  tells NeoMutt  to use  the default  key for  decryption.
Otherwise, if managing multiple certificate-key-pairs,  NeoMutt will try to  use
the mailbox-address to determine  the key to  use. It will ask  you to supply  a
key, if it can't find one. (S/MIME only)

  3.395. smime_default_key

Type: string
Default: (empty)

This is the default key-pair  to use for S/MIME operations,  and must be set  to
the keyid (the hash-value that OpenSSL generates) to work properly.

It will be used for encryption (see $postpone_encrypt and  $smime_self_encrypt).
If GPGME is enabled, this is the key id displayed by gpgsm.

It will be used for decryption unless $smime_decrypt_use_default_key is unset.

It will also be used for signing unless $smime_sign_as is set.

(S/MIME only)

  3.396. smime_encrypt_command

Type: command
Default: (empty)

This command is used to create encrypted S/MIME messages.

This is a  format string,  see the $smime_decrypt_command  command for  possible
printf(3)-like sequences. (S/MIME only)

Encrypt the message to $smime_default_key too. (S/MIME only)

  3.397. smime_encrypt_with

Type: string
Default: "aes256"

This sets the algorithm  that should be used  for encryption. Valid choices  are
"aes128", "aes192",  "aes256",  "des", "des3",  "rc2-40",  "rc2-64",  "rc2-128".
(S/MIME only)

  3.398. smime_get_cert_command

Type: command
Default: (empty)

This command is used to extract X509 certificates from a PKCS7 structure.

This is a  format string,  see the $smime_decrypt_command  command for  possible
printf(3)-like sequences. (S/MIME only)

  3.399. smime_get_cert_email_command

Type: command
Default: (empty)

This command  is used  to extract  the mail  address(es) used  for storing  X509
certificates, and for  verification purposes (to  check whether the  certificate
was issued for the sender's mailbox).

This is a  format string,  see the $smime_decrypt_command  command for  possible
printf(3)-like sequences. (S/MIME only)

  3.400. smime_get_signer_cert_command

Type: command
Default: (empty)

This command is used to extract only the signers X509 certificate from a  S/MIME
signature, so  that the  certificate's owner  may get  compared to  the  email's
"From:" field.

This is a  format string,  see the $smime_decrypt_command  command for  possible
printf(3)-like sequences. (S/MIME only)

  3.401. smime_import_cert_command

Type: command
Default: (empty)

This command is used to import a certificate via smime_keys.

This is a  format string,  see the $smime_decrypt_command  command for  possible
printf(3)-like sequences. NOTE: %c and %k will default to $smime_sign_as if set,
otherwise $smime_default_key. (S/MIME only)

  3.402. smime_is_default

Type: boolean
Default: no

The default  behavior of  NeoMutt  is to  use  PGP on  all  auto-sign/encryption
operations. To override and  to use OpenSSL instead  this must be set.  However,
this has no effect while replying,  since NeoMutt will automatically select  the
same application that was used to sign/encrypt the original message. (Note  that
this variable can be overridden by unsetting $crypt_auto_smime.) (S/MIME only)

  3.403. smime_keys

Type: path
Default: (empty)

Since for S/MIME there is no pubring/secring as with PGP, NeoMutt has to  handle
storage and retrieval of keys/certs by itself. This is very basic right now, and
stores keys and  certificates in two  different directories, both  named as  the
hash-value retrieved  from  OpenSSL.  There  is an  index  file  which  contains
mailbox-address keyid pair, and which can be manually edited. This option points
to the location of the private keys. (S/MIME only)

  3.404. smime_pk7out_command

Type: command
Default: (empty)

This command is used to extract PKCS7 structures of S/MIME signatures, in  order
to extract the public X509 certificate(s).

This is a  format string,  see the $smime_decrypt_command  command for  possible
printf(3)-like sequences. (S/MIME only)

  3.405. smime_self_encrypt

Type: boolean
Default: yes

When set, S/MIME encrypted messages will also be encrypted using the certificate
in $smime_default_key. (S/MIME only)

  3.406. smime_sign_as

Type: string
Default: (empty)

If you have  a separate  key to  use for  signing, you  should set  this to  the
signing key. Most people will only need to set $smime_default_key. (S/MIME only)

  3.407. smime_sign_command

Type: command
Default: (empty)

This command  is used  to created  S/MIME signatures  of type  multipart/signed,
which can be read by all mail clients.

This is a  format string,  see the $smime_decrypt_command  command for  possible
printf(3)-like sequences. (S/MIME only)

  3.408. smime_sign_digest_alg

Type: string
Default: "sha256"

This sets the algorithm  that should be used  for the signature message  digest.
Valid choices are "md5", "sha1", "sha224", "sha256", "sha384", "sha512". (S/MIME
only)

  3.409. smime_timeout

Type: number
Default: 300

The number of seconds after which a  cached passphrase will expire if not  used.
(S/MIME only)

  3.410. smime_verify_command

Type: command
Default: (empty)

This command is used to verify S/MIME signatures of type multipart/signed.

This is a  format string,  see the $smime_decrypt_command  command for  possible
printf(3)-like sequences. (S/MIME only)

  3.411. smime_verify_opaque_command

Type: command
Default: (empty)

This command is used to verify S/MIME signatures of type application/pkcs7-mime.

This is a  format string,  see the $smime_decrypt_command  command for  possible
printf(3)-like sequences. (S/MIME only)

  3.412. smtp_authenticators

Type: string list
Default: (empty)

This is a colon-separated list of authentication methods NeoMutt may attempt  to
use to  log  in to  an  SMTP  server, in  the  order NeoMutt  should  try  them.
Authentication methods  are  any  SASL mechanism,  e.g.  "plain",  "digest-md5",
"gssapi" or "cram-md5". This option is  case-insensitive. If it is "unset"  (the
default) NeoMutt will try  all available methods, in  order from most-secure  to
least-secure. Support for the "plain" mechanism is bundled; other mechanisms are
provided by an external SASL library (look for '+sasl' in the output of  neomutt
-v).

Example:

set smtp_authenticators="digest-md5:cram-md5"

  3.413. smtp_oauth_refresh_command

Type: command
Default: (empty)

The command  to run  to generate  an OAUTH  refresh token  for authorizing  your
connection to your  SMTP server. This  command will be  run on every  connection
attempt that  uses the  OAUTHBEARER or  XOAUTH2 authentication  mechanisms.  See
"oauth" for details.

  3.414. smtp_pass

Type: string
Default: (empty)

Specifies the password for your SMTP account. If unset, NeoMutt will prompt  you
for your password when you first send mail via SMTP. See $smtp_url to  configure
NeoMutt to send mail via SMTP.

Warning: you  should only  use  this option  when you  are  on a  fairly  secure
machine, because the superuser can read your neomuttrc even if you are the  only
one who can read the file.

  3.415. smtp_url

Type: string
Default: (empty)

Defines the SMTP smarthost where sent messages should relayed for delivery. This
should take the form of an SMTP URL, e.g.:

smtp[s]://[user[:pass]@]host[:port]

where "[...]"  denotes an  optional part.  Setting this  variable overrides  the
value of the $sendmail variable.

Also see $write_bcc.

  3.416. smtp_user

Type: string
Default: (empty)

The username for the SMTP server.

This variable defaults to your user name on the local machine.

  3.417. socket_timeout

Type: number
Default: 30

Causes NeoMutt to timeout any socket connect/read/write operation (for IMAP, POP
or SMTP)  after this  many seconds.  A  negative value  causes NeoMutt  to  wait
indefinitely.

  3.418. sort

Type: sort order
Default: date

Specifies how to sort messages in the "index" menu.

+---------------+----------------------------------------------+
| Value         | Sort by                                      |
+---------------+----------------------------------------------+
| date          | The date the email was sent                  |
+---------------+----------------------------------------------+
| date-received | When the message was delivered locally       |
+---------------+----------------------------------------------+
| from          | The email's From field                       |
+---------------+----------------------------------------------+
| label         | The emails label                             |
+---------------+----------------------------------------------+
| score         | The email's score                            |
+---------------+----------------------------------------------+
| size          | The size of the email                        |
+---------------+----------------------------------------------+
| spam          | The email's spam score                       |
+---------------+----------------------------------------------+
| subject       | The email's subject                          |
+---------------+----------------------------------------------+
| threads       | Email threads                                |
+---------------+----------------------------------------------+
| to            | The email's To field                         |
+---------------+----------------------------------------------+
| unsorted      | The order the messages appear in the mailbox |
+---------------+----------------------------------------------+

+------------------+------------------+
| Deprecated Value | Use this instead |
+------------------+------------------+
| date-sent        | date             |
+------------------+------------------+
| mailbox-order    | unsorted         |
+------------------+------------------+

You may optionally use the "reverse-"  prefix to specify reverse sorting  order,
or the "last-" prefix  to sort threads based  on the corresponding attribute  of
the last descendant rather than  the thread root. If  both prefixes are in  use,
"reverse-" must come before "last-". The "last-" prefix has no effect on a  flat
view.

Any ties  in the  primary sort  are broken  by $sort_aux.  When $use_threads  is
"threads"  or  "reverse",  $sort  controls  the  sorting  between  threads,  and
$sort_aux controls the sorting within a thread.

The values of "threads"  and "reverse-threads" are  legacy options, which  cause
the value of $sort_aux to also control sorting between threads, and they may not
be used with the "last-" prefix. The preferred way to enable a threaded view  is
via $use_threads.  This variable  can also  be set  via the  <sort-mailbox>  and
<sort-reverse> functions.

Note: When $use_threads is "threads", the last thread sorts to the bottom;  when
it is "reversed", the  last thread sorts  to the top. The  use of "reverse-"  in
$sort swaps which end the last thread will sort to.

See the  "Use Threads  Feature" section  for further  explanation and  examples,
https://neomutt.org/feature/use-threads

  3.419. sort_aux

Type: sort order
Default: date

This provides a secondary sort for messages  in the "index" menu, used when  the
$sort value is equal for two messages.

When sorting by threads, this variable controls how subthreads are sorted within
a single thread (for the order between  threads, see $sort). This can be set  to
any value  that $sort  can, including  with the  use of  "reverse-" and  "last-"
prefixes, except for variations using "threads" (in that case, NeoMutt will just
use "date"). For instance,

set sort_aux=last-date-received

would mean that if a new message is received in a thread, that subthread becomes
the last one displayed  (or the first, if  you have "set  use_threads=reverse".)
When using $use_threads, it  is more common  to use "last-"  with $sort and  not
with $sort_aux.

See the  "Use Threads  Feature" section  for further  explanation and  examples,
https://neomutt.org/feature/use-threads

  3.420. sort_re

Type: boolean
Default: yes

This variable is only useful when sorting by threads with $strict_threads unset.
In that  case, it  changes the  heuristic  neomutt uses  to thread  messages  by
subject. With $sort_re set, neomutt will only  attach a message as the child  of
another message by subject  if the subject  of the child  message starts with  a
substring matching the  setting of  $reply_regex. With  $sort_re unset,  neomutt
will attach  the message  whether  or not  this  is the  case,  as long  as  the
non-$reply_regex parts of both messages are identical.

  3.421. spam_separator

Type: string
Default: ","

This variable controls what happens when  multiple spam headers are matched:  if
unset, each successive header will overwrite any previous matches value for  the
spam label. If  set, each successive  match will append  to the previous,  using
this variable's value as a separator.

  3.422. spool_file

Type: mailbox
Default: (empty)

If your spool mailbox is in a non-default place where NeoMutt can't find it, you
can  specify   its   location  with   this   variable.  The   description   from
"named-mailboxes" may be used for the spool_file.

If not specified,  then the  environment variables  $MAIL and  $MAILDIR will  be
checked.

  3.423. ssl_ca_certificates_file

Type: path
Default: (empty)

This variable specifies a  file containing trusted  CA certificates. Any  server
certificate  that  is  signed  with  one  of  these  CA  certificates  is   also
automatically accepted. (GnuTLS only)

Example:

set ssl_ca_certificates_file=/etc/ssl/certs/ca-certificates.crt

  3.424. ssl_ciphers

Type: string
Default: (empty)

Contains a colon-separated list of ciphers  to use when using SSL. For  OpenSSL,
see ciphers(1) for the syntax of the string.

For GnuTLS, this option will  be used in place of  "NORMAL" at the start of  the
priority string. See  gnutls_priority_init(3) for the  syntax and more  details.
(Note: GnuTLS version 2.1.7 or higher is required.)

  3.425. ssl_client_cert

Type: path
Default: (empty)

The file containing a client certificate and its associated private key.

  3.426. ssl_force_tls

Type: boolean
Default: yes

If this variable  is set, NeoMutt  will require that  all connections to  remote
servers be encrypted. Furthermore it will  attempt to negotiate TLS even if  the
server does not advertise the capability, since it would otherwise have to abort
the connection anyway. This option supersedes $ssl_starttls.

  3.427. ssl_min_dh_prime_bits

Type: number
Default: 0

This variable specifies the minimum acceptable  prime size (in bits) for use  in
any Diffie-Hellman key  exchange. A value  of 0  will use the  default from  the
GNUTLS library. (GnuTLS only)

  3.428. ssl_starttls

Type: quadoption
Default: yes

If  set  (the  default),  NeoMutt  will  attempt  to  use  STARTTLS  on  servers
advertising the capability. When unset, NeoMutt will not attempt to use STARTTLS
regardless of the server's capabilities.

Note that STARTTLS is subject to many kinds of attacks, including the ability of
a  machine-in-the-middle  to  suppress  the  advertising  of  support.   Setting
$ssl_force_tls is recommended if you rely on STARTTLS.

  3.429. ssl_use_tlsv1_2

Type: boolean
Default: yes

If set , NeoMutt will use  TLSv1.2 when communicating with servers that  request
it.

  3.430. ssl_use_tlsv1_3

Type: boolean
Default: yes

If set , NeoMutt will use  TLSv1.3 when communicating with servers that  request
it.

  3.431. ssl_verify_dates

Type: boolean
Default: yes

If set (the default), NeoMutt will not automatically accept a server certificate
that is either not yet valid or already expired. You should only unset this  for
particular known hosts, using the <account-hook> function.

  3.432. ssl_verify_host

Type: boolean
Default: yes

If set (the default), NeoMutt will not automatically accept a server certificate
whose host name does not match the host used in your folder URL. You should only
unset this for particular known hosts, using the <account-hook> function.

  3.433. status_chars

Type: character string
Default: "-*%A"

Controls the characters used by the "%r" indicator in $status_format.

+-----------+---------+--------------------------------------------------------+
| Character | Default | Description                                            |
+-----------+---------+--------------------------------------------------------+
| 1         | -       | Mailbox is unchanged                                   |
+-----------+---------+--------------------------------------------------------+
| 2         | *       | Mailbox has been changed and needs to be               |
|           |         | resynchronized                                         |
+-----------+---------+--------------------------------------------------------+
|           |         | Mailbox is read-only, or will not be written when      |
| 3         | %       | exiting. (You can toggle whether to write changes to a |
|           |         | mailbox with the <toggle-write> operation, bound by    |
|           |         | default to "%")                                        |
+-----------+---------+--------------------------------------------------------+
|           |         | Folder opened in attach-message mode. (Certain         |
| 4         | A       | operations like composing a new mail, replying,        |
|           |         | forwarding, etc. are not permitted in this mode)       |
+-----------+---------+--------------------------------------------------------+

  3.434. status_format

Type: string
Default: "-%r-NeoMutt: %D [Msgs:%<M?%M/>%m%<n? New:%n>%<o? Old:%o>%<d? Del:%d>%<F? Flag:%F>%<t? Tag:%t>%<p? Post:%p>%<b? Inc:%b>%<l? %l>]---(%<T?%T/>%s/%S)-%>-(%P)---"

Controls the  format of  the status  line displayed  in the  "index" menu.  This
string is  similar to  $index_format,  but has  its  own set  of  printf(3)-like
sequences:

+-----+---+--------------------------------------------------------------------+
| %b  | * | Number of mailboxes with new mail                                  |
+-----+---+--------------------------------------------------------------------+
| %d  | * | Number of deleted messages                                         |
+-----+---+--------------------------------------------------------------------+
| %D  |   | Description of the mailbox                                         |
+-----+---+--------------------------------------------------------------------+
| %f  |   | The full pathname of the current mailbox                           |
+-----+---+--------------------------------------------------------------------+
| %F  | * | Number of flagged messages                                         |
+-----+---+--------------------------------------------------------------------+
| %h  |   | Local hostname                                                     |
+-----+---+--------------------------------------------------------------------+
| %l  | * | Size (in bytes) of the current mailbox (see formatstrings-size)    |
+-----+---+--------------------------------------------------------------------+
| %L  | * | Size (in bytes) of the messages shown (i.e., which match the       |
|     |   | current limit) (see formatstrings-size)                            |
+-----+---+--------------------------------------------------------------------+
| %m  | * | The number of messages in the mailbox                              |
+-----+---+--------------------------------------------------------------------+
| %M  | * | The number of messages shown (i.e., which match the current limit) |
+-----+---+--------------------------------------------------------------------+
| %n  | * | Number of new messages in the mailbox (unread, unseen)             |
+-----+---+--------------------------------------------------------------------+
| %o  | * | Number of old messages in the mailbox (unread, seen)               |
+-----+---+--------------------------------------------------------------------+
| %p  | * | Number of postponed messages                                       |
+-----+---+--------------------------------------------------------------------+
| %P  |   | Percentage of the way through the index                            |
+-----+---+--------------------------------------------------------------------+
| %r  |   | Modified/read-only/won't-write/attach-message indicator, According |
|     |   | to $status_chars                                                   |
+-----+---+--------------------------------------------------------------------+
| %R  | * | Number of read messages in the mailbox (read, seen)                |
+-----+---+--------------------------------------------------------------------+
| %s  |   | Current sorting mode ($sort)                                       |
+-----+---+--------------------------------------------------------------------+
| %S  |   | Current aux sorting method ($sort_aux)                             |
+-----+---+--------------------------------------------------------------------+
| %t  | * | Number of tagged messages in the mailbox                           |
+-----+---+--------------------------------------------------------------------+
| %T  | * | Current threading mode ($use_threads)                              |
+-----+---+--------------------------------------------------------------------+
| %u  | * | Number of unread messages in the mailbox (seen or unseen)          |
+-----+---+--------------------------------------------------------------------+
| %v  |   | NeoMutt version string                                             |
+-----+---+--------------------------------------------------------------------+
| %V  | * | Currently active limit pattern, if any                             |
+-----+---+--------------------------------------------------------------------+
| %>X |   | Right justify the rest of the string and pad with "X"              |
+-----+---+--------------------------------------------------------------------+
| %|X |   | Pad to the end of the line with "X"                                |
+-----+---+--------------------------------------------------------------------+
| %*X |   | Soft-fill with character "X" as pad                                |
+-----+---+--------------------------------------------------------------------+

For an explanation of "soft-fill", see the $index_format documentation.

* = can be optionally printed if nonzero

Some of the above sequences  can be used to optionally  print a string if  their
value is nonzero. For example,  you may only want to  see the number of  flagged
messages if such messages exist, since  zero is not particularly meaningful.  To
optionally print a string based upon  one of the above sequences, the  following
construct is used:

%<sequence_char?optional_string>

where sequence_char is a character from the table above, and optional_string  is
the string you would like  printed if sequence_char is nonzero.  optional_string
may contain other sequences as well as normal text.

Here is  an example  illustrating how  to  optionally print  the number  of  new
messages in a mailbox:

%<n?%n new messages>

You can also switch between two strings using the following construct:

%<sequence_char?if_string&else_string>

If the value of sequence_char is non-zero, if_string will be expanded, otherwise
else_string will be expanded.

As another  example,  here  is  how  to  show  either  $sort  and  $sort_aux  or
$use_threads and $sort, based on whether threads are enabled with $use_threads:

%<T?%s/%S&%T/%s>

You can  force the  result of  any printf(3)-like  sequence to  be lowercase  by
prefixing the sequence character with an underscore ("_") sign. For example,  if
you want to display the local hostname in lowercase, you would use: "%_h".

If you prefix the sequence character with a colon (":") character, NeoMutt  will
replace any dots  in the expansion  by underscores. This  might be helpful  with
IMAP folders that don't like dots in folder names.

  3.435. status_on_top

Type: boolean
Default: no

Setting this variable causes the "status bar" to be displayed on the first  line
of the screen rather than near the bottom. If $help is set too, it'll be  placed
at the bottom.

  3.436. strict_threads

Type: boolean
Default: no

If set, threading  will only  make use  of the  "In-Reply-To" and  "References:"
fields when you  $sort by message  threads. By default,  messages with the  same
subject are  grouped together  in  "pseudo threads.".  This  may not  always  be
desirable, such as in a personal mailbox where you might have several  unrelated
messages with the subjects like "hi"  which will get grouped together. See  also
$sort_re for a less drastic way of controlling this behavior.

  3.437. suspend

Type: boolean
Default: yes

When unset, NeoMutt won't  stop when the user  presses the terminal's susp  key,
usually "^Z". This is useful if you run NeoMutt inside an xterm using a  command
like "xterm -e neomutt".

On startup NeoMutt tries to detect if  it is the process session leader. If  so,
the default of suspend  is "no" otherwise "yes".  This default covers the  above
mentioned use case of "xterm -e neomutt".

  3.438. text_flowed

Type: boolean
Default: no

When set, NeoMutt will  generate "format=flowed" bodies with  a content type  of
"text/plain; format=flowed". This format  is easier to  handle for some  mailing
software, and generally just looks like  ordinary text. To actually make use  of
this format's features, you'll need support in your editor.

The option only  controls newly  composed messages.  Postponed messages,  resent
messages, and  draft  messages  (via  -H  on the  command  line)  will  use  the
content-type of the source message.

Note that $indent_string is ignored when this option is set.

  3.439. thorough_search

Type: boolean
Default: yes

Affects the ~b, ~B, and ~h search operations described in section "patterns". If
set, the headers  and body/attachments of  messages to be  searched are  decoded
before searching. If unset, messages are searched as they appear in the folder.

Users searching attachments or  for non-ASCII characters  should set this  value
because decoding also includes MIME parsing/decoding and possible character  set
conversions. Otherwise NeoMutt  will attempt  to match against  the raw  message
received (for example  quoted-printable encoded or  with encoded headers)  which
may lead to incorrect search results.

  3.440. thread_received

Type: boolean
Default: no

If $strict_threads  is unset,  then messages  may also  be grouped  by  subject.
Unlike threading by "In-Reply-To:" and "References:" header, grouping by subject
does not imply a parent-child relation between two messages.

To determine  the ancestry  between messages  grouped by  subject, NeoMutt  uses
their date: only newer messages can be descendants of older ones.

When $thread_received is  set, NeoMutt uses  the date received  rather than  the
date sent when comparing messages for the date.

See also $strict_threads, and $sort_re.

  3.441. tilde

Type: boolean
Default: no

When set, the internal-pager will  pad blank lines to  the bottom of the  screen
with a tilde ("~").

  3.442. time_inc

Type: number
Default: 0

Along with  $read_inc,  $write_inc, and  $net_inc,  this variable  controls  the
frequency with which progress updates are displayed. It suppresses updates  less
than $time_inc milliseconds apart. This  can improve throughput on systems  with
slow terminals, or when running NeoMutt on a remote system.

Also see the "tuning" section of the manual for performance considerations.

  3.443. timeout

Type: number
Default: 600

When NeoMutt  is  waiting  for user  input  either  idling in  menus  or  in  an
interactive prompt, NeoMutt would block until input is present. Depending on the
context, this would prevent certain  operations from working, like checking  for
new mail or keeping an IMAP connection alive.

This variable  controls how  many seconds  NeoMutt will  at most  wait until  it
aborts waiting for input,  performs these operations and  continues to wait  for
input.

A value of zero or less will cause NeoMutt to never time out.

  3.444. tmp_dir

Type: path
Default: "/tmp"

This variable allows you to specify where NeoMutt will place its temporary files
needed for displaying and composing messages.

If this variable is not set,  the environment variable $TMPDIR is used.  Failing
that, then "/tmp" is used.

  3.445. to_chars

Type: character string
Default: " +TCFLR"

Controls the character used to indicate mail addressed to you.

+-----------+---------+--------------------------------------------------------+
| Character | Default | Description                                            |
+-----------+---------+--------------------------------------------------------+
| 1         | <space> | The mail is not addressed to your address.             |
+-----------+---------+--------------------------------------------------------+
| 2         | +       | You are the only recipient of the message.             |
+-----------+---------+--------------------------------------------------------+
| 3         | T       | Your address appears in the "To:" header field, but    |
|           |         | you are not the only recipient of the message.         |
+-----------+---------+--------------------------------------------------------+
| 4         | C       | Your address is specified in the "Cc:" header field,   |
|           |         | but you are not the only recipient.                    |
+-----------+---------+--------------------------------------------------------+
| 5         | F       | Indicates the mail that was sent by you.               |
+-----------+---------+--------------------------------------------------------+
| 6         | L       | Indicates the mail was sent to a mailing-list you      |
|           |         | subscribe to.                                          |
+-----------+---------+--------------------------------------------------------+
| 7         | R       | Your address appears in the "Reply-To:" header field   |
|           |         | but none of the above applies.                         |
+-----------+---------+--------------------------------------------------------+

  3.446. toggle_quoted_show_levels

Type: number
Default: 0

Quoted text may be filtered out using  the <toggle-quoted> command. If set to  a
number greater than  0, then the  <toggle-quoted> command will  only filter  out
quote levels above this number.

  3.447. trash

Type: mailbox
Default: (empty)

If set, this variable  specifies the path  of the trash  folder where the  mails
marked for deletion will be moved, instead of being irremediably purged.

NOTE: When you delete a  message in the trash folder,  it is really deleted,  so
that you have a way to clean the trash.

  3.448. ts_enabled

Type: boolean
Default: no

Controls whether NeoMutt tries  to set the terminal  status line and icon  name.
Most terminal emulators emulate the status line in the window title.

  3.449. ts_icon_format

Type: string
Default: "M%<n?AIL&ail>"

Controls the format of  the icon title,  as long as  "$ts_enabled" is set.  This
string is identical in formatting to the one used by "$status_format".

  3.450. ts_status_format

Type: string
Default: "NeoMutt with %<m?%m messages&no messages>%<n? [%n NEW]>"

Controls the format of the terminal status line (or window title), provided that
"$ts_enabled" has been set.  This string is identical  in formatting to the  one
used by "$status_format".

  3.451. tunnel

Type: command
Default: (empty)

Setting this variable will cause NeoMutt to open a pipe to a command instead  of
a raw socket. You may be able to use this to set up preauthenticated connections
to your IMAP/POP3/SMTP server. Example:

set tunnel="ssh -q mailhost.net /usr/local/libexec/imapd"

Note: For this example to work you must be able to log in to the remote  machine
without having to enter a password.

When set,  NeoMutt  uses the  tunnel  for  all remote  connections.  Please  see
"account-hook" in  the manual  for  how to  use  different tunnel  commands  per
connection.

  3.452. tunnel_is_secure

Type: boolean
Default: yes

When set, NeoMutt will assume the  $tunnel connection does not need STARTTLS  to
be enabled. It will also allow IMAP PREAUTH server responses inside a tunnel  to
proceed. This is appropriate if $tunnel uses ssh or directly invokes the  server
locally.

When unset, NeoMutt will  negotiate STARTTLS according  to the ssl_starttls  and
ssl_force_tls variables. If ssl_force_tls is set, NeoMutt will abort  connecting
if an IMAP server responds with PREAUTH. This setting is appropriate if  $tunnel
does not provide security and could be tampered with by attackers.

  3.453. uncollapse_jump

Type: boolean
Default: no

When set, NeoMutt will jump to the next unread message, if any, when the current
thread is uncollapsed.

  3.454. uncollapse_new

Type: boolean
Default: yes

When set,  NeoMutt  will  automatically uncollapse  any  collapsed  thread  that
receives a newly delivered  message. When unset,  collapsed threads will  remain
collapsed. The presence of the newly  delivered message will still affect  index
sorting, though.

  3.455. use_8bit_mime

Type: boolean
Default: no

Warning: do not set  this variable unless  you are using  a version of  sendmail
which supports the -B8BITMIME flag  (such as sendmail 8.8.x)  or you may not  be
able to send mail.

When set, NeoMutt will  invoke $sendmail with the  -B8BITMIME flag when  sending
8-bit messages to enable ESMTP negotiation.

  3.456. use_domain

Type: boolean
Default: yes

When set, NeoMutt  will qualify all  local addresses (ones  without the  "@host"
portion) with the value of $hostname. If unset, no addresses will be qualified.

  3.457. use_envelope_from

Type: boolean
Default: no

When  set,  NeoMutt   will  set  the   envelope  sender  of   the  message.   If
$envelope_from_address is set, it will be used as the sender address. If  unset,
NeoMutt will attempt to derive the sender from the "From:" header.

Note that this information  is passed to sendmail  command using the -f  command
line switch.  Therefore setting  this  option is  not  useful if  the  $sendmail
variable already  contains -f  or  if the  executable  pointed to  by  $sendmail
doesn't support the -f switch.

  3.458. use_from

Type: boolean
Default: yes

When set, NeoMutt will generate the "From:" header field when sending  messages.
If unset, no "From:" header field  will be generated unless the user  explicitly
sets one using the "my_hdr" command.

  3.459. use_ipv6

Type: boolean
Default: yes

When set, NeoMutt will look for IPv6 addresses of hosts it tries to contact.  If
this option is unset, NeoMutt will restrict itself to IPv4 addresses.  Normally,
the default should work.

  3.460. use_threads

Type: enumeration
Default: unset

The style of threading used in the  index. May be one of "flat" (no  threading),
"threads" (threaded, with subthreads below root message) or "reverse" (threaded,
with subthreads  above root  message). For  convenience, the  value "yes"  is  a
synonym for "threads", and "no" is a synonym for "flat".

If this variable is  never set, then $sort  controls whether threading is  used,
$sort_aux controls  both  the  sorting  of threads  and  subthreads,  and  using
<sort-mailbox> to select threads affects only $sort. Once this variable is  set,
attempting to set $sort to a value using "threads" will warn, the value of $sort
controls the sorting between threads  while $sort_aux controls sorting within  a
thread, and <sort-mailbox> toggles $use_threads.

Example:

set use_threads=yes

See the "Use Threads Feature" section for further explanation and examples.

  3.461. user_agent

Type: boolean
Default: no

When set,  NeoMutt  will  add  a  "User-Agent:"  header  to  outgoing  messages,
indicating which version of NeoMutt was used for composing them.

  3.462. wait_key

Type: boolean
Default: yes

Controls whether NeoMutt will ask you to  press a key after an external  command
has  been   invoked   by  these   functions:   <shell-escape>,   <pipe-message>,
<pipe-entry>, <print-message>, and <print-entry> commands.

It is also  used when viewing  attachments with "auto_view",  provided that  the
corresponding mailcap entry has a  needsterminal flag, and the external  program
is interactive.

When set, NeoMutt will always ask for a key. When unset, NeoMutt will wait for a
key only if the external command returned a non-zero status.

  3.463. weed

Type: boolean
Default: yes

When set, NeoMutt will weed headers when displaying, forwarding, or replying  to
messages.

Also see $copy_decode_weed, $pipe_decode_weed, $print_decode_weed.

  3.464. wrap

Type: number
Default: 0

When set to a positive value, NeoMutt  will wrap text at $wrap characters.  When
set to  a  negative value,  NeoMutt  will wrap  text  so that  there  are  $wrap
characters of empty space on the right side of the terminal. Setting it to  zero
makes NeoMutt wrap at the terminal width.

Also see $reflow_wrap.

  3.465. wrap_headers

Type: number
Default: 78

This option specifies the number of  characters to use for wrapping an  outgoing
message's headers. Allowed values are between 78 and 998 inclusive.

Note: This option usually shouldn't be changed. RFC5233 recommends a line length
of 78 (the  default), so  please only  change this  setting when  you know  what
you're doing.

  3.466. wrap_search

Type: boolean
Default: yes

Controls whether searches wrap around the end.

When set,  searches will  wrap around  the  first (or  last) item.  When  unset,
incremental searches will not wrap.

  3.467. write_bcc

Type: boolean
Default: no

Controls whether NeoMutt writes out the "Bcc:" header when preparing messages to
be sent. Some MTAs, such as Exim and Courier, do not strip the "Bcc:" header; so
it is advisable to leave  this unset unless you have  a particular need for  the
header to be in the sent message.

If NeoMutt is set to deliver directly via SMTP(see $smtp_url), this option  does
nothing: NeoMutt will never write out the "Bcc:" header in this case.

Note this  option only  affects the  sending  of messages.  Fcc'ed copies  of  a
message will always contain the "Bcc:" header if one exists.

  3.468. write_inc

Type: number
Default: 10

When writing a mailbox, a message  will be printed every $write_inc messages  to
indicate progress. If set to 0, only  a single message will be displayed  before
writing a mailbox.

Also see  the  $read_inc, $net_inc  and  $time_inc variables  and  the  "tuning"
section of the manual for performance considerations.

  3.469. x_comment_to

Type: boolean
Default: no

If set,  NeoMutt will  add "X-Comment-To:"  field (that  contains full  name  of
original article author) to article that followuped to newsgroup.

4. Functions

The following is the list of available functions listed by the mapping in  which
they are available. The default key setting is given, and an explanation of what
the function does. The key bindings of  these functions can be changed with  the
bind command.

  4.1. Generic Menu

The generic menu is  not a real  menu, but specifies  common functions (such  as
movement) available in all menus except for pager and editor. Changing  settings
for this menu will affect the default bindings for all menus (except as noted).

Table 9.2. Default Generic Menu Bindings

+---------------------+---------------+----------------------------------------+
|      Function       |  Default key  |              Description               |
+---------------------+---------------+----------------------------------------+
| <bottom-page>       | L             | move to the bottom of the page         |
+---------------------+---------------+----------------------------------------+
| <check-stats>       |               | calculate message statistics for all   |
|                     |               | mailboxes                              |
+---------------------+---------------+----------------------------------------+
| <current-bottom>    |               | move entry to bottom of screen         |
+---------------------+---------------+----------------------------------------+
| <current-middle>    |               | move entry to middle of screen         |
+---------------------+---------------+----------------------------------------+
| <current-top>       |               | move entry to top of screen            |
+---------------------+---------------+----------------------------------------+
| <end-cond>          |               | end of conditional execution (noop)    |
+---------------------+---------------+----------------------------------------+
| <enter-command>     | :             | enter a neomuttrc command              |
+---------------------+---------------+----------------------------------------+
| <exit>              |               | exit this menu                         |
+---------------------+---------------+----------------------------------------+
| <first-entry>       | <Home>        | move to the first entry                |
+---------------------+---------------+----------------------------------------+
| <first-entry>       | =             | move to the first entry                |
+---------------------+---------------+----------------------------------------+
| <half-down>         | ]             | scroll down 1/2 page                   |
+---------------------+---------------+----------------------------------------+
| <half-up>           | [             | scroll up 1/2 page                     |
+---------------------+---------------+----------------------------------------+
| <help>              | ?             | this screen                            |
+---------------------+---------------+----------------------------------------+
| <jump>              |               | jump to an index number                |
+---------------------+---------------+----------------------------------------+
| <last-entry>        | <End>         | move to the last entry                 |
+---------------------+---------------+----------------------------------------+
| <last-entry>        | *             | move to the last entry                 |
+---------------------+---------------+----------------------------------------+
| <middle-page>       | M             | move to the middle of the page         |
+---------------------+---------------+----------------------------------------+
| <next-entry>        | <Down>        | move to the next entry                 |
+---------------------+---------------+----------------------------------------+
| <next-entry>        | j             | move to the next entry                 |
+---------------------+---------------+----------------------------------------+
| <next-line>         | >             | scroll down one line                   |
+---------------------+---------------+----------------------------------------+
| <next-page>         | <Pagedown>    | move to the next page                  |
+---------------------+---------------+----------------------------------------+
| <next-page>         | <Right>       | move to the next page                  |
+---------------------+---------------+----------------------------------------+
| <next-page>         | z             | move to the next page                  |
+---------------------+---------------+----------------------------------------+
| <previous-entry>    | <Up>          | move to the previous entry             |
+---------------------+---------------+----------------------------------------+
| <previous-entry>    | k             | move to the previous entry             |
+---------------------+---------------+----------------------------------------+
| <previous-line>     | <             | scroll up one line                     |
+---------------------+---------------+----------------------------------------+
| <previous-page>     | <Left>        | move to the previous page              |
+---------------------+---------------+----------------------------------------+
| <previous-page>     | <Pageup>      | move to the previous page              |
+---------------------+---------------+----------------------------------------+
| <previous-page>     | Z             | move to the previous page              |
+---------------------+---------------+----------------------------------------+
| <redraw-screen>     | ^L            | clear and redraw the screen            |
+---------------------+---------------+----------------------------------------+
| <search>            | /             | search for a regular expression        |
+---------------------+---------------+----------------------------------------+
| <search-next>       | n             | search for next match                  |
+---------------------+---------------+----------------------------------------+
| <search-opposite>   |               | search for next match in opposite      |
|                     |               | direction                              |
+---------------------+---------------+----------------------------------------+
| <search-reverse>    | Esc /         | search backwards for a regular         |
|                     |               | expression                             |
+---------------------+---------------+----------------------------------------+
| <select-entry>      | <Enter>       | select the current entry               |
+---------------------+---------------+----------------------------------------+
| <select-entry>      | <Keypadenter> | select the current entry               |
+---------------------+---------------+----------------------------------------+
| <select-entry>      | <Return>      | select the current entry               |
+---------------------+---------------+----------------------------------------+
| <shell-escape>      | !             | invoke a command in a subshell         |
+---------------------+---------------+----------------------------------------+
| <show-log-messages> |               | show log (and debug) messages          |
+---------------------+---------------+----------------------------------------+
| <show-version>      | V             | show the NeoMutt version number and    |
|                     |               | date                                   |
+---------------------+---------------+----------------------------------------+
| <tag-entry>         | t             | tag the current entry                  |
+---------------------+---------------+----------------------------------------+
| <tag-prefix>        | ;             | apply next function to tagged messages |
+---------------------+---------------+----------------------------------------+
| <tag-prefix-cond>   |               | apply next function ONLY to tagged     |
|                     |               | messages                               |
+---------------------+---------------+----------------------------------------+
| <top-page>          | H             | move to the top of the page            |
+---------------------+---------------+----------------------------------------+
| <what-key>          |               | display the keycode for a key press    |
+---------------------+---------------+----------------------------------------+

  4.2. Index Menu

Table 9.3. Default Index Menu Bindings

+-------------------------------+---------------+------------------------------+
|           Function            |  Default key  |         Description          |
+-------------------------------+---------------+------------------------------+
| <alias-dialog>                |               | open the aliases dialog      |
+-------------------------------+---------------+------------------------------+
| <autocrypt-acct-menu>         | A             | manage autocrypt accounts    |
+-------------------------------+---------------+------------------------------+
| <bounce-message>              | b             | remail a message to another  |
|                               |               | user                         |
+-------------------------------+---------------+------------------------------+
| <break-thread>                | #             | break the thread in two      |
+-------------------------------+---------------+------------------------------+
| <catchup>                     |               | mark all articles in         |
|                               |               | newsgroup as read            |
+-------------------------------+---------------+------------------------------+
| <change-folder>               | c             | open a different folder      |
+-------------------------------+---------------+------------------------------+
| <change-folder-readonly>      | Esc c         | open a different folder in   |
|                               |               | read only mode               |
+-------------------------------+---------------+------------------------------+
| <change-newsgroup>            | i             | open a different newsgroup   |
+-------------------------------+---------------+------------------------------+
| <change-newsgroup-readonly>   | Esc i         | open a different newsgroup   |
|                               |               | in read only mode            |
+-------------------------------+---------------+------------------------------+
| <change-vfolder>              |               | open a different virtual     |
|                               |               | folder                       |
+-------------------------------+---------------+------------------------------+
| <check-traditional-pgp>       | Esc P         | check for classic PGP        |
+-------------------------------+---------------+------------------------------+
| <clear-flag>                  | W             | clear a status flag from a   |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <collapse-all>                | Esc V         | collapse/uncollapse all      |
|                               |               | threads                      |
+-------------------------------+---------------+------------------------------+
| <collapse-thread>             | Esc v         | collapse/uncollapse current  |
|                               |               | thread                       |
+-------------------------------+---------------+------------------------------+
| <compose-to-sender>           |               | compose new message to the   |
|                               |               | current message sender       |
+-------------------------------+---------------+------------------------------+
| <copy-message>                | C             | copy a message to a          |
|                               |               | file/mailbox                 |
+-------------------------------+---------------+------------------------------+
| <create-alias>                | a             | create an alias from a       |
|                               |               | message sender               |
+-------------------------------+---------------+------------------------------+
| <decode-copy>                 | Esc C         | make decoded (text/plain)    |
|                               |               | copy                         |
+-------------------------------+---------------+------------------------------+
| <decode-save>                 | Esc s         | make decoded copy            |
|                               |               | (text/plain) and delete      |
+-------------------------------+---------------+------------------------------+
| <decrypt-copy>                |               | make decrypted copy          |
+-------------------------------+---------------+------------------------------+
| <decrypt-save>                |               | make decrypted copy and      |
|                               |               | delete                       |
+-------------------------------+---------------+------------------------------+
| <delete-message>              | d             | delete the current entry     |
+-------------------------------+---------------+------------------------------+
| <delete-pattern>              | D             | delete non-hidden messages   |
|                               |               | matching a pattern           |
+-------------------------------+---------------+------------------------------+
| <delete-subthread>            | Esc d         | delete all messages in       |
|                               |               | subthread                    |
+-------------------------------+---------------+------------------------------+
| <delete-thread>               | ^D            | delete all messages in       |
|                               |               | thread                       |
+-------------------------------+---------------+------------------------------+
| <display-address>             | @             | display full address of      |
|                               |               | sender                       |
+-------------------------------+---------------+------------------------------+
| <display-message>             | <Enter>       | display a message            |
+-------------------------------+---------------+------------------------------+
| <display-message>             | <Keypadenter> | display a message            |
+-------------------------------+---------------+------------------------------+
| <display-message>             | <Return>      | display a message            |
+-------------------------------+---------------+------------------------------+
| <display-message>             | <Space>       | display a message            |
+-------------------------------+---------------+------------------------------+
| <display-toggle-weed>         | h             | display message and toggle   |
|                               |               | header weeding               |
+-------------------------------+---------------+------------------------------+
|                               |               | edit the raw message (edit   |
| <edit>                        |               | and edit-raw-message are     |
|                               |               | synonyms)                    |
+-------------------------------+---------------+------------------------------+
| <edit-label>                  | Y             | add, change, or delete a     |
|                               |               | message's label              |
+-------------------------------+---------------+------------------------------+
|                               |               | edit the raw message if the  |
| <edit-or-view-raw-message>    | e             | mailbox is not read-only,    |
|                               |               | otherwise view it            |
+-------------------------------+---------------+------------------------------+
|                               |               | edit the raw message (edit   |
| <edit-raw-message>            |               | and edit-raw-message are     |
|                               |               | synonyms)                    |
+-------------------------------+---------------+------------------------------+
| <edit-type>                   | ^E            | edit attachment content type |
+-------------------------------+---------------+------------------------------+
| <entire-thread>               |               | read entire thread of the    |
|                               |               | current message              |
+-------------------------------+---------------+------------------------------+
| <exit>                        | x             | exit this menu               |
+-------------------------------+---------------+------------------------------+
| <extract-keys>                | ^K            | extract supported public     |
|                               |               | keys                         |
+-------------------------------+---------------+------------------------------+
| <fetch-mail>                  | G             | retrieve mail from POP       |
|                               |               | server                       |
+-------------------------------+---------------+------------------------------+
| <flag-message>                | F             | toggle a message's           |
|                               |               | 'important' flag             |
+-------------------------------+---------------+------------------------------+
| <followup-message>            |               | followup to newsgroup        |
+-------------------------------+---------------+------------------------------+
| <forget-passphrase>           | ^F            | wipe passphrases from memory |
+-------------------------------+---------------+------------------------------+
| <forward-message>             | f             | forward a message with       |
|                               |               | comments                     |
+-------------------------------+---------------+------------------------------+
| <forward-to-group>            |               | forward to newsgroup         |
+-------------------------------+---------------+------------------------------+
| <get-children>                |               | get all children of the      |
|                               |               | current message              |
+-------------------------------+---------------+------------------------------+
| <get-message>                 |               | get message with Message-Id  |
+-------------------------------+---------------+------------------------------+
| <get-parent>                  |               | get parent of the current    |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <group-chat-reply>            |               | reply to all recipients      |
|                               |               | preserving To/Cc             |
+-------------------------------+---------------+------------------------------+
| <group-reply>                 | g             | reply to all recipients      |
+-------------------------------+---------------+------------------------------+
| <imap-fetch-mail>             |               | force retrieval of mail from |
|                               |               | IMAP server                  |
+-------------------------------+---------------+------------------------------+
| <imap-logout-all>             |               | logout from all IMAP servers |
+-------------------------------+---------------+------------------------------+
| <limit>                       | l             | show only messages matching  |
|                               |               | a pattern                    |
+-------------------------------+---------------+------------------------------+
| <limit-current-thread>        |               | limit view to current thread |
+-------------------------------+---------------+------------------------------+
| <link-threads>                | &             | link tagged message to the   |
|                               |               | current one                  |
+-------------------------------+---------------+------------------------------+
| <list-reply>                  | L             | reply to specified mailing   |
|                               |               | list                         |
+-------------------------------+---------------+------------------------------+
| <list-subscribe>              |               | subscribe to a mailing list  |
+-------------------------------+---------------+------------------------------+
| <list-unsubscribe>            |               | unsubscribe from a mailing   |
|                               |               | list                         |
+-------------------------------+---------------+------------------------------+
| <mail>                        | m             | compose a new mail message   |
+-------------------------------+---------------+------------------------------+
| <mail-key>                    | Esc k         | mail a PGP public key        |
+-------------------------------+---------------+------------------------------+
| <mailbox-list>                | .             | list mailboxes with new mail |
+-------------------------------+---------------+------------------------------+
| <mark-message>                | ~             | create a hotkey macro for    |
|                               |               | the current message          |
+-------------------------------+---------------+------------------------------+
| <modify-labels>               |               | modify (notmuch/imap) tags   |
+-------------------------------+---------------+------------------------------+
| <modify-labels-then-hide>     |               | modify (notmuch/imap) tags   |
|                               |               | and then hide message        |
+-------------------------------+---------------+------------------------------+
| <modify-tags>                 |               | modify (notmuch/imap) tags   |
+-------------------------------+---------------+------------------------------+
| <modify-tags-then-hide>       |               | modify (notmuch/imap) tags   |
|                               |               | and then hide message        |
+-------------------------------+---------------+------------------------------+
| <next-entry>                  | J             | move to the next entry       |
+-------------------------------+---------------+------------------------------+
| <next-new>                    |               | jump to the next new message |
+-------------------------------+---------------+------------------------------+
| <next-new-then-unread>        | <Tab>         | jump to the next new or      |
|                               |               | unread message               |
+-------------------------------+---------------+------------------------------+
| <next-subthread>              | Esc n         | jump to the next subthread   |
+-------------------------------+---------------+------------------------------+
| <next-thread>                 | ^N            | jump to the next thread      |
+-------------------------------+---------------+------------------------------+
| <next-undeleted>              | <Down>        | move to the next undeleted   |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <next-undeleted>              | j             | move to the next undeleted   |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <next-unread>                 |               | jump to the next unread      |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <next-unread-mailbox>         |               | open next mailbox with new   |
|                               |               | mail                         |
+-------------------------------+---------------+------------------------------+
| <parent-message>              | P             | jump to parent message in    |
|                               |               | thread                       |
+-------------------------------+---------------+------------------------------+
| <pipe-entry>                  | |             | pipe message/attachment to a |
|                               |               | shell command                |
+-------------------------------+---------------+------------------------------+
| <pipe-message>                | |             | pipe message/attachment to a |
|                               |               | shell command                |
+-------------------------------+---------------+------------------------------+
| <post-message>                |               | post message to newsgroup    |
+-------------------------------+---------------+------------------------------+
| <previous-entry>              | K             | move to the previous entry   |
+-------------------------------+---------------+------------------------------+
| <previous-new>                |               | jump to the previous new     |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <previous-new-then-unread>    | Esc <Tab>     | jump to the previous new or  |
|                               |               | unread message               |
+-------------------------------+---------------+------------------------------+
| <previous-subthread>          | Esc p         | jump to previous subthread   |
+-------------------------------+---------------+------------------------------+
| <previous-thread>             | ^P            | jump to previous thread      |
+-------------------------------+---------------+------------------------------+
| <previous-undeleted>          | <Up>          | move to the previous         |
|                               |               | undeleted message            |
+-------------------------------+---------------+------------------------------+
| <previous-undeleted>          | k             | move to the previous         |
|                               |               | undeleted message            |
+-------------------------------+---------------+------------------------------+
| <previous-unread>             |               | jump to the previous unread  |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <print-message>               | p             | print the current entry      |
+-------------------------------+---------------+------------------------------+
| <purge-message>               |               | delete the current entry,    |
|                               |               | bypassing the trash folder   |
+-------------------------------+---------------+------------------------------+
| <purge-thread>                |               | delete the current thread,   |
|                               |               | bypassing the trash folder   |
+-------------------------------+---------------+------------------------------+
| <quasi-delete>                |               | delete from NeoMutt, don't   |
|                               |               | touch on disk                |
+-------------------------------+---------------+------------------------------+
| <query>                       | Q             | query external program for   |
|                               |               | addresses                    |
+-------------------------------+---------------+------------------------------+
| <quit>                        | q             | save changes to mailbox and  |
|                               |               | quit                         |
+-------------------------------+---------------+------------------------------+
| <read-subthread>              | Esc r         | mark the current subthread   |
|                               |               | as read                      |
+-------------------------------+---------------+------------------------------+
| <read-thread>                 | ^R            | mark the current thread as   |
|                               |               | read                         |
+-------------------------------+---------------+------------------------------+
| <recall-message>              | R             | recall a postponed message   |
+-------------------------------+---------------+------------------------------+
| <reconstruct-thread>          |               | reconstruct thread           |
|                               |               | containing current message   |
+-------------------------------+---------------+------------------------------+
| <reply>                       | r             | reply to a message           |
+-------------------------------+---------------+------------------------------+
| <resend-message>              | Esc e         | use the current message as a |
|                               |               | template for a new one       |
+-------------------------------+---------------+------------------------------+
| <root-message>                |               | jump to root message in      |
|                               |               | thread                       |
+-------------------------------+---------------+------------------------------+
| <save-message>                | s             | save message/attachment to a |
|                               |               | mailbox/file                 |
+-------------------------------+---------------+------------------------------+
| <set-flag>                    | w             | set a status flag on a       |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <show-limit>                  | Esc l         | show currently active limit  |
|                               |               | pattern                      |
+-------------------------------+---------------+------------------------------+
| <show-log-messages>           | M             | show log (and debug)         |
|                               |               | messages                     |
+-------------------------------+---------------+------------------------------+
| <sidebar-first>               |               | move the highlight to the    |
|                               |               | first mailbox                |
+-------------------------------+---------------+------------------------------+
| <sidebar-last>                |               | move the highlight to the    |
|                               |               | last mailbox                 |
+-------------------------------+---------------+------------------------------+
| <sidebar-next>                |               | move the highlight to next   |
|                               |               | mailbox                      |
+-------------------------------+---------------+------------------------------+
| <sidebar-next-new>            |               | move the highlight to next   |
|                               |               | mailbox with new mail        |
+-------------------------------+---------------+------------------------------+
| <sidebar-open>                |               | open highlighted mailbox     |
+-------------------------------+---------------+------------------------------+
| <sidebar-page-down>           |               | scroll the sidebar down 1    |
|                               |               | page                         |
+-------------------------------+---------------+------------------------------+
| <sidebar-page-up>             |               | scroll the sidebar up 1 page |
+-------------------------------+---------------+------------------------------+
| <sidebar-prev>                |               | move the highlight to        |
|                               |               | previous mailbox             |
+-------------------------------+---------------+------------------------------+
|                               |               | move the highlight to        |
| <sidebar-prev-new>            |               | previous mailbox with new    |
|                               |               | mail                         |
+-------------------------------+---------------+------------------------------+
| <sidebar-toggle-virtual>      |               | toggle between mailboxes and |
|                               |               | virtual mailboxes            |
+-------------------------------+---------------+------------------------------+
| <sidebar-toggle-visible>      |               | make the sidebar (in)visible |
+-------------------------------+---------------+------------------------------+
| <sort-mailbox>                | o             | sort messages                |
+-------------------------------+---------------+------------------------------+
| <sort-reverse>                | O             | sort messages in reverse     |
|                               |               | order                        |
+-------------------------------+---------------+------------------------------+
| <sync-mailbox>                | $             | save changes to mailbox      |
+-------------------------------+---------------+------------------------------+
| <tag-pattern>                 | T             | tag non-hidden messages      |
|                               |               | matching a pattern           |
+-------------------------------+---------------+------------------------------+
| <tag-subthread>               |               | tag the current subthread    |
+-------------------------------+---------------+------------------------------+
| <tag-thread>                  | Esc t         | tag the current thread       |
+-------------------------------+---------------+------------------------------+
| <toggle-new>                  | N             | toggle a message's 'new'     |
|                               |               | flag                         |
+-------------------------------+---------------+------------------------------+
| <toggle-read>                 |               | toggle view of read messages |
+-------------------------------+---------------+------------------------------+
| <toggle-write>                | %             | toggle whether the mailbox   |
|                               |               | will be rewritten            |
+-------------------------------+---------------+------------------------------+
| <undelete-message>            | u             | undelete the current entry   |
+-------------------------------+---------------+------------------------------+
| <undelete-pattern>            | U             | undelete non-hidden messages |
|                               |               | matching a pattern           |
+-------------------------------+---------------+------------------------------+
| <undelete-subthread>          | Esc u         | undelete all messages in     |
|                               |               | subthread                    |
+-------------------------------+---------------+------------------------------+
| <undelete-thread>             | ^U            | undelete all messages in     |
|                               |               | thread                       |
+-------------------------------+---------------+------------------------------+
| <untag-pattern>               | ^T            | untag non-hidden messages    |
|                               |               | matching a pattern           |
+-------------------------------+---------------+------------------------------+
| <vfolder-from-query>          |               | generate virtual folder from |
|                               |               | query                        |
+-------------------------------+---------------+------------------------------+
| <vfolder-from-query-readonly> |               | generate a read-only virtual |
|                               |               | folder from query            |
+-------------------------------+---------------+------------------------------+
| <vfolder-window-backward>     |               | shifts virtual folder time   |
|                               |               | window backwards             |
+-------------------------------+---------------+------------------------------+
| <vfolder-window-forward>      |               | shifts virtual folder time   |
|                               |               | window forwards              |
+-------------------------------+---------------+------------------------------+
| <vfolder-window-reset>        |               | resets virtual folder time   |
|                               |               | window to the present        |
+-------------------------------+---------------+------------------------------+
| <view-attachments>            | v             | show MIME attachments        |
+-------------------------------+---------------+------------------------------+
| <view-raw-message>            |               | show the raw message         |
+-------------------------------+---------------+------------------------------+

  4.3. Pager Menu

Table 9.4. Default Pager Menu Bindings

+-------------------------------+---------------+------------------------------+
|           Function            |  Default key  |         Description          |
+-------------------------------+---------------+------------------------------+
| <bottom>                      | <End>         | jump to the bottom of the    |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <bounce-message>              | b             | remail a message to another  |
|                               |               | user                         |
+-------------------------------+---------------+------------------------------+
| <break-thread>                | #             | break the thread in two      |
+-------------------------------+---------------+------------------------------+
| <change-folder>               | c             | open a different folder      |
+-------------------------------+---------------+------------------------------+
| <change-folder-readonly>      | Esc c         | open a different folder in   |
|                               |               | read only mode               |
+-------------------------------+---------------+------------------------------+
| <change-newsgroup>            |               | open a different newsgroup   |
+-------------------------------+---------------+------------------------------+
| <change-newsgroup-readonly>   |               | open a different newsgroup   |
|                               |               | in read only mode            |
+-------------------------------+---------------+------------------------------+
| <change-vfolder>              |               | open a different virtual     |
|                               |               | folder                       |
+-------------------------------+---------------+------------------------------+
| <check-stats>                 |               | calculate message statistics |
|                               |               | for all mailboxes            |
+-------------------------------+---------------+------------------------------+
| <check-traditional-pgp>       | Esc P         | check for classic PGP        |
+-------------------------------+---------------+------------------------------+
| <clear-flag>                  | W             | clear a status flag from a   |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <compose-to-sender>           |               | compose new message to the   |
|                               |               | current message sender       |
+-------------------------------+---------------+------------------------------+
| <copy-message>                | C             | copy a message to a          |
|                               |               | file/mailbox                 |
+-------------------------------+---------------+------------------------------+
| <create-alias>                | a             | create an alias from a       |
|                               |               | message sender               |
+-------------------------------+---------------+------------------------------+
| <decode-copy>                 | Esc C         | make decoded (text/plain)    |
|                               |               | copy                         |
+-------------------------------+---------------+------------------------------+
| <decode-save>                 | Esc s         | make decoded copy            |
|                               |               | (text/plain) and delete      |
+-------------------------------+---------------+------------------------------+
| <decrypt-copy>                |               | make decrypted copy          |
+-------------------------------+---------------+------------------------------+
| <decrypt-save>                |               | make decrypted copy and      |
|                               |               | delete                       |
+-------------------------------+---------------+------------------------------+
| <delete-message>              | d             | delete the current entry     |
+-------------------------------+---------------+------------------------------+
| <delete-subthread>            | Esc d         | delete all messages in       |
|                               |               | subthread                    |
+-------------------------------+---------------+------------------------------+
| <delete-thread>               | ^D            | delete all messages in       |
|                               |               | thread                       |
+-------------------------------+---------------+------------------------------+
| <display-address>             | @             | display full address of      |
|                               |               | sender                       |
+-------------------------------+---------------+------------------------------+
| <display-toggle-weed>         | h             | display message and toggle   |
|                               |               | header weeding               |
+-------------------------------+---------------+------------------------------+
|                               |               | edit the raw message (edit   |
| <edit>                        |               | and edit-raw-message are     |
|                               |               | synonyms)                    |
+-------------------------------+---------------+------------------------------+
| <edit-label>                  | Y             | add, change, or delete a     |
|                               |               | message's label              |
+-------------------------------+---------------+------------------------------+
|                               |               | edit the raw message if the  |
| <edit-or-view-raw-message>    | e             | mailbox is not read-only,    |
|                               |               | otherwise view it            |
+-------------------------------+---------------+------------------------------+
|                               |               | edit the raw message (edit   |
| <edit-raw-message>            |               | and edit-raw-message are     |
|                               |               | synonyms)                    |
+-------------------------------+---------------+------------------------------+
| <edit-type>                   | ^E            | edit attachment content type |
+-------------------------------+---------------+------------------------------+
| <enter-command>               | :             | enter a neomuttrc command    |
+-------------------------------+---------------+------------------------------+
| <entire-thread>               |               | read entire thread of the    |
|                               |               | current message              |
+-------------------------------+---------------+------------------------------+
| <exit>                        | i             | exit this menu               |
+-------------------------------+---------------+------------------------------+
| <exit>                        | q             | exit this menu               |
+-------------------------------+---------------+------------------------------+
| <exit>                        | x             | exit this menu               |
+-------------------------------+---------------+------------------------------+
| <extract-keys>                | ^K            | extract supported public     |
|                               |               | keys                         |
+-------------------------------+---------------+------------------------------+
| <flag-message>                | F             | toggle a message's           |
|                               |               | 'important' flag             |
+-------------------------------+---------------+------------------------------+
| <followup-message>            |               | followup to newsgroup        |
+-------------------------------+---------------+------------------------------+
| <forget-passphrase>           | ^F            | wipe passphrases from memory |
+-------------------------------+---------------+------------------------------+
| <forward-message>             | f             | forward a message with       |
|                               |               | comments                     |
+-------------------------------+---------------+------------------------------+
| <forward-to-group>            |               | forward to newsgroup         |
+-------------------------------+---------------+------------------------------+
| <group-chat-reply>            |               | reply to all recipients      |
|                               |               | preserving To/Cc             |
+-------------------------------+---------------+------------------------------+
| <group-reply>                 | g             | reply to all recipients      |
+-------------------------------+---------------+------------------------------+
| <half-down>                   |               | scroll down 1/2 page         |
+-------------------------------+---------------+------------------------------+
| <half-up>                     |               | scroll up 1/2 page           |
+-------------------------------+---------------+------------------------------+
| <help>                        | ?             | this screen                  |
+-------------------------------+---------------+------------------------------+
| <imap-fetch-mail>             |               | force retrieval of mail from |
|                               |               | IMAP server                  |
+-------------------------------+---------------+------------------------------+
| <imap-logout-all>             |               | logout from all IMAP servers |
+-------------------------------+---------------+------------------------------+
| <jump>                        |               | jump to an index number      |
+-------------------------------+---------------+------------------------------+
| <link-threads>                | &             | link tagged message to the   |
|                               |               | current one                  |
+-------------------------------+---------------+------------------------------+
| <list-reply>                  | L             | reply to specified mailing   |
|                               |               | list                         |
+-------------------------------+---------------+------------------------------+
| <list-subscribe>              |               | subscribe to a mailing list  |
+-------------------------------+---------------+------------------------------+
| <list-unsubscribe>            |               | unsubscribe from a mailing   |
|                               |               | list                         |
+-------------------------------+---------------+------------------------------+
| <mail>                        | m             | compose a new mail message   |
+-------------------------------+---------------+------------------------------+
| <mail-key>                    | Esc k         | mail a PGP public key        |
+-------------------------------+---------------+------------------------------+
| <mailbox-list>                | .             | list mailboxes with new mail |
+-------------------------------+---------------+------------------------------+
| <mark-as-new>                 | N             | toggle a message's 'new'     |
|                               |               | flag                         |
+-------------------------------+---------------+------------------------------+
| <modify-labels>               |               | modify (notmuch/imap) tags   |
+-------------------------------+---------------+------------------------------+
| <modify-labels-then-hide>     |               | modify (notmuch/imap) tags   |
|                               |               | and then hide message        |
+-------------------------------+---------------+------------------------------+
| <modify-tags>                 |               | modify (notmuch/imap) tags   |
+-------------------------------+---------------+------------------------------+
| <modify-tags-then-hide>       |               | modify (notmuch/imap) tags   |
|                               |               | and then hide message        |
+-------------------------------+---------------+------------------------------+
| <next-entry>                  | J             | move to the next entry       |
+-------------------------------+---------------+------------------------------+
| <next-line>                   | <Enter>       | scroll down one line         |
+-------------------------------+---------------+------------------------------+
| <next-line>                   | <Keypadenter> | scroll down one line         |
+-------------------------------+---------------+------------------------------+
| <next-line>                   | <Return>      | scroll down one line         |
+-------------------------------+---------------+------------------------------+
| <next-new>                    |               | jump to the next new message |
+-------------------------------+---------------+------------------------------+
| <next-new-then-unread>        | <Tab>         | jump to the next new or      |
|                               |               | unread message               |
+-------------------------------+---------------+------------------------------+
| <next-page>                   | <Pagedown>    | move to the next page        |
+-------------------------------+---------------+------------------------------+
| <next-page>                   | <Space>       | move to the next page        |
+-------------------------------+---------------+------------------------------+
| <next-subthread>              | Esc n         | jump to the next subthread   |
+-------------------------------+---------------+------------------------------+
| <next-thread>                 | ^N            | jump to the next thread      |
+-------------------------------+---------------+------------------------------+
| <next-undeleted>              | <Down>        | move to the next undeleted   |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <next-undeleted>              | <Right>       | move to the next undeleted   |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <next-undeleted>              | j             | move to the next undeleted   |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <next-unread>                 |               | jump to the next unread      |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <next-unread-mailbox>         |               | open next mailbox with new   |
|                               |               | mail                         |
+-------------------------------+---------------+------------------------------+
| <parent-message>              | P             | jump to parent message in    |
|                               |               | thread                       |
+-------------------------------+---------------+------------------------------+
| <pipe-entry>                  | |             | pipe message/attachment to a |
|                               |               | shell command                |
+-------------------------------+---------------+------------------------------+
| <pipe-message>                | |             | pipe message/attachment to a |
|                               |               | shell command                |
+-------------------------------+---------------+------------------------------+
| <post-message>                |               | post message to newsgroup    |
+-------------------------------+---------------+------------------------------+
| <previous-entry>              | K             | move to the previous entry   |
+-------------------------------+---------------+------------------------------+
| <previous-line>               | <Backspace>   | scroll up one line           |
+-------------------------------+---------------+------------------------------+
| <previous-new>                |               | jump to the previous new     |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <previous-new-then-unread>    |               | jump to the previous new or  |
|                               |               | unread message               |
+-------------------------------+---------------+------------------------------+
| <previous-page>               | <Pageup>      | move to the previous page    |
+-------------------------------+---------------+------------------------------+
| <previous-page>               | -             | move to the previous page    |
+-------------------------------+---------------+------------------------------+
| <previous-subthread>          | Esc p         | jump to previous subthread   |
+-------------------------------+---------------+------------------------------+
| <previous-thread>             | ^P            | jump to previous thread      |
+-------------------------------+---------------+------------------------------+
| <previous-undeleted>          | <Left>        | move to the previous         |
|                               |               | undeleted message            |
+-------------------------------+---------------+------------------------------+
| <previous-undeleted>          | <Up>          | move to the previous         |
|                               |               | undeleted message            |
+-------------------------------+---------------+------------------------------+
| <previous-undeleted>          | k             | move to the previous         |
|                               |               | undeleted message            |
+-------------------------------+---------------+------------------------------+
| <previous-unread>             |               | jump to the previous unread  |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <print-entry>                 |               | print the current entry      |
+-------------------------------+---------------+------------------------------+
| <print-message>               | p             | print the current entry      |
+-------------------------------+---------------+------------------------------+
| <purge-message>               |               | delete the current entry,    |
|                               |               | bypassing the trash folder   |
+-------------------------------+---------------+------------------------------+
| <purge-thread>                |               | delete the current thread,   |
|                               |               | bypassing the trash folder   |
+-------------------------------+---------------+------------------------------+
| <quasi-delete>                |               | delete from NeoMutt, don't   |
|                               |               | touch on disk                |
+-------------------------------+---------------+------------------------------+
| <quit>                        | Q             | save changes to mailbox and  |
|                               |               | quit                         |
+-------------------------------+---------------+------------------------------+
| <read-subthread>              | Esc r         | mark the current subthread   |
|                               |               | as read                      |
+-------------------------------+---------------+------------------------------+
| <read-thread>                 | ^R            | mark the current thread as   |
|                               |               | read                         |
+-------------------------------+---------------+------------------------------+
| <recall-message>              | R             | recall a postponed message   |
+-------------------------------+---------------+------------------------------+
| <reconstruct-thread>          |               | reconstruct thread           |
|                               |               | containing current message   |
+-------------------------------+---------------+------------------------------+
| <redraw-screen>               | ^L            | clear and redraw the screen  |
+-------------------------------+---------------+------------------------------+
| <reply>                       | r             | reply to a message           |
+-------------------------------+---------------+------------------------------+
| <resend-message>              | Esc e         | use the current message as a |
|                               |               | template for a new one       |
+-------------------------------+---------------+------------------------------+
| <root-message>                |               | jump to root message in      |
|                               |               | thread                       |
+-------------------------------+---------------+------------------------------+
| <save-entry>                  |               | save message/attachment to a |
|                               |               | mailbox/file                 |
+-------------------------------+---------------+------------------------------+
| <save-message>                | s             | save message/attachment to a |
|                               |               | mailbox/file                 |
+-------------------------------+---------------+------------------------------+
| <search>                      | /             | search for a regular         |
|                               |               | expression                   |
+-------------------------------+---------------+------------------------------+
| <search-next>                 | n             | search for next match        |
+-------------------------------+---------------+------------------------------+
| <search-opposite>             |               | search for next match in     |
|                               |               | opposite direction           |
+-------------------------------+---------------+------------------------------+
| <search-reverse>              | Esc /         | search backwards for a       |
|                               |               | regular expression           |
+-------------------------------+---------------+------------------------------+
| <search-toggle>               | \\            | toggle search pattern        |
|                               |               | coloring                     |
+-------------------------------+---------------+------------------------------+
| <set-flag>                    | w             | set a status flag on a       |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <shell-escape>                | !             | invoke a command in a        |
|                               |               | subshell                     |
+-------------------------------+---------------+------------------------------+
| <show-log-messages>           |               | show log (and debug)         |
|                               |               | messages                     |
+-------------------------------+---------------+------------------------------+
| <show-version>                | V             | show the NeoMutt version     |
|                               |               | number and date              |
+-------------------------------+---------------+------------------------------+
| <sidebar-first>               |               | move the highlight to the    |
|                               |               | first mailbox                |
+-------------------------------+---------------+------------------------------+
| <sidebar-last>                |               | move the highlight to the    |
|                               |               | last mailbox                 |
+-------------------------------+---------------+------------------------------+
| <sidebar-next>                |               | move the highlight to next   |
|                               |               | mailbox                      |
+-------------------------------+---------------+------------------------------+
| <sidebar-next-new>            |               | move the highlight to next   |
|                               |               | mailbox with new mail        |
+-------------------------------+---------------+------------------------------+
| <sidebar-open>                |               | open highlighted mailbox     |
+-------------------------------+---------------+------------------------------+
| <sidebar-page-down>           |               | scroll the sidebar down 1    |
|                               |               | page                         |
+-------------------------------+---------------+------------------------------+
| <sidebar-page-up>             |               | scroll the sidebar up 1 page |
+-------------------------------+---------------+------------------------------+
| <sidebar-prev>                |               | move the highlight to        |
|                               |               | previous mailbox             |
+-------------------------------+---------------+------------------------------+
|                               |               | move the highlight to        |
| <sidebar-prev-new>            |               | previous mailbox with new    |
|                               |               | mail                         |
+-------------------------------+---------------+------------------------------+
| <sidebar-toggle-virtual>      |               | toggle between mailboxes and |
|                               |               | virtual mailboxes            |
+-------------------------------+---------------+------------------------------+
| <sidebar-toggle-visible>      |               | make the sidebar (in)visible |
+-------------------------------+---------------+------------------------------+
| <skip-headers>                | H             | jump to first line after     |
|                               |               | headers                      |
+-------------------------------+---------------+------------------------------+
| <skip-quoted>                 | S             | skip beyond quoted text      |
+-------------------------------+---------------+------------------------------+
| <sort-mailbox>                | o             | sort messages                |
+-------------------------------+---------------+------------------------------+
| <sort-reverse>                | O             | sort messages in reverse     |
|                               |               | order                        |
+-------------------------------+---------------+------------------------------+
| <sync-mailbox>                | $             | save changes to mailbox      |
+-------------------------------+---------------+------------------------------+
| <tag-message>                 | t             | tag the current entry        |
+-------------------------------+---------------+------------------------------+
| <toggle-quoted>               | T             | toggle display of quoted     |
|                               |               | text                         |
+-------------------------------+---------------+------------------------------+
| <toggle-write>                | %             | toggle whether the mailbox   |
|                               |               | will be rewritten            |
+-------------------------------+---------------+------------------------------+
| <top>                         | <Home>        | jump to the top of the       |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <top>                         | ^             | jump to the top of the       |
|                               |               | message                      |
+-------------------------------+---------------+------------------------------+
| <undelete-message>            | u             | undelete the current entry   |
+-------------------------------+---------------+------------------------------+
| <undelete-subthread>          | Esc u         | undelete all messages in     |
|                               |               | subthread                    |
+-------------------------------+---------------+------------------------------+
| <undelete-thread>             | ^U            | undelete all messages in     |
|                               |               | thread                       |
+-------------------------------+---------------+------------------------------+
| <vfolder-from-query>          |               | generate virtual folder from |
|                               |               | query                        |
+-------------------------------+---------------+------------------------------+
| <vfolder-from-query-readonly> |               | generate a read-only virtual |
|                               |               | folder from query            |
+-------------------------------+---------------+------------------------------+
| <view-attachments>            | v             | show MIME attachments        |
+-------------------------------+---------------+------------------------------+
| <view-raw-message>            |               | show the raw message         |
+-------------------------------+---------------+------------------------------+
| <what-key>                    |               | display the keycode for a    |
|                               |               | key press                    |
+-------------------------------+---------------+------------------------------+

  4.4. Alias Menu

Table 9.5. Default Alias Menu Bindings

+----------------------+-------------+-----------------------------------------+
|       Function       | Default key |               Description               |
+----------------------+-------------+-----------------------------------------+
| <delete-entry>       | d           | delete the current entry                |
+----------------------+-------------+-----------------------------------------+
| <exit>               | q           | exit this menu                          |
+----------------------+-------------+-----------------------------------------+
| <limit>              | l           | show only messages matching a pattern   |
+----------------------+-------------+-----------------------------------------+
| <mail>               | m           | compose a new mail message              |
+----------------------+-------------+-----------------------------------------+
| <sort-alias>         | o           | sort messages                           |
+----------------------+-------------+-----------------------------------------+
| <sort-alias-reverse> | O           | sort messages in reverse order          |
+----------------------+-------------+-----------------------------------------+
| <tag-entry>          | <Space>     | tag the current entry                   |
+----------------------+-------------+-----------------------------------------+
| <tag-pattern>        | T           | tag non-hidden messages matching a      |
|                      |             | pattern                                 |
+----------------------+-------------+-----------------------------------------+
| <undelete-entry>     | u           | undelete the current entry              |
+----------------------+-------------+-----------------------------------------+
| <untag-pattern>      | ^T          | untag non-hidden messages matching a    |
|                      |             | pattern                                 |
+----------------------+-------------+-----------------------------------------+

  4.5. Query Menu

Table 9.6. Default Query Menu Bindings

+-----------------+-------------+----------------------------------------------+
|    Function     | Default key |                 Description                  |
+-----------------+-------------+----------------------------------------------+
| <create-alias>  | a           | create an alias from a message sender        |
+-----------------+-------------+----------------------------------------------+
| <exit>          | q           | exit this menu                               |
+-----------------+-------------+----------------------------------------------+
| <limit>         | l           | show only messages matching a pattern        |
+-----------------+-------------+----------------------------------------------+
| <mail>          | m           | compose a new mail message                   |
+-----------------+-------------+----------------------------------------------+
| <query>         | Q           | query external program for addresses         |
+-----------------+-------------+----------------------------------------------+
| <query-append>  | A           | append new query results to current results  |
+-----------------+-------------+----------------------------------------------+
| <sort>          | o           | sort messages                                |
+-----------------+-------------+----------------------------------------------+
| <sort-reverse>  | O           | sort messages in reverse order               |
+-----------------+-------------+----------------------------------------------+
| <tag-entry>     | <Space>     | tag the current entry                        |
+-----------------+-------------+----------------------------------------------+
| <tag-pattern>   | T           | tag non-hidden messages matching a pattern   |
+-----------------+-------------+----------------------------------------------+
| <untag-pattern> | ^T          | untag non-hidden messages matching a pattern |
+-----------------+-------------+----------------------------------------------+

  4.6. Attachment Menu

Table 9.7. Default Attachment Menu Bindings

+-------------------------+---------------+------------------------------------+
|        Function         |  Default key  |            Description             |
+-------------------------+---------------+------------------------------------+
| <bounce-message>        | b             | remail a message to another user   |
+-------------------------+---------------+------------------------------------+
| <check-traditional-pgp> | Esc P         | check for classic PGP              |
+-------------------------+---------------+------------------------------------+
| <collapse-parts>        | v             | toggle display of subparts         |
+-------------------------+---------------+------------------------------------+
| <compose-to-sender>     |               | compose new message to the current |
|                         |               | message sender                     |
+-------------------------+---------------+------------------------------------+
| <delete-entry>          | d             | delete the current entry           |
+-------------------------+---------------+------------------------------------+
| <display-toggle-weed>   | h             | display message and toggle header  |
|                         |               | weeding                            |
+-------------------------+---------------+------------------------------------+
| <edit-type>             | ^E            | edit attachment content type       |
+-------------------------+---------------+------------------------------------+
| <exit>                  | q             | exit this menu                     |
+-------------------------+---------------+------------------------------------+
| <extract-keys>          | ^K            | extract supported public keys      |
+-------------------------+---------------+------------------------------------+
| <followup-message>      |               | followup to newsgroup              |
+-------------------------+---------------+------------------------------------+
| <forget-passphrase>     | ^F            | wipe passphrases from memory       |
+-------------------------+---------------+------------------------------------+
| <forward-message>       | f             | forward a message with comments    |
+-------------------------+---------------+------------------------------------+
| <forward-to-group>      |               | forward to newsgroup               |
+-------------------------+---------------+------------------------------------+
| <group-chat-reply>      |               | reply to all recipients preserving |
|                         |               | To/Cc                              |
+-------------------------+---------------+------------------------------------+
| <group-reply>           | g             | reply to all recipients            |
+-------------------------+---------------+------------------------------------+
| <list-reply>            | L             | reply to specified mailing list    |
+-------------------------+---------------+------------------------------------+
| <list-subscribe>        |               | subscribe to a mailing list        |
+-------------------------+---------------+------------------------------------+
| <list-unsubscribe>      |               | unsubscribe from a mailing list    |
+-------------------------+---------------+------------------------------------+
| <pipe-entry>            | |             | pipe message/attachment to a shell |
|                         |               | command                            |
+-------------------------+---------------+------------------------------------+
| <pipe-message>          | |             | pipe message/attachment to a shell |
|                         |               | command                            |
+-------------------------+---------------+------------------------------------+
| <print-entry>           | p             | print the current entry            |
+-------------------------+---------------+------------------------------------+
| <reply>                 | r             | reply to a message                 |
+-------------------------+---------------+------------------------------------+
| <resend-message>        | Esc e         | use the current message as a       |
|                         |               | template for a new one             |
+-------------------------+---------------+------------------------------------+
| <save-entry>            | s             | save message/attachment to a       |
|                         |               | mailbox/file                       |
+-------------------------+---------------+------------------------------------+
| <undelete-entry>        | u             | undelete the current entry         |
+-------------------------+---------------+------------------------------------+
| <view-attach>           | <Enter>       | view attachment using mailcap      |
|                         |               | entry if necessary                 |
+-------------------------+---------------+------------------------------------+
| <view-attach>           | <Keypadenter> | view attachment using mailcap      |
|                         |               | entry if necessary                 |
+-------------------------+---------------+------------------------------------+
| <view-attach>           | <Return>      | view attachment using mailcap      |
|                         |               | entry if necessary                 |
+-------------------------+---------------+------------------------------------+
| <view-mailcap>          | m             | force viewing of attachment using  |
|                         |               | mailcap                            |
+-------------------------+---------------+------------------------------------+
| <view-pager>            |               | view attachment in pager using     |
|                         |               | copiousoutput mailcap              |
+-------------------------+---------------+------------------------------------+
| <view-text>             | T             | view attachment as text            |
+-------------------------+---------------+------------------------------------+

  4.7. Compose Menu

Table 9.8. Default Compose Menu Bindings

+-----------------------+---------------+--------------------------------------+
|       Function        |  Default key  |             Description              |
+-----------------------+---------------+--------------------------------------+
| <attach-file>         | a             | attach files to this message         |
+-----------------------+---------------+--------------------------------------+
| <attach-key>          | Esc k         | attach a PGP public key              |
+-----------------------+---------------+--------------------------------------+
| <attach-message>      | A             | attach messages to this message      |
+-----------------------+---------------+--------------------------------------+
| <attach-news-message> |               | attach news articles to this message |
+-----------------------+---------------+--------------------------------------+
| <autocrypt-menu>      | o             | show autocrypt compose menu options  |
+-----------------------+---------------+--------------------------------------+
| <copy-file>           | C             | save message/attachment to a         |
|                       |               | mailbox/file                         |
+-----------------------+---------------+--------------------------------------+
| <detach-file>         | D             | delete the current entry             |
+-----------------------+---------------+--------------------------------------+
| <display-toggle-weed> | h             | display message and toggle header    |
|                       |               | weeding                              |
+-----------------------+---------------+--------------------------------------+
| <edit-bcc>            | b             | edit the BCC list                    |
+-----------------------+---------------+--------------------------------------+
| <edit-cc>             | c             | edit the CC list                     |
+-----------------------+---------------+--------------------------------------+
| <edit-content-id>     | Esc i         | edit the 'Content-ID' of the         |
|                       |               | attachment                           |
+-----------------------+---------------+--------------------------------------+
| <edit-description>    | d             | edit attachment description          |
+-----------------------+---------------+--------------------------------------+
| <edit-encoding>       | ^E            | edit attachment transfer-encoding    |
+-----------------------+---------------+--------------------------------------+
| <edit-fcc>            | f             | enter a file to save a copy of this  |
|                       |               | message in                           |
+-----------------------+---------------+--------------------------------------+
| <edit-file>           | Esc e         | edit the file to be attached         |
+-----------------------+---------------+--------------------------------------+
| <edit-followup-to>    |               | edit the Followup-To field           |
+-----------------------+---------------+--------------------------------------+
| <edit-from>           | Esc f         | edit the from field                  |
+-----------------------+---------------+--------------------------------------+
| <edit-headers>        | E             | edit the message with headers        |
+-----------------------+---------------+--------------------------------------+
| <edit-language>       | ^L            | edit the 'Content-Language' of the   |
|                       |               | attachment                           |
+-----------------------+---------------+--------------------------------------+
| <edit-message>        | e             | edit the message                     |
+-----------------------+---------------+--------------------------------------+
| <edit-mime>           | m             | edit attachment using mailcap entry  |
+-----------------------+---------------+--------------------------------------+
| <edit-newsgroups>     |               | edit the newsgroups list             |
+-----------------------+---------------+--------------------------------------+
| <edit-reply-to>       | r             | edit the Reply-To field              |
+-----------------------+---------------+--------------------------------------+
| <edit-subject>        | s             | edit the subject of this message     |
+-----------------------+---------------+--------------------------------------+
| <edit-to>             | t             | edit the TO list                     |
+-----------------------+---------------+--------------------------------------+
| <edit-type>           | ^T            | edit attachment content type         |
+-----------------------+---------------+--------------------------------------+
| <edit-x-comment-to>   |               | edit the X-Comment-To field          |
+-----------------------+---------------+--------------------------------------+
| <exit>                | q             | exit this menu                       |
+-----------------------+---------------+--------------------------------------+
| <filter-entry>        | F             | filter attachment through a shell    |
|                       |               | command                              |
+-----------------------+---------------+--------------------------------------+
| <forget-passphrase>   | ^F            | wipe passphrases from memory         |
+-----------------------+---------------+--------------------------------------+
| <get-attachment>      | G             | get a temporary copy of an           |
|                       |               | attachment                           |
+-----------------------+---------------+--------------------------------------+
| <group-alternatives>  | &             | group tagged attachments as          |
|                       |               | 'multipart/alternative'              |
+-----------------------+---------------+--------------------------------------+
| <group-multilingual>  | ^             | group tagged attachments as          |
|                       |               | 'multipart/multilingual'             |
+-----------------------+---------------+--------------------------------------+
| <group-related>       | %             | group tagged attachments as          |
|                       |               | 'multipart/related'                  |
+-----------------------+---------------+--------------------------------------+
| <ispell>              | i             | run ispell on the message            |
+-----------------------+---------------+--------------------------------------+
| <move-down>           | +             | move an attachment down in the       |
|                       |               | attachment list                      |
+-----------------------+---------------+--------------------------------------+
| <move-up>             | -             | move an attachment up in the         |
|                       |               | attachment list                      |
+-----------------------+---------------+--------------------------------------+
| <new-mime>            | n             | compose new attachment using mailcap |
|                       |               | entry                                |
+-----------------------+---------------+--------------------------------------+
| <pgp-menu>            | p             | show PGP options                     |
+-----------------------+---------------+--------------------------------------+
| <pipe-entry>          | |             | pipe message/attachment to a shell   |
|                       |               | command                              |
+-----------------------+---------------+--------------------------------------+
| <pipe-message>        | |             | pipe message/attachment to a shell   |
|                       |               | command                              |
+-----------------------+---------------+--------------------------------------+
| <postpone-message>    | P             | save this message to send later      |
+-----------------------+---------------+--------------------------------------+
| <preview-page-down>   | <Pagedown>    | show the next page of the message    |
+-----------------------+---------------+--------------------------------------+
| <preview-page-up>     | <Pageup>      | show the previous page of the        |
|                       |               | message                              |
+-----------------------+---------------+--------------------------------------+
| <print-entry>         | l             | print the current entry              |
+-----------------------+---------------+--------------------------------------+
| <rename-attachment>   | ^O            | send attachment with a different     |
|                       |               | name                                 |
+-----------------------+---------------+--------------------------------------+
| <rename-file>         | R             | rename/move an attached file         |
+-----------------------+---------------+--------------------------------------+
| <send-message>        | y             | send the message                     |
+-----------------------+---------------+--------------------------------------+
| <smime-menu>          | S             | show S/MIME options                  |
+-----------------------+---------------+--------------------------------------+
| <tag-entry>           | T             | tag the current entry                |
+-----------------------+---------------+--------------------------------------+
| <toggle-disposition>  | ^D            | toggle disposition between           |
|                       |               | inline/attachment                    |
+-----------------------+---------------+--------------------------------------+
| <toggle-recode>       |               | toggle recoding of this attachment   |
+-----------------------+---------------+--------------------------------------+
| <toggle-unlink>       | u             | toggle whether to delete file after  |
|                       |               | sending it                           |
+-----------------------+---------------+--------------------------------------+
| <ungroup-attachment>  | #             | ungroup 'multipart' attachment       |
+-----------------------+---------------+--------------------------------------+
| <update-encoding>     | U             | update an attachment's encoding info |
+-----------------------+---------------+--------------------------------------+
| <view-attach>         | <Enter>       | view attachment using mailcap entry  |
|                       |               | if necessary                         |
+-----------------------+---------------+--------------------------------------+
| <view-attach>         | <Keypadenter> | view attachment using mailcap entry  |
|                       |               | if necessary                         |
+-----------------------+---------------+--------------------------------------+
| <view-attach>         | <Return>      | view attachment using mailcap entry  |
|                       |               | if necessary                         |
+-----------------------+---------------+--------------------------------------+
| <view-mailcap>        |               | force viewing of attachment using    |
|                       |               | mailcap                              |
+-----------------------+---------------+--------------------------------------+
| <view-pager>          |               | view attachment in pager using       |
|                       |               | copiousoutput mailcap                |
+-----------------------+---------------+--------------------------------------+
| <view-text>           |               | view attachment as text              |
+-----------------------+---------------+--------------------------------------+
| <write-fcc>           | w             | write the message to a folder        |
+-----------------------+---------------+--------------------------------------+

  4.8. Postpone Menu

Table 9.9. Default Postpone Menu Bindings

+------------------+-------------+----------------------------+
|     Function     | Default key |        Description         |
+------------------+-------------+----------------------------+
| <delete-entry>   | d           | delete the current entry   |
+------------------+-------------+----------------------------+
| <exit>           | q           | exit this menu             |
+------------------+-------------+----------------------------+
| <undelete-entry> | u           | undelete the current entry |
+------------------+-------------+----------------------------+

  4.9. Browser Menu

Table 9.10. Default Browser Menu Bindings

+-----------------------+-------------+----------------------------------------+
|       Function        | Default key |              Description               |
+-----------------------+-------------+----------------------------------------+
| <catchup>             |             | mark all articles in newsgroup as read |
+-----------------------+-------------+----------------------------------------+
| <change-dir>          | c           | change directories                     |
+-----------------------+-------------+----------------------------------------+
| <check-new>           |             | check mailboxes for new mail           |
+-----------------------+-------------+----------------------------------------+
| <create-mailbox>      | C           | create a new mailbox (IMAP only)       |
+-----------------------+-------------+----------------------------------------+
| <delete-mailbox>      | d           | delete the current mailbox (IMAP only) |
+-----------------------+-------------+----------------------------------------+
| <descend-directory>   |             | descend into a directory               |
+-----------------------+-------------+----------------------------------------+
| <display-filename>    | @           | display the currently selected file's  |
|                       |             | name                                   |
+-----------------------+-------------+----------------------------------------+
| <enter-mask>          | m           | enter a file mask                      |
+-----------------------+-------------+----------------------------------------+
| <exit>                | q           | exit this menu                         |
+-----------------------+-------------+----------------------------------------+
| <goto-folder>         | =           | swap the current folder position with  |
|                       |             | $folder if it exists                   |
+-----------------------+-------------+----------------------------------------+
| <goto-parent>         | p           | go to parent directory                 |
+-----------------------+-------------+----------------------------------------+
| <mailbox-list>        | .           | list mailboxes with new mail           |
+-----------------------+-------------+----------------------------------------+
| <reload-active>       |             | load list of all newsgroups from NNTP  |
|                       |             | server                                 |
+-----------------------+-------------+----------------------------------------+
| <rename-mailbox>      | r           | rename the current mailbox (IMAP only) |
+-----------------------+-------------+----------------------------------------+
| <select-new>          | N           | select a new file in this directory    |
+-----------------------+-------------+----------------------------------------+
| <sort>                | o           | sort messages                          |
+-----------------------+-------------+----------------------------------------+
| <sort-reverse>        | O           | sort messages in reverse order         |
+-----------------------+-------------+----------------------------------------+
| <subscribe>           | s           | subscribe to current mbox (IMAP/NNTP   |
|                       |             | only)                                  |
+-----------------------+-------------+----------------------------------------+
| <subscribe-pattern>   |             | subscribe to newsgroups matching a     |
|                       |             | pattern                                |
+-----------------------+-------------+----------------------------------------+
| <toggle-mailboxes>    | <Tab>       | toggle whether to browse mailboxes or  |
|                       |             | all files                              |
+-----------------------+-------------+----------------------------------------+
| <toggle-subscribed>   | T           | toggle view all/subscribed mailboxes   |
|                       |             | (IMAP only)                            |
+-----------------------+-------------+----------------------------------------+
| <uncatchup>           |             | mark all articles in newsgroup as      |
|                       |             | unread                                 |
+-----------------------+-------------+----------------------------------------+
| <unsubscribe>         | u           | unsubscribe from current mbox          |
|                       |             | (IMAP/NNTP only)                       |
+-----------------------+-------------+----------------------------------------+
| <unsubscribe-pattern> |             | unsubscribe from newsgroups matching a |
|                       |             | pattern                                |
+-----------------------+-------------+----------------------------------------+
| <view-file>           | <Space>     | view file                              |
+-----------------------+-------------+----------------------------------------+

  4.10. Pgp Menu

Table 9.11. Default Pgp Menu Bindings

+--------------+-------------+------------------------+
|   Function   | Default key |      Description       |
+--------------+-------------+------------------------+
| <exit>       | q           | exit this menu         |
+--------------+-------------+------------------------+
| <verify-key> | c           | verify a public key    |
+--------------+-------------+------------------------+
| <view-name>  | %           | view the key's user id |
+--------------+-------------+------------------------+

  4.11. Smime Menu

Table 9.12. Default Smime Menu Bindings

+--------------+-------------+------------------------+
|   Function   | Default key |      Description       |
+--------------+-------------+------------------------+
| <exit>       | q           | exit this menu         |
+--------------+-------------+------------------------+
| <verify-key> | c           | verify a public key    |
+--------------+-------------+------------------------+
| <view-name>  | %           | view the key's user id |
+--------------+-------------+------------------------+

  4.12. Editor Menu

Table 9.13. Default Editor Menu Bindings

+-------------------+-------------+--------------------------------------------+
|     Function      | Default key |                Description                 |
+-------------------+-------------+--------------------------------------------+
| <backspace>       | <Backspace> | delete the char in front of the cursor     |
+-------------------+-------------+--------------------------------------------+
| <backspace>       | <Delete>    | delete the char in front of the cursor     |
+-------------------+-------------+--------------------------------------------+
| <backward-char>   | <Left>      | move the cursor one character to the left  |
+-------------------+-------------+--------------------------------------------+
| <backward-char>   | ^B          | move the cursor one character to the left  |
+-------------------+-------------+--------------------------------------------+
| <backward-word>   | Esc b       | move the cursor to the beginning of the    |
|                   |             | word                                       |
+-------------------+-------------+--------------------------------------------+
| <bol>             | <Home>      | jump to the beginning of the line          |
+-------------------+-------------+--------------------------------------------+
| <bol>             | ^A          | jump to the beginning of the line          |
+-------------------+-------------+--------------------------------------------+
| <capitalize-word> | Esc c       | capitalize the word                        |
+-------------------+-------------+--------------------------------------------+
| <complete>        | <Tab>       | complete filename or alias                 |
+-------------------+-------------+--------------------------------------------+
| <complete-query>  | ^T          | complete address with query                |
+-------------------+-------------+--------------------------------------------+
| <delete-char>     | <Delete>    | delete the char under the cursor           |
+-------------------+-------------+--------------------------------------------+
| <delete-char>     | ^D          | delete the char under the cursor           |
+-------------------+-------------+--------------------------------------------+
| <downcase-word>   | Esc l       | convert the word to lower case             |
+-------------------+-------------+--------------------------------------------+
| <eol>             | <End>       | jump to the end of the line                |
+-------------------+-------------+--------------------------------------------+
| <eol>             | ^E          | jump to the end of the line                |
+-------------------+-------------+--------------------------------------------+
| <forward-char>    | <Right>     | move the cursor one character to the right |
+-------------------+-------------+--------------------------------------------+
| <forward-char>    | ^F          | move the cursor one character to the right |
+-------------------+-------------+--------------------------------------------+
| <forward-word>    | Esc f       | move the cursor to the end of the word     |
+-------------------+-------------+--------------------------------------------+
| <help>            | Esc ?       | this screen                                |
+-------------------+-------------+--------------------------------------------+
| <history-down>    | <Down>      | scroll down through the history list       |
+-------------------+-------------+--------------------------------------------+
| <history-down>    | ^N          | scroll down through the history list       |
+-------------------+-------------+--------------------------------------------+
| <history-search>  | ^R          | search through the history list            |
+-------------------+-------------+--------------------------------------------+
| <history-up>      | <Up>        | scroll up through the history list         |
+-------------------+-------------+--------------------------------------------+
| <history-up>      | ^P          | scroll up through the history list         |
+-------------------+-------------+--------------------------------------------+
| <kill-eol>        | ^K          | delete chars from cursor to end of line    |
+-------------------+-------------+--------------------------------------------+
| <kill-eow>        | Esc d       | delete chars from the cursor to the end of |
|                   |             | the word                                   |
+-------------------+-------------+--------------------------------------------+
| <kill-line>       | ^U          | delete chars from cursor to beginning the  |
|                   |             | line                                       |
+-------------------+-------------+--------------------------------------------+
| <kill-whole-line> |             | delete all chars on the line               |
+-------------------+-------------+--------------------------------------------+
| <kill-word>       | ^W          | delete the word in front of the cursor     |
+-------------------+-------------+--------------------------------------------+
| <mailbox-cycle>   | <Space>     | cycle among incoming mailboxes             |
+-------------------+-------------+--------------------------------------------+
| <quote-char>      | ^V          | quote the next typed key                   |
+-------------------+-------------+--------------------------------------------+
| <redraw-screen>   | ^L          | clear and redraw the screen                |
+-------------------+-------------+--------------------------------------------+
| <transpose-chars> |             | transpose character under cursor with      |
|                   |             | previous                                   |
+-------------------+-------------+--------------------------------------------+
| <upcase-word>     | Esc u       | convert the word to upper case             |
+-------------------+-------------+--------------------------------------------+

  4.13. Autocrypt Account Menu

Table 9.14. Default Autocrypt Account Menu Bindings

+-------------------------+-------------+--------------------------------------+
|        Function         | Default key |             Description              |
+-------------------------+-------------+--------------------------------------+
| <create-account>        | c           | create a new autocrypt account       |
+-------------------------+-------------+--------------------------------------+
| <delete-account>        | D           | delete the current account           |
+-------------------------+-------------+--------------------------------------+
| <exit>                  | q           | exit this menu                       |
+-------------------------+-------------+--------------------------------------+
| <toggle-active>         | a           | toggle the current account           |
|                         |             | active/inactive                      |
+-------------------------+-------------+--------------------------------------+
| <toggle-prefer-encrypt> | p           | toggle the current account           |
|                         |             | prefer-encrypt flag                  |
+-------------------------+-------------+--------------------------------------+

                             Chapter 10. Miscellany

Table of Contents

1. Acknowledgements

2. About This Document

1. Acknowledgements

The following people have been very helpful to the development of Mutt:

Kari Hurtta, Vikas  Agnihotri, Francois  Berjon, Aric Blumer,  John Capo,  David
Champion, Brendan Cully, Liviu Daia, Thomas E. Dickey, David DeSimone,  Nickolay
N. Dudorov, Ruslan Ermilov, Edmund  Grimley Evans, Michael Finken, Sven  Guckes,
Lars Hecking,  Mark  Holloman, Andreas  Holzmann,  Marco d'Itri,  Bjoern  Jacke,
Byrial Jensen, David Jeske, Christophe Kalt, Tommi Komulainen, Felix von Leitner
(a.k.a "Fefe"),  Brandon  Long, Jimmy  Maekelae,  Lars Marowsky-Bree,  Kevin  J.
McCarthy, Thomas  "Mike"  Michlmayr, Andrew  W.  Nosenko, David  O'Brien,  Clint
Olsen, Park  Myeong Seok,  Thomas Parmelan,  Ollivier Robert,  Thomas  Roessler,
Roland Rosenfeld, Rocco Rutte, TAKIZAWA Takashi, Allain Thivillon, Gero Treuner,
Vsevolod Volkov, Ken Weinert

2. About This Document

This document was  written in DocBook,  and then rendered  using the Gnome  XSLT
toolkit.
