Click on the terminal for it to gain input focus, when it appears. Press ? for shortcuts. Some shortcuts don't work due to the way the browser intercepts user input. You can also use the on-screen keyboard.
MELI(1) General Commands Manual MELI(1) NAME meli – Meli Mail User Agent. meli is the Greek word for honey SYNOPSIS meli [--help | -h] [--version | -v] [--config path] --help | -h Show help message and exit. --version | -v Show version and exit. --config path Start meli with given configuration file. create-config [path] Create configuration file in path if given, or at $XDG_CONFIG_HOME/meli/config.toml test-config [path] Test a configuration file for syntax issues or missing options. man [page] Print documentation page and exit (Piping to a pager is recommended.) print-default-theme Print default theme keys and values in TOML syntax, to be used as a blueprint. print-loaded-themes Print all loaded themes in TOML syntax. view View mail from input file. DESCRIPTION meli is a terminal mail client aiming for extensive and user-frendly configurability. ^^ .-=-=-=-. ^^ ^^ (`-=-=-=-=-`) ^^ (`-=-=-=-=-=-=-`) ^^ ^^ ^^ (`-=-=-=-=-=-=-=-`) ^^ ( `-=-=-=-(@)-=-=-` ) ^^ (`-=-=-=-=-=-=-=-=-`) ^^ (`-=-=-=-=-=-=-=-=-`) ^^ (`-=-=-=-=-=-=-=-=-`) ^^ (`-=-=-=-=-=-=-=-=-`) ^^ ^^ (`-=-=-=-=-=-=-=-`) ^^ (`-=-=-=-=-=-=-`) ^^ ^^ (`-=-=-=-=-`) `-=-=-=-=-` ^^ STARTING WITH meli 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 along with a sample configuration. The sample configuration $XDG_CONFIG_HOME/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. At any time, you may press ? to show 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 is the left-side sidebar. The menu's visibility may be toggled with ` (shortcuts.listing: toggle_menu_visibility). The view into each mailbox has 4 modes: plain, threaded, conversations and compact. Plain views each mail indvidually, threaded shows their thread relationship visually, and conversations includes one entry per thread of emails (compact is one row per thread). If you're using a light color palette in your terminal, you may set theme = light in the terminal section of your configuration. See meli-themes(5) for complete documentation on user themes. VIEWING MAIL Open attachments by typing their index in the attachments list and then a. meli will attempt to open text inside its pager and other content via xdg-open. Press m 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 where INDEX is the attachment's index in the listing. If the zeroth 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. SEARCH Each e-mail storage backend has its default search method. IMAP uses the SEARCH command, notmuch uses libnotmuch and Maildir/mbox have to do a slow linear search. Thus it is advised to use a cache on Maildir/mbox accounts. meli, if built with sqlite3, includes the ability to perform full text search on the following fields: From, To, Cc, Bcc, In-Reply-To, References, Subject and Date. The message body (in plain text human readable form) and the flags can also be queried. To enable sqlite3 indexing for an account set cache_type 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@list.tld and cc:me@domain.tld Boolean operators are or, and and not (alias: !) String keywords with spaces must be quoted. Quotes should always be escaped. Important Notice about IMAP/JMAP To prevent downloading all your messages from your IMAP/JMAP server, don't set cache_type 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. TAGS 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 visiblity) COMPOSING To send mail, press m while viewing the appropriate account to open a new composing tab. To reply to a mail, press R. You may edit some of the header fields from within the view, by selecting with the arrow keys and pressing enter to enter INSERT mode. At any time you may press e to launch your editor (see meli.conf(5) COMPOSING, setting editor_cmd for how to select which editor to launch). Attachments may be handled with the add-attachment, remove-attachment commands (see below). Finally, pressing s will send your message by piping it into a binary of your choosing (see meli.conf(5) COMPOSING, setting mailer_cmd). To save your draft without sending it, issue command close and select 'save as draft'. 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 tmp directory instead and you will be notified of its location. To open a draft for editing later, select your draft in the mail listing and press e. Your editor can be used in meli's embed terminal emulator by setting embed to true in your composing settings. When launched, your editor captures all input until it exits or stops. To stop your editor and return to meli issue Ctrl-z and to resume editing press the edit_mail command again (default e). CONTACTS meli supports two 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. See meli.conf(5) ACCOUNTS for the complete account configuration values. EXECUTE mode Commands are issued in EXECUTE mode, by default started with Space and exited with Escape key. the following commands are valid in the mail listing context: set 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 | +----------------------------------------------------------------+ sort subject | date asc | desc sort mail listing subsort subject | date asc | desc sorts only the first level of replies. go n where n is a mailbox prefixed with the n number in the side menu for the current account toggle_thread_snooze don't issue notifications for thread under cursor in thread listing search STRING search mailbox with STRING key. Escape exits search results set read, set unread create-mailbox ACCOUNT MAILBOX_PATH create mailbox with given path. Be careful with backends and separator sensitivity (eg IMAP) subscribe-mailbox ACCOUNT MAILBOX_PATH subscribe to mailbox with given path unsubscribe-mailbox ACCOUNT MAILBOX_PATH unsubscribe to mailbox with given path rename-mailbox ACCOUNT MAILBOX_PATH_SRC MAILBOX_PATH_DEST rename mailbox delete-mailbox ACCOUNT MAILBOX_PATH delete mailbox envelope view commands: pipe EXECUTABLE ARGS pipe pager contents to binary list-post post in list of viewed envelope list-unsubscribe unsubscribe automatically from list of viewed envelope list-archive open list archive with xdg-open composing mail commands: add-attachment PATH in composer, add PATH as an attachment add-attachment < CMD ARGS in composer, pipe CMD ARGS output into an attachment remove-attachment INDEX remove attachment with given index toggle sign toggle between signing and not signing this message. If the gpg invocation fails then the mail won't be sent. save-draft saves a copy of the draft in the Draft folder generic commands: open-in-tab opens envelope view in new tab close closes closeable tabs setenv KEY=VALUE set environment variable KEY to VALUE printenv KEY print environment variable KEY SHORTCUTS Non-complete list of shortcuts and their default values. open_thread '\n' exit_thread 'i' create_contact 'c' edit_contact 'e' prev_page PageUp, next_page PageDown prev_mailbox 'K' next_mailbox 'J' prev_account 'l' next_account 'h' new_mail 'm' scroll_up 'k' scroll_down 'j' page_up PageUp page_down PageDown toggle-menu-visibility '`' select 'v' ` toggles hiding of sidebar in mail listings ? opens up a shortcut window that shows available actions in the current component you are using (eg mail listing, contact list, mail composing) m starts a new mail composer R replies to the viewed mail. u displays numbers next to urls in the body text of an email and ng opens the nth url with xdg-open na opens the nth attachment. nm opens the nth attachment according to its mailcap entry. v (un)selects mail entries in mail listings QUERY ABNF SYNTAX • query = "(" query ")" | from | to | cc | bcc | alladdresses | subject | flags | has_attachments | query "or" query | query "and" query | not query • not = "not" | "!" • quoted = ALPHA / SP *(ALPHA / DIGIT / SP) • term = ALPHA *(ALPHA / DIGIT) | DQUOTE quoted DQUOTE • tagname = term • flagval = "passed" | "replied" | "seen" | "read" | "junk" | "trash" | "trashed" | "draft" | "flagged" | tagname • flagterm = flagval | flagval "," flagterm • from = "from:" term • to = "to:" term • cc = "cc:" term • bcc = "bcc:" term • alladdresses = "alladdresses:" term • subject = "subject:" term • flags = "flags:" flag | "tags:" flag | "is:" flag EXIT STATUS meli exits with 0 on a successful run. Other exit statuses are: 1 catchall for general errors ENVIRONMENT EDITOR Specifies the editor to use MELI_CONFIG Override the configuration file NO_COLOR When present (regardless of its value), prevents the addition of ANSI color. The configuration value use_color overrides this. FILES meli uses the following parts of the XDG standard: XDG_CONFIG_HOME defaults to ~/.config/ XDG_CACHE_HOME 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 SEE ALSO meli.conf(5), meli-themes(5), xdg-open(1), mailcap(5) CONFORMING TO XDG Standard ⟨https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html⟩, maildir ⟨https://cr.yp.to/proto/maildir.html⟩, IMAPv4rev1 RFC3501, The JSON Meta Application Protocol (JMAP) RFC8620, The JSON Meta Application Protocol (JMAP) for Mail RFC8621. AUTHORS Copyright 2017-2019 Manos Pitsidianakis ⟨epilys@nessuent.xyz⟩ 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.delivery⟩ Debian July 29, 2019 Debian
MELI.CONF(5) File Formats Manual MELI.CONF(5) NAME meli.conf – configuration file for the Meli Mail User Agent SYNOPSIS $XDG_CONFIG_HOME/meli/config.toml DESCRIPTION Configuration for meli is written in TOML. Few things to consider before writing TOML (quoting the spec): • TOML is case sensitive. • A TOML file must be a valid UTF-8 encoded Unicode document. • Whitespace means tab (0x09) or space (0x20). • Newline means LF (0x0A) or CRLF (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") SECTIONS The top level sections of the config are: • accounts • shortcuts • notifications • pager • listing • composing • pgp • terminal • log EXAMPLES example configuration # Setting up a Maildir account [accounts.account-name] root_mailbox = "/path/to/root/folder" format = "Maildir" index_style = "Compact" identity="email@address.tld" 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" index_style = "Compact" identity="username@hostname.local" [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 mailer_cmd = 'msmtp --read-recipients --read-envelope-from' editor_cmd = 'vim +/^$' [shortcuts] [shortcuts.composing] edit_mail = 'e' [shortcuts.listing] new_mail = 'm' set_seen = 'n' [terminal] theme = "light" available options are listed below. default values are shown in parentheses. ACCOUNTS root_mailbox String the backend-specific path of the root_mailbox, usually INBOX. format String [maildir mbox imap notmuch jmap] the format of the mail backend. subscribed_mailboxes [String,] an array of mailbox paths to display in the UI. Paths are relative to the root mailbox (eg "INBOX/Sent", not "Sent"). The glob wildcard * can be used to match every mailbox name and path. identity String your e-mail address that is inserted in the From: headers of outgoing mail index_style String 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 | +----------------------------------------------------------------+ display_name String (optional) a name which can be combined with your address: "Name <email@address.tld>" read_only boolean attempt to not make any changes to this account. (false) manual_refresh boolean (optional) if true, do not monitor account for changes (you can use shortcut listing.refresh) (false) refresh_command String (optional) command to execute when manually refreshing (shortcut listing.refresh) (None) cache_type String (optional) choose which cache backend to use. Available options are 'none' and 'sqlite3' (sqlite3) vcard_folder String (optional) Folder that contains .vcf files. They are parsed and imported read-only. mailboxes mailbox (optional) configuration for each mailbox. Its format is described below in mailboxes. notmuch only root_mailbox points to the directory which contains the .notmuch/ subdirectory. notmuch mailboxes are virtual, since they are defined by user-given notmuch queries. Thus you have to explicitly state the mailboxes you want in the mailboxes field and set the query property to each of them. Example: [accounts.notmuch] format = "notmuch" ... [accounts.notmuch.mailboxes] "INBOX" = { query="tag:inbox", subscribe = true } "Drafts" = { query="tag:draft", subscribe = true } "Sent" = { query="from:username@server.tld from:username2@server.tld", subscribe = true } IMAP only IMAP specific options are: server_hostname String example: "mail.example.tld" server_username String server_password String server_password_command String (optional) Use instead of server_password server_port number (optional) (143) use_starttls boolean (optional) if port is 993 and use_starttls is unspecified, it becomes false by default. (true) danger_accept_invalid_certs boolean (optional) do not validate TLS certificates. (false) JMAP only JMAP specific options are: server_hostname String example: "mail.example.tld" server_username String server_password String server_port number (optional) (443) danger_accept_invalid_certs boolean (optional) do not validate TLS certificates. (false) mbox only mbox specific options are: prefer_mbox_type 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's a recover attempt, which discards the invalid message. Valid values are: • 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 } mailboxes alias String (optional) show a different name for this mailbox in the UI autoload boolean (optional) load this mailbox on startup (true) subscribe boolean (optional) watch this mailbox for updates (true) ignore boolean (optional) silently insert updates for this mailbox, if any (false) usage 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. conf_override boolean (optional) override global settings for this mailbox. Available sections to override are pager, notifications, shortcuts, composing and the account options identity and index_style. Example: [accounts."imap.domain.tld".mailboxes."INBOX"] index_style = "plain" [accounts."imap.domain.tld".mailboxes."INBOX".pager] filter = "" COMPOSING mailer_cmd String command to pipe new mail to, exit code must be 0 for success. editor_cmd 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. embed boolean (optional) embed editor within meli (false) format_flowed boolean (optional) set format=flowed [RFC3676] in text/plain attachments. (true) default_header_values hash table String[String] Default header values used when creating a new draft. SHORTCUTS Shortcuts can take the following values: "Backspace" "Left" "Right" "Up" "Down" "Home" "End" "PageUp" "PageDown" "Delete" "Insert" "Enter" "Tab" "Esc" "F1..F12" "M-char" "C-char" and "char", where 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 compact-listing: [shortcuts.compact-listing] open_thread = "Enter" exit_thread = 'i' general next_tab Go to next tab. (T) go_to_tab Go to the nth tab (cannot be redefined) listing prev_page Go to previous page. (PageUp) next_page Go to next page. (PageDown) prev_mailbox Go to previous mailbox. (K) next_mailbox Go to next mailbox. (J) prev_account Go to previous account. (l) next_account Go to next account. (h) new_mail Start new mail draft in new tab (m) set_seen Set thread as seen. (n) refresh Manually request a mailbox refresh. (F5) search Search within list of e-mails. (/) toggle_menu_visibility Toggle visibility of side menu in mail list. (`) compact-listing exit_thread Exit thread view (i) open_thread Open thread. (Enter) select_entry Select thread entry. (v) pager scroll_up Scroll up pager. (k) scroll_down Scroll down pager. (j) page_up Go to previous pager page (PageUp) page_down Go to next pager pag (PageDown) contact-list create_contact Create new contact. (c) edit_contact Edit contact under cursor (e) mail_contact Mail contact under cursor (m) toggle_menu_visibility Toggle visibility of side menu in mail list. (`) composing send_mail Deliver draft to mailer (s) edit_mail Edit mail. (e) envelope-view To "select" an attachment, type its index (you will see the typed result in the command buffer on your bottom right of the status line) and then issue the corresponding command. add_addresses_to_contacts Select addresses from envelope to add to contacts. (c) view_raw_source View raw envelope source in a pager. (M-r) reply Reply to envelope. (R) edit Open envelope in composer. (e) return_to_normal_view Return to envelope if viewing raw source or attachment. (r) open_attachment Opens selected attachment with xdg-open (a) open_mailcap Opens selected attachment according to its mailcap entry. See meli.1(FILES) for the mailcap file locations. (m) go_to_url Go to url of given index (g) toggle_url_mode Toggles url open mode. When active, it prepends an index next to each url that you can select by typing and open by issuing go_to_url (u) toggle_expand_headers Expand extra headers (References and others) (h) thread-view reverse_thread_order Reverse thread order. (r) toggle_mailview Toggle mail view visibility. (p) toggle_threadview Toggle thread view visibility. (t) collapse_subtree Collapse thread branches. (h) prev_page Go to previous page. (PageUp) next_page Go to next page. (PageDown) NOTIFICATIONS enable boolean enable freedesktop-spec notifications. this is usually what you want (true) script String (optional) script to pass notifications to, with title as 1st arg and body as 2nd (none) xbiff_file_path String (optional) file that gets its size updated when new mail arrives (none) play_sound boolean (optional) play theme sound in notifications if possible (false) sound_file String (optional) play sound file in notifications if possible (none) PAGER pager_context num (optional) number of context lines when going to next page. (Unimplemented) (0) headers_sticky boolean (optional) always show headers when scrolling. (true) html_filter String (optional) pipe html attachments through this filter before display (none) filter String (optional) a command to pipe mail output through for viewing in pager. (none) format_flowed bool (optional) respect format=flowed (true) split_long_lines bool (optional) Split long lines that would overflow on the x axis. (true) minimum_width num (optional) Minimum text width in columns. (80) auto_choose_multipart_alternative boolean, (optional) Choose `text/html` alternative if `text/plain` is empty in `multipart/alternative` attachments. (true) LISTING context_lines num (optional) number of context lines when going to next page. (Unimplemented) (0) datetime_fmt String (optional) datetime formatting passed verbatim to strftime(3). (%Y-%m-%d %T) recent_dates Boolean (optional) Show recent dates as `X {minutes,hours,days} ago`, up to 7 days. (true) filter Query (optional) Show only envelopes matching this query (for query syntax see meli(1)) (None) Example: filter = "not flags:seen" # show only unseen messages TAGS colours hash table String[Color] (optional) set UI colors for tags ignore_tags Array String (optional) hide tags (not the tagged messages themselves) example configuration: [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", ] } PGP auto_verify_signatures boolean auto verify signed e-mail according to RFC3156 (true) auto_sign boolean (optional) always sign sent messages (false) key String (optional) key to be used when signing/encrypting (not functional yet) (none) gpg_binary String (optional) gpg binary name or file location to use (gpg2) TERMINAL theme String (optional) select between these themes: light / dark (dark) ascii_drawing boolean (optional) if true, box drawing will be done with ascii characters. (false) use_color boolean (optional) if false, no ANSI colors are used (true) window_title String (optional) set window title in xterm compatible terminals (empty string means no window title is set) (meli) themes 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] ... LOG log_file String (optional) path of the log file ($XDG_DATA_HOME/meli/meli.log) maximum_level 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: • OFF • FATAL • ERROR • WARN • INFO • DEBUG • TRACE This means that to turn logging off, set maximum_level to OFF. (INFO) SEE ALSO meli(1), meli-themes(5) CONFORMING TO TOML Standard v.0.5.0 https://toml.io/en/v0.5.0 AUTHORS Copyright 2017-2019 Manos Pitsidianakis ⟨epilys@nessuent.xyz⟩ 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.delivery⟩ Debian September 16, 2019 Debian
MELI-THEMES(5) File Formats Manual MELI-THEMES(5) NAME meli-themes – themes for the meli mail client SYNOPSIS meli comes with two themes, dark (the default) and light. Custom themes can be 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" DESCRIPTION Themes for meli are described in the configuration language TOML. 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, and each value can either be 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`. EXAMPLES 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 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. VALID ATTRIBUTE VALUES Case-sensitive. • "Default" • "Bold" • "Dim" • "Italics" • "Underline" • "Blink" • "Reverse" • "Hidden" • Any combo of the above separated by a bitwise XOR "|" eg "Dim | Italics" VALID COLOR VALUES Color values are of type String with the following valid contents: • "Default" is the terminal default. (Case-sensitive) • Hex triplet eg #FFFFFF for RGB colors (three letter shorthand also valid, eg #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) NO COLOR 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 inverse the terminal's default foreground/background colors. VALID KEYS • theme_default • status.bar • 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_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.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.conversations • mail.listing.conversations.subject • mail.listing.conversations.from • mail.listing.conversations.date • mail.listing.conversations.padding • mail.listing.conversations.unseen • mail.listing.conversations.unseen_padding • mail.listing.conversations.highlighted • mail.listing.conversations.selected • mail.view.headers • 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 COLOR NAMES +---------------+------+---+--------------+--------+ |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 | +------------------+---+-----------------+ SEE ALSO meli(1), meli.conf(5) CONFORMING TO TOML Standard v.0.5.0 https://github.com/toml- lang/toml/blob/master/versions/en/toml-v0.5.0.md https://no-color.org/ AUTHORS Copyright 2017-2019 Manos Pitsidianakis ⟨epilys@nessuent.xyz⟩ 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.delivery⟩ Debian January 23, 2020 Debian