58 const int min_timeout = 50;
59 const int max_timeout = 10000;
61 if ((value >= min_timeout) && (value <= max_timeout))
65 buf_printf(err,
_(
"Option %s must be between %d and %d inclusive"),
66 cdef->
name, min_timeout, max_timeout);
144 { NULL, NULL, 0, -1, NULL }
157 const char **parsed_until,
176 const char **parsed_until,
195 const char **parsed_until,
204 fmt, parsed_until, err);
208 const char *pc = strchr(
NONULL(node->
text),
'%');
228 const char **parsed_until,
234 _(
"index-hook cannot be used as a condition"));
249 const char **parsed_until,
266 (*parsed_until) = str + 2;
291 if (*parsed_until[0] !=
'}')
368 { NULL, NULL, 0, -1, NULL }
380 {
"abort_backspace",
DT_BOOL,
true, 0, NULL,
381 "Hitting backspace against an empty prompt aborts the prompt"
384 "String representation of key to abort prompts"
386 {
"ascii_chars",
DT_BOOL,
false, 0, NULL,
387 "Use plain ASCII characters, when drawing email threads"
390 "If a message is missing a character set, assume this character set"
393 "printf-like format string for the attachment menu"
395 {
"auto_edit",
DT_BOOL,
false, 0, NULL,
396 "Skip the initial compose menu and edit the email"
398 {
"auto_tag",
DT_BOOL,
false, 0, NULL,
399 "Automatically apply actions to all tagged messages"
401 {
"braille_friendly",
DT_BOOL,
false, 0, NULL,
402 "Move the cursor to the beginning of the line"
405 "Default character set for displaying text on screen"
408 "Character set that the config files are in"
410 {
"confirm_append",
DT_BOOL,
true, 0, NULL,
411 "Confirm before appending emails to a mailbox"
413 {
"confirm_create",
DT_BOOL,
true, 0, NULL,
414 "Confirm before creating a new mailbox"
416 {
"copy_decode_weed",
DT_BOOL,
false, 0, NULL,
417 "Controls whether to weed headers when copying or saving emails"
420 "strftime format string for the `%d` expando"
423 "File to save debug logs"
426 "Logging level for debug logs"
429 "Really delete messages, when the mailbox is closed"
431 {
"delete_untag",
DT_BOOL,
true, 0, NULL,
432 "Untag messages when they are marked for deletion"
435 "External command to use as an email editor"
437 {
"flag_safe",
DT_BOOL,
false, 0, NULL,
438 "Protect flagged messages from deletion"
441 "Base folder for a set of mailboxes"
443 {
"forward_decode",
DT_BOOL,
true, 0, NULL,
444 "Decode the message when forwarding it"
446 {
"forward_quote",
DT_BOOL,
false, 0, NULL,
447 "Automatically quote a forwarded message using `$indent_string`"
450 "Default 'From' address to use, if isn't otherwise set"
452 {
"gecos_mask",
DT_REGEX,
IP "^[^,]*", 0, NULL,
453 "Regex for parsing GECOS field of /etc/passwd"
455 {
"header",
DT_BOOL,
false, 0, NULL,
456 "Include the message headers in the reply email (Weed applies)"
459 "Fully-qualified domain name of this machine"
462 "String used to indent 'reply' text"
464 {
"keep_flagged",
DT_BOOL,
false, 0, NULL,
465 "Don't move flagged messages from `$spool_file` to `$mbox`"
468 "Timeout (ms) before the first keypress"
471 "Timeout (ms) to wait for more keys after a partial match"
473 {
"local_date_header",
DT_BOOL,
true, 0, NULL,
474 "Convert the date in the Date header of sent emails into local timezone, UTC otherwise"
477 "Maximum number of times a macro may be repeated via a numeric prefix"
480 "Number of seconds before NeoMutt checks for new mail"
482 {
"mail_check_recent",
DT_BOOL,
true, 0, NULL,
483 "Notify the user about new mail since the last time the mailbox was opened"
485 {
"mail_check_stats",
DT_BOOL,
false, 0, NULL,
486 "Periodically check for new mail"
489 "How often to check for new mail"
491 {
"mark_old",
DT_BOOL,
true, 0, NULL,
492 "Mark new emails as old when leaving the mailbox"
495 "Folder that receives read emails (see Move)"
498 "Default type for creating new mailboxes"
500 {
"message_cache_clean",
DT_BOOL,
false, 0, NULL,
501 "(imap/pop) Clean out obsolete entries from the message cache"
504 "(imap/pop) Directory for the message cache"
506 {
"meta_key",
DT_BOOL,
false, 0, NULL,
507 "Interpret 'ALT-x' as 'ESC-x'"
510 "Move emails from `$spool_file` to `$mbox` when read"
512 {
"pipe_decode",
DT_BOOL,
false, 0, NULL,
513 "Decode the message when piping it"
515 {
"pipe_decode_weed",
DT_BOOL,
true, 0, NULL,
516 "Control whether to weed headers when piping an email"
519 "Separator to add between multiple piped messages"
521 {
"pipe_split",
DT_BOOL,
false, 0, NULL,
522 "Run the pipe command on each message separately"
525 "Folder to store postponed messages"
528 "Confirm before printing a message"
531 "External command to print a message"
533 {
"print_decode",
DT_BOOL,
true, 0, NULL,
534 "Decode message before printing it"
536 {
"print_decode_weed",
DT_BOOL,
true, 0, NULL,
537 "Control whether to weed headers when printing an email"
539 {
"print_split",
DT_BOOL,
false, 0, NULL,
540 "Print multiple messages separately"
542 {
"quote_regex",
DT_REGEX,
IP "^([ \t]*[|>:}#])+", 0, NULL,
543 "Regex to match quoted text in a reply"
546 "Real name of the user"
549 "Folder to save 'sent' messages"
551 {
"resolve",
DT_BOOL,
true, 0, NULL,
552 "Move to the next email whenever a command modifies an email"
554 {
"resume_edited_draft_files",
DT_BOOL,
true, 0, NULL,
555 "Resume editing previously saved draft files"
557 {
"save_address",
DT_BOOL,
false, 0, NULL,
558 "Use sender's full address as a default save folder"
560 {
"save_empty",
DT_BOOL,
true, 0, NULL,
561 "(mbox,mmdf) Preserve empty mailboxes"
564 "Character sets for outgoing mail"
567 "External command to run subshells in"
569 {
"size_show_bytes",
DT_BOOL,
false, 0, NULL,
570 "Show smaller sizes in bytes"
572 {
"size_show_fractions",
DT_BOOL,
true, 0, NULL,
573 "Show size fractions with a single decimal place"
575 {
"size_show_mb",
DT_BOOL,
true, 0, NULL,
576 "Show sizes in megabytes for sizes greater than 1 megabyte"
578 {
"size_units_on_left",
DT_BOOL,
false, 0, NULL,
579 "Show the units as a prefix to the size"
582 "Time to pause after certain info messages"
585 "Sort method for the index"
588 "Secondary sort method for the index"
593 {
"status_on_top",
DT_BOOL,
false, 0, NULL,
594 "Display the status bar at the top"
596 {
"suspend",
DT_BOOL,
true, 0, NULL,
597 "Allow the user to suspend NeoMutt using '^Z'"
599 {
"text_flowed",
DT_BOOL,
false, 0, NULL,
600 "Generate 'format=flowed' messages"
603 "Time to wait for user input in menus"
606 "Directory for temporary files"
609 "Directory for temporary draft files"
612 "Folder to put deleted emails"
614 {
"use_domain",
DT_BOOL,
true, 0, NULL,
615 "Qualify local addresses using this domain"
618 "Whether to use threads for the index"
620 {
"wait_key",
DT_BOOL,
true, 0, NULL,
621 "Prompt to press a key after running external commands"
623 {
"weed",
DT_BOOL,
true, 0, NULL,
624 "Filter headers when displaying/forwarding/printing/replying"
627 "Width to wrap text in the pager"
629 {
"wrap_search",
DT_BOOL,
true, 0, NULL,
630 "Wrap around when the search hits the end"
641 {
"confirmappend",
DT_SYNONYM,
IP "confirm_append",
IP "2021-03-21" },
642 {
"confirmcreate",
DT_SYNONYM,
IP "confirm_create",
IP "2021-03-21" },
643 {
"forw_decode",
DT_SYNONYM,
IP "forward_decode",
IP "2021-03-21" },
644 {
"forw_quote",
DT_SYNONYM,
IP "forward_quote",
IP "2021-03-21" },
645 {
"indent_str",
DT_SYNONYM,
IP "indent_string",
IP "2021-03-21" },
646 {
"message_cachedir",
DT_SYNONYM,
IP "message_cache_dir",
IP "2023-01-25" },
648 {
"quote_regexp",
DT_SYNONYM,
IP "quote_regex",
IP "2021-03-21" },
652 {
"tmpdraftdir",
DT_SYNONYM,
IP "tmp_draft_dir",
IP "2026-03-14" },
654 {
"devel_security",
DT_BOOL,
false, 0, NULL,
655 "Devel feature: Security -- https://github.com/neomutt/neomutt/discussions/4251"
const struct ExpandoDefinition IndexFormatDef[]
Expando definitions.
GUI display the mailboxes in a side panel.
@ ED_ATT_NUMBER
AttachPtr.num.
@ ED_ATT_TREE
AttachPtr.tree.
@ ED_ATT_CHARSET
AttachPtr.body.
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Convenience wrapper for the config headers.
#define CSR_ERR_INVALID
Value hasn't been set.
#define CSR_SUCCESS
Action completed successfully.
Convenience wrapper for the core headers.
@ ED_MBX_MESSAGE_COUNT
Mailbox.msg_count.
@ ED_MBX_PERCENTAGE
EmailFormatInfo.pager_progress.
@ ED_MBX_MAILBOX_NAME
Mailbox, mailbox_path()
@ MUTT_MBOX
'mbox' Mailbox type
bool mutt_isalnum(int arg)
Wrapper for isalnum(3)
uint8_t ExpandoParserFlags
@ EP_CONDITIONAL
Expando is being used as a condition.
@ ED_ENVELOPE
Envelope ED_ENV_ ExpandoDataEnvelope.
@ ED_EMAIL
Email ED_EMA_ ExpandoDataEmail.
@ ED_GLOBAL
Global ED_GLO_ ExpandoDataGlobal.
@ ED_BODY
Body ED_BOD_ ExpandoDataBody.
@ ED_MAILBOX
Mailbox ED_MBX_ ExpandoDataMailbox.
@ ED_ATTACH
Attach ED_ATT_ ExpandoDataAttach.
@ ED_BOD_DESCRIPTION
Body.description.
@ ED_BOD_CHARSET_CONVERT
Body.type.
@ ED_BOD_DELETED
Body.deleted.
@ ED_BOD_UNLINK
Body.unlink.
@ ED_BOD_FILE_SIZE
Body.filename.
@ ED_BOD_DISPOSITION
Body.disposition.
@ ED_BOD_ATTACH_QUALIFIES
Body.attach_qualifies.
@ ED_BOD_MIME_MAJOR
Body.type, Body.xtype.
@ ED_BOD_TAGGED
Body.tagged.
@ ED_BOD_ATTACH_COUNT
Body.attach_count.
@ ED_BOD_FILE
Body.filename.
@ ED_BOD_MIME_MINOR
Body.subtype.
@ ED_BOD_FILE_DISPOSITION
Body.d_filename.
@ ED_BOD_MIME_ENCODING
Body.encoding.
Structs that make up an email.
@ EMAIL_SORT_LABEL
Sort by the emails label.
@ EMAIL_SORT_DATE_RECEIVED
Sort by when the message was delivered locally.
@ EMAIL_SORT_SPAM
Sort by the email's spam score.
@ EMAIL_SORT_SCORE
Sort by the email's score.
@ EMAIL_SORT_DATE
Sort by the date the email was sent.
@ EMAIL_SORT_THREADS
Sort by email threads.
@ EMAIL_SORT_SUBJECT
Sort by the email's subject.
@ EMAIL_SORT_FROM
Sort by the email's From field.
@ EMAIL_SORT_UNSORTED
Sort by the order the messages appear in the mailbox.
@ EMAIL_SORT_SIZE
Sort by the size of the email.
@ EMAIL_SORT_TO
Sort by the email's To field.
@ ED_EMA_DATE_STRF_LOCAL
Email.date_sent.
@ ED_EMA_ATTACHMENT_COUNT
Email, mutt_count_body_parts()
@ ED_EMA_DATE_FORMAT_LOCAL
Email.date_sent.
@ ED_EMA_TAGS_TRANSFORMED
Email.tags, driver_tags_get_transformed()
@ ED_EMA_THREAD_HIDDEN_COUNT
Email.collapsed, Email.num_hidden, ...
@ ED_EMA_DATE_FORMAT
Email.date_sent.
@ ED_EMA_THREAD_TAGS
Email.tags.
@ ED_EMA_SIZE
Body.length.
@ ED_EMA_FLAG_CHARS
Email.deleted, Email.attach_del, ...
@ ED_EMA_THREAD_NUMBER
Email, mutt_messages_in_thread()
@ ED_EMA_TO_CHARS
Email, User_is_recipient()
@ ED_EMA_BODY_CHARACTERS
Body.length.
@ ED_EMA_COMBINED_FLAGS
Email.read, Email.old, thread_is_new(), ...
@ ED_EMA_THREAD_COUNT
Email, mutt_messages_in_thread()
@ ED_EMA_STATUS_FLAGS
Email.deleted, Email.attach_del, ...
@ ED_EMA_NUMBER
Email.msgno.
@ ED_EMA_DATE_STRF
Email.date_sent, Email.zhours, Email.zminutes, Email.zoccident.
@ ED_EMA_FROM_LIST
Envelope.to, Envelope.cc.
@ ED_EMA_SCORE
Email.score.
@ ED_EMA_CRYPTO_FLAGS
Email.security, SecurityFlags.
@ ED_EMA_STRF_RECV_LOCAL
Email.received.
@ ED_EMA_LIST_OR_SAVE_FOLDER
Envelope.to, Envelope.cc, check_for_mailing_list()
@ ED_EMA_INDEX_HOOK
Mailbox, Email, mutt_idxfmt_hook()
@ ED_EMA_LINES
Email.lines.
@ ED_EMA_MESSAGE_FLAGS
Email.tagged, Email.flagged.
@ ED_ENV_SUBJECT
Envelope.subject, Envelope.disp_subj.
@ ED_ENV_NEWSGROUP
Envelope.newsgroups.
@ ED_ENV_INITIALS
Envelope.from (first)
@ ED_ENV_FROM_FULL
Envelope.from (all)
@ ED_ENV_X_COMMENT_TO
Envelope.x_comment_to.
@ ED_ENV_FROM
Envelope.from (first)
@ ED_ENV_LIST_ADDRESS
Envelope.to, Envelope.cc.
@ ED_ENV_SPAM
Envelope.spam.
@ ED_ENV_SENDER
Envelope, make_from()
@ ED_ENV_TO_ALL
Envelope.to (all)
@ ED_ENV_X_LABEL
Envelope.x_label.
@ ED_ENV_NAME
Envelope.from (first)
@ ED_ENV_CC_ALL
Envelope.cc.
@ ED_ENV_ORGANIZATION
Envelope.organization.
@ ED_ENV_REPLY_TO
Envelope.reply_to.
@ ED_ENV_LIST_EMPTY
Envelope.to, Envelope.cc.
@ ED_ENV_THREAD_X_LABEL
Envelope.x_label.
@ ED_ENV_MESSAGE_ID
Envelope.message_id.
@ ED_ENV_SENDER_PLAIN
Envelope, make_from()
@ ED_ENV_USERNAME
Envelope.from.
@ ED_ENV_THREAD_TREE
Email.tree.
@ ED_ENV_TO
Envelope.to, Envelope.cc (first)
@ ED_ENV_FIRST_NAME
Envelope.from, Envelope.to, Envelope.cc.
const struct Mapping SortMethods[]
Sort methods for '$sort' for the index.
static int key_timeout_validator(const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate key_timeout_idle and key_timeout_partial - Implements ConfigDef::validator() -.
int sort_validator(const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate the "sort" config variable - Implements ConfigDef::validator() -.
int charset_validator(const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate the "charset" config variables - Implements ConfigDef::validator() -.
int charset_slist_validator(const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate the multiple "charset" config variables - Implements ConfigDef::validator() -.
int debug_level_validator(const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate the "debug_level" config variable - Implements ConfigDef::validator() -.
struct ExpandoNode * node_padding_parse(const char *str, struct ExpandoFormat *fmt, int did, int uid, ExpandoParserFlags flags, const char **parsed_until, struct ExpandoParseError *err)
Parse a Padding Expando - Implements ExpandoDefinition::parse() -.
struct ExpandoNode * parse_index_format_hook(const char *str, struct ExpandoFormat *fmt, int did, int uid, ExpandoParserFlags flags, const char **parsed_until, struct ExpandoParseError *err)
Parse an index-hook - Implements ExpandoDefinition::parse() -.
struct ExpandoNode * parse_subject(const char *str, struct ExpandoFormat *fmt, int did, int uid, ExpandoParserFlags flags, const char **parsed_until, struct ExpandoParseError *err)
Parse a Subject Expando - Implements ExpandoDefinition::parse() -.
struct ExpandoNode * parse_index_date_recv_local(const char *str, struct ExpandoFormat *fmt, int did, int uid, ExpandoParserFlags flags, const char **parsed_until, struct ExpandoParseError *err)
Parse a Date Expando - Implements ExpandoDefinition::parse() -.
struct ExpandoNode * parse_index_date_local(const char *str, struct ExpandoFormat *fmt, int did, int uid, ExpandoParserFlags flags, const char **parsed_until, struct ExpandoParseError *err)
Parse a Date Expando - Implements ExpandoDefinition::parse() -.
struct ExpandoNode * parse_index_date(const char *str, struct ExpandoFormat *fmt, int did, int uid, ExpandoParserFlags flags, const char **parsed_until, struct ExpandoParseError *err)
Parse a Date Expando - Implements ExpandoDefinition::parse() -.
struct ExpandoNode * parse_tags_transformed(const char *str, struct ExpandoFormat *fmt, int did, int uid, ExpandoParserFlags flags, const char **parsed_until, struct ExpandoParseError *err)
Parse a Tags-Transformed Expando - Implements ExpandoDefinition::parse() -.
int node_condbool_render(const struct ExpandoNode *node, const struct ExpandoRenderCallback *erc, struct Buffer *buf, int max_cols, void *data, MuttFormatFlags flags)
Callback for every bool node - Implements ExpandoNode::render() -.
Convenience wrapper for the gui headers.
const struct EnumDef UseThreadsTypeDef
Data for the $use_threads enumeration.
@ UT_UNSET
Not yet set by user, stick to legacy semantics.
struct ConfigDef MainVars[]
General Config definitions for NeoMutt.
Convenience wrapper for the library headers.
char * mutt_strn_dup(const char *begin, size_t len)
Duplicate a sub-string.
static const struct ExpandoDefinition *const IndexFormatDefNoPadding
IndexFormatDefNoPadding - Index format definitions, without padding.
static const struct Mapping SortAuxMethods[]
Sort methods for '$sort_aux' for the index.
static const struct ExpandoDefinition AttachFormatDef[]
Expando definitions.
const struct EnumDef MboxTypeDef
Data for the $mbox_type enumeration.
void node_add_child(struct ExpandoNode *node, struct ExpandoNode *child)
Add a child to an ExpandoNode.
void node_free(struct ExpandoNode **ptr)
Free an ExpandoNode and its private data.
@ ENT_CONDBOOL
True/False boolean condition.
struct ExpandoNode * node_conddate_parse(const char *str, int did, int uid, const char **parsed_until, struct ExpandoParseError *err)
Parse a CondDate format string.
struct ExpandoNode * node_container_new(void)
Create a new Container ExpandoNode.
struct ExpandoNode * node_expando_new(struct ExpandoFormat *fmt, int did, int uid)
Create a new Expando ExpandoNode.
struct ExpandoNode * node_expando_parse_enclosure(const char *str, int did, int uid, char terminator, struct ExpandoFormat *fmt, const char **parsed_until, struct ExpandoParseError *err)
Parse an enclosed Expando.
@ MUTT_ASKNO
Ask the user, defaulting to 'No'.
@ MUTT_NO
User answered 'No', or assume 'No'.
@ MUTT_ASKYES
Ask the user, defaulting to 'Yes'.
String manipulation buffer.
const char * name
User-visible name.
Definition of a format string.
int uid
Unique ID, e.g. ED_EMA_SIZE.
struct ExpandoFormat * format
Formatting info.
int(* render)(const struct ExpandoNode *node, const struct ExpandoRenderCallback *erc, struct Buffer *buf, int max_cols, void *data, MuttFormatFlags flags)
int did
Domain ID, e.g. ED_EMAIL.
const char * text
Node-specific text.
enum ExpandoNodeType type
Type of Node, e.g. ENT_EXPANDO.
Buffer for parsing errors.
char message[1024]
Error message.
const char * position
Position of error in original string.
Mapping between user-readable string and a constant.
#define D_CHARSET_SINGLE
Flag for charset_validator to allow only one charset.
#define D_SLIST_SEP_COLON
Slist items are colon-separated.
#define D_INTERNAL_DEPRECATED
Config item shouldn't be used any more.
#define D_STRING_COMMAND
A command.
#define D_SLIST_ALLOW_EMPTY
Slist may be empty.
#define D_PATH_DIR
Path is a directory.
#define D_CHARSET_STRICT
Flag for charset_validator to use strict char check.
#define D_PATH_FILE
Path is a file.
@ DT_SLIST
a list of strings
@ DT_QUAD
quad-option (no/yes/ask-no/ask-yes)
@ DT_SYNONYM
synonym for another variable
@ DT_ADDRESS
e-mail address
@ DT_REGEX
regular expressions
@ DT_PATH
a path to a file/directory
#define D_STRING_MAILBOX
Don't perform path expansions.
#define D_SORT_LAST
Sort flag for -last prefix.
#define D_SORT_REVERSE
Sort flag for -reverse prefix.
#define D_NOT_EMPTY
Empty strings are not allowed.
#define D_INTEGER_NOT_NEGATIVE
Negative numbers are not allowed.
#define D_ON_STARTUP
May only be set at startup.
@ ED_GLO_PADDING_EOL
Padding to end-of-line.
@ ED_GLO_PADDING_HARD
Hard Padding.
@ ED_GLO_PADDING_SOFT
Soft Padding.