/*
* Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 2004 g10 Code GmbH
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
** .pp
** .dl
** .dt %C .dd charset
- ** .dt %c .dd reqiures charset conversion (n or c)
+ ** .dt %c .dd requires charset conversion (n or c)
** .dt %D .dd deleted flag
** .dt %d .dd description
** .dt %e .dd MIME content-transfer-encoding
{ "compose_format", DT_STR, R_BOTH, UL &ComposeFormat, UL "-- Mutt: Compose [Approx. msg size: %l Atts: %a]%>-" },
/*
** .pp
- ** Controls the format of the status line displayed in the \fCompose\fP
+ ** Controls the format of the status line displayed in the \fICompose\fP
** menu. This string is similar to ``$$status_format'', but has its own
** set of printf()-like sequences:
** .pp
** See the text describing the ``$$status_format'' option for more
** information on how to set ``$$compose_format''.
*/
+ { "config_charset", DT_STR, R_NONE, UL &ConfigCharset, UL 0 },
+ /*
+ ** .pp
+ ** When defined, Mutt will recode commands in rc files from this
+ ** encoding.
+ */
{ "confirmappend", DT_BOOL, R_NONE, OPTCONFIRMAPPEND, 1 },
/*
** .pp
** will be saved for later references. Also see ``$$record'',
** ``$$save_name'', ``$$force_name'' and ``$fcc-hook''.
*/
+
+ { "crypt_use_gpgme", DT_BOOL, R_NONE, OPTCRYPTUSEGPGME, 0 },
+ /*
+ ** .pp
+ ** This variable controls the use the GPGME enabled crypto backends.
+ ** If it is set and Mutt was build with gpgme support, the gpgme code for
+ ** S/MIME and PGP will be used instead of the classic code. Note, that
+ ** you need to use this option in .muttrc as it won't have any effect when
+ ** used interactively.
+ */
+
{ "crypt_autopgp", DT_BOOL, R_NONE, OPTCRYPTAUTOPGP, 1 },
/*
** .pp
{ "digest_collapse", DT_BOOL, R_NONE, OPTDIGESTCOLLAPSE, 1},
/*
** .pp
- ** If this option is \fIset\fP, mutt's revattach menu will not show the subparts of
- ** individual messages in a digest. To see these subparts, press 'v' on that menu.
+ ** If this option is \fIset\fP, mutt's received-attachments menu will not show the subparts of
+ ** individual messages in a multipart/digest. To see these subparts, press 'v' on that menu.
*/
{ "display_filter", DT_PATH, R_PAGER, UL &DisplayFilter, UL "" },
/*
** filtered message is read from the standard output.
*/
#if defined(DL_STANDALONE) && defined(USE_DOTLOCK)
- { "dotlock_program", DT_PATH, R_NONE, UL &MuttDotlock, UL BINDIR "/mutt_dotlock" },
+ { "dotlock_program", DT_PATH, R_NONE, UL &MuttDotlock, UL BINDIR "/muttng_dotlock" },
/*
** .pp
** Contains the path of the mutt_dotlock (8) binary to be used by
** When set, mutt will not show the presence of missing messages in the
** thread tree.
*/
+ { "hide_thread_subject", DT_BOOL, R_TREE|R_INDEX, OPTHIDETHREADSUBJECT, 1 },
+ /*
+ ** .pp
+ ** When set, mutt will not show the subject of messages in the thread
+ ** tree that have the same subject as their parent or closest previously
+ ** displayed sibling.
+ */
{ "hide_top_limited", DT_BOOL, R_TREE|R_INDEX, OPTHIDETOPLIMITED, 0 },
/*
** .pp
** This is a colon-delimited list of authentication methods mutt may
** attempt to use to log in to an IMAP server, in the order mutt should
** try them. Authentication methods are either 'login' or the right
- ** side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5',
- ** 'gssapi' or 'cram-md5'. This parameter is case-insensitive. If this
+ ** side of an IMAP 'AUTH=xxx' capability string, eg 'digest-md5', 'gssapi'
+ ** or 'cram-md5'. This parameter is case-insensitive. If this
** parameter is unset (the default) mutt will try all available methods,
** in order from most-secure to least-secure.
** .pp
** as folder separators for displaying IMAP paths. In particular it
** helps in using the '=' shortcut for your \fIfolder\fP variable.
*/
-# ifdef USE_SSL
+# if defined(USE_SSL) || defined(USE_GNUTLS)
{ "imap_force_ssl", DT_BOOL, R_NONE, OPTIMAPFORCESSL, 0 },
/*
** .pp
** connecting to IMAP servers.
*/
# endif
+ { "imap_headers", DT_STR, R_INDEX, UL &ImapHeaders, UL 0},
+ /*
+ ** .pp
+ ** Mutt requests these header fields in addition to the default headers
+ ** ("DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE
+ ** CONTENT-DESCRIPTION IN-REPLY-TO REPLY-TO LINES X-LABEL") from IMAP
+ ** servers before displaying the index menu. You may want to add more
+ ** headers for spam detection. \fBNote:\fP This is a space separated list.
+ */
{ "imap_home_namespace", DT_STR, R_NONE, UL &ImapHomeNamespace, UL 0},
/*
** .pp
** but can make closing an IMAP folder somewhat slower. This option
** exists to appease speed freaks.
*/
+ { "imap_reconnect", DT_QUAD, R_NONE, OPT_IMAPRECONNECT, M_ASKYES },
+ /*
+ ** .pp
+ ** Controls whether or not Mutt will try to reconnect to IMAP server when
+ ** connection lost.
+ */
{ "imap_servernoise", DT_BOOL, R_NONE, OPTIMAPSERVERNOISE, 1 },
/*
** .pp
** Controls whether or not a copy of the message(s) you are replying to
** is included in your reply.
*/
+ { "include_onlyfirst", DT_BOOL, R_NONE, OPTINCLUDEONLYFIRST, 0},
+ /*
+ ** .pp
+ ** Controls whether or not Mutt includes only the first attachment
+ ** of the message you are replying.
+ */
{ "indent_string", DT_STR, R_NONE, UL &Prefix, UL "> " },
/*
** .pp
** .dt %E .dd number of messages in current thread
** .dt %f .dd entire From: line (address + real name)
** .dt %F .dd author name, or recipient name if the message is from you
+ ** .dt %H .dd spam attribute(s) of this message
** .dt %g .dd newsgroup name (if compiled with nntp support)
** .dt %i .dd message-id of the current message
** .dt %l .dd number of lines in the message (does not work with maildir,
** \fBDON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE
** DOING!\fP
*/
+#if USE_HCACHE
+
+ { "header_cache", DT_PATH, R_NONE, UL &HeaderCache, 0 },
+ /*
+ ** .pp
+ ** The header_cache variable points to the header cache database. If
+ ** header_cache points to a directory there will be created one header cache
+ ** database per folder within this directory. If it doesn't point to a directory a
+ ** global header cache for all folders is used. Per default it is unset and so
+ ** no header caching will be used.
+ */
+ { "maildir_header_cache_verify", DT_BOOL, R_NONE, OPTHCACHEVERIFY, 1 },
+ /*
+ ** .pp
+ ** Check for Maildir unaware programs other than mutt having modified maildir
+ ** files when the header cache is in use. This incurs one stat(2) per
+ ** message every time the folder is opened.
+ */
+ { "header_cache_pagesize", DT_STR, R_NONE, UL &HeaderCachePageSize, UL "16384" },
+ /*
+ ** .pp
+ ** Change the maildir header cache database page size. Too large
+ ** or too small of a page size for the common header can waste
+ ** space, memory effectiveness, or CPU time. The default should be more or
+ ** less the best you can get. For details google after mutt maildir header
+ ** cache (first hit).
+ */
+#endif /* USE_HCACHE */
{ "maildir_trash", DT_BOOL, R_NONE, OPTMAILDIRTRASH, 0 },
/*
** .pp
** This specifies the folder into which read mail in your ``$$spoolfile''
** folder will be appended.
*/
+ { "operating_system", DT_STR, R_NONE, UL&OperatingSystem, 0 },
+ /*
+ ** .pp
+ ** This specifies the operating system name for the User-Agent header. If
+ ** this is unset, it will be set to the operating system name that uname(2)
+ ** returns. If uname(2) fails, "UNIX" will be used.
+ */
{ "sidebar_visible", DT_BOOL, R_BOTH, OPTMBOXPANE, 0 },
/*
** .pp
** removed, while the inner multipart/signed part is retained.
** (PGP only)
*/
+ { "pgp_create_traditional", DT_SYN, R_NONE, UL "pgp_autoinline", 0 },
+ { "pgp_autoinline", DT_BOOL, R_NONE, OPTPGPAUTOINLINE, 0 },
+ /*
+ ** .pp
+ ** This option controls whether Mutt generates old-style inline
+ ** (traditional) PGP encrypted or signed messages under certain
+ ** circumstances. This can be overridden by use of the \fIpgp-menu\fP,
+ ** when inline is not required.
+ ** .pp
+ ** Note that Mutt might automatically use PGP/MIME for messages
+ ** which consist of more than a single MIME part. Mutt can be
+ ** configured to ask before sending PGP/MIME messages when inline
+ ** (traditional) would not work.
+ ** See also: ``$$pgp_mime_auto''.
+ ** .pp
+ ** Also note that using the old-style PGP message format is \fBstrongly\fP
+ ** \fBdeprecated\fP.
+ ** (PGP only)
+ */
+ { "pgp_auto_traditional", DT_SYN, R_NONE, UL "pgp_replyinline", 0 },
+ { "pgp_replyinline", DT_BOOL, R_NONE, OPTPGPREPLYINLINE, 0 },
+ /*
+ ** .pp
+ ** Setting this variable will cause Mutt to always attempt to
+ ** create an inline (traditional) message when replying to a
+ ** message which is PGP encrypted/signed inline. This can be
+ ** overridden by use of the \fIpgp-menu\fP, when inline is not
+ ** required. This option does not automatically detect if the
+ ** (replied-to) message is inline; instead it relies on Mutt
+ ** internals for previously checked/flagged messages.
+ ** .pp
+ ** Note that Mutt might automatically use PGP/MIME for messages
+ ** which consist of more than a single MIME part. Mutt can be
+ ** configured to ask before sending PGP/MIME messages when inline
+ ** (traditional) would not work.
+ ** See also: ``$$pgp_mime_auto''.
+ ** .pp
+ ** Also note that using the old-style PGP message format is \fBstrongly\fP
+ ** \fBdeprecated\fP.
+ ** (PGP only)
+ **
+ */
{ "pgp_show_unusable", DT_BOOL, R_NONE, OPTPGPSHOWUNUSABLE, 1 },
/*
** .pp
** `reverse-'.
** (PGP only)
*/
- { "pgp_create_traditional", DT_QUAD, R_NONE, OPT_PGPTRADITIONAL, M_NO },
+ { "pgp_mime_auto", DT_QUAD, R_NONE, OPT_PGPMIMEAUTO, M_ASKYES },
/*
** .pp
- ** This option controls whether Mutt generates old-style inline PGP
- ** encrypted or signed messages.
- ** .pp
- ** Note that PGP/MIME will be used automatically for messages which have
- ** a character set different from us-ascii, or which consist of more than
- ** a single MIME part.
+ ** This option controls whether Mutt will prompt you for
+ ** automatically sending a (signed/encrypted) message using
+ ** PGP/MIME when inline (traditional) fails (for any reason).
** .pp
** Also note that using the old-style PGP message format is \fBstrongly\fP
** \fBdeprecated\fP.
** (PGP only)
*/
- { "pgp_auto_traditional", DT_BOOL, R_NONE, OPTPGPAUTOTRAD, 0 },
- /*
- ** .pp
- ** This option causes Mutt to generate an old-style inline PGP
- ** encrypted or signed message when replying to an old-style
- ** message, and a PGP/MIME message when replying to a PGP/MIME
- ** message. Note that this option is only meaningful when using
- ** ``$$crypt_replyencrypt'', ``$$crypt_replysign'', or
- ** ``$$crypt_replysignencrypted''.
- ** .pp
- ** Also note that PGP/MIME will be used automatically for messages
- ** which have a character set different from us-ascii, or which
- ** consist of more than a single MIME part.
- ** .pp
- ** This option overrides ``$$pgp_create_traditional''
- ** (PGP only)
- */
/* XXX Default values! */
/*
** .pp
** This command is used to extract only the signers X509 certificate from a S/MIME
- ** signature, so that the certificate's owner may get compared to the email's
- ** 'From'-field.
+ ** signature, so that the certificate's owner may get compared to the
+ ** email's 'From'-field.
** (S/MIME only)
*/
{ "smime_import_cert_command", DT_STR, R_NONE, UL &SmimeImportCertCommand, 0},
*/
#endif
-#if defined(USE_SSL)||defined(USE_NSS)
-# ifndef USE_NSS
+#if defined(USE_SSL)||defined(USE_NSS)||defined(USE_GNUTLS)
+# if defined(USE_SSL)||defined(USE_GNUTLS)
{ "ssl_starttls", DT_QUAD, R_NONE, OPT_SSLSTARTTLS, M_YES },
/*
** .pp
** use STARTTLS regardless of the server's capabilities.
*/
# endif
- { "certificate_file", DT_PATH, R_NONE, UL &SslCertFile, 0 },
+ { "certificate_file", DT_PATH, R_NONE, UL &SslCertFile, UL "~/.mutt_certificates" },
/*
** .pp
** This variable specifies the file where the certificates you trust
** .pp
** Example: set certificate_file=~/.mutt/certificates
*/
+# ifndef USE_GNUTLS
{ "ssl_usesystemcerts", DT_BOOL, R_NONE, OPTSSLSYSTEMCERTS, 1 },
/*
** .pp
** This variables specifies whether to attempt to use SSLv2 in the
** SSL authentication process.
*/
+# endif
{ "ssl_use_sslv3", DT_BOOL, R_NONE, OPTSSLV3, 1 },
/*
** .pp
** This variables specifies whether to attempt to use TLSv1 in the
** SSL authentication process.
*/
+#ifdef USE_GNUTLS
+ { "ssl_min_dh_prime_bits", DT_NUM, R_NONE, UL &SslDHPrimeBits, 0 },
+ /*
+ ** .pp
+ ** This variable specifies the minimum acceptable prime size (in bits)
+ ** for use in any Diffie-Hellman key exchange. A value of 0 will use
+ ** the default from the GNUTLS library.
+ */
+ { "ssl_ca_certificates_file", DT_PATH, R_NONE, UL &SslCACertFile, 0 },
+ /*
+ ** .pp
+ ** This variable specifies a file containing trusted CA certificates.
+ ** Any server certificate that is signed with one of these CA
+ ** certificates are also automatically accepted.
+ ** .pp
+ ** Example: set ssl_ca_certificates_file=/etc/ssl/certs/ca-certificates.crt
+ */
+ { "ssl_client_cert", DT_PATH, R_NONE, UL &SslClientCert, 0 },
+ /*
+ ** .pp
+ ** The file containing a client certificate and its associated private
+ ** key.
+ */
+#ifdef USE_GNUTLS
+ { "ssl_min_dh_prime_bits", DT_NUM, R_NONE, UL &SslDHPrimeBits, 0 },
+ /*
+ ** .pp
+ ** This variable specifies the minimum acceptable prime size (in bits)
+ ** for use in any Diffie-Hellman key exchange. A value of 0 will use
+ ** the default from the GNUTLS library.
+ */
+ { "ssl_ca_certificates_file", DT_PATH, R_NONE, UL &SslCACertFile, 0 },
+ /*
+ ** .pp
+ ** This variable specifies a file containing trusted CA certificates.
+ ** Any server certificate that is signed with one of these CA
+ ** certificates are also automatically accepted.
+ ** .pp
+ ** Example: set ssl_ca_certificates_file=/etc/ssl/certs/ca-certificates.crt
+ */
+#endif
+#endif
#endif
{ "pipe_split", DT_BOOL, R_NONE, OPTPIPESPLIT, 0 },
** move the messages to another machine, and reply to some the messages
** from there. If this variable is set, the default \fIFrom:\fP line of
** the reply messages is built using the address where you received the
- ** messages you are replying to. If the variable is unset, the
- ** \fIFrom:\fP line will use your address on the current machine.
+ ** messages you are replying to \fBif\fP that address matches your
+ ** alternates. If the variable is unset, or the address that would be
+ ** used doesn't match your alternates, the \fIFrom:\fP line will use
+ ** your address on the current machine.
*/
{ "reverse_realname", DT_BOOL, R_BOTH, OPTREVREAL, 1 },
/*
** . mailbox-order (unsorted)
** . score
** . size
+ ** . spam
** . subject
** . threads
** . to
** order $$sort_aux is reversed again (which is not the right thing to do,
** but kept to not break any existing configuration setting).
*/
- { "sort_browser", DT_SORT|DT_SORT_BROWSER, R_NONE, UL &BrowserSort, SORT_SUBJECT },
+ { "sort_browser", DT_SORT|DT_SORT_BROWSER, R_NONE, UL &BrowserSort, SORT_ALPHA },
/*
** .pp
** Specifies how to sort entries in the file browser. By default, the
** the message whether or not this is the case, as long as the
** non-``$$reply_regexp'' parts of both messages are identical.
*/
+ { "spam_separator", DT_STR, R_NONE, UL &SpamSep, UL "," },
+ /*
+ ** .pp
+ ** ``$spam_separator'' controls what happens when multiple spam headers
+ ** are matched: if unset, each successive header will overwrite any
+ ** previous matches value for the spam label. If set, each successive
+ ** match will append to the previous, using ``$spam_separator'' as a
+ ** separator.
+ */
{ "spoolfile", DT_PATH, R_NONE, UL &Spoolfile, 0 },
/*
** .pp
** message mode (Certain operations like composing a new mail, replying,
** forwarding, etc. are not permitted in this mode).
*/
- { "status_format", DT_STR, R_BOTH, UL &Status, UL "-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---" },
+ { "status_format", DT_STR, R_BOTH, UL &Status, UL "-%r-Mutt-ng: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---" },
/*
** .pp
** Controls the format of the status line displayed in the \fIindex\fP
** machine without having to enter a password.
*/
#endif
+ { "umask", DT_NUM, R_NONE, UL &Umask, 0077 },
+ /*
+ ** .pp
+ ** This sets the umask that will be used by mutt-ng when creating all
+ ** kinds of files. If unset, the default value is 077.
+ */
{ "use_8bitmime", DT_BOOL, R_NONE, OPTUSE8BITMIME, 0 },
/*
** .pp
{ "threads", SORT_THREADS },
{ "to", SORT_TO },
{ "score", SORT_SCORE },
+ { "spam", SORT_SPAM },
{ NULL, 0 }
};
*/
{ "to", SORT_TO },
{ "score", SORT_SCORE },
+ { "spam", SORT_SPAM },
{ NULL, 0 }
};
static int parse_list (BUFFER *, BUFFER *, unsigned long, BUFFER *);
static int parse_rx_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_rx_unlist (BUFFER *, BUFFER *, unsigned long, BUFFER *);
static int parse_unmy_hdr (BUFFER *, BUFFER *, unsigned long, BUFFER *);
static int parse_subscribe (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_alternates (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unalternates (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+
struct command_t
{
char *name;
};
struct command_t Commands[] = {
- { "alternates", parse_rx_list, UL &Alternates },
- { "unalternates", parse_rx_unlist, UL &Alternates },
+ { "alternates", parse_alternates, UL &Alternates },
+ { "unalternates", parse_unalternates, UL &Alternates },
#ifdef USE_SOCKET
{ "account-hook", mutt_parse_hook, M_ACCOUNTHOOK },
#endif
{ "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 HAVE_ICONV
{ "iconv-hook", mutt_parse_hook, M_ICONVHOOK },
{ "save-hook", mutt_parse_hook, M_SAVEHOOK },
{ "score", mutt_parse_score, 0 },
{ "send-hook", mutt_parse_hook, M_SENDHOOK },
+ { "send2-hook", mutt_parse_hook, M_SEND2HOOK },
{ "set", parse_set, 0 },
{ "source", parse_source, 0 },
+ { "spam", parse_spam_list, M_SPAM },
+ { "nospam", parse_spam_list, M_NOSPAM },
{ "subscribe", parse_subscribe, 0 },
{ "toggle", parse_set, M_SET_INV },
{ "unalias", parse_unalias, 0 },