129 for (
const struct MxOps **ops =
MxOps; *ops; ops++)
130 if ((*ops)->type ==
type)
150 const bool is_spool = ua && ub && (ua->
scheme == ub->
scheme) &&
175 return access(
path, flags);
190 struct stat st = { 0 };
260 const bool new_account = !a;
299 const bool newly_linked_account = !m->
account;
300 if (newly_linked_account)
404 if (newly_linked_account)
492 struct stat st = { 0 };
493 struct stat stc = { 0 };
519 if (delmsgcount == 0)
531 mutt_error(ngettext(
"message not deleted",
"messages not deleted", delmsgcount));
535 if ((lstat(
mailbox_path(m), &stc) == 0) && (stc.st_ino == st.st_ino) &&
536 (stc.st_dev == st.st_dev) && (stc.st_rdev == st.st_rdev))
548 const bool old_append = m_trash->
append;
557 for (
int i = first_del; i < m->
msg_count; i++)
570 m_trash->
append = old_append;
578 m_trash->
append = old_append;
604 if (c_mail_check_recent && !m->
peekonly)
613 int i, read_msgs = 0;
617 struct Buffer *mbox = NULL;
651 if ((read_msgs != 0) && (c_move !=
MUTT_NO))
675 ngettext(
"Move %d read message to %s?",
"Move %d read messages to %s?", read_msgs),
743 struct Email **ep = NULL;
807 if (purge && (m->
msg_deleted != 0) && (m != m_trash))
917 char buf[512] = { 0 };
918 char tmp[768] = { 0 };
920 snprintf(tmp,
sizeof(tmp),
_(
" Press '%s' to toggle write"), buf);
922 mutt_str_copy(tmp,
_(
"Use 'toggle-write' to re-enable write"),
sizeof(tmp));
924 mutt_error(
_(
"Mailbox is marked unwritable. %s"), tmp);
942 char buf[128] = { 0 };
944 snprintf(buf,
sizeof(buf),
945 ngettext(
"Purge %d deleted message?",
"Purge %d deleted messages?", m->
msg_deleted),
978 if (purge && (m->
msg_deleted != 0) && (m != m_trash))
998 mutt_message(
_(
"%d kept, %d deleted"), msgcount - deleted, deleted);
1086 char buf[64] = { 0 };
1182 if (!m || !ptr || !*ptr)
1216 req_size =
ROUND_UP(req_size + 1, grow);
1218 const size_t s =
MAX(
sizeof(
struct Email *),
sizeof(
int));
1219 if ((req_size * s) < (m->
email_max * s))
1236 for (
int i = m->
email_max; i < req_size; i++)
1282 mutt_message(
_(
"Folder doesn't support tagging, aborting"));
1296 if (!m || !e || !tags)
1302 mutt_message(
_(
"Folder doesn't support tagging, aborting"));
1329 for (
const struct MxOps **ops =
MxOps; *ops; ops++)
1331 if ((*ops)->is_local)
1333 rc = (*ops)->path_probe(path, NULL);
1338 struct stat st = { 0 };
1339 if (stat(path, &st) != 0)
1341 mutt_debug(
LL_DEBUG1,
"unable to stat %s: %s (errno %d)\n", path, strerror(errno), errno);
1345 if (S_ISFIFO(st.st_mode))
1347 mutt_error(
_(
"Can't open %s: it is a pipe"), path);
1352 for (
const struct MxOps **ops =
MxOps; *ops; ops++)
1354 if (!(*ops)->is_local)
1356 rc = (*ops)->path_probe(path, &st);
1372 for (
size_t i = 0; i < 3; i++)
1375 if ((
buf_at(path, 0) ==
'!') && (
buf_at(path, 1) ==
'!'))
1377 if (((
buf_at(path, 2) ==
'/') || (
buf_at(path, 2) ==
'\0')))
1382 else if ((
buf_at(path, 0) ==
'+') || (
buf_at(path, 0) ==
'='))
1385 if ((folder_len > 0) && (folder[folder_len - 1] !=
'/'))
1387 path->
data[0] =
'/';
1395 else if ((
buf_at(path, 1) ==
'/') || (
buf_at(path, 1) ==
'\0'))
1397 if (
buf_at(path, 0) ==
'!')
1402 else if (
buf_at(path, 0) ==
'-')
1406 else if (
buf_at(path, 0) ==
'<')
1411 else if (
buf_at(path, 0) ==
'>')
1416 else if (
buf_at(path, 0) ==
'^')
1420 else if (
buf_at(path, 0) ==
'~')
1425 else if (
buf_at(path, 0) ==
'@')
1549 struct Url *url_p = NULL;
1550 struct Url *url_a = NULL;
1814 mutt_error(
_(
"Can't toggle write on a readonly mailbox"));
1821 mutt_message(
_(
"Changes to folder will be written on folder exit"));
void mutt_addrlist_copy(struct AddressList *dst, const struct AddressList *src, bool prune)
Copy a list of addresses into another list.
struct AddressList * alias_lookup(const char *name)
Find an Alias.
#define ARRAY_ADD(head, elem)
Add an element at the end of the array.
#define ARRAY_FOREACH(elem, head)
Iterate over all elements of the array.
#define ARRAY_FREE(head)
Release all memory.
#define ARRAY_HEAD_INITIALIZER
Static initializer for arrays.
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
bool buf_is_empty(const struct Buffer *buf)
Is the Buffer empty?
char buf_at(const struct Buffer *buf, size_t offset)
Return the character at the given offset.
void buf_free(struct Buffer **ptr)
Deallocates a buffer.
void buf_inline_replace(struct Buffer *buf, size_t pos, size_t len, const char *str)
struct Buffer * buf_new(const char *str)
Allocate a new Buffer.
size_t buf_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
bool mutt_comp_can_append(struct Mailbox *m)
Can we append to this path?
Compressed mbox local mailbox type.
const char * cs_subset_string(const struct ConfigSubset *sub, const char *name)
Get a string config item by name.
enum QuadOption cs_subset_quad(const struct ConfigSubset *sub, const char *name)
Get a quad-value config item by name.
unsigned char cs_subset_enum(const struct ConfigSubset *sub, const char *name)
Get a enumeration config item by name.
short cs_subset_number(const struct ConfigSubset *sub, const char *name)
Get a number config item by name.
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Convenience wrapper for the config headers.
char * HomeDir
User's home directory.
int mutt_append_message(struct Mailbox *m_dst, struct Mailbox *m_src, struct Email *e, struct Message *msg, CopyMessageFlags cmflags, CopyHeaderFlags chflags)
Append a message.
Duplicate the structure of an entire email.
#define CH_UPDATE_LEN
Update Lines: and Content-Length:
#define MUTT_CM_NO_FLAGS
No flags are set.
#define CH_NO_FLAGS
No flags are set.
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.
bool account_mailbox_add(struct Account *a, struct Mailbox *m)
Add a Mailbox to an Account.
void account_free(struct Account **ptr)
Free an Account.
Convenience wrapper for the core headers.
struct Mailbox * mailbox_new(void)
Create a new Mailbox.
void mailbox_free(struct Mailbox **ptr)
Free a Mailbox.
void mailbox_changed(struct Mailbox *m, enum NotifyMailbox action)
Notify observers of a change to a Mailbox.
@ NT_MAILBOX_UNTAG
Clear the 'last-tagged' pointer.
@ NT_MAILBOX_CHANGE
Mailbox has been changed.
@ NT_MAILBOX_RESORT
Email list needs resorting.
@ NT_MAILBOX_INVALID
Email list was changed.
@ NT_MAILBOX_UPDATE
Update internal tables.
static const char * mailbox_path(const struct Mailbox *m)
Get the Mailbox's path string.
MailboxType
Supported mailbox formats.
@ MUTT_MMDF
'mmdf' Mailbox type
@ MUTT_MAILBOX_ERROR
Error occurred examining Mailbox.
@ MUTT_MH
'MH' Mailbox type
@ MUTT_NNTP
'NNTP' (Usenet) Mailbox type
@ MUTT_IMAP
'IMAP' Mailbox type
@ MUTT_MBOX
'mbox' Mailbox type
@ MUTT_COMPRESSED
Compressed file Mailbox type.
@ MUTT_UNKNOWN
Mailbox wasn't recognised.
@ MUTT_MAILDIR
'Maildir' Mailbox type
struct Message * message_new(void)
Create a new Message.
void message_free(struct Message **ptr)
Free a Message.
struct Email * email_new(void)
Create a new Email.
void email_free(struct Email **ptr)
Free an Email.
Structs that make up an email.
struct Envelope * mutt_env_new(void)
Create a new Envelope.
Manage where the email is piped to external commands.
@ SAVE_MOVE
Move message to another mailbox, removing the original.
void mutt_file_unlink_empty(const char *path)
Delete a file if it's empty.
void mutt_set_flag(struct Mailbox *m, struct Email *e, enum MessageType flag, bool bf, bool upd_mbox)
Set a flag on an email.
char * LastFolder
Previously selected mailbox.
bool OptNeedRescore
(pseudo) set when the 'score' command is used
bool OptForceRefresh
(pseudo) refresh even during macros
char * CurrentFolder
Currently selected mailbox.
char * Username
User's login name.
bool OptSortSubthreads
(pseudo) used when $sort_aux changes
#define mutt_message(...)
#define mutt_debug(LEVEL,...)
const struct MxOps MxNntpOps
NNTP Mailbox - Implements MxOps -.
const struct MxOps MxMboxOps
Mbox Mailbox - Implements MxOps -.
const struct MxOps MxNotmuchOps
Notmuch Mailbox - Implements MxOps -.
const struct MxOps MxMhOps
MH Mailbox - Implements MxOps -.
const struct MxOps MxPopOps
POP Mailbox - Implements MxOps -.
const struct MxOps MxImapOps
IMAP Mailbox - Implements MxOps -.
const struct MxOps MxCompOps
Compressed Mailbox - Implements MxOps -.
const struct MxOps MxMmdfOps
MMDF Mailbox - Implements MxOps -.
const struct MxOps MxMaildirOps
Maildir Mailbox - Implements MxOps -.
enum MailboxType imap_path_probe(const char *path, const struct stat *st)
Is this an IMAP Mailbox? - Implements MxOps::path_probe() -.
Convenience wrapper for the gui headers.
void mutt_hash_free(struct HashTable **ptr)
Free a hash table.
void mutt_default_save(struct Buffer *path, struct Email *e)
Find the default save path for an email.
char * mutt_find_hook(HookFlags type, const char *pat)
Find a matching hook.
Parse and execute user-defined hooks.
#define MUTT_MBOX_HOOK
mbox-hook: move messages after reading them
int imap_mxcmp(const char *mx1, const char *mx2)
Compare mailbox names, giving priority to INBOX.
int imap_copy_messages(struct Mailbox *m, struct EmailArray *ea, const char *dest, enum MessageSaveOpt save_opt)
Server COPY messages to another folder.
int imap_fast_trash(struct Mailbox *m, const char *dest)
Use server COPY command to copy deleted messages to trash.
enum MxStatus imap_sync_mailbox(struct Mailbox *m, bool expunge, bool close)
Sync all the changes to the server.
int imap_access(const char *path)
Check permissions on an IMAP mailbox with a new connection.
struct Keymap * km_find_func(enum MenuType mtype, int func)
Find a function's mapping in a Menu.
int km_expand_key(char *s, size_t len, struct Keymap *map)
Get the key string bound to a Keymap.
@ LL_DEBUG2
Log at debug level 2.
@ LL_DEBUG1
Log at debug level 1.
Maildir local mailbox type.
void mutt_exit(int code)
Leave NeoMutt NOW.
void mbox_reset_atime(struct Mailbox *m, struct stat *st)
Reset the access time on the mailbox file.
void * mutt_mem_calloc(size_t nmemb, size_t size)
Allocate zeroed memory on the heap.
void mutt_mem_realloc(void *ptr, size_t size)
Resize a block of memory on the heap.
#define ROUND_UP(NUM, STEP)
#define CLAMP(val, lo, hi)
size_t mutt_date_localtime_format_locale(char *buf, size_t buflen, const char *format, time_t t, locale_t loc)
Format localtime using a given locale.
time_t mutt_date_now(void)
Return the number of seconds since the Unix epoch.
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.
bool mutt_path_canon(struct Buffer *path, const char *homedir, bool is_dir)
Create the canonical version of a path.
bool mutt_istr_equal(const char *a, const char *b)
Compare two strings, ignoring case.
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
size_t mutt_str_len(const char *a)
Calculate the length of a string, safely.
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.
Many unsorted constants and some structs.
@ MUTT_PURGE
Messages to be purged (bypass trash)
@ MUTT_TAG
Tagged messages.
@ MUTT_DELETE
Messages to be deleted.
void mutt_clear_error(void)
Clear the message line (bottom line of screen)
void mutt_mailbox_set_notified(struct Mailbox *m)
Note when the user was last notified of new mail.
Mailbox helper functions.
void mutt_sleep(short s)
Sleep for a while.
void buf_expand_path(struct Buffer *buf)
Create the canonical path.
int mutt_save_confirm(const char *s, struct stat *st)
Ask the user to save.
Some miscellaneous functions.
void mx_alloc_memory(struct Mailbox *m, int req_size)
Create storage for the emails.
int mx_tags_edit(struct Mailbox *m, const char *tags, struct Buffer *buf)
Start the tag editor of the mailbox.
int mx_msg_close(struct Mailbox *m, struct Message **ptr)
Close a message.
int mx_ac_remove(struct Mailbox *m, bool keep_account)
Remove a Mailbox from an Account and delete Account if empty.
int mx_access(const char *path, int flags)
Wrapper for access, checks permissions on a given mailbox.
const struct EnumDef MboxTypeDef
Data for the $mbox_type enumeration.
static enum MxStatus sync_mailbox(struct Mailbox *m)
Save changes to disk.
static int trash_append(struct Mailbox *m)
Move deleted mails to the trash folder.
int mx_msg_padding_size(struct Mailbox *m)
Bytes of padding between messages - Wrapper for MxOps::msg_padding_size()
void mx_fastclose_mailbox(struct Mailbox *m, bool keep_account)
Free up memory associated with the Mailbox.
enum MxStatus mx_mbox_check_stats(struct Mailbox *m, uint8_t flags)
Check the statistics for a mailbox - Wrapper for MxOps::mbox_check_stats()
int mx_path_canon(struct Buffer *path, const char *folder, enum MailboxType *type)
Canonicalise a mailbox path - Wrapper for MxOps::path_canon()
static bool mutt_is_spool(const char *str)
Is this the spool_file?
bool mx_mbox_open(struct Mailbox *m, OpenMailboxFlags flags)
Open a mailbox and parse it.
struct Mailbox * mx_mbox_find(struct Account *a, const char *path)
Find a Mailbox on an Account.
struct Mailbox * mx_resolve(const char *path_or_name)
Get a Mailbox from either a path or name.
static struct Mailbox * mx_mbox_find_by_name(const char *name)
Find a Mailbox with given name.
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_find2(const char *path)
Find a Mailbox on an Account.
struct Message * mx_msg_open(struct Mailbox *m, struct Email *e)
Return a stream pointer for a message.
const struct MxOps * mx_get_ops(enum MailboxType type)
Get mailbox operations.
bool mx_tags_is_supported(struct Mailbox *m)
Return true if mailbox support tagging.
int mx_tags_commit(struct Mailbox *m, struct Email *e, const char *tags)
Save tags to the Mailbox - Wrapper for MxOps::tags_commit()
int mx_save_hcache(struct Mailbox *m, struct Email *e)
Save message to the header cache - Wrapper for MxOps::msg_save_hcache()
static const struct Mapping MboxTypeMap[]
Lookup table of mailbox types.
bool mx_mbox_ac_link(struct Mailbox *m)
Link a Mailbox to an existing or new Account.
struct Account * mx_ac_find(struct Mailbox *m)
Find the Account owning a Mailbox.
enum MailboxType mx_type(struct Mailbox *m)
Return the type of the Mailbox.
int mx_path_is_empty(struct Buffer *path)
Is the mailbox empty.
struct Message * mx_msg_open_new(struct Mailbox *m, const struct Email *e, MsgOpenFlags flags)
Open a new message.
int mx_toggle_write(struct Mailbox *m)
Toggle the mailbox's readonly flag.
int mx_msg_commit(struct Mailbox *m, struct Message *msg)
Commit a message to a folder - Wrapper for MxOps::msg_commit()
static struct Mailbox * mx_mbox_find_by_name_ac(struct Account *a, const char *name)
Find a Mailbox with given name under an Account.
enum MailboxType mx_path_probe(const char *path)
Find a mailbox that understands a path.
struct Mailbox * mx_path_resolve(const char *path)
Get a Mailbox for a path.
int mx_path_canon2(struct Mailbox *m, const char *folder)
Canonicalise the path to realpath.
enum MxStatus mx_mbox_check(struct Mailbox *m)
Check for new mail - Wrapper for MxOps::mbox_check()
enum MxStatus mx_mbox_sync(struct Mailbox *m)
Save changes to mailbox.
static bool mx_open_mailbox_append(struct Mailbox *m, OpenMailboxFlags flags)
Open a mailbox for appending.
enum MxStatus mx_mbox_close(struct Mailbox *m)
Save changes and close mailbox.
uint8_t MsgOpenFlags
Flags for mx_msg_open_new(), e.g. MUTT_ADD_FROM.
#define MUTT_ADD_FROM
add a From_ line
#define MUTT_SET_DRAFT
set the message draft flag
#define MUTT_READONLY
Open in read-only mode.
uint8_t OpenMailboxFlags
Flags for mutt_open_mailbox(), e.g. MUTT_NOSORT.
#define MUTT_NEWFOLDER
Create a new folder - same as MUTT_APPEND, but uses mutt_file_fopen() with mode "w" for mbox-style fo...
#define MUTT_APPEND
Open mailbox for appending messages.
#define MUTT_QUIET
Do not print any messages.
MxOpenReturns
Return values for mbox_open()
@ MX_OPEN_ABORT
Open was aborted.
@ MX_OPEN_OK
Open succeeded.
#define MUTT_PEEK
Revert atime back after taking a look (if applicable)
#define MUTT_NOSORT
Do not sort the mailbox after opening it.
#define MUTT_APPENDNEW
Set in mx_open_mailbox_append if the mailbox doesn't exist.
MxStatus
Return values from mbox_check(), mbox_check_stats(), mbox_sync(), and mbox_close()
@ MX_STATUS_ERROR
An error occurred.
@ MX_STATUS_OK
No changes.
@ MX_STATUS_REOPENED
Mailbox was reopened.
@ MX_STATUS_NEW_MAIL
New mail received in Mailbox.
bool neomutt_account_add(struct NeoMutt *n, struct Account *a)
Add an Account to the global list.
bool neomutt_account_remove(struct NeoMutt *n, const struct Account *a)
Remove an Account from the global list.
Usenet network mailbox type; talk to an NNTP server.
struct NntpMboxData * mutt_newsgroup_catchup(struct Mailbox *m, struct NntpAccountData *adata, char *group)
Catchup newsgroup.
Nntp-specific Mailbox data.
@ NT_MAILBOX
Mailbox has changed, NotifyMailbox, EventMailbox.
Notmuch virtual mailbox type.
struct Buffer * buf_pool_get(void)
Get a Buffer from the pool.
void buf_pool_release(struct Buffer **ptr)
Return a Buffer to the pool.
Prototypes for many functions.
QuadOption
Possible values for a quad-option.
@ MUTT_ABORT
User aborted the question (with Ctrl-G)
@ MUTT_NO
User answered 'No', or assume 'No'.
@ MUTT_YES
User answered 'Yes', or assume 'Yes'.
enum QuadOption query_quadoption(const char *prompt, struct ConfigSubset *sub, const char *name)
Ask the user a quad-question.
#define TAILQ_FOREACH(var, head, field)
#define STAILQ_FOREACH(var, head, field)
#define TAILQ_FIRST(head)
#define STAILQ_EMPTY(head)
#define TAILQ_EMPTY(head)
A group of associated Mailboxes.
enum MailboxType type
Type of Mailboxes this Account contains.
struct MailboxList mailboxes
List of Mailboxes.
struct Buffer * mailbox
Mailbox and host address.
String manipulation buffer.
char * data
Pointer to data.
The envelope/body of an email.
bool purge
Skip trash folder when deleting.
struct Envelope * env
Envelope information.
bool old
Email is seen, but unread.
bool flagged
Marked important?
bool replied
Email has been replied to.
char * path
Path of Email (for local Mailboxes)
bool deleted
Email is deleted.
bool tagged
Email is tagged.
time_t received
Time when the message was placed in the mailbox.
struct AddressList return_path
Return path for the Email.
struct AddressList to
Email's 'To' list.
struct AddressList sender
Email's sender.
struct AddressList from
Email's 'From' list.
An Event that happened to a Mailbox.
struct Mailbox * mailbox
Mailbox in the list.
int vcount
The number of virtual messages.
bool changed
Mailbox has been modified.
bool has_new
Mailbox has new mail.
char * realpath
Used for duplicate detection, context comparison, and the sidebar.
bool append
Mailbox is opened in append mode.
int * v2r
Mapping from virtual to real msgno.
const struct MxOps * mx_ops
MXAPI callback functions.
int msg_new
Number of new messages.
time_t last_checked
Last time we checked this mailbox for new mail.
int msg_count
Total number of messages.
AclFlags rights
ACL bits, see AclFlags.
int email_max
Size of emails array.
enum MailboxType type
Mailbox type.
void * mdata
Driver specific data.
struct HashTable * subj_hash
Hash Table: "subject" -> Email.
struct Email ** emails
Array of Emails.
char * name
A short name for the Mailbox.
struct Notify * notify
Notifications: NotifyMailbox, EventMailbox.
struct HashTable * id_hash
Hash Table: "message-id" -> Email.
struct Buffer pathbuf
Path of the Mailbox.
bool peekonly
Just taking a glance, revert atime.
int msg_deleted
Number of deleted messages.
struct Account * account
Account that owns this Mailbox.
bool dontwrite
Don't write the mailbox on close.
off_t size
Size of the Mailbox.
struct HashTable * label_hash
Hash Table: "x-labels" -> Email.
bool visible
True if a result of "mailboxes".
int msg_flagged
Number of flagged messages.
int opened
Number of times mailbox is opened.
bool readonly
Don't allow changes to the mailbox.
int msg_tagged
How many messages are tagged?
bool verbose
Display status messages?
int msg_unread
Number of unread messages.
Mapping between user-readable string and a constant.
A local copy of an email.
FILE * fp
pointer to the message data
char * path
path to temp file
bool draft
Message has been read.
bool replied
Message has been replied to.
time_t received
Time at which this message was received.
bool write
nonzero if message is open for writing
bool flagged
Message is flagged.
bool read
Message has been read.
struct Message::@0 flags
Flags for the Message.
int(* path_is_empty)(struct Buffer *path)
bool(* msg_open)(struct Mailbox *m, struct Message *msg, struct Email *e)
int(* tags_commit)(struct Mailbox *m, struct Email *e, const char *buf)
int(* msg_save_hcache)(struct Mailbox *m, struct Email *e)
enum MailboxType type
Mailbox type, e.g. MUTT_IMAP.
int(* msg_padding_size)(struct Mailbox *m)
bool(* ac_owns_path)(struct Account *a, const char *path)
int(* tags_edit)(struct Mailbox *m, const char *tags, struct Buffer *buf)
int(* msg_commit)(struct Mailbox *m, struct Message *msg)
enum MxStatus(* mbox_check_stats)(struct Mailbox *m, CheckStatsFlags flags)
bool(* ac_add)(struct Account *a, struct Mailbox *m)
enum MxOpenReturns(* mbox_open)(struct Mailbox *m)
int(* msg_close)(struct Mailbox *m, struct Message *msg)
bool(* msg_open_new)(struct Mailbox *m, struct Message *msg, const struct Email *e)
int(* path_canon)(struct Buffer *path)
enum MxStatus(* mbox_close)(struct Mailbox *m)
enum MxStatus(* mbox_sync)(struct Mailbox *m)
bool(* mbox_open_append)(struct Mailbox *m, OpenMailboxFlags flags)
enum MxStatus(* mbox_check)(struct Mailbox *m)
Container for Accounts, Notifications.
struct AccountList accounts
List of all Accounts.
struct ConfigSubset * sub
Inherited config items.
locale_t time_c_locale
Current locale but LC_TIME=C.
NNTP-specific Mailbox data -.
A parsed URL proto://user:password@host:port/path?a=1&b=2
enum UrlScheme scheme
Scheme, e.g. U_SMTPS.
int cs_subset_str_native_set(const struct ConfigSubset *sub, const char *name, intptr_t value, struct Buffer *err)
Natively set the value of a string config item.
@ MENU_INDEX
Index panel (list of emails)
struct Url * url_parse(const char *src)
Fill in Url.
void url_free(struct Url **ptr)
Free the contents of a URL.