Technical documentation: You can view the rustdoc generated documentation here

Quick start tutorial

Follow the installation instructions in the README.

Launch meli with no arguments, and you will be asked if you want to create a sample configuration.

The sample configuration (created by default in ~/.config/meli/config.toml) includes comments with the basic settings required for setting up accounts allowing you to copy and edit right away. See meli.conf(5) for the available configuration options.

The main screen when you launch meli is the INBOX of the first account you have configured.

  • With J / K you can select the next/previous folder. (To go to a specific one directly, press Space and type the command go n where n is the number of the folder)
  • With h / l you can select the next/previous account.
  • Use the arrow keys to browse entries in the e-mail list of a folder. (Along with Home / End / PgUp / PgDn)
  • Use Enter to open an entry and i to exit it.
  • Use m to start writing new e-mail. (or R to reply to the entry you’re currently viewing)
  • Use the arrow keys to edit each field of the e-mail.
  • Attachments can be added by pressing Space and typing the command add-attachment PATH where PATH is the filesystem path of the attachment file.
  • Edit the draft body at eny time by pressing e
  • Send your e-mail by pressing s
  • Discard or save your draft by pressing Space and typing the command close

At any time, you can press ? to show a list of all available actions and shortcuts, along with every possible setting and command that your version supports.

Press T to cycle between tabs or Alt + 19 to choose.

Press q to exit.


meli(1)

MELI(1) General Commands Manual MELI(1)

meli terminal e-mail client μέλι is the Greek word for honey

meli [ --help | -h ] [ --version | -v ] [ --config path ]
|
Show help message and exit.
|
Show version and exit.
path
Start meli with given configuration file.
[ path ]
Create configuration file in path if given, or at $XDG_CONFIG_HOME/meli/config.toml
Edit configuration files with EDITOR or VISUAL .
[ path ]
Test a configuration file for syntax issues or missing options.
[ page ]
Print documentation page and exit (Piping to a pager is recommended).
[ path ]
Install manual pages to the first location provided by MANPATH or manpath(1) , unless you specify the directory as an argument.
Print default theme keys and values in TOML syntax, to be used as a blueprint.
Print all loaded themes in TOML syntax.
Print all paths that are created and used.
Print compile time feature flags of this binary.
View mail from input file.

TABLE OF CONTENTS

meli is a terminal mail client aiming for extensive and user-frendly configurability.

     ^^      .-=-=-=-.  ^^
 ^^        (`-=-=-=-=-`)         ^^
         (`-=-=-=-=-=-=-`)  ^^         ^^
   ^^   (`-=-=-=-=-=-=-=-`)   ^^
       ( `-=-=-=-(@)-=-=-` )      ^^
       (`-=-=-=-=-=-=-=-=-`)  ^^
       (`-=-=-=-=-=-=-=-=-`)          ^^
       (`-=-=-=-=-=-=-=-=-`)
^^     (`-=-=-=-=-=-=-=-=-`)  ^^
   ^^   (`-=-=-=-=-=-=-=-`)          ^^
         (`-=-=-=-=-=-=-`)  ^^
  ^^       (`-=-=-=-=-`)
            `-=-=-=-=-`          ^^

When launched for the first time, meli will search for its configuration directory, $XDG_CONFIG_HOME/meli/ . If it doesn't exist, you will be asked if you want to create one and presented with a sample configuration file ( $XDG_CONFIG_HOME/meli/config.toml ) that includes the basic settings required for setting up accounts allowing you to copy and edit right away. See meli.conf(5) for the available configuration options.

At any time, you may press ? ( shortcuts.general. ) for a searchable list of all available actions and shortcuts, along with every possible setting and command that your version supports.

The main visual navigation tool, the left-side sidebar may be toggled with ` ( shortcuts.listing. ).

Each mailbox may be viewed in 4 modes: Plain views each mail individually, Threaded shows their thread relationship visually, Conversations collapses each thread of emails into a single entry, Compact shows one row per thread.

If you're using a light color palette in your terminal, you should set in the section of your configuration. See meli-themes(5) for complete documentation on user themes.

See meli(7) for a more detailed tutorial on using meli .

Open attachments by typing their index in the attachments list and then a ( shortcuts.envelope_view. ). meli will attempt to open text inside its pager, and other content via xdg-open . Press m ( shortcuts.envelope_view. ) instead to use the mailcap entry for the MIME type of the attachment, if any. See FILES for the location of the mailcap files and mailcap(5) for their syntax. You can save individual attachments with the

save-attachment INDEX path-to-file

command. INDEX is the attachment's index in the listing. If the path provided is a directory, the attachment is saved with its filename set to the filename in the attachment, if any. If the 0th index is provided, the entire message is saved. If the path provided is a directory, the message is saved as an eml file with its filename set to the messages message-id.

Each e-mail storage backend has a default search method assigned. uses the SEARCH command, uses libnotmuch and Maildir/mbox performs a slow linear search. It is advised to use a search backend on Maildir/mbox accounts. meli , if built with sqlite3, includes the ability to perform full text search on the following fields: , , , , , , and . The message body (in plain text human readable form) and the flags can also be queried. To enable sqlite3 indexing for an account set search_backend to sqlite3 in the configuration file and to create the sqlite3 index issue command:

index ACCOUNT_NAME

To search in the message body type your keywords without any special formatting. To search in specific fields, prepend your search keyword with "field:" like so:

subject:helloooo or subject:"call for help" or "You remind me today of a small, Mexican chihuahua."

not ((from:unrealistic and (to:complex or not query )) or flags:seen,draft)

alladdresses:mailing@example.com and cc:me@example.com

Boolean operators are , and not (alias: ) String keywords with spaces must be quoted. Quotes should always be escaped.

To prevent downloading all your messages from your IMAP/JMAP server, don't set search_backend to sqlite3 . meli will relay your queries to the IMAP server. Expect a delay between query and response. Sqlite3 on the contrary at reasonable mailbox sizes should have a non noticable delay.

meli supports tagging in notmuch and IMAP/JMAP backends. Tags can be searched with the `tags:` or `flags:` prefix in a search query, and can be modified by

tag add TAG

and

tag remove TAG

(see meli.conf(5) TAGS, settings colors and ignore_tags for how to set tag colors and tag visibility)

To create a new mail message, press m ( shortcuts.listing. ) while viewing a mailbox. To reply to a mail, press R ( shortcuts.envelope_view. ). Both these actions open the mail composer view in a new tab.

  • Edit the header fields by selecting with the arrow keys and pressing Enter ( shortcuts.general. ) to enter mode and Esc key to exit.
  • At any time you may press e ( shortcuts.composing. ) to launch your editor (see meli.conf(5) COMPOSING, setting editor_command for how to select which editor to launch).
  • Your editor can be used in meli 's embed terminal emulator by setting embed to in your composing settings (You can return to meli at any time by pressing Ctrl-Z )
  • When launched, your editor captures all input until it exits or stops.
  • To stop your editor and return to meli press Ctrl-z and to resume editing press the edit command again.

Attachments may be handled with the add-attachment , remove-attachment commands (see below).

Finally, pressing s ( shortcuts.composing. ) will send your message according to your settings (see meli.conf(5) COMPOSING, setting name send_mail ). With no Draft or Sent mailbox, meli tries first saving mail in your INBOX and then at any other mailbox. On complete failure to save your draft or sent message it will be saved in your directory instead and you will be notified of its location.

To save your draft without sending it, issue COMMAND close and select 'save as draft'.

To open a draft for further editing, select your draft in the mail listing and press edit .

meli supports three kinds of contact backends:

  1. an internal format that gets saved under $XDG_DATA_HOME/meli/account_name/addressbook .
  2. vCard files (v3, v4) through the vcard_folder option in the account section. The path defined as vcard_folder can hold multiple vCards per file. They are loaded read only.
  3. a mutt(1) compatible alias file in the option mutt_alias_file

See meli.conf(5) ACCOUNTS for the complete account configuration values.

NORMAL
is the default mode
COMMAND
commands are issued in COMMAND mode, by default started with : ( shortcuts.general. ) and exited with Esc key.
EMBED
is the mode of the embed terminal emulator
INSERT
captures all input as text input, and is exited with Esc key.

plain | threaded | compact | conversations
set the way mailboxes are displayed
conversations shows one entry per thread
compact shows one row per thread
threaded shows threads as a tree structure
plain shows one row per mail, regardless of threading
subject | date asc | desc
sort mail listing
subject | date asc | desc
sorts only the first level of replies.
n
where n is a mailbox prefixed with the n number in the side menu for the current account
don't issue notifications for thread under cursor in thread listing
search mailbox with STRING query. Escape exits search results.
STRING
select threads matching STRING query.
Set seen status of message.
FILEPATH MAILBOX_PATH
Import mail from file into given mailbox.
MAILBOX_PATH
Copy or move to other mailbox.
ACCOUNT MAILBOX_PATH
Copy or move to another account's mailbox.
Delete selected threads.
FILEPATH
Export selected threads to mboxcl2 file.
ACCOUNT MAILBOX_PATH
create mailbox with given path. Be careful with backends and separator sensitivity (eg IMAP)
ACCOUNT MAILBOX_PATH
subscribe to mailbox with given path
ACCOUNT MAILBOX_PATH
unsubscribe to mailbox with given path
ACCOUNT MAILBOX_PATH_SRC MAILBOX_PATH_DEST
rename mailbox
ACCOUNT MAILBOX_PATH
deletes mailbox in the mail backend. This action is unreversible.

EXECUTABLE ARGS
pipe pager contents to binary
EXECUTABLE ARGS
filter and display pager contents through command
post in list of viewed envelope
unsubscribe automatically from list of viewed envelope
open list archive with xdg-open

MAILTO_ADDRESS
Opens a composer tab with initial values parsed from the mailto: address.
PATH
in composer, add PATH as an attachment
CMD ARGS
in composer, pipe CMD ARGS output into an attachment
Launch command defined in the configuration value file_picker_command in meli.conf(5) TERMINAL
CMD ARGS
Launch command CMD ARGS . The command should print file paths in stderr, separated by NULL bytes.
INDEX
remove attachment with given index
toggle between signing and not signing this message. If the gpg invocation fails then the mail won't be sent. See meli.conf(5) PGP for PGP configuration.
saves a copy of the draft in the Draft folder

opens envelope view in new tab
closes closeable tabs
KEY=VALUE
set environment variable KEY to VALUE
KEY
print environment variable KEY
Quits meli .
Reloads configuration but only if account configuration is unchanged. Useful if you want to reload some settings without restarting meli .

See meli.conf(5) SHORTCUTS for shortcuts and their default values.

meli exits with 0 on a successful run. Other exit statuses are:

1
catchall for general errors
101
process panic

Specifies the editor to use
Override the configuration file
When present (regardless of its value), prevents the addition of ANSI color. The configuration value use_color overrides this.

meli uses the following parts of the XDG standard:

defaults to ~/.config/
defaults to ~/.cache/

and appropriates the following locations:

$XDG_CONFIG_HOME/meli/
User configuration directory
$XDG_CONFIG_HOME/meli/config.toml
User configuration file, see meli.conf(5) for its syntax and values.
$XDG_CONFIG_HOME/meli/hooks/*
Reserved for event hooks.
$XDG_CONFIG_HOME/meli/plugins/*
Reserved for plugin files.
$XDG_CACHE_HOME/meli/*
Internal cached data used by meli.
$XDG_DATA_HOME/meli/*
Internal data used by meli.
$XDG_DATA_HOME/meli/meli.log
Operation log.
/tmp/meli/*
Temporary files generated by meli .

Mailcap entries are searched for in the following files, in this order:

  1. $XDG_CONFIG_HOME/meli/mailcap
  2. $XDG_CONFIG_HOME/.mailcap
  3. $HOME/.mailcap
  4. /etc/mailcap
  5. /usr/etc/mailcap
  6. /usr/local/etc/mailcap

meli.conf(5) , meli-themes(5) , meli(7) , xdg-open(1) , mailcap(5)

  • XDG Standard https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html .
  • mailcap file, RFC 1524: A User Agent Configuration Mechanism For Multimedia Mail Format Information
  • RFC 5322: Internet Message Format
  • RFC 6532: Internationalized Email Headers
  • RFC 2047: MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text
  • RFC 3676: The Text/Plain Format and DelSp Parameters
  • RFC 3156: MIME Security with OpenPGP
  • RFC 2183: Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field
  • RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands and their Transport through Message Header Fields
  • https://cr.yp.to/proto/maildir.html .
  • RFC 5321: Simple Mail Transfer Protocol
  • RFC 3461: Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)
  • RFC 4954: SMTP Service Extension for Authentication
  • RFC 6152: SMTP Service Extension for 8-bit MIME Transport
  • RFC 4616: The PLAIN Simple Authentication and Security Layer (SASL) Mechanism
  • RFC 3501: INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
  • RFC 3691: Internet Message Access Protocol (IMAP) UNSELECT command
  • RFC 4549: Synch Ops for Disconnected IMAP4 Clients
  • RFC 7162: IMAP Extensions: Quick Flag Changes Resynchronization (CONDSTORE) and Quick Mailbox Resynchronization (QRESYNC)
  • RFC 8620: The JSON Meta Application Protocol (JMAP)
  • RFC 8621: The JSON Meta Application Protocol (JMAP) for Mail
  • RFC 3977: Network News Transfer Protocol (NNTP)
  • RFC 6048: Network News Transfer Protocol (NNTP) Additions to LIST Command
  • vCard Version 3, RFC 2426: vCard MIME Directory Profile
  • vCard Version 4, RFC 6350: vCard Format Specification
  • RFC 6868 Parameter Value Encoding in iCalendar and vCard

Copyright 2017-2022 Manos Pitsidianakis manos@pitsidianak.is Released under the GPL, version 3 or greater. This software carries no warranty of any kind (See COPYING for full copyright and warranty notices).

https://meli-email.org

November 11, 2022 rendered by mandoc

meli.conf(5) [go back]

MELI.CONF(5) File Formats Manual MELI.CONF(5)

meli.conf configuration file for the meli(1) terminal e-mail client

$XDG_CONFIG_HOME/meli/config.toml

TABLE OF CONTENTS

Configuration for meli is written in TOML which has a few things to consider (quoting the specification):

  • TOML is case sensitive.
  • A TOML file must be a valid UTF-8 encoded Unicode document.
  • White-space means ( 0x09 ) or ( 0x20 ).
  • Newline means ( 0x0A ) or ( 0x0D 0x0A ).

Refer to TOML documentation for valid TOML syntax.

Though not part of TOML syntax, meli.conf can have nested configuration files by using the following m4(1) include macro:

include("/path/to/file")

The top level sections of the configuration are:

  • accounts
  • shortcuts
  • notifications
  • pager
  • listing
  • composing
  • pgp
  • terminal
  • log

An example configuration:

# Setting up a Maildir account
[accounts.account-name]
root_mailbox = "/path/to/root/folder"
format = "Maildir"
listing.index_style = "Compact"
identity="email@example.com"
subscribed_mailboxes = ["folder", "folder/Sent"] # or [ "*", ] for all mailboxes
display_name = "Name"

# Set mailbox-specific settings
  [accounts.account-name.mailboxes]
  "INBOX" = { alias="Inbox" } #inline table
  "drafts" = { alias="Drafts" } #inline table
  [accounts.account-name.mailboxes."foobar-devel"] # or a regular table
    ignore = true # don't show notifications for this mailbox

# Setting up an mbox account
[accounts.mbox]
root_mailbox = "/var/mail/username"
format = "mbox"
listing.index_style = "Compact"
identity="username@hostname.local"
composing.send_mail = { hostname = "localhost", port = 25, auth = { type = "none" }, security = { type = "none" } }

[pager]
filter = "COLUMNS=72 /usr/local/bin/pygmentize -l email"
html_filter = "w3m -I utf-8 -T text/html"

[notifications]
script = "notify-send"

[composing]
# required for sending e-mail
send_mail = 'msmtp --read-recipients --read-envelope-from'
#send_mail = { hostname = "smtp.example.com", port = 587, auth = { type = "auto", username = "user", password = { type = "command_eval", value = "gpg2 --no-tty -q -d ~/.passwords/user.gpg" } }, security = { type = "STARTTLS" } }
editor_command = 'vim +/^$'

[shortcuts]
[shortcuts.composing]
edit = 'e'

[shortcuts.listing]
new_mail = 'm'
set_seen = 'n'

[terminal]
theme = "light"

Available options are listed below. Default values are shown in parentheses.

Default values are shown in parentheses.

String
The backend-specific path of the root_mailbox, usually .
String [maildir mbox imap notmuch jmap]
The format of the mail backend.
[String,]
An array of mailbox paths to display in the UI. Paths are relative to the root mailbox (e.g. , not ). The glob wildcard can be used to match every mailbox name and path.
String
Your e-mail address that is inserted in the From : headers of outgoing mail.
[String,]
Extra e-mail address identities. When replying to an e-mail addressed to one of these identities, the From : header will be adjusted to its value instead of the default identity.
conversations shows one entry per thread
compact shows one row per thread
threaded shows threads as a tree structure
plain shows one row per mail, regardless of threading
String
( optional ) A name which can be combined with your address: " Name <email@example.com> ".
boolean
Attempt to not make any changes to this account. ( false )
boolean
( optional ) If true, do not monitor account for changes (you can use shortcut listing.refresh ). ( false )
String
( optional ) command to execute when manually refreshing (shortcut listing.refresh ) ( None )
String
( optional ) Choose which search backend to use. Available options are " none " and " sqlite3 ". ("sqlite3")
String
( optional ) Folder that contains files. They are parsed and imported read-only.
String
( optional ) Path of mutt(1) compatible alias file in the option They are parsed and imported read-only.
mailbox
( optional ) Configuration for each mailbox. Its format is described below in mailboxes .

notmuch is supported by loading the dynamic library libnotmuch . If its location is missing from your library paths, you must add it yourself. Alternatively, you can specify its path by using a setting.

notmuch mailboxes are virtual, since they are defined by user-given notmuch queries. You must explicitly state the mailboxes you want in the mailboxes field and set the query property to each of them. To create a tree hierarchy with virtual mailboxes, define the parent property to a mailbox as the name of the parent mailbox you have used in your configuration.

Account properties:

points to the directory which contains the .notmuch/ subdirectory.
Path
Use an arbitrary location of libnotmuch by specifying its full filesystem path. ( optional )
Mailbox properties:
String
The notmuch query that defines what content this virtual mailbox has. Refer to notmuch-search-terms(7) for notmuch 's search syntax.
String
If you wish to build a mailbox hierarchy, define the name of a parent mailbox you have used in your configuration. ( optional )

Example:

[accounts.notmuch]
format = "notmuch"
#library_file_path = "/opt/homebrew/lib/libnotmuch.5.dylib"
...
  [accounts.notmuch.mailboxes]
  "INBOX" = {  query="tag:inbox", subscribe = true }
  "Drafts" = {  query="tag:draft", subscribe = true }
  "Sent" = {  query="from:username@example.com from:username2@example.com", subscribe = true }
  "Archives" = {  query="tag:archived", subscribe = true }
  "Archives/2019" = {  query="tag:archived date:01-2019..12-2019", parent="Archives", subscribe = true }

IMAP specific options are:

String
example: "mail.example.com"
String
Server username
String
Server password
String
( optional ) Use instead of server_password
number
( optional ) The port to connect to ( )
boolean
( optional ) If port is 993 and " use_starttls " is unspecified, it becomes false by default. ( true )
boolean
( optional ) Connect with TLS (or upgrade from plain connection to TLS if STARTTLS is set.) ( true )
boolean
( optional ) Do not validate TLS certificates. ( false )
boolean
( optional ) Use IDLE extension. ( true )
boolean
( optional ) Use CONDSTORE extension. ( true )
boolean
( optional ) Use COMPRESS=DEFLATE extension (if built with DEFLATE support) ( true )
boolean
( optional ) Use OAUTH2 authentication. Can only be used with server_password_command which should return a base64-encoded OAUTH2 token ready to be passed to IMAP. For help on setup with Gmail, see Gmail section below. ( false )
integer
( optional ) Timeout to use for server connections in seconds. A timeout of 0 seconds means there is no timeout. ( )

Gmail has non-standard IMAP behaviors that need to be worked around.

Option store_sent_mail should be disabled since Gmail auto-saves sent mail by its own.

To use OAUTH2, you must go through a process to register your own private "application" with Google that can use OAUTH2 tokens. For convenience in the meli repository under the contrib/ directory you can find a file named oauth2.py to generate and request the appropriate data to perform OAUTH2 authentication.

Steps:

  • In Google APIs, create a custom OAuth client ID and note down the Client ID and Client Secret. You may need to create a consent screen; follow the steps described in the website.
  • Run the oauth2.py script as follows (after adjusting binary paths and credentials):

    python3 oauth2.py --user=xxx@gmail.com --client_id=1038[...].apps.googleusercontent.com --client_secret=VWFn8LIKAMC-MsjBMhJeOplZ --generate_oauth2_token and follow the instructions. Note down the refresh token.

  • In server_password_command enter a command like this (after adjusting binary paths and credentials):

    TOKEN=$(python3 oauth2.py --user=xxx@gmail.com --quiet --client_id=1038[...].apps.googleusercontent.com --client_secret=VWFn8LIKAMC-MsjBMhJeOplZ --refresh_token=1/Yzm6MRy4q1xi7Dx2DuWXNgT6s37OrP_DW_IoyTum4YA) && python3 oauth2.py --user=xxx@gmail.com --generate_oauth2_string --quiet --access_token=$TOKEN

  • On startup, meli should evaluate this command which if successful must only return a base64-encoded token ready to be passed to IMAP.

JMAP specific options

String
example: "http://mail.example.com" "http://mail.example.com:8080" "https://mail.example.com"
String
Server username
String
Server password
boolean
( optional ) Do not validate TLS certificates. ( false )

mbox specific options:

String
( optional ) Prefer specific mbox format reader for each message. Default is " mboxcl2 " format. If the preferred format fails, the message is retried with mboxrd and then if it fails again there is a recover attempt, which discards the invalid message.

Valid values

  • auto
  • mboxo
  • mboxrd
  • mboxcl
  • mboxcl2
( auto )
To set multiple mailboxes, you have to explicitly state the mailboxes you want in the mailboxes field and set the path property to each of them. Example:
[accounts.mbox]
format = "mbox"
mailboxes."Python mailing list" = { path = "~/.mail/python.mbox", subscribe = true, autoload = true }

NNTP specific options

String
example: "nntp.example.com"
String
Server username
String
Server password
bool
( optional ) require authentication in every case ( true )
boolean
( optional ) Connect with TLS. ( false )
number
( optional ) The port to connect to ( )
boolean
( optional ) Do not validate TLS certificates. ( false )
boolean
( optional ) Store seen status locally in an database. ( true )

You have to explicitly state the groups you want to see in the mailboxes field. Example:

[accounts.sicpm.mailboxes]
  "sic.all" = {}

To submit articles directly to the NNTP server, you must set the special value in the send_mail field. Example:

composing.send_mail = "server_submission"

String
( optional ) Show a different name for this mailbox in the UI.
boolean
( optional ) Load this mailbox on startup ( true )
boolean
( optional ) Collapse this mailbox subtree in menu. ( false )
boolean
( optional ) Watch this mailbox for updates. ( true )
boolean
( optional ) Silently insert updates for this mailbox, if any. ( false )
boolean
( optional ) special usage of this mailbox. Valid values are:
  • Normal ( )
  • Inbox
  • Archive
  • Drafts
  • Flagged
  • Junk
  • Sent
  • Trash
otherwise usage is inferred from the mailbox title. If for example your Sent folder is not named " Sent ", you must explicitly set it.
boolean
( optional ) Override global settings for this mailbox. Available sections to override are and the account options identity . Example:
[accounts."imap.example.com".mailboxes]
  "INBOX" = { index_style = "plain" }
  "INBOX/Lists/devlist" = { autoload = false, pager = { filter = "pygmentize -l diff -f 256"} }
unsigned integer
( optional ) Override sort order on the sidebar for this mailbox. Example:
[accounts."imap.example.com".mailboxes]
  "INBOX" = { index_style = "plain" }
  "INBOX/Sent" = { sort_order = 0 }
  "INBOX/Drafts" = { sort_order = 1 }
  "INBOX/Lists" = { sort_order = 2 }
String
( optional ) Override the default UTF-8 charset for the mailbox name. Useful only for UTF-7 mailboxes. ( , , , )

Composing specific options. Default values are shown in parentheses.

String|SmtpServerConf
Command to pipe new mail to (exit code must be 0 for success) or settings for an SMTP server connection. See section SMTP Connections for its fields.
String
Command to launch editor. Can have arguments. Draft filename is given as the last argument. If it's missing, the environment variable EDITOR is looked up.
boolean
( optional ) Embedded editor within meli . Editor must be compliant. ( false )
boolean
( optional ) Set format=flowed [RFC3676] in text/plain attachments. ( true )
boolean
( optional ) Add meli User-Agent header in new drafts. ( true )
hash table String[String]
( optional ) Default header values used when creating a new draft. ( )
Option<(String, String)>
( optional ) Wrap header pre-ample when editing a draft in an editor. This allows you to write non-plain text email without the preamble creating syntax errors. They are stripped when you return from the editor. The values should be a two element array of strings, a prefix and suffix. This can be useful when for example you're writing Markdown; you can set the value to which wraps the headers in an HTML comment. ( None )
boolean
( optional ) Store sent mail after successful submission. This setting is meant to be disabled for non-standard behaviour in Gmail, which auto-saves sent mail on its own. ( true )
String
( optional ) The attribution line appears above the quoted reply text. The format specifiers for the replied address are:
  • — the sender's name and email address.
  • — the sender's name (or email address, if no name is included).
  • — the sender's email address.
The format string is passed to strftime(3) with the replied envelope's date. ( )
boolean
( optional ) Whether the strftime(3) call for the attribution string uses the POSIX locale instead of the user's active locale. ( true )
boolean or ask
( optional ) Forward emails as attachment? (Alternative is inline). ( )
[String]
( optional ) Alternative lists of reply prefixes (etc. ["Re:", "RE:", ...]) to strip.
String
( optional ) The prefix to use in reply subjects. The default prefix is "Re:". ( )

RFC 2822, "Internet Message Format" has this to say on the matter:

When used in a reply, the field body MAY start with the string "Re: " (from
the Latin "res", in the matter of) followed by the contents of the "Subject:"
field body of the original message.
[{ name = String, command = String }]
( optional ) Custom compose-hooks that run shell scripts. compose-hooks run before submitting an e-mail. They perform draft validation and/or transformations. If a custom hook exits with an error status or prints output to stdout and stderr, it will show up in the UI as a notification.

Example:

[composing]
editor_cmd = '~/.local/bin/vim +/^$'
embed = true
custom_compose_hooks = [ { name ="spellcheck", command="aspell --mode email --dont-suggest --ignore-case list" }]
[String]
( optional ) Disabled compose-hooks. compose-hooks run before submitting an e-mail. They perform draft validation and/or transformations. If a hook encounters an error or warning, it will show up as a notification. The currently available hooks are:

Default values are shown in parentheses. Shortcuts can take the following values:

char is a single character string.

The headings before each list indicate the map key of the shortcut list. For example for the first list titled general the configuration is typed as follows:

[shortcuts.general]
next_tab = 'T'

and for listing :

[shortcuts.listing]
open_entry = "Enter"
exit_entry = 'i'

general

Toggle help and shortcuts view. ( )
Enter mode. ( )
Quit meli. ( )
Go to the n th tab ( )
Go to the next tab. ( )
Generic scroll right (catch-all setting) ( )
Generic scroll left (catch-all setting) ( h )
Generic scroll up (catch-all setting) ( k )
Generic scroll down (catch-all setting) ( j )
Go to next page. (catch-all setting) ( PageDown )
Go to previous page. (catch-all setting) ( PageUp )
Go to first page. (catch-all setting) ( Home )
Go to last page. (catch-all setting) ( End )
Open list entry. (catch-all setting) ( Enter )
Show next info message, if any. ( )
Show previous info message, if any. ( )
Focus on a text field. ( Enter )
Scroll to next search result. ( n )
Scroll to previous search result. ( )

listing

Scroll up list. ( k )
Scroll down list. ( j )
Go to next page. ( PageDown )
Go to previous page. ( PageUp )
Start new mail draft in new tab. ( m )
Go to next account. ( H )
Go to previous account. ( L )
Go to next mailbox. ( )
Go to previous mailbox. ( )
Open selected mailbox ( Enter )
Toggle mailbox visibility in menu. ( Space )
Search within list of e-mails. ( )
Manually request a mailbox refresh. ( )
Set thread as seen. ( n )
Union modifier. ( )
Difference modifier. ( C-d )
Intersection modifier. ( i )
Select thread entry. ( v )
Increase sidebar width. ( C-f )
Decrease sidebar width. ( C-d )
When reading a mail item, change focus on next entry according to the current sorting. ( )
When reading a mail item, change focus on previous entry according to the current sorting. ( )
Toggle visibility of side menu in mail list. ( ` )
Switch focus on the left. ( Left )
Switch focus on the right. ( Right )
Exit e-mail entry. ( i )
Open e-mail entry. ( Enter )

Scroll up pager. ( k )
Scroll down pager. ( j )
Go to previous pager page ( PageUp )
Go to next pager pag ( PageDown )

Scroll up list. ( k )
Scroll down list. ( j )
Create new contact. ( c )
Edit contact under cursor. ( e )
Delete contact under cursor. ( d )
Mail contact under cursor. ( m )
Go to next account. ( H )
Go to previous account. ( L )
Toggle visibility of side menu in mail list. ( ` )

Edit mail. ( e )
Deliver draft to mailer ( )
Change field focus. ( k )
Change field focus. ( j )

To select an attachment, type its index (you will see the typed result in the command buffer on the bottom right of the status line), then issue the corresponding command.

Select addresses from envelope to add to contacts. ( c )
Open envelope in composer. ( e )
Go to url of given index (with the command url_launcher setting in PAGER section) ( )
Opens selected attachment with xdg-open ( )
Opens selected attachment according to its mailcap entry. See meli(1) FILES for the mailcap file locations. ( m )
Opens html attachment in the default browser. ( v )
Reply to envelope. ( )
Reply to author. ( C-r )
Reply to all/Reply to list/Follow up. ( )
Forward email. ( C-f )
Return to envelope if viewing raw source or attachment. ( )
Expand extra headers (References and others) ( h )
Toggles url open mode. When active, it prepends an index next to each url that you can select by typing the index and open by issuing go_to_url ( )
View raw envelope source in a pager. ( )
Force attachment charset for decoding. ( d )

Scroll up list. ( k )
Scroll down list. ( j )
collapse thread branches. ( h )
Go to next page. ( PageDown )
Go to previous page. ( PageUp )
reverse thread order. ( C-r )
toggle mail view visibility. ( )
toggle thread view visibility. ( )
Toggle between horizontal and vertical layout. ( Space )

Default values are shown in parentheses.

boolean
Enable notifications. ( true )
String
( optional ) Script to pass notifications to, with title as 1st arg and body as 2nd ( none )
String
( optional ) A command to pipe new mail notifications through (preferred over script ), with title as 1st arg and body as 2nd. ( none )
String
( optional ) File that gets its size updated when new mail arrives. ( none )
boolean
( optional ) Play theme sound in notifications if possible. ( false )
String
( optional ) Play sound file in notifications if possible. ( none )

Default values are shown in parentheses.

boolean
( optional ) Always show headers when scrolling. ( false )
String
( optional ) Pipe html attachments through this filter before display ( none )
String
( optional ) A command to open html files. ( none )
String
( optional ) A command to pipe mail output through for viewing in pager. ( none )
bool
( optional ) Respect format=flowed ( true )
bool
( optional ) Split long lines that would overflow on the x axis. ( true )
num
( optional ) Minimum text width in columns. ( )
boolean
( optional ) Choose text/html alternative if text/plain is empty in multipart/alternative attachments. ( true )
boolean
( optional ) Show Date : in local timezone ( true )
String
( optional ) A command to launch URLs with. The URL will be given as the first argument of the command. ( )
[String]
( optional ) Extra headers to display, if present, in the default header preamble of the pager. This setting is useful especially when used per-folder or per-account. For example, if you use (See r2e(1) ) the e-mail you will receive will have the header by default. You can show them only in the folder where you keep your feed items:

[accounts."personal".mailboxes]
INBOX = {}
"INBOX/Sent" = { sort_order=0 }
"INBOX/Feeds" = { pager.show_extra_headers = ["X-RSS-Feed"] }
( )

Default values are shown in parentheses.

boolean
( optional )
Show auto-hiding scrollbar in accounts sidebar menu. ( true )
String
( optional ) Datetime formatting passed verbatim to strftime(3) . ( )
Boolean
( optional ) Show recent dates as `X {minutes,hours,days} ago`, up to 7 days. ( true )
Query
( optional ) Show only envelopes matching this query. (For query syntax see meli(1) QUERY ABNF SYNTAX) ( None )

Example:

filter = "not flags:seen" # show only unseen messages
String
Sets the way mailboxes are displayed.
String
( optional ) Sets the string to print in the mailbox tree for a level where its root has a sibling. See example below for a clear explanation and examples.
String
( optional ) Sets the string to print in the mailbox tree for a level where its root has no sibling.
String
( optional ) Sets the string to print in the mailbox tree for a leaf level where its root has a sibling.
String
( optional ) Sets the string to print in the mailbox tree for a leaf level where its root has no sibling.
char
( optional ) Sets the character to print as the divider between the accounts list and the message list.
Integer
( optional ) This is the width of the right container to the entire screen width. ( )
Option<String>
Flag to show if thread entry contains unseen mail. ( )
Option<String>
Flag to show if thread has been snoozed. ( 💤 )
Option<String>
Flag to show if thread entry has been selected. ( ☑️ )
Option<String>
Flag to show if thread entry contains attachments. ( 📎 )
bool
Should threads with differentiating Subjects show a list of those subjects on the entry title? ( true )
bool
In threaded listing style, repeat identical From column values within a thread. Not repeating adds empty space in the From column which might result in less visual clutter. ( false )
bool
Show relative indices in menu mailboxes to quickly help with jumping to them. ( true )
bool
Show relative indices in listings to quickly help with jumping to them. ( true )
bool
Start app with sidebar hidden. ( false )

The default values

 has_sibling = " "
 no_sibling = " ";
 has_sibling_leaf = " "
 no_sibling_leaf = " "

render a mailbox tree like the following:

0  Inbox 3
1   Archive
2   Drafts
3   Lists
4    example-list-a
5    example-list-b
6   Sent
7   Spam
8   Trash

Other possible trees:

has_sibling = " ┃"
no_sibling = "  "
has_sibling_leaf = " ┣━"
no_sibling_leaf = " ┗━"

0  Inbox 3
1   ┣━Archive
2   ┣━Drafts
3   ┣━Lists
4   ┃ ┣━example-list-a
5   ┃ ┗━example-list-b
6   ┣━Sent
7   ┣━Spam
8   ┗━Trash

A completely ASCII one:

has_sibling = " |"
no_sibling = "  "
has_sibling_leaf = " |\_"
no_sibling_leaf = " \_"

0  Inbox 3
1   |\_Archive
2   |\_Drafts
3   |\_Lists
4   | |\_example-list-a
5   |  \_example-list-b
6   |\_Sent
7   |\_Spam
8    \_Trash

Default values are shown in parentheses.

hash table String[Color]
( optional ) Set UI colors for tags
Array String
( optional ) Hide tags (not the tagged messages themselves)

Example:

[tags]
# valid inputs: #HHHHHH, #ABC -> #AABBCC, XTERM_NAME, 0-255 byte
colors = { signed="#Ff6600", replied="DeepSkyBlue4", draft="#f00", replied="8" }
[accounts.dummy]
...
  [accounts.dummy.mailboxes]
  # per mailbox override:
  "INBOX" = {  tags.ignore_tags=["inbox", ] }

Default values are shown in parentheses.

boolean
Auto verify signed e-mail according to RFC3156 ( true )
boolean
( optional ) Always decrypt encrypted e-mail ( true )
boolean
( optional ) Always sign sent messages ( false )
boolean
( optional ) Always encrypt sent messages ( false )
String
( optional ) ID of key to be used for signatures ( none )
String
( optional ) ID of key to be used for decryption ( none )
String
( optional ) ID of key to be used for encryption ( none )
boolean
( optional ) Allow remote lookups ( false )
LocateKey
( optional ) Remote lookup mechanisms. Use comma to separate values. ( )

Possible mechanisms:

Default values are shown in parentheses.

String
( optional ) Theme name to use. ( )
boolean
( optional ) If true, box drawing will be done with ASCII characters. ( false )
boolean
( optional ) If false, no ANSI colors are used. ( true )
String
( optional ) Set window title in xterm compatible terminals An empty string means no window title is set. ( meli )
String
( optional ) Set command that prints file paths in stderr, separated by NULL bytes. Used with add-attachment-file-picker when composing new mail. ( None )
hash table String[String[Attribute]]
Define UI themes. See meli-themes(5) for details.
[terminal]
theme = "themeB"

[terminal.themes.themeA]
"mail.view.body" = {fg = "HotPink3", bg = "LightSalmon1"}
...
[terminal.themes.themeB]
"mail.view.body" = {fg = "CadetBlue", bg = "White"}
...
[terminal.themes.themeC]
...
bool
Use mouse events. This will disable text selection, but you will be able to resize some widgets. This setting can be toggled with toggle mouse . ( false )
String
String to show in status bar if mouse is active. ( 🖱️ )
Either < Integer, ProgressSpinner >
Choose between 37 built in sequences (integers between 0-36) or define your own list of strings for the progress spinner animation. Set to an empty array to disable the progress spinner. ( )

Built-in sequences are:

0   ["-", "\", "|", "/"]
1   ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"]
2   ["⣀", "⣄", "⣤", "⣦", "⣶", "⣷", "⣿"]
3   ["⣀", "⣄", "⣆", "⣇", "⣧", "⣷", "⣿"]
4   ["○", "◔", "◐", "◕", "⬤"]
5   ["□", "◱", "◧", "▣", "■"]
6   ["□", "◱", "▨", "▩", "■"]
7   ["□", "◱", "▥", "▦", "■"]
8   ["░", "▒", "▓", "█"]
9   ["░", "█"]
10  ["⬜", "⬛"]
11  ["▱", "▰"]
12  ["▭", "◼"]
13  ["▯", "▮"]
14  ["◯", "⬤"]
15  ["⚪", "⚫"]
16  ["▖", "▗", "▘", "▝", "▞", "▚", "▙", "▟", "▜", "▛"]
17  ["|", "/", "-", "\"]
18  [".", "o", "O", "@", "*"]
19  ["◡◡", "⊙⊙", "◠◠", "⊙⊙"]
20  ["◜ ", " ◝", " ◞", "◟ "]
21  ["←", "↖", "↑", "↗", "→", "↘", "↓", "↙"]
22  ["▁", "▃", "▄", "▅", "▆", "▇", "█", "▇", "▆", "▅", "▄", "▃"]
23  [ "▉", "▊", "▋", "▌", "▍", "▎", "▏", "▎", "▍", "▌", "▋", "▊", "▉" ]
24  ["▖", "▘", "▝", "▗"]
25  ["▌", "▀", "▐", "▄"]
26  ["┤", "┘", "┴", "└", "├", "┌", "┬", "┐"]
27  ["◢", "◣", "◤", "◥"]
28  ["⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"]
29  ["⢎⡰", "⢎⡡", "⢎⡑", "⢎⠱", "⠎⡱", "⢊⡱", "⢌⡱", "⢆⡱"]
30  [".", "o", "O", "°", "O", "o", "."]
31  ["㊂", "㊀", "㊁"]
32  ["💛 ", "💙 ", "💜 ", "💚 ", "❤️ "]
33  [ "🕛 ", "🕐 ", "🕑 ", "🕒 ", "🕓 ", "🕔 ", "🕕 ", "🕖 ", "🕗 ", "🕘 ", "🕙 ", "🕚 " ]
34  ["🌍 ", "🌎 ", "🌏 "]
35  [ "[    ]", "[=   ]", "[==  ]", "[=== ]", "[ ===]", "[  ==]", "[   =]", "[    ]", "[   =]", "[  ==]", "[ ===]", "[====]", "[=== ]", "[==  ]", "[=   ]" ]
36  ["🌑 ", "🌒 ", "🌓 ", "🌔 ", "🌕 ", "🌖 ", "🌗 ", "🌘 "]

Or, define an array of strings each consisting of a frame in the progress sequence indicator for a custom spinner:

u64
( optional ) Frame interval. (50)
[String]
The animation frames.

Example:

progress_spinner_sequence = { interval_ms = 150, frames = [ "-", "=", "≡" ] }

Default values are shown in parentheses.

String
( optional ) path of the log file ( $XDG_DATA_HOME/meli/meli.log )
String
( optional ) maximum level of messages to log. All levels less or equal to the maximum_level will be appended to the log file. Available levels are, in partial order: This means that to turn logging off, set maximum_level to OFF . ( INFO )

Default values are shown in parentheses.

String
server hostname
Integer
server port
String
( optional ) address to set as sender in SMTP transactions ( none )
SmtpAuth
SMTP server authentication. See SmtpAuth subsection.
SmtpSecurity
( optional ) binary name or file location to use. (see SmtpSecurity subsection)
SmtpExtensions
( optional ) set support for SMTP extensions if they are advertised by the server. (see SmtpExtensions subsection)

none | auto | xoauth2

For type "auto":

String
SmtpPassword
bool
( optional ) require authentication in every case. ( true )

For type "xoauth2":

String
Command to evaluate that returns an XOAUTH2 token.
bool
( optional ) require authentication in every case. ( true )

Examples:

auth = { type = "auto", username = "user", password = { type = "raw", value = "hunter2" } }
auth = { type = "auto", username = "user", password = "hunter2" }
auth = { type = "none" }

For Gmail (see Gmail OAUTH2 for details on the authentication token command):

auth = { type = "xoauth2", token_command = "TOKEN=$(python3 oauth2.py --user=xxx@gmail.com --quiet --client_id=1038[...].apps.googleusercontent.com --client_secret=[..] --refresh_token=[..] && python3 oauth2.py --user=xxx@gmail.com --generate_oauth2_string --quiet --access_token=$TOKEN" }

raw | command_evaluation
String
Either a raw password string, or command to execute.

Examples:

password = { type = "raw", value = "hunter2" }
password = { type = "command_eval", value = "gpg2 --no-tty -q -d ~/.passwords/user.gpg" }

Default security type is auto .

none | auto | starttls | tls
bool
Accept invalid SSL / TLS certificates ( false )

bool
RFC2920 ( true )
bool
RFC3030 ( true )
bool
draft-hall-prdr-00 ( true )
String
RFC3461 ( )

meli(1) , meli-themes(5)

TOML Standard v.0.5.0 https://toml.io/en/v0.5.0

Copyright 2017-2019 Manos Pitsidianakis manos@pitsidianak.is Released under the GPL, version 3 or greater. This software carries no warranty of any kind. (See COPYING for full copyright and warranty notices.)

https://meli-email.org

November 11, 2022 rendered by mandoc

meli-themes(5) [go back]

MELI-THEMES(5) File Formats Manual MELI-THEMES(5)

meli-themes themes for the meli(1) terminal e-mail client

meli comes with two themes, dark (default) and light .

Custom themes are defined as lists of key-values in the configuration files:

  • $XDG_CONFIG_HOME/meli/config.toml
  • $XDG_CONFIG_HOME/meli/themes/*.toml

The application theme is defined in the configuration as follows:

[terminal]
theme = "dark"

TABLE OF CONTENTS

Themes for meli are described in the configuration language TOML, as they are key-value tables defined in the TERMINAL section of the configuration file. Each key defines the semantic location of the theme attribute within the application. For example, mail.listing.compact.* keys are settings for the compact mail listing style. A setting contains three fields: fg for foreground color, bg for background color, and attrs for text attribute.

"widget.key.label" = { fg = "Default", bg = "Default", attrs = "Default" }

Each field contains a value, which may be either a color/attribute, a link (key name) or a valid alias. An alias is a string starting with the "$" character and must be declared in advance in the color_aliases or attr_aliases fields of a theme. An alias' value can be any valid value, including links and other aliases, as long as they are valid. In the case of a link the setting's real value depends on the value of the referred key. This allows for defaults within a group of associated values. Cyclic references in a theme results in an error:

spooky theme contains a cycle: fg: mail.listing.compact.even -> mail.listing.compact.highlighted -> mail.listing.compact.odd -> mail.listing.compact.even

Two themes are included by default, `light` and `dark`.

Specific settings from already defined themes can be overwritten:

[terminal]
theme = "dark"

[terminal.themes.dark]
"mail.sidebar_highlighted_account" = { bg = "#ff4529" }
"mail.listing.attachment_flag" = { fg = "#ff4529" }
"mail.view.headers" = { fg = "30" }
"mail.view.body" = {fg = "HotPink3", bg = "LightSalmon1"}
# Linked value keys can be whatever key:
"mail.listing.compact.even_unseen" = { bg = "mail.sidebar_highlighted_account" }
# Linked color value keys can optionally refer to another field:
"mail.listing.compact.odd_unseen" = { bg = "mail.sidebar_highlighted_account.fg" }

# define new theme. Undefined settings will inherit from the default "dark" theme.
[terminal.themes."hunter2"]
color_aliases= { "Jebediah" = "#b4da55" }
"mail.listing.tag_default" = { fg = "$Jebediah" }
"mail.view.headers" = { fg = "White", bg = "Black" }

Custom themes can be included in your configuration files or be saved independently in your $XDG_CONFIG_HOME/meli/themes/ directory as TOML files. To start creating a theme right away, you can begin by editing the default theme keys and values:

meli print-default-theme > ~/.config/meli/themes/new_theme.toml

new_theme.toml will now include all keys and values of the "dark" theme.

meli print-loaded-themes

will print all loaded themes with the links resolved.

Case-sensitive.

  • "Default"
  • "Bold"
  • "Dim"
  • "Italics"
  • "Underline"
  • "Blink"
  • "Reverse"
  • "Hidden"
  • Any combo of the above separated by a bitwise XOR "|" eg "Dim | Italics"

Color values are of type String with the following valid contents:

  • "Default" is the terminal default. (Case-sensitive)
  • Hex triplet e.g. #FFFFFF for RGB colors. Three character shorthand is also valid, e.g. #09c → #0099cc (Case-insensitive)
  • 0-255 byte for 256 colors.
  • xterm(1) name but with some modifications (for a full table see COLOR NAMES addendum) (Case-sensitive)

To completely disable ANSI colors, there are two options:

  • Set the use_color option (section terminal ) to false, which is true by default.
  • The NO_COLOR environmental variable, when present (regardless of its value), prevents the addition of ANSI color. When the configuration value use_color is explicitly set to true by the user, NO_COLOR is ignored.

In this mode, cursor locations (i.e., currently selected entries/items) will use the "reverse video" ANSI attribute to invert the terminal's default foreground/background colors.

  • theme_default
  • error_message
  • highlight
  • status.bar
  • status.command_bar
  • status.history
  • status.history.hints
  • status.notification
  • tab.focused
  • tab.unfocused
  • tab.bar
  • widgets.list.header
  • widgets.form.label
  • widgets.form.field
  • widgets.form.highlighted
  • widgets.options.highlighted
  • mail.sidebar
  • mail.sidebar_divider
  • mail.sidebar_unread_count
  • mail.sidebar_index
  • mail.sidebar_highlighted
  • mail.sidebar_highlighted_unread_count
  • mail.sidebar_highlighted_index
  • mail.sidebar_highlighted_account
  • mail.sidebar_highlighted_account_unread_count
  • mail.sidebar_highlighted_account_index
  • mail.listing.compact.even
  • mail.listing.compact.odd
  • mail.listing.compact.even_unseen
  • mail.listing.compact.odd_unseen
  • mail.listing.compact.even_selected
  • mail.listing.compact.odd_selected
  • mail.listing.compact.even_highlighted
  • mail.listing.compact.odd_highlighted
  • mail.listing.compact.even_highlighted_selected
  • mail.listing.compact.odd_highlighted_selected
  • mail.listing.plain.even
  • mail.listing.plain.odd
  • mail.listing.plain.even_unseen
  • mail.listing.plain.odd_unseen
  • mail.listing.plain.even_selected
  • mail.listing.plain.odd_selected
  • mail.listing.plain.even_highlighted
  • mail.listing.plain.odd_highlighted
  • mail.listing.plain.even_highlighted_selected
  • mail.listing.plain.odd_highlighted_selected
  • mail.listing.conversations
  • mail.listing.conversations.subject
  • mail.listing.conversations.from
  • mail.listing.conversations.date
  • mail.listing.conversations.unseen
  • mail.listing.conversations.highlighted
  • mail.listing.conversations.selected
  • mail.listing.conversations.highlighted_selected
  • mail.view.headers
  • mail.view.headers_names
  • mail.view.headers_area
  • mail.view.body
  • mail.view.thread.indentation.a
  • mail.view.thread.indentation.b
  • mail.view.thread.indentation.c
  • mail.view.thread.indentation.d
  • mail.view.thread.indentation.e
  • mail.view.thread.indentation.f
  • mail.listing.attachment_flag
  • mail.listing.thread_snooze_flag
  • mail.listing.tag_default
  • pager.highlight_search
  • pager.highlight_search_current

name ↓ byte
name byte ↓
Aqua 14
Black 0
Aquamarine1 122
Maroon 1
Aquamarine2 86
Green 2
Aquamarine3 79
Olive 3
Black 0
Navy 4
Blue 12
Purple1 5
Blue1 21
Teal 6
Blue2 19
Silver 7
Blue3 20
Grey 8
BlueViolet 57
Red 9
CadetBlue 72
Lime 10
CadetBlue1 73
Yellow 11
Chartreuse1 118
Blue 12
Chartreuse2 112
Fuchsia 13
Chartreuse3 82
Aqua 14
Chartreuse4 70
White 15
Chartreuse5 76
Grey0 16
Chartreuse6 64
NavyBlue 17
CornflowerBlue 69
DarkBlue 18
Cornsilk1 230
Blue2 19
Cyan1 51
Blue3 20
Cyan2 50
Blue1 21
Cyan3 43
DarkGreen 22
DarkBlue 18
DeepSkyBlue5 23
DarkCyan 36
DeepSkyBlue6 24
DarkGoldenrod 136
DeepSkyBlue7 25
DarkGreen 22
DodgerBlue3 26
DarkKhaki 143
DodgerBlue2 27
DarkMagenta 90
Green4 28
DarkMagenta1 91
SpringGreen6 29
name ↓ byte
name byte ↓
DarkOliveGreen1 192
Turquoise4 30
DarkOliveGreen2 155
DeepSkyBlue3 31
DarkOliveGreen3 191
DeepSkyBlue4 32
DarkOliveGreen4 107
DodgerBlue1 33
DarkOliveGreen5 113
Green2 34
DarkOliveGreen6 149
SpringGreen4 35
DarkOrange 208
DarkCyan 36
DarkOrange2 130
LightSeaGreen 37
DarkOrange3 166
DeepSkyBlue2 38
DarkRed 52
DeepSkyBlue1 39
DarkRed2 88
Green3 40
DarkSeaGreen 108
SpringGreen5 41
DarkSeaGreen1 158
SpringGreen2 42
DarkSeaGreen2 193
Cyan3 43
DarkSeaGreen3 151
DarkTurquoise 44
DarkSeaGreen4 157
Turquoise2 45
DarkSeaGreen5 115
Green1 46
DarkSeaGreen6 150
SpringGreen3 47
DarkSeaGreen7 65
SpringGreen1 48
DarkSeaGreen8 71
MediumSpringGreen 49
DarkSlateGray1 123
Cyan2 50
DarkSlateGray2 87
Cyan1 51
DarkSlateGray3 116
DarkRed 52
DarkTurquoise 44
DeepPink8 53
DarkViolet 128
Purple4 54
DarkViolet1 92
Purple5 55
DeepPink1 199
Purple3 56
DeepPink2 197
BlueViolet 57
DeepPink3 198
Orange3 58
DeepPink4 125
Grey37 59
name ↓ byte
name byte ↓
DeepPink6 162
MediumPurple6 60
DeepPink7 89
SlateBlue2 61
DeepPink8 53
SlateBlue3 62
DeepPink9 161
RoyalBlue1 63
DeepSkyBlue1 39
Chartreuse6 64
DeepSkyBlue2 38
DarkSeaGreen7 65
DeepSkyBlue3 31
PaleTurquoise4 66
DeepSkyBlue4 32
SteelBlue 67
DeepSkyBlue5 23
SteelBlue3 68
DeepSkyBlue6 24
CornflowerBlue 69
DeepSkyBlue7 25
Chartreuse4 70
DodgerBlue1 33
DarkSeaGreen8 71
DodgerBlue2 27
CadetBlue 72
DodgerBlue3 26
CadetBlue1 73
Fuchsia 13
SkyBlue3 74
Gold1 220
SteelBlue1 75
Gold2 142
Chartreuse5 76
Gold3 178
PaleGreen4 77
Green 2
SeaGreen4 78
Green1 46
Aquamarine3 79
Green2 34
MediumTurquoise 80
Green3 40
SteelBlue2 81
Green4 28
Chartreuse3 82
GreenYellow 154
SeaGreen3 83
Grey 8
SeaGreen1 84
Grey0 16
SeaGreen2 85
Grey100 231
Aquamarine2 86
Grey11 234
DarkSlateGray2 87
Grey15 235
DarkRed2 88
Grey19 236
DeepPink7 89
name ↓ byte
name byte ↓
Grey23 237
DarkMagenta 90
Grey27 238
DarkMagenta1 91
Grey3 232
DarkViolet1 92
Grey30 239
Purple2 93
Grey35 240
Orange4 94
Grey37 59
LightPink3 95
Grey39 241
Plum4 96
Grey42 242
MediumPurple4 97
Grey46 243
MediumPurple5 98
Grey50 244
SlateBlue1 99
Grey53 102
Yellow4 100
Grey54 245
Wheat4 101
Grey58 246
Grey53 102
Grey62 247
LightSlateGrey 103
Grey63 139
MediumPurple 104
Grey66 248
LightSlateBlue 105
Grey69 145
Yellow5 106
Grey7 233
DarkOliveGreen4 107
Grey70 249
DarkSeaGreen 108
Grey74 250
LightSkyBlue2 109
Grey78 251
LightSkyBlue3 110
Grey82 252
SkyBlue2 111
Grey84 188
Chartreuse2 112
Grey85 253
DarkOliveGreen5 113
Grey89 254
PaleGreen3 114
Grey93 255
DarkSeaGreen5 115
Honeydew2 194
DarkSlateGray3 116
HotPink 205
SkyBlue1 117
HotPink1 206
Chartreuse1 118
HotPink2 169
LightGreen 119
name ↓ byte
name byte ↓
HotPink3 132
LightGreen1 120
HotPink4 168
PaleGreen1 121
IndianRed 131
Aquamarine1 122
IndianRed1 167
DarkSlateGray1 123
IndianRed2 204
Red2 124
IndianRed3 203
DeepPink4 125
Khaki1 228
MediumVioletRed 126
Khaki3 185
Magenta4 127
LightCoral 210
DarkViolet 128
LightCyan2 195
Purple 129
LightCyan3 152
DarkOrange2 130
LightGoldenrod1 227
IndianRed 131
LightGoldenrod2 222
HotPink3 132
LightGoldenrod3 179
MediumOrchid3 133
LightGoldenrod4 221
MediumOrchid 134
LightGoldenrod5 186
MediumPurple2 135
LightGreen 119
DarkGoldenrod 136
LightGreen1 120
LightSalmon2 137
LightPink1 217
RosyBrown 138
LightPink2 174
Grey63 139
LightPink3 95
MediumPurple3 140
LightSalmon1 216
MediumPurple1 141
LightSalmon2 137
Gold2 142
LightSalmon3 173
DarkKhaki 143
LightSeaGreen 37
NavajoWhite3 144
LightSkyBlue1 153
Grey69 145
LightSkyBlue2 109
LightSteelBlue3 146
LightSkyBlue3 110
LightSteelBlue 147
LightSlateBlue 105
Yellow6 148
LightSlateGrey 103
DarkOliveGreen6 149
name ↓ byte
name byte ↓
LightSteelBlue 147
DarkSeaGreen6 150
LightSteelBlue1 189
DarkSeaGreen3 151
LightSteelBlue3 146
LightCyan3 152
LightYellow3 187
LightSkyBlue1 153
Lime 10
GreenYellow 154
Magenta1 201
DarkOliveGreen2 155
Magenta2 165
PaleGreen2 156
Magenta3 200
DarkSeaGreen4 157
Magenta4 127
DarkSeaGreen1 158
Magenta5 163
PaleTurquoise1 159
Magenta6 164
Red3 160
Maroon 1
DeepPink9 161
MediumOrchid 134
DeepPink6 162
MediumOrchid1 171
Magenta5 163
MediumOrchid2 207
Magenta6 164
MediumOrchid3 133
Magenta2 165
MediumPurple 104
DarkOrange3 166
MediumPurple1 141
IndianRed1 167
MediumPurple2 135
HotPink4 168
MediumPurple3 140
HotPink2 169
MediumPurple4 97
Orchid 170
MediumPurple5 98
MediumOrchid1 171
MediumPurple6 60
Orange2 172
MediumSpringGreen 49
LightSalmon3 173
MediumTurquoise 80
LightPink2 174
MediumVioletRed 126
Pink3 175
MistyRose1 224
Plum3 176
MistyRose3 181
Violet 177
NavajoWhite1 223
Gold3 178
NavajoWhite3 144
LightGoldenrod3 179
name ↓ byte
name byte ↓
Navy 4
Tan 180
NavyBlue 17
MistyRose3 181
Olive 3
Thistle3 182
Orange1 214
Plum2 183
Orange2 172
Yellow3 184
Orange3 58
Khaki3 185
Orange4 94
LightGoldenrod5 186
OrangeRed1 202
LightYellow3 187
Orchid 170
Grey84 188
Orchid1 213
LightSteelBlue1 189
Orchid2 212
Yellow2 190
PaleGreen1 121
DarkOliveGreen3 191
PaleGreen2 156
DarkOliveGreen1 192
PaleGreen3 114
DarkSeaGreen2 193
PaleGreen4 77
Honeydew2 194
PaleTurquoise1 159
LightCyan2 195
PaleTurquoise4 66
Red1 196
PaleVioletRed1 211
DeepPink2 197
Pink1 218
DeepPink3 198
Pink3 175
DeepPink1 199
Plum1 219
Magenta3 200
Plum2 183
Magenta1 201
Plum3 176
OrangeRed1 202
Plum4 96
IndianRed3 203
Purple 129
IndianRed2 204
Purple1 5
HotPink 205
Purple2 93
HotPink1 206
Purple3 56
MediumOrchid2 207
Purple4 54
DarkOrange 208
Purple5 55
Salmon1 209
name ↓ byte
name byte ↓
Red 9
LightCoral 210
Red1 196
PaleVioletRed1 211
Red2 124
Orchid2 212
Red3 160
Orchid1 213
RosyBrown 138
Orange1 214
RoyalBlue1 63
SandyBrown 215
Salmon1 209
LightSalmon1 216
SandyBrown 215
LightPink1 217
SeaGreen1 84
Pink1 218
SeaGreen2 85
Plum1 219
SeaGreen3 83
Gold1 220
SeaGreen4 78
LightGoldenrod4 221
Silver 7
LightGoldenrod2 222
SkyBlue1 117
NavajoWhite1 223
SkyBlue2 111
MistyRose1 224
SkyBlue3 74
Thistle1 225
SlateBlue1 99
Yellow1 226
SlateBlue2 61
LightGoldenrod1 227
SlateBlue3 62
Khaki1 228
SpringGreen1 48
Wheat1 229
SpringGreen2 42
Cornsilk1 230
SpringGreen3 47
Grey100 231
SpringGreen4 35
Grey3 232
SpringGreen5 41
Grey7 233
SpringGreen6 29
Grey11 234
SteelBlue 67
Grey15 235
SteelBlue1 75
Grey19 236
SteelBlue2 81
Grey23 237
SteelBlue3 68
Grey27 238
Tan 180
Grey30 239
name ↓ byte
name byte ↓
Teal 6
Grey35 240
Thistle1 225
Grey39 241
Thistle3 182
Grey42 242
Turquoise2 45
Grey46 243
Turquoise4 30
Grey50 244
Violet 177
Grey54 245
Wheat1 229
Grey58 246
Wheat4 101
Grey62 247
White 15
Grey66 248
Yellow 11
Grey70 249
Yellow1 226
Grey74 250
Yellow2 190
Grey78 251
Yellow3 184
Grey82 252
Yellow4 100
Grey85 253
Yellow5 106
Grey89 254
Yellow6 148
Grey93 255

meli(1) , meli.conf(5)

TOML Standard v.0.5.0 https://toml.io/en/v0.5.0

https://no-color.org/

Copyright 2017-2019 Manos Pitsidianakis manos@pitsidianak.is Released under the GPL, version 3 or greater. This software carries no warranty of any kind. (See COPYING for full copyright and warranty notices.)

https://meli-email.org

November 11, 2022 rendered by mandoc

meli(7) [go back]

MELI(7) Miscellaneous Information Manual MELI(7)

meli Tutorial for the meli terminal e-mail client

meli [...]

TABLE OF CONTENTS

meli is a terminal mail client aiming for extensive and user-frendly configurability.

     ^^      .-=-=-=-.  ^^
 ^^        (`-=-=-=-=-`)         ^^
         (`-=-=-=-=-=-=-`)  ^^         ^^
   ^^   (`-=-=-=-=-=-=-=-`)   ^^
       ( `-=-=-=-(@)-=-=-` )      ^^
       (`-=-=-=-=-=-=-=-=-`)  ^^
       (`-=-=-=-=-=-=-=-=-`)          ^^
       (`-=-=-=-=-=-=-=-=-`)
^^     (`-=-=-=-=-=-=-=-=-`)  ^^
   ^^   (`-=-=-=-=-=-=-=-`)          ^^
         (`-=-=-=-=-=-=-`)  ^^
  ^^       (`-=-=-=-=-`)
            `-=-=-=-=-`          ^^

To quit meli press q ( shortcuts.general. ) at any time. When launched for the first time, meli will search for its configuration directory, $XDG_CONFIG_HOME/meli/ . If it doesn't exist, you will be asked if you want to create one and presented with a sample configuration file ( $XDG_CONFIG_HOME/meli/config.toml ) that includes the basic settings required for setting up accounts allowing you to copy and edit right away. See meli.conf(5) for the available configuration options.

At any time, you may press ? ( shortcuts.general. toggle_help ) for a searchable list of all available actions and shortcuts, along with every possible setting and command that your version supports.

Each time a shortcut is mentioned in this document, you will find a parenthesis next to it with the name of the shortcut setting along with its section in the configuration settings so that you can modify it if you wish.

For example, to set the toggle_help shortcut mentioned in the previous paragraph, add the following to your configuration:

[shortcuts]
general.toggle_help = 'F1'

Or alternatively:

[shortcuts.general]
toggle_help = 'F1'

To go to the next tab on the right, press T ( shortcuts.general. ).

You will be interacting with meli in four primary ways:

1. keyboard shortcuts in NORMAL mode.
2. commands with arguments in COMMAND mode.
3. regular text input in text input widgets in mode.
4. any kind of input that gets passed directly into an embedded terminal in mode.

meli is a modal application, just like vi(1) . This means that pressing the same keys in different modes would yield different results. This allows you to separate how the input is interpreted without the need to focus your input with a mouse.

NORMAL
This is the default mode of meli . All keyboard shortcuts work in this mode.
COMMAND
Commands are issued in COMMAND mode, by default started with : ( shortcuts.general. ) and exited with Esc key.
EMBED
This is the mode of the embed terminal emulator. To exit an embedded application, issue Ctrl-C to kill it or Ctrl-Z to stop the program and follow the instructions on meli to exit.
INSERT
This mode is entered when pressing Enter on a cursor selected text input field, and it captures all input as text input. It is exited with the Esc key.

By pressing ? ( shortcuts.general. toggle_help ) at any time, the shortcuts popup display status gets toggled. You can find all valid shortcuts for the current UI state you are in.

┌─shortcuts──Press ? to close────────────────────────────────┐
│                                                           ▀│
│  use COMMAND "search" to find shortcuts                   █│
│  Use Up, Down, Left, Right to scroll.                     █│
│                                                           █│
│  pager                                                    █│
│                                                           █│
│       PageDown  page_down                                 █│
│         PageUp  page_up                                    │
│              j  scroll_down                                │
│              k  scroll_up                                  │
│                                                            │
│  view mail                                                 │
│                                                            │
│              c  add_addresses_to_contacts                  │
│              e  edit                                       │
│              u  toggle_url_mode                            │
│              a  open_attachment                            │
│              m  open_mailcap                               │
│              R  reply                                      │
│            C-r  reply_to_author                            │
│            C-g  reply_to_all                               │
│            C-f  forward                                    │
│            M-r  view_raw_source                            │
│              h  toggle_expand_headers                     ▄│
└────────────────────────────────────────────────────────────┘

 ┌───────────────────────┐
 ├────┼──────────────────┤
 │___ │  ___________     │
 │ _  │ _______________  │
 │ _  │__________________│
 │ _  │      ___________ │
 │    │  _____           │
 │    │                  │
 └────┴──────────────────┘
The main view's layout.

This is the view you will spend more time with in meli .

Press ` ( shortcuts.listing. ) to toggle the sidebars visibility.

Press Left ( shortcuts.listing. ) to switch focus on the sidebar menu. Press Right ( shortcuts.listing. ) to switch focus on the e-mail list.

On the e-mail list, press k ( shortcuts.listing. scroll_up ) to scroll up, and j ( shortcuts.listing. scroll_down ) to scroll down. Press Enter ( shortcuts.listing. open_entry ) to open an e-mail entry and i ( shortcuts.listing. exit_entry ) to exit it.

The sidebar.
┌─────────────┉┉┉┉┉✂
│ mail▐  contact li✂
│personal account  ✂
│ 0  INBOX         ✂
│ 1   ┣━Sent       ✂
│ 2   ┣━Lists      ✂
│ 3   ┃ ┣━meli-dev ✂
│ 4   ┃ ┗━meli     ✂
│ 5   ┣━Drafts     ✂
│ 6   ┣━Trash      ✂
│ 7   ┗━foobar     ✂
┇ 8  Trash         ✂
 ✂ ✂ ✂ ✂ ✂ ✂ ✂ ✂ ✂ ✂

Press k ( shortcuts.listing. scroll_up ) to scroll up, and j ( shortcuts.listing. scroll_down ) to scroll down.

Press Enter ( shortcuts.listing. ) to open an entry (either a mailbox or an account name). Entering an account name will show you a page with details about the account and its network connection, depending on the backend.

While focused in the sidebar, you can “collapse” a mailbox tree, if it has children, and you can open it with Space ( shortcuts.listing. ). You can have mailbox trees collapsed on startup by default by setting a mailbox's collapsed setting to . See meli.conf(5) section MAILBOXES for details.

You can increase the sidebar's width with Ctrl-p ( shortcuts.listing. ) and decrease with Ctrl-o ( shortcuts.listing. ).

The status bar.
┌────────────────────────────────────────────────────┈┈
│NORMAL | Mailbox: Inbox, Messages: 25772, New: 3006
└────────────────────────────────────────────────────┈┈

The status bar shows which mode you are, and the status message of the current view. In the pictured example, it shows the status of a mailbox called “Inbox” with lots of e-mails.

The number modifier buffer.
 ┈┈────────────┐
            12 │
 ┈┈────────────┘

Some commands may accept a number modifier. For example, scroll down commands can receive a multiplier n to scroll down n entries. Another use of the number buffer is opening URLs inside the pager. See PAGER for an explanation of interacting with URLs in e-mails.

Pressing numbers in NORMAL mode will populate this buffer. To erase it, press the Esc key.

There are four different list styles:

  • "plain" which shows one line per e-mail.
  • "threaded" which shows a threaded view with drawn tree structure.
  • "compact" which shows one line per thread which can include multiple e-mails.
  • "conversations" which shows more than one line per thread which can include multiple e-mails with more details about the thread.
│42     Fri, 02 Sep 2022 19:51  xxxxxxxxxxxxx <  [PATCH 3/8] │
│43     Fri, 02 Sep 2022 19:51  xxxxxxxxxxxxx <  [PATCH 2/8] │
│44     Fri, 02 Sep 2022 19:51  xxxxxxxxxxxxx <  [PATCH 1/8] │
|45     Fri, 02 Sep 2022 19:51  xxxxxxxxxxxxx <  [PATCH 0/8] |
│46     Fri, 02 Sep 2022 18:18  xxxxxxxx <xxxxx  Re: [PATCH 3│
│12     9 hours ago            xxxxxxxxxxxxxxx    [PATCH v3 0│
│13     9 hours ago            xxxxxxxxxxxxxxx     ├─>[PATCH │
│14     9 hours ago            xxxxxxxxxxxxxxx     ├─>[PATCH │
|15     9 hours ago            xxxxxxxxxxxxxxx     ├─>[PATCH |
│16     9 hours ago            xxxxxxxxxxxxxxx     ├─>[PATCH │
│17     9 hours ago            xxxxxxxxxxxxxxx     └─>[PATCH │
│18     2022-08-23 01:23:51    xxxxxxxxxxxxxxx    [RFC v4 00/│
│19     2022-08-23 01:23:52    xxxxxxxxxxxxxxx     ├─>[RFC v4│
|20     2022-08-30 10:30:16    xxxxxxxxxxxxxxx     │ └─>     |
│21     6 days ago             xxxxxxxxxxxxxxx     │   └─>   │
│22     2022-08-23 01:23:53    xxxxxxxxxxxxxxx     ├─>[RFC v4│
│18  2022-…:38  xxxxxxxxxxxxxxx  [PATCH v3 3/3] u…_l() (2)   │
|19  2022-…:49  xxxxxxxxxxxxxxx  [PATCH v8 0/7] A…e (3)      |
│20  2022-…:10  xxxxxxxxxxxxxxx  [PATCH v8 2/7] f…s (2)      │
│21  2022-…:38  xxxxxxxxxxxxxxx  [PATCH v8 3/7] b…s (2)      │
│22  2022-…:53  xxxxxxxxxxxxxxx  [PATCH v6 00/10] p…g (31)   │
│[PATCH v2] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (5)  │
|1 day ago▁▁▁▁xxxxxxxxxxxxx <xxxxxxxxxxxxx@xxxxxxxxxx>, xxxxx│
│                                                            |
│[PATCH v2 0/8] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx│
│1 day ago▁▁▁▁xxxxxxxxxxxxxxx <xxxxxxxxxx@xxxxxxxxxxxxxx>, xx│
|                                                            │
│[PATCH 0/2] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (4)    |
│2 days ago▁▁▁▁xxxxxxxxxxxxxxxx <xxxxxxxx@xxxxxxxxxxx>, xxxxx│
│                                                            │
│[PATCH 0/8] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (12)  │
│2 days ago▁▁▁▁xxxxxxxxxxxxx <xxxxxxxx@xxxxxxxxxx>, xxxxxxxxx│

Press v ( shortcuts.listing. ) to toggle the selection of a single entry. "select_entry" can be prefixed by a number modifier and affixed by a scrolling motion (up or down) to select multiple entries. Simple set operations can be performed on a selection with these shortcut modifiers:

To set an entry as "read" , use the n ( shortcuts.listing. ) shortcut. To set an entry as "unread" , use the command

set unseen

which also has its complement

set seen

action.

For e-mail backends that support tags (like "IMAP" or "notmuch") you can use the following commands on entries and selections to modify them:

tag add TAG
tag remove TAG

(see meli.conf(5) TAGS, settings colors and ignore_tags for how to set tag colors and tag visibility)

You can open an e-mail entry by pressing Enter ( shortcuts.listing. open_entry ). This brings up the e-mail view with the e-mail content inside a pager.

┌────────────────────────────────────────────────────────────┐
│Date: Sat, 21 May 2022 16:16:11 +0300                      ▀│
│From: Narrator <narrator@example.com>                      █│
│To: Stanley <427@example.com>                              █│
│Subject: The e-mail ending                                 █│
│Message-ID: <gambheerata@example.com>                      █│
│                                                           █│
│The story, and the choices, or what have you, and therefore█│
│by becoming it is! So on and so forth, until inevitably, we │
│all until the end of time. At which time, everything all at │
│once, so now you see? Blah, blah, blah, rah, rah, rah...    │
│We've eaten too much and it can't be just yet. No, no!      │
│Until two-hundred and forty-five! But the logic of          │
│elimination, working backwards, the deduction therefore     │
│becomes impossible to manufacture. It went on for nearly    │
│ten thousand years, until just yesterday. Here and there,   │
│forward and back, and never a moment before lunchtime. It   │
│can't be! It's the only thing there is! How many billions   │
│left until so much more than forever ago! Which is why I    │
│say:                                                        │
│                                                            │
│The story, and the choices, or what have you, and therefore │
│by becoming it is! So on and so forth, until inevitably, we▄│
└────────────────────────────────────────────────────────────┘
The pager displaying an e-mail.

The pager is simple to use. Scroll with the following:

Go to next pager page
PageDown ( shortcuts.pager. )
Go to previous pager page
PageUp ( shortcuts.pager. )
Scroll down pager.
j ( shortcuts.pager. scroll_down )
Scroll up pager.
k ( shortcuts.pager. scroll_up )

All scrolling shortcuts can be prefixed with a number modifier which will act as a multiplier.

The pager can enter a special mode which will prefix all detected hyperlinks and e-mail addresses with a number inside square brackets u ( shortcuts.pager. ). Writing down a chosen number as a number modifier and pressing g ( shortcuts.envelope_view. ) will attempt to open the link with the system's default open command ( xdg-open(1) in supported OSes, and open(1) on MacOS). To override with a custom launcher, see " pager " configuration setting " url_launcher " (see meli.conf(5) PAGER for more details).

Other things you can do when viewing e-mail:

  • Most importantly, you can exit the mail view with: i ( shortcuts.listing. exit_entry )
  • Add addresses from the e-mail headers to contacts: c ( shortcuts.envelope_view. )
  • Open an attachment by entering its index as a number modifier and pressing: a ( shortcuts.envelope_view. )
  • Open an attachment by its mailcap(5) entry by entering its index as a number modifier and pressing: m ( shortcuts.envelope_view. )
  • Reply to envelope: R ( shortcuts.envelope_view. reply )
  • Reply to author: Ctrl-r ( shortcuts.envelope_view. reply_to_author )
  • Reply to all/Reply to list/Follow up: Ctrl-g ( shortcuts.envelope_view. reply_to_all )
  • Forward email: Ctrl-f ( shortcuts.envelope_view. )
  • Expand extra headers: (References and others) h ( shortcuts.envelope_view. )
  • View envelope source in a pager: (toggles between raw and decoded source) M-r ( shortcuts.envelope_view. )
  • Return to envelope_view if viewing raw source or attachment: r ( shortcuts.envelope_view. )

To compose an e-mail, you can either start with an empty draft by pressing m ( shortcuts.listing. ) which opens a composer view in a new tab. To reply to a specific e-mail, when in envelope view you can select the specific action you want to take:

  • Reply to envelope. R ( shortcuts.envelope_view. reply )
  • Reply to author. Ctrl-r ( shortcuts.envelope_view. reply_to_author )
  • Reply to all. Ctrl-g ( shortcuts.envelope_view. reply_to_all )

To launch your editor, press e ( shortcuts.composing. edit ). To send your draft, press s ( shortcuts.composing. ). To save the draft without submission, enter the command

close

and select "save as draft". You can return to the draft by going to your "Drafts" mailbox and selecting e ( shortcuts.envelope_view. edit ).

┌────────────────────────────────────────────────────────────┐
│ mail▐  contact list  ▐  composing  ▍███████████████████████│
│          COMPOSING MESSAGE                                 │
│           Date     Mon, 05 Sep 2022 17:49:19 +0300         │
│           From     myself <myself@example.com>░░░░         │
│           To       friend <myfriend@example.com>░░         │
│           Cc       ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░         │
│           Bcc      ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░         │
│           Subject  This is my subject!░░░░░░░░░░░░         │
│                                                            │
│          Hello friend!░░░░░░░░░░░░░░░░░░░░░░░░░░░░         │
│          ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░         │
│          ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░         │
│                                                            │
│          ☐ don't sign                                      │
│          ☐ don't encrypt                                   │
│          no attachments                                    │
│                                                            │
│NORMAL | Mailbox: Inbox, Messages: 25772, New: 3006         │
└────────────────────────────────────────────────────────────┘
The lightly highlighted cells represent text input fields.

If you enable the embed terminal option, you can launch your terminal editor of choice when you press edit .

┌────────────────────────────────────────────────────────────┐
│ mail▐  contact list  ▐  composing  ▍███████████████████████│
│   ╓COMPOSING MESSAGE┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╖   │
│   ║ p/v/f/h/5/T/m/07f56b6e-ec09-49d9-b8d8-f0c5a81e7826 ║   │
│   ║  7 Date: Mon, 05 Sep 2022 18:43:10 +0300           ║   │
│   ║  6 From: Mister Cardholder <mrholder@example.com>  ║   │
│   ║  5 To:                                             ║   │
│   ║  4 Cc:                                             ║   │
│   ║  3 Bcc:                                            ║   │
│   ║  2 Subject:                                        ║   │
│   ║  1 User-Agent: meli 0.7.2                          ║   │
│   ║8 █                                                 ║   │
│   ║~                                                   ║   │
│   ║~                                                   ║   │
│   ║~                                                   ║   │
│   ║~                                                   ║   │
│   ║ N…  <6e-ec09-49d9-b8d8-f0c5a81e7826   100% ㏑:8 ℅:1║   │
│   ╚════════════════════════════════════════════════════╝   │
│                                                            │
│                                                            │
│ ☐ don't sign                                               │
│ ☐ don't encrypt                                            │
│ no attachments                                             │
│                                                            │
│EMBED | Mailbox: Inbox, Messages: 25772, New: 3006          │
└────────────────────────────────────────────────────────────┘
nvim(1) running inside the composing tab.
The double line border annotates the area of the embedded terminal, the actual embedding is seamless.

PATH
in composer, add PATH as an attachment
CMD ARGS
in composer, pipe CMD ARGS output into an attachment
Launch command defined in the configuration value file_picker_command in meli.conf(5) TERMINAL
CMD ARGS
Launch command CMD ARGS . The command should print file paths in stderr, separated by NULL bytes.
INDEX
remove attachment with given index
toggle between signing and not signing this message. If the gpg invocation fails then the mail won't be sent. See meli.conf(5) PGP for PGP configuration.
saves a copy of the draft in the Draft folder

See meli-themes(5) for documentation on how to theme meli .

meli(1) , meli.conf(5) , meli-themes(5) , xdg-open(1) , mailcap(5)

Copyright 2017-2022 Manos Pitsidianakis manos@pitsidianak.is Released under the GPL, version 3 or greater. This software carries no warranty of any kind. (See COPYING for full copyright and warranty notices.)

https://meli-email.org https://github.com/meli/meli https://crates.io/crates/meli

November 11, 2022 rendered by mandoc

[go back]