95 for (
int j = 0; fns[j].
name; j++)
146 int lineno = 0, rc = 0, warnings = 0;
148 struct Buffer *token = NULL, *linebuf = NULL;
150 char *currentline = NULL;
161 bool ispipe = rcfile[rcfilelen - 1] ==
'|';
168 mutt_error(
_(
"Error: Can't build path of '%s'"), rcfile_path);
181 mutt_error(
_(
"Error: Cyclic sourcing of configuration file '%s'"), rcfile);
204 const bool conv = c_config_charset && c_charset;
261 _(
"source: errors in %s") :
262 _(
"source: reading aborted due to too many errors in %s"),
271 mutt_buffer_printf(err, ngettext(
"source: %d warning in %s",
"source: %d warnings in %s", warnings),
414 (data == 1) ?
"un" :
"", estr);
457 intptr_t data,
struct Buffer *err)
477 if ((res && (data == 0)) || (!res && (data == 1)))
494 intptr_t data,
struct Buffer *err)
510 intptr_t data,
struct Buffer *err)
544 intptr_t data,
struct Buffer *err)
576 bool new_account =
false;
638 intptr_t data,
struct Buffer *err)
641 char *p = strpbrk(buf->
data,
": \t");
642 if (!p || (*p !=
':'))
676 static const char *set_commands[] = {
"set",
"toggle",
"unset",
"reset" };
706 else if (*s->
dptr ==
'&')
725 bool increment =
false;
726 bool decrement =
false;
741 for (
size_t i = 0; list[i]; i++)
768 if (reset || unset || inv)
778 else if (*s->
dptr ==
'+' || *s->
dptr ==
'-')
782 mutt_buffer_printf(err,
_(
"Can't use prefix when incrementing or decrementing a variable"));
786 if (reset || unset || inv)
809 else if (*s->
dptr ==
'=')
817 if (reset || unset || inv)
828 if (!bq && (inv || (unset && prefix)))
832 mutt_buffer_printf(err,
_(
"Prefixes 'no' and 'inv' may only be used with bool/quad variables"));
898 const char *name = NULL;
1051 bool prefix =
false;
1060 if (*s->
dptr ==
'?')
1077 if (*s->
dptr ==
'?')
1098 while (envp && *envp)
1135 if (*s->
dptr ==
'=')
1320 intptr_t data,
struct Buffer *err)
1322 if (!buf || !s || !err)
1337 if (buf->
data && (*buf->
data !=
'\0'))
1367 intptr_t data,
struct Buffer *err)
1389 mutt_warning(
_(
"tag format '%s' already registered as '%s'"), fmt, tmp);
1431 mutt_warning(
_(
"tag transform '%s' already registered as '%s'"), tag, tmp);
1454 if (strcmp(buf->
data,
"*") != 0)
1532 intptr_t data,
struct Buffer *err)
1564 intptr_t data,
struct Buffer *err)
1566 struct ListNode *np = NULL, *tmp = NULL;
1586 if (buf->
data[l - 1] ==
':')
1610 intptr_t data,
struct Buffer *err)
1631 intptr_t data,
struct Buffer *err)
1658 intptr_t data,
struct Buffer *err)
1660 if (!buf || !s || !err)
1673 if (buf->
data && (*buf->
data !=
'\0'))
bool account_mailbox_remove(struct Account *a, struct Mailbox *m)
Remove a Mailbox from an Account.
struct Account * account_new(const char *name, struct ConfigSubset *sub)
Create a new Account.
void mutt_addrlist_clear(struct AddressList *al)
Unlink and free all Address in an AddressList.
int mutt_addrlist_parse2(struct AddressList *al, const char *s)
Parse a list of email addresses.
int mutt_addrlist_to_intl(struct AddressList *al, char **err)
Convert an Address list to Punycode.
int bool_he_toggle(struct ConfigSubset *sub, struct HashElem *he, struct Buffer *err)
Toggle the value of a bool.
struct Buffer mutt_buffer_make(size_t size)
Make a new buffer on the stack.
bool mutt_buffer_is_empty(const struct Buffer *buf)
Is the Buffer empty?
size_t mutt_buffer_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
void mutt_buffer_dealloc(struct Buffer *buf)
Release the memory allocated by a buffer.
size_t mutt_buffer_len(const struct Buffer *buf)
Calculate the length of a Buffer.
size_t mutt_buffer_addch(struct Buffer *buf, char c)
Add a single character to a Buffer.
size_t mutt_buffer_addstr(struct Buffer *buf, const char *s)
Add a string to a Buffer.
char * mutt_buffer_strdup(const struct Buffer *buf)
Copy a Buffer's string.
struct Buffer * mutt_buffer_init(struct Buffer *buf)
Initialise a new Buffer.
int mutt_buffer_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
size_t mutt_buffer_copy(struct Buffer *dst, const struct Buffer *src)
Copy a Buffer's contents to another Buffer.
void mutt_buffer_reset(struct Buffer *buf)
Reset an existing Buffer.
static const char * mutt_buffer_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
CommandResult
Error codes for command_t parse functions.
@ MUTT_CMD_SUCCESS
Success: Command worked.
@ MUTT_CMD_ERROR
Error: Can't help the user.
@ MUTT_CMD_WARNING
Warning: Help given to the user.
@ MUTT_CMD_FINISH
Finish: Stop processing this file.
GroupState
Type of email address group.
@ GS_RX
Entry is a regular expression.
@ GS_NONE
Group is missing an argument.
@ GS_ADDR
Entry is an address.
int parse_grouplist(struct GroupList *gl, struct Buffer *buf, struct Buffer *s, struct Buffer *err)
Parse a group context.
static void do_unmailboxes_star(void)
Remove all Mailboxes from the Sidebar/notifications.
void clear_source_stack(void)
Free memory from the stack used for the source command.
static struct ListHead MuttrcStack
static void do_unmailboxes(struct Mailbox *m)
Remove a Mailbox from the Sidebar/notifications.
int source_rc(const char *rcfile_path, struct Buffer *err)
Read an initialization file.
static bool is_function(const char *name)
Is the argument a neomutt function?
Functions to parse commands in a config file.
const char * cs_subset_string(const struct ConfigSubset *sub, const char *name)
Get a string config item by name.
Convenience wrapper for the config headers.
char * HomeDir
User's home directory.
Convenience wrapper for the core headers.
int mutt_any_key_to_continue(const char *s)
Prompt the user to 'press any key' and wait.
void mutt_endwin(void)
Shutdown curses.
size_t pretty_var(const char *str, struct Buffer *buf)
Escape and stringify a config item value.
void mutt_pretty_mailbox(char *buf, size_t buflen)
Shorten a mailbox path using '~' or '='.
struct ListNode * header_add(struct ListHead *hdrlist, const char *header)
Add a header to a list.
struct ListNode * header_update(struct ListNode *hdr, const char *header)
Update an existing header.
void header_free(struct ListHead *hdrlist, struct ListNode *target)
Free and remove a header from a header list.
struct ListNode * header_find(const struct ListHead *hdrlist, const char *header)
Find a header, matching on its field, in a list of headers.
Structs that make up an email.
@ NT_HEADER_CHANGE
An existing header has been changed.
@ NT_HEADER_ADD
Header has been added.
@ NT_HEADER_DELETE
Header has been removed.
bool mutt_envlist_unset(const char *name)
Unset an environment variable.
bool mutt_envlist_set(const char *name, const char *value, bool overwrite)
Set an environment variable.
char ** mutt_envlist_getlist(void)
Get the private environment.
int mutt_file_fclose(FILE **fp)
Close a FILE handle (and NULL the pointer)
char * mutt_file_read_line(char *line, size_t *size, FILE *fp, int *line_num, ReadLineFlags flags)
Read a line from a file.
#define MUTT_RL_CONT
-continuation
int filter_wait(pid_t pid)
Wait for the exit of a process and return its status.
struct ReplaceList SpamList
List of regexes and patterns to match spam emails.
struct RegexList SubscribedLists
List of regexes to match subscribed mailing lists.
struct HashTable * AutoSubscribeCache
Hash Table of auto-subscribed mailing lists.
struct RegexList UnSubscribedLists
List of regexes to blacklist false matches in SubscribedLists.
struct RegexList UnMailLists
List of regexes to blacklist false matches in MailLists.
struct RegexList MailLists
List of regexes to match mailing lists.
struct ListHead Ignore
List of header patterns to ignore.
struct RegexList NoSpamList
List of regexes to whitelist non-spam emails.
struct ListHead UnIgnore
List of header patterns to unignore (see)
int mutt_grouplist_remove_addrlist(struct GroupList *gl, struct AddressList *al)
Remove an AddressList from a GroupList.
void mutt_grouplist_add(struct GroupList *gl, struct Group *group)
Add a Group to a GroupList.
struct Group * mutt_pattern_group(const char *pat)
Match a pattern to a Group.
int mutt_grouplist_add_regex(struct GroupList *gl, const char *s, uint16_t flags, struct Buffer *err)
Add matching Addresses to a GroupList.
int mutt_grouplist_remove_regex(struct GroupList *gl, const char *s)
Remove matching addresses from a GroupList.
void mutt_grouplist_destroy(struct GroupList *gl)
Free a GroupList.
void mutt_grouplist_clear(struct GroupList *gl)
Clear a GroupList.
void mutt_grouplist_add_addrlist(struct GroupList *gl, struct AddressList *al)
Add Address list to a GroupList.
#define MUTT_GROUP
'group' config command
#define MUTT_UNGROUP
'ungroup' config command
enum CommandResult parse_unmy_hdr(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'unmy_hdr' command - Implements Command::parse() -.
enum CommandResult parse_tag_formats(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'tag-formats' command - Implements Command::parse() -.
enum CommandResult parse_tag_transforms(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'tag-transforms' command - Implements Command::parse() -.
enum CommandResult parse_unstailq(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse an unlist command - Implements Command::parse() -.
enum CommandResult parse_set(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'set' family of commands - Implements Command::parse() -.
enum CommandResult parse_ifdef(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'ifdef' and 'ifndef' commands - Implements Command::parse() -.
enum CommandResult parse_echo(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'echo' command - Implements Command::parse() -.
enum CommandResult parse_unsubscribe_from(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'unsubscribe-from' command - Implements Command::parse() -.
enum CommandResult parse_unmailboxes(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'unmailboxes' command - Implements Command::parse() -.
enum CommandResult parse_unsubscribe(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'unsubscribe' command - Implements Command::parse() -.
enum CommandResult parse_unignore(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'unignore' command - Implements Command::parse() -.
enum CommandResult parse_finish(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'finish' command - Implements Command::parse() -.
enum CommandResult parse_unlists(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'unlists' command - Implements Command::parse() -.
enum CommandResult parse_subscribe_to(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'subscribe-to' command - Implements Command::parse() -.
enum CommandResult parse_group(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'group' and 'ungroup' commands - Implements Command::parse() -.
enum CommandResult parse_source(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'source' command - Implements Command::parse() -.
enum CommandResult parse_mailboxes(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'mailboxes' command - Implements Command::parse() -.
enum CommandResult parse_lists(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'lists' command - Implements Command::parse() -.
enum CommandResult parse_cd(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'cd' command - Implements Command::parse() -.
enum CommandResult parse_spam_list(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'spam' and 'nospam' commands - Implements Command::parse() -.
enum CommandResult parse_setenv(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'setenv' and 'unsetenv' commands - Implements Command::parse() -.
enum CommandResult parse_my_hdr(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'my_hdr' command - Implements Command::parse() -.
enum CommandResult parse_subscribe(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'subscribe' command - Implements Command::parse() -.
enum CommandResult parse_stailq(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse a list command - Implements Command::parse() -.
enum CommandResult parse_ignore(struct Buffer *buf, struct Buffer *s, intptr_t data, struct Buffer *err)
Parse the 'ignore' command - Implements Command::parse() -.
#define mutt_warning(...)
#define mutt_message(...)
#define mutt_debug(LEVEL,...)
Convenience wrapper for the gui headers.
struct HashElem * mutt_hash_insert(struct HashTable *table, const char *strkey, void *data)
Add a new element to the Hash Table (with string keys)
void * mutt_hash_find(const struct HashTable *table, const char *strkey)
Find the HashElem data in a Hash Table element using a key.
void mutt_hash_free(struct HashTable **ptr)
Free a hash table.
int imap_subscribe(char *path, bool subscribe)
Subscribe to a mailbox.
int mutt_extract_token(struct Buffer *dest, struct Buffer *tok, TokenFlags flags)
Extract one token from a string.
enum CommandResult mutt_parse_rc_line(const char *line, struct Buffer *err)
Parse a line of user config.
enum CommandResult mutt_parse_rc_buffer(struct Buffer *line, struct Buffer *token, struct Buffer *err)
Parse a line of user config.
const struct MenuFuncOp * km_get_table(enum MenuType mtype)
Lookup a Menu's functions.
struct ListNode * mutt_list_insert_head(struct ListHead *h, char *s)
Insert a string at the beginning of a List.
void mutt_list_free(struct ListHead *h)
Free a List AND its strings.
@ LL_DEBUG2
Log at debug level 2.
@ LL_DEBUG1
Log at debug level 1.
@ LL_NOTIFY
Log of notifications.
struct Mailbox * mailbox_new(void)
Create a new Mailbox.
int mailbox_gen(void)
Get the next generation number.
void mailbox_free(struct Mailbox **ptr)
Free a Mailbox.
@ NT_MAILBOX_CHANGE
Mailbox has been changed.
@ MUTT_MAILBOX_ANY
Match any Mailbox type.
@ MUTT_UNKNOWN
Mailbox wasn't recognised.
int mutt_monitor_add(struct Mailbox *m)
Add a watch for a mailbox.
int mutt_monitor_remove(struct Mailbox *m)
Remove a watch for a mailbox.
Monitor files for changes.
int mutt_ch_convert_string(char **ps, const char *from, const char *to, uint8_t flags)
Convert a string between encodings.
#define MUTT_ICONV_NO_FLAGS
No flags are set.
Convenience wrapper for the library headers.
bool notify_send(struct Notify *notify, enum NotifyType event_type, int event_subtype, void *event_data)
Send out a notification message.
void notify_free(struct Notify **ptr)
Free a notification handler.
bool mutt_path_tilde(char *buf, size_t buflen, const char *homedir)
Expand '~' in a path.
bool mutt_path_to_absolute(char *path, const char *reference)
Convert relative filepath to an absolute path.
int mutt_replacelist_remove(struct ReplaceList *rl, const char *pat)
Remove a pattern from a list.
void mutt_regexlist_free(struct RegexList *rl)
Free a RegexList object.
int mutt_regexlist_add(struct RegexList *rl, const char *str, uint16_t flags, struct Buffer *err)
Compile a regex string and add it to a list.
void mutt_replacelist_free(struct ReplaceList *rl)
Free a ReplaceList object.
int mutt_regexlist_remove(struct RegexList *rl, const char *str)
Remove a Regex from a list.
int mutt_replacelist_add(struct ReplaceList *rl, const char *pat, const char *templ, struct Buffer *err)
Add a pattern and a template to a list.
bool mutt_istr_equal(const char *a, const char *b)
Compare two strings, ignoring case.
char * mutt_str_dup(const char *str)
Copy a string, safely.
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
size_t mutt_str_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix.
size_t mutt_str_len(const char *a)
Calculate the length of a string, safely.
const char * mutt_str_getenv(const char *name)
Get an environment variable.
size_t mutt_str_copy(char *dest, const char *src, size_t dsize)
Copy a string into a buffer (guaranteeing NUL-termination)
char * mutt_str_replace(char **p, const char *s)
Replace one string with another.
bool mutt_istrn_equal(const char *a, const char *b, size_t num)
Check for equality of two strings ignoring case (to a maximum), safely.
Many unsorted constants and some structs.
#define MUTT_TOKEN_BACKTICK_VARS
Expand variables within backticks.
#define MUTT_TOKEN_MINUS
Treat '-' as a special.
#define MUTT_TOKEN_PLUS
Treat '+' as a special.
#define MUTT_TOKEN_QUOTE
Don't interpret quotes.
#define MUTT_TOKEN_SPACE
Don't treat whitespace as a term.
#define MUTT_TOKEN_NO_FLAGS
No flags are set.
#define MUTT_TOKEN_EQUAL
Treat '=' as a special.
#define MUTT_TOKEN_QUESTION
Treat '?' as a special.
struct Command * mutt_command_get(const char *s)
Get a Command by its name.
Definitions of NeoMutt commands.
@ MUTT_SET_INV
default is to invert all vars
@ MUTT_SET_SET
default is to set all vars
@ MUTT_SET_RESET
default is to reset all vars to default
@ MUTT_SET_UNSET
default is to unset all vars
Hundreds of global variables to back the user variables.
struct ListHead UserHeader
List of custom headers to add to outgoing emails.
void remove_from_stailq(struct ListHead *head, const char *str)
Remove an item, matching a string, from a List.
void mutt_buffer_expand_path(struct Buffer *buf)
Create the canonical path.
void add_to_stailq(struct ListHead *head, const char *str)
Add a string to a list.
char * mutt_expand_path(char *buf, size_t buflen)
Create the canonical path.
void mutt_sleep(short s)
Sleep for a while.
FILE * mutt_open_read(const char *path, pid_t *thepid)
Run a command to read from.
Some miscellaneous functions.
bool mx_ac_add(struct Account *a, struct Mailbox *m)
Add a Mailbox to an Account - Wrapper for MxOps::ac_add()
struct Mailbox * mx_mbox_find(struct Account *a, const char *path)
Find a Mailbox on an Account.
struct Account * mx_ac_find(struct Mailbox *m)
Find the Account owning a Mailbox.
int mx_path_canon2(struct Mailbox *m, const char *folder)
Canonicalise the path to realpath.
void myvar_del(const char *var)
Unset the value of a "my_" variable.
const char * myvar_get(const char *var)
Get the value of a "my_" variable.
void myvar_set(const char *var, const char *val)
Set the value of a "my_" variable.
void myvar_append(const char *var, const char *val)
Append to the value of a "my_" variable.
Handling of personal config ('my' variables)
void neomutt_mailboxlist_clear(struct MailboxList *ml)
Free a Mailbox List.
bool neomutt_account_add(struct NeoMutt *n, struct Account *a)
Add an Account to the global list.
size_t neomutt_mailboxlist_get_all(struct MailboxList *head, struct NeoMutt *n, enum MailboxType type)
Get a List of all Mailboxes.
@ NT_MAILBOX
Mailbox has changed, NotifyMailbox, EventMailbox.
@ NT_HEADER
A header has changed, NotifyHeader EventHeader.
Handling of global boolean variables.
bool OptForceRefresh
(pseudo) refresh even during macros
void mutt_buffer_pool_release(struct Buffer **pbuf)
Free a Buffer from the pool.
struct Buffer * mutt_buffer_pool_get(void)
Get a Buffer from the pool.
int quad_he_toggle(struct ConfigSubset *sub, struct HashElem *he, struct Buffer *err)
Toggle the value of a quad.
#define TAILQ_FOREACH(var, head, field)
#define STAILQ_REMOVE_HEAD(head, field)
#define STAILQ_HEAD_INITIALIZER(head)
#define STAILQ_FIRST(head)
#define STAILQ_FOREACH(var, head, field)
#define STAILQ_EMPTY(head)
#define TAILQ_HEAD_INITIALIZER(head)
#define STAILQ_FOREACH_SAFE(var, head, field, tvar)
#define TAILQ_EMPTY(head)
#define CSR_SUCCESS
Action completed successfully.
A group of associated Mailboxes.
enum MailboxType type
Type of Mailboxes this Account contains.
char * name
Name of Account.
struct Notify * notify
Notifications: NotifyAccount, EventAccount.
struct ConfigSubset * sub
Inherited config items.
String manipulation buffer.
char * dptr
Current read/write position.
size_t dsize
Length of data.
char * data
Pointer to data.
struct ConfigSet * cs
Parent ConfigSet.
An Event that happened to a Mailbox.
The item stored in a Hash Table.
union HashKey key
Key representing the data.
int type
Type of data stored in Hash Table, e.g. DT_STRING.
void * data
User-supplied data.
struct Mailbox * mailbox
Mailbox in the list.
char * realpath
Used for duplicate detection, context comparison, and the sidebar.
enum MailboxType type
Mailbox type.
char * name
A short name for the Mailbox.
struct Buffer pathbuf
Path of the Mailbox.
struct Account * account
Account that owns this Mailbox.
bool visible
True if a result of "mailboxes".
int opened
Number of times mailbox is opened.
int gen
Generation number, for sorting.
const char * name
String value.
Container for Accounts, Notifications.
struct AccountList accounts
List of all Accounts.
struct Notify * notify
Notifications handler.
struct ConfigSubset * sub
Inherited config items.
int cs_subset_he_string_minus_equals(const struct ConfigSubset *sub, struct HashElem *he, const char *value, struct Buffer *err)
Remove from a config item by string.
int cs_subset_he_string_get(const struct ConfigSubset *sub, struct HashElem *he, struct Buffer *result)
Get a config item as a string.
int cs_subset_he_native_set(const struct ConfigSubset *sub, struct HashElem *he, intptr_t value, struct Buffer *err)
Natively set the value of a HashElem config item.
int cs_subset_he_reset(const struct ConfigSubset *sub, struct HashElem *he, struct Buffer *err)
Reset a config item to its initial value.
struct HashElem * cs_subset_lookup(const struct ConfigSubset *sub, const char *name)
Find an inherited config item.
int cs_subset_he_string_set(const struct ConfigSubset *sub, struct HashElem *he, const char *value, struct Buffer *err)
Set a config item by string.
struct HashElem ** get_elem_list(struct ConfigSet *cs)
Create a sorted list of all config items.
void cs_subset_free(struct ConfigSubset **ptr)
Free a Config Subset.
int cs_subset_he_string_plus_equals(const struct ConfigSubset *sub, struct HashElem *he, const char *value, struct Buffer *err)
Add to a config item by string.
const struct Mapping MenuNames[]
Menu name lookup table.
#define DTYPE(x)
Mask for the Data Type.
#define DT_QUAD
quad-option (no/yes/ask-no/ask-yes)
#define DT_BOOL
boolean option
#define DT_PATH_DIR
Path is a directory.
#define DT_PATH_FILE
Path is a file.
#define DT_PATH
a path to a file/directory
const char * strkey
String key.
bool feature_enabled(const char *name)
Test if a compile-time feature is enabled.
Display version and copyright about NeoMutt.