#define R_RESORT_BOTH (R_RESORT|R_RESORT_SUB)
struct option_t {
- char *option;
+ const char *option;
short type;
short flags;
unsigned long data;
- char* init;
+ const char *init;
};
#define UL (unsigned long)
/* build complete documentation */
#ifdef _MAKEDOC
-# ifndef USE_IMAP
-# define USE_IMAP
-# endif
# ifndef MIXMASTER
# define MIXMASTER "mixmaster"
# endif
-# ifndef USE_POP
-# define USE_POP
-# endif
# ifndef USE_SSL
# define USE_SSL
# endif
-# ifndef USE_SOCKET
-# define USE_SOCKET
-# endif
# ifndef USE_LIBESMTP
# define USE_LIBESMTP
# endif
# ifndef USE_DOTLOCK
# define USE_DOTLOCK
# endif
-# ifndef DL_STANDALONE
-# define DL_STANDALONE
-# endif
# ifndef USE_HCACHE
# define USE_HCACHE
# endif
** .dt %m .dd major MIME type
** .dt %M .dd MIME subtype
** .dt %n .dd attachment number
+ ** .dt %Q .dd "Q", if MIME part qualifies for attachment counting
** .dt %s .dd size
** .dt %t .dd tagged flag
** .dt %T .dd graphic tree characters
** .dt %u .dd unlink (=to delete) flag
+ ** .dt %X .dd number of qualifying MIME parts in this part and its children
** .dt %>X .dd right justify the rest of the string and pad with character "X"
** .dt %|X .dd pad to the end of the line with character "X"
** .de
** When \fIunset\fP, Mutt-ng will not collapse a thread if it contains any
** unread messages.
*/
+ {"count_attachments", DT_BOOL, R_NONE, OPTCOUNTATTACH, "yes"},
+ /*
+ ** .pp
+ ** This variable controls whether attachments should be counted for $$$index_format
+ ** and its \fT%X\fP expando or not. As for scoring, this variable can be used to
+ ** selectively turn counting on or off instead of removing and re-adding rules as
+ ** prefered because counting requires full loading of messages.
+ ** .pp
+ ** If it is \fIset\fP and rules were defined via the \fTattachments\fP and/or
+ ** \fTunattachments\fP commands, counting will be done. If it is \fIunset\fP no
+ ** counting will be done regardless whether rules were defined or not.
+ */
{"uncollapse_jump", DT_BOOL, R_NONE, OPTUNCOLLAPSEJUMP, "no" },
/*
** .pp
** is viewed it is passed as standard input to $$display_filter, and the
** filtered message is read from the standard output.
*/
-#if defined(DL_STANDALONE) && defined(USE_DOTLOCK)
+#if defined(USE_DOTLOCK)
{"dotlock_program", DT_PATH, R_NONE, UL &MuttDotlock, "$muttng_bindir/muttng_dotlock"},
/*
** .pp
- ** Availability: Standalone and Dotlock
+ ** Availability: Dotlock
**
** .pp
** Contains the path of the \fTmuttng_dotlock(1)\fP binary to be used by
/*
** .pp
** This variable controls whether Mutt-ng, when sorting by threads, threads
- ** messages with the same \fTMessage-Id:\fP header field together.
+ ** messages with the same \fTMessage-ID:\fP header field together.
** If it is \fIset\fP, it will indicate that it thinks they are duplicates
** of each other with an equals sign in the thread diagram.
*/
/*
** .pp
** Specifies the hostname to use after the ``\fT@\fP'' in local e-mail
- ** addresses and during generation of \fTMessage-Id:\fP headers.
+ ** addresses and during generation of \fTMessage-ID:\fP headers.
** .pp
** Please be sure to really know what you are doing when changing this variable
** to configure a custom domain part of Message-IDs.
** mailing list when this option is set, use the \fIlist-reply\fP
** function; \fIgroup-reply\fP will reply to both the sender and the
** list.
+ ** Remember: This option works only for mailing lists which are explicitly set in your muttngrc
+ ** configuration file.
*/
-#ifdef USE_IMAP
{"imap_authenticators", DT_STR, R_NONE, UL &ImapAuthenticators, "" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** This is a colon-delimited list of authentication methods Mutt-ng may
** attempt to use to log in to an IMAP server, in the order Mutt-ng should
** your server on connection, and add them to the set of mailboxes
** it polls for new mail. See also the ``$mailboxes'' command.
*/
-
{"imap_delim_chars", DT_STR, R_NONE, UL &ImapDelimChars, "/."},
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** This contains the list of characters which you would like to treat
** as folder separators for displaying IMAP paths. In particular it
*/
{"imap_headers", DT_STR, R_INDEX, UL &ImapHeaders, "" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** Mutt-ng requests these header fields in addition to the default headers
** (``DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE
*/
{"imap_home_namespace", DT_STR, R_NONE, UL &ImapHomeNamespace, "" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** You normally want to see your personal folders alongside
** your \fTINBOX\fP in the IMAP browser. If you see something else, you may set
*/
{"imap_keepalive", DT_NUM, R_NONE, UL &ImapKeepalive, "900" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** This variable specifies the maximum amount of time in seconds that Mutt-ng
** will wait before polling open IMAP connections, to prevent the server
*/
{"imap_login", DT_STR, R_NONE, UL &ImapLogin, "" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** Your login name on the IMAP server.
** .pp
*/
{"imap_list_subscribed", DT_BOOL, R_NONE, OPTIMAPLSUB, "no" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** This variable configures whether IMAP folder browsing will look for
** only subscribed folders or all folders. This can be toggled in the
*/
{"imap_pass", DT_STR, R_NONE, UL &ImapPass, "" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** Specifies the password for your IMAP account. If \fIunset\fP, Mutt-ng will
** prompt you for your password when you invoke the fetch-mail function.
*/
{"imap_passive", DT_BOOL, R_NONE, OPTIMAPPASSIVE, "yes" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** When \fIset\fP, Mutt-ng will not open new IMAP connections to check for new
** mail. Mutt-ng will only check for new mail over existing IMAP
*/
{"imap_peek", DT_BOOL, R_NONE, OPTIMAPPEEK, "yes" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** If \fIset\fP, Mutt-ng will avoid implicitly marking your mail as read whenever
** you fetch a message from the server. This is generally a good thing,
*/
{"imap_reconnect", DT_QUAD, R_NONE, OPT_IMAPRECONNECT, "ask-yes" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** Controls whether or not Mutt-ng will try to reconnect to IMAP server when
** the connection is lost.
*/
{"imap_servernoise", DT_BOOL, R_NONE, OPTIMAPSERVERNOISE, "yes" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** When \fIset\fP, Mutt-ng will display warning messages from the IMAP
** server as error messages. Since these messages are often
*/
{"imap_user", DT_STR, R_NONE, UL &ImapUser, "" },
/*
- ** .pp
- ** Availability: IMAP
- **
** .pp
** The name of the user whose mail you intend to access on the IMAP
** server.
** .pp
** This variable defaults to your user name on the local machine.
*/
-#endif
{"implicit_autoview", DT_BOOL, R_NONE, OPTIMPLICITAUTOVIEW, "no" },
/*
** .pp
** .dt %u .dd user (login) name of the author
** .dt %v .dd first name of the author, or the recipient if the message is from you
** .dt %W .dd name of organization of author (`organization:' field)
+ ** .dt %X .dd number of attachments
** .dt %y .dd `x-label:' field, if present
** .dt %Y .dd `x-label' field, if present, and (1) not at part of a thread tree,
** (2) at the top of a thread, or (3) `x-label' is different from
** The locale used by \fTstrftime(3)\fP to format dates. Legal values are
** the strings your system accepts for the locale variable \fTLC_TIME\fP.
*/
- {"list_reply", DT_QUAD, R_NONE, OPT_LISTREPLY, "no" },
+ {"force_list_reply", DT_QUAD, R_NONE, OPT_LISTREPLY, "ask-no" },
/*
** .pp
- ** When \fIset\fP, address replies to the mailing list the original message came
- ** from (instead to the author only). Setting this option to ``\fIask-yes\fP'' or
- ** ``\fIask-no\fP'' will ask if you really intended to reply to the author only.
+ ** This variable controls what effect ordinary replies have on mailing list
+ ** messages: if \fIset\fP, a normal reply will be interpreted as list-reply
+ ** while if it's \fIunset\fP the reply functions work as usual.
*/
{"max_display_recips", DT_NUM, R_PAGER, UL &MaxDispRecips, "0" },
/*
/*
** .pp
** \fIThis is a read-only system property and, at runtime,
- ** specifies the last part of the full path or URI of the
- ** folder currently open (if any), i.e. everything after
- ** the last ``/''.\fP
+ ** specifies the actual name of the folder as far as it could
+ ** be detected.\fP
+ ** .pp
+ ** For detection, $$$folder is first taken into account
+ ** and simply stripped to form the result when a match is found. For
+ ** example, with $$$folder being \fTimap://host\fP and the folder is
+ ** \fTimap://host/INBOX/foo\fP, $$$muttng_folder_name will be just
+ ** \fTINBOX/foo\fP.)
+ ** .pp
+ ** Second, if the initial portion of a name is not $$$folder,
+ ** the result will be everything after the last ``/''.
+ ** .pp
+ ** Third and last, the result will be just the name if neither
+ ** $$$folder nor a ``/'' were found in the name.
*/
{"muttng_pwd", DT_SYS, R_NONE, 0, "" },
/*
** .dt %M .dd Total number of messages shown, i.e. not hidden by a limit. 1)
** .dt %n .dd Number of new messages.
** .dt %t .dd Number of tagged messages. 1)
+ ** .dt %u .dd Number of unread messages.
** .de
** .pp
** 1) These expandos only have a non-zero value for the current mailbox and
** If \fIset\fP, forces Mutt-ng to interpret keystrokes with the high bit (bit 8)
** set as if the user had pressed the \fTESC\fP key and whatever key remains
** after having the high bit removed. For example, if the key pressed
- ** has an ASCII value of \fT0xf4\fP, then this is treated as if the user had
+ ** has an ASCII value of \fT0xf8\fP, then this is treated as if the user had
** pressed \fTESC\fP then ``\fTx\fP''. This is because the result of removing the
- ** high bit from ``\fT0xf4\fP'' is ``\fT0x74\fP'', which is the ASCII character
+ ** high bit from ``\fT0xf8\fP'' is ``\fT0x78\fP'', which is the ASCII character
** ``\fTx\fP''.
*/
{"mh_purge", DT_BOOL, R_NONE, OPTMHPURGE, "no" },
{"msgid_format", DT_STR, R_NONE, UL &MsgIdFormat, "%Y%m%d%h%M%s.G%P%p"},
/*
** .pp
- ** This is the format for the ``local part'' of the \fTMessage-Id:\fP header
- ** field generated by Mutt-ng. If this variable is empty, no \fTMessage-Id:\fP
+ ** This is the format for the ``local part'' of the \fTMessage-ID:\fP header
+ ** field generated by Mutt-ng. If this variable is empty, no \fTMessage-ID:\fP
** headers will be generated. The '%'
** character marks that certain data will be added to the string, similar to
** \fTprintf(3)\fP. The following characters are allowed:
** was connection lost.
*/
#endif
-#ifdef USE_SOCKET
{ "net_inc", DT_NUM, R_NONE, UL &NetInc, "10" },
/*
** .pp
** .pp
** See also ``$$read_inc'' and ``$$write_inc''.
*/
-#endif
{"pager", DT_PATH, R_NONE, UL &Pager, "builtin"},
/*
** .pp
** The file which includes random data that is used to initialize SSL
** library functions.
*/
- {"ssl_use_sslv2", DT_BOOL, R_NONE, OPTSSLV2, "yes" },
+ {"ssl_use_sslv2", DT_BOOL, R_NONE, OPTSSLV2, "no" },
/*
** .pp
** Availability: SSL
** The separator to add between messages when piping a list of tagged
** messages to an external Unix command.
*/
-#ifdef USE_POP
{"pop_authenticators", DT_STR, R_NONE, UL &PopAuthenticators, "" },
/*
- ** .pp
- ** Availability: POP
- **
** .pp
** This is a colon-delimited list of authentication methods Mutt-ng may
** attempt to use to log in to an POP server, in the order Mutt-ng should
*/
{"pop_auth_try_all", DT_BOOL, R_NONE, OPTPOPAUTHTRYALL, "yes" },
/*
- ** .pp
- ** Availability: POP
- **
** .pp
** If \fIset\fP, Mutt-ng will try all available methods. When \fIunset\fP, Mutt-ng will
** only fall back to other authentication methods if the previous
{"pop_mail_check", DT_NUM, R_NONE, UL &PopCheckTimeout, "60" },
/*
** .pp
- ** Availability: POP
- **
- ** .pp
- ** This variable configures how often (in seconds) POP should look for
+ ** This variable configures how often (in seconds) Mutt-ng should look for
** new mail.
*/
{"pop_delete", DT_QUAD, R_NONE, OPT_POPDELETE, "ask-no" },
/*
- ** .pp
- ** Availability: POP
- **
** .pp
** If \fIset\fP, Mutt-ng will delete successfully downloaded messages from the POP
** server when using the ``fetch-mail'' function. When \fIunset\fP, Mutt-ng will
*/
{"pop_host", DT_STR, R_NONE, UL &PopHost, ""},
/*
- ** .pp
- ** Availability: POP
- **
** .pp
** The name of your POP server for the ``fetch-mail'' function. You
** can also specify an alternative port, username and password, i.e.:
*/
{"pop_last", DT_BOOL, R_NONE, OPTPOPLAST, "no" },
/*
- ** .pp
- ** Availability: POP
- **
** .pp
** If this variable is \fIset\fP, Mutt-ng will try to use the ``\fTLAST\fP'' POP command
** for retrieving only unread messages from the POP server when using
{"pop_reconnect", DT_QUAD, R_NONE, OPT_POPRECONNECT, "ask-yes" },
/*
** .pp
- ** Availability: POP
- **
- ** .pp
- ** Controls whether or not Mutt-ng will try to reconnect to a POP server when the
+ ** Controls whether or not Mutt-ng will try to reconnect to a POP server if the
** connection is lost.
*/
{"pop_user", DT_STR, R_NONE, UL &PopUser, "" },
/*
- ** .pp
- ** Availability: POP
- **
** .pp
** Your login name on the POP server.
** .pp
*/
{"pop_pass", DT_STR, R_NONE, UL &PopPass, ""},
/*
- ** .pp
- ** Availability: POP
- **
** .pp
** Specifies the password for your POP account. If \fIunset\fP, Mutt-ng will
** prompt you for your password when you open POP mailbox.
** presents a security risk since the superuser of your machine may read it
** regardless of the file's permissions.
*/
-#endif /* USE_POP */
{"post_indent_string", DT_STR, R_NONE, UL &PostIndentString, ""},
/*
** .pp
** in the mailbox specified by this variable. Also see the ``$$postpone''
** variable.
*/
-#ifdef USE_SOCKET
{"preconnect", DT_STR, R_NONE, UL &Preconnect, "" },
/*
** .pp
** \fBNote:\fP For this example to work, you must be able to log in to the
** remote machine without having to enter a password.
*/
-#endif /* USE_SOCKET */
{"print", DT_QUAD, R_NONE, OPT_PRINT, "ask-no" },
/*
** .pp
** \fBNote\fP: When you delete a message in the trash folder, it is really
** deleted, so that there is no way to recover mail.
*/
-#ifdef USE_SOCKET
{"tunnel", DT_STR, R_NONE, UL &Tunnel, "" },
/*
** .pp
** \fBNote:\fP For this example to work you must be able to log in to the remote
** machine without having to enter a password.
*/
-#endif
{"umask", DT_NUM, R_NONE, UL &Umask, "0077" },
/*
** .pp
*/
#endif
/*--*/
- { NULL }
+ { NULL, -1, R_NONE, -1, NULL }
};
static const char* Features[] = {
#ifdef USE_DOTLOCK
"dotlock",
#endif
-#ifdef DL_STANDALONE
- "standalone",
-#endif
-#ifdef USE_POP
- "pop",
-#endif
#ifdef USE_NNTP
"nntp",
#endif
-#ifdef USE_IMAP
- "imap",
-#endif
#ifdef USE_SSL
"ssl",
#endif
#ifdef USE_LIBESMTP
"libesmtp",
#endif
-#ifdef USE_COMPRESSED
- "compessed",
-#endif
#ifdef HAVE_COLOR
"color",
#endif
-#ifdef CRYPT_BACKEND_CLASSIC_PGP
- "classic_pgp",
-#endif
-#ifdef CRYPT_BACKEND_CLASSIC_SMIME
- "class_smime",
-#endif
#ifdef CRYPT_BACKEND_GPGME
"gpgme",
#endif
{"date", SORT_DATE},
{"size", SORT_SIZE},
{"unsorted", SORT_ORDER},
- {NULL}
+ {NULL, 0}
};
const struct mapping_t SortAliasMethods[] = {
{"alias", SORT_ALIAS},
{"address", SORT_ADDRESS},
{"unsorted", SORT_ORDER},
- {NULL}
+ {NULL, 0}
};
const struct mapping_t SortKeyMethods[] = {
{"date", SORT_DATE},
{"keyid", SORT_KEYID},
{"trust", SORT_TRUST},
- {NULL}
+ {NULL, 0}
};
static int parse_list (BUFFER *, BUFFER *, unsigned long, BUFFER *);
static int parse_spam_list (BUFFER *, BUFFER *, unsigned long, BUFFER *);
static int parse_unlist (BUFFER *, BUFFER *, unsigned long, BUFFER *);
-
+static int parse_attachments (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unattachments (BUFFER *, BUFFER *, unsigned long, BUFFER *);
static int parse_lists (BUFFER *, BUFFER *, unsigned long, BUFFER *);
static int parse_unlists (BUFFER *, BUFFER *, unsigned long, BUFFER *);
static int parse_alias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
static int parse_unalternates (BUFFER *, BUFFER *, unsigned long, BUFFER *);
struct command_t {
- char *name;
+ const char *name;
int (*func) (BUFFER *, BUFFER *, unsigned long, BUFFER *);
unsigned long data;
- unsigned long data1;
};
struct command_t Commands[] = {
{"alternates", parse_alternates, 0},
+ {"attachments", parse_attachments, 0 },
+ {"unattachments",parse_unattachments,0 },
{"unalternates", parse_unalternates, 0},
-#ifdef USE_SOCKET
{"account-hook", mutt_parse_hook, M_ACCOUNTHOOK},
-#endif
{"alias", parse_alias, 0},
{"auto_view", parse_list, UL &AutoViewList},
{"alternative_order", parse_list, UL &AlternativeOrderList},
{"fcc-hook", mutt_parse_hook, M_FCCHOOK},
{"fcc-save-hook", mutt_parse_hook, M_FCCHOOK|M_SAVEHOOK},
{"folder-hook", mutt_parse_hook, M_FOLDERHOOK},
-#ifdef USE_COMPRESSED
{"open-hook", mutt_parse_hook, M_OPENHOOK},
{"close-hook", mutt_parse_hook, M_CLOSEHOOK},
{"append-hook", mutt_parse_hook, M_APPENDHOOK},
-#endif
{"hdr_order", parse_list, UL &HeaderOrderList},
{"ifdef", parse_ifdef, 1},
{"ifndef", parse_ifdef, 0},
{"unscore", mutt_parse_unscore, 0},
{"unset", parse_set, M_SET_UNSET},
{"unsubscribe", parse_unsubscribe, 0},
- {NULL}
+ {NULL, NULL, 0}
};