Rocco Rutte:
[apps/madmutt.git] / init.h
diff --git a/init.h b/init.h
index f288ff6..0512ca8 100644 (file)
--- a/init.h
+++ b/init.h
@@ -1,5 +1,6 @@
 /*
  * 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
@@ -71,6 +72,12 @@ struct option_t
   unsigned long init; /* initial value */
 };
 
+struct feature_t
+{
+  char* name;
+  short builtin;
+};
+
 #define UL (unsigned long)
 
 #endif /* _MAKEDOC */
@@ -100,6 +107,12 @@ struct option_t
 # ifndef USE_LIBESMTP
 #  define USE_LIBESMTP
 # endif
+# ifndef USE_NNTP
+#  define USE_NNTP
+# endif
+# ifndef USE_GNUTLS
+#  define USE_GNUTLS
+# endif
 #endif
 
 struct option_t MuttVars[] = {
@@ -120,13 +133,13 @@ struct option_t MuttVars[] = {
   ** check only happens after the \fIfirst\fP edit of the file).  When set
   ** to \fIno\fP, composition will never be aborted.
   */
-  { "alias_file",      DT_PATH, R_NONE, UL &AliasFile, UL "~/.muttrc" },
+  { "alias_file",      DT_PATH, R_NONE, UL &AliasFile, UL "~/.muttngrc" },
   /*
   ** .pp
   ** The default file in which to save aliases created by the 
   ** ``$create-alias'' function.
   ** .pp
-  ** \fBNote:\fP Mutt will not automatically source this file; you must
+  ** \fBNote:\fP Mutt-ng will not automatically source this file; you must
   ** explicitly use the ``$source'' command for it to be executed.
   */
   { "alias_format",    DT_STR,  R_NONE, UL &AliasFmt, UL "%4n %2f %t %-10a   %r" },
@@ -172,32 +185,55 @@ struct option_t MuttVars[] = {
   { "ascii_chars",     DT_BOOL, R_BOTH, OPTASCIICHARS, 0 },
   /*
   ** .pp
-  ** If set, Mutt will use plain ASCII characters when displaying thread
+  ** If set, Mutt-ng will use plain ASCII characters when displaying thread
   ** and attachment trees, instead of the default \fIACS\fP characters.
   */
   { "askbcc",          DT_BOOL, R_NONE, OPTASKBCC, 0 },
   /*
   ** .pp
-  ** If set, Mutt will prompt you for blind-carbon-copy (Bcc) recipients
+  ** If set, Mutt-ng will prompt you for blind-carbon-copy (Bcc) recipients
   ** before editing an outgoing message.
   */
   { "askcc",           DT_BOOL, R_NONE, OPTASKCC, 0 },
   /*
   ** .pp
-  ** If set, Mutt will prompt you for carbon-copy (Cc) recipients before
+  ** If set, Mutt-ng will prompt you for carbon-copy (Cc) recipients before
   ** editing the body of an outgoing message.
   */  
+  { "assumed_charset", DT_STR, R_NONE, UL &AssumedCharset, UL "us-ascii"},
+  /*
+  ** .pp
+  ** This variable is a colon-separated list of character encoding
+  ** schemes for messages without character encoding indication.
+  ** Header field values and message body content without character encoding
+  ** indication would be assumed that they are written in one of this list.
+  ** By default, all the header fields and message body without any charset
+  ** indication are assumed to be in "us-ascii".
+  ** .pp
+  ** For example, Japanese users might prefer this:
+  ** .pp
+  **   set assumed_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"
+  ** .pp
+  ** However, only the first content is valid for the message body.
+  ** This variable is valid only if $$strict_mime is unset.
+  */
 #ifdef USE_NNTP
   { "ask_follow_up",   DT_BOOL, R_NONE, OPTASKFOLLOWUP, 0 },
   /*
   ** .pp
-  ** If set, Mutt will prompt you for follow-up groups before editing
+  ** Availability: NNTP
+  **
+  ** .pp
+  ** If set, Mutt-ng will prompt you for follow-up groups before editing
   ** the body of an outgoing message.
   */  
   { "ask_x_comment_to",        DT_BOOL, R_NONE, OPTASKXCOMMENTTO, 0 },
   /*
   ** .pp
-  ** If set, Mutt will prompt you for x-comment-to field before editing
+  ** Availability: NNTP
+  **
+  ** .pp
+  ** If set, Mutt-ng will prompt you for x-comment-to field before editing
   ** the body of an outgoing message.
   */  
 #endif
@@ -209,7 +245,7 @@ struct option_t MuttVars[] = {
   ** .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
@@ -236,10 +272,10 @@ struct option_t MuttVars[] = {
   /*
   ** .pp
   ** If this variable is unset, when operating (saving, printing, piping,
-  ** etc) on a list of tagged attachments, Mutt will concatenate the
+  ** etc) on a list of tagged attachments, Mutt-ng will concatenate the
   ** attachments and will operate on them as a single attachment. The
   ** ``$$attach_sep'' separator is added after each attachment. When set,
-  ** Mutt will operate on the attachments one by one.
+  ** Mutt-ng will operate on the attachments one by one.
   */
   { "attribution",     DT_STR,  R_NONE, UL &Attribution, UL "On %d, %n wrote:" },
   /*
@@ -251,7 +287,7 @@ struct option_t MuttVars[] = {
   { "autoedit",                DT_BOOL, R_NONE, OPTAUTOEDIT, 0 },
   /*
   ** .pp
-  ** When set along with ``$$edit_headers'', Mutt will skip the initial
+  ** When set along with ``$$edit_headers'', Mutt-ng will skip the initial
   ** send-menu and allow you to immediately begin editing the body of your
   ** message.  The send-menu may still be accessed once you have finished
   ** editing the body of your message.
@@ -269,12 +305,12 @@ struct option_t MuttVars[] = {
   { "beep",            DT_BOOL, R_NONE, OPTBEEP, 1 },
   /*
   ** .pp
-  ** When this variable is set, mutt will beep when an error occurs.
+  ** When this variable is set, Mutt-ng will beep when an error occurs.
   */
   { "beep_new",                DT_BOOL, R_NONE, OPTBEEPNEW, 0 },
   /*
   ** .pp
-  ** When this variable is set, mutt will beep whenever it prints a message
+  ** When this variable is set, Mutt-ng will beep whenever it prints a message
   ** notifying you of new mail.  This is independent of the setting of the
   ** ``$$beep'' variable.
   */
@@ -289,14 +325,17 @@ struct option_t MuttVars[] = {
   { "bounce_delivered", DT_BOOL, R_NONE, OPTBOUNCEDELIVERED, 1 },
   /*
   ** .pp
-  ** When this variable is set, mutt will include Delivered-To headers when
+  ** When this variable is set, Mutt-ng will include Delivered-To headers when
   ** bouncing messages.  Postfix users may wish to unset this variable.
   */
 #ifdef USE_NNTP
   { "catchup_newsgroup", DT_QUAD, R_NONE, OPT_CATCHUP, M_ASKYES },
   /*
   ** .pp
-  ** If this variable is \fIset\fP, Mutt will mark all articles in newsgroup
+  ** Availability: NNTP
+  **
+  ** .pp
+  ** If this variable is \fIset\fP, Mutt-ng will mark all articles in newsgroup
   ** as read when you quit the newsgroup (catchup newsgroup).
   */
 #endif
@@ -311,7 +350,7 @@ struct option_t MuttVars[] = {
   ** \fBNote:\fP this option only affects \fImaildir\fP and \fIMH\fP style
   ** mailboxes.
   ** .pp
-  ** When \fIset\fP, Mutt will check for new mail delivered while the
+  ** When \fIset\fP, Mutt-ng will check for new mail delivered while the
   ** mailbox is open.  Especially with MH mailboxes, this operation can
   ** take quite some time since it involves scanning the directory and
   ** checking each file to see if it has already been looked at.  If
@@ -321,19 +360,19 @@ struct option_t MuttVars[] = {
   { "collapse_unread", DT_BOOL, R_NONE, OPTCOLLAPSEUNREAD, 1 },
   /*
   ** .pp
-  ** When \fIunset\fP, Mutt will not collapse a thread if it contains any
+  ** When \fIunset\fP, Mutt-ng will not collapse a thread if it contains any
   ** unread messages.
   */
   { "uncollapse_jump",         DT_BOOL, R_NONE, OPTUNCOLLAPSEJUMP, 0 },
   /*
   ** .pp
-  ** When \fIset\fP, Mutt will jump to the next unread message, if any,
+  ** When \fIset\fP, Mutt-ng will jump to the next unread message, if any,
   ** when the current thread is \fIun\fPcollapsed.
   */
-  { "compose_format",  DT_STR,  R_BOTH, UL &ComposeFormat, UL "-- Mutt: Compose  [Approx. msg size: %l   Atts: %a]%>-" },
+  { "compose_format",  DT_STR,  R_BOTH, UL &ComposeFormat, UL "-- Mutt-ng: 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
@@ -341,30 +380,36 @@ struct option_t MuttVars[] = {
   ** .dt %a .dd total number of attachments 
   ** .dt %h .dd local hostname
   ** .dt %l .dd approximate size (in bytes) of the current message
-  ** .dt %v .dd Mutt version string
+  ** .dt %v .dd Mutt-ng version string
   ** .de
   ** .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-ng will recode commands in rc files from this
+  ** encoding.
+  */
   { "confirmappend",   DT_BOOL, R_NONE, OPTCONFIRMAPPEND, 1 },
   /*
   ** .pp
-  ** When set, Mutt will prompt for confirmation when appending messages to
+  ** When set, Mutt-ng will prompt for confirmation when appending messages to
   ** an existing mailbox.
   */
   { "confirmcreate",   DT_BOOL, R_NONE, OPTCONFIRMCREATE, 1 },
   /*
   ** .pp
-  ** When set, Mutt will prompt for confirmation when saving messages to a
+  ** When set, Mutt-ng will prompt for confirmation when saving messages to a
   ** mailbox which does not yet exist before creating it.
   */
   { "connect_timeout", DT_NUM, R_NONE, UL &ConnectTimeout, 30 },
   /*
   ** .pp
-  ** Causes Mutt to timeout a network connection (for IMAP or POP) after this
+  ** Causes Mutt-ng to timeout a network connection (for IMAP or POP) after this
   ** many seconds if the connection is not able to be established.  A negative
-  ** value causes Mutt to wait indefinitely for the connection to succeed.
+  ** value causes Mutt-ng to wait indefinitely for the connection to succeed.
   */
   { "content_type",    DT_STR, R_NONE, UL &ContentType, UL "text/plain" },
   /*
@@ -378,10 +423,21 @@ struct option_t MuttVars[] = {
   ** 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-ng 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
-  ** This variable controls whether or not mutt may automatically enable
+  ** This variable controls whether or not Mutt-ng may automatically enable
   ** PGP encryption/signing for messages.  See also ``$$crypt_autoencrypt'',
   ** ``$$crypt_replyencrypt'',
   ** ``$$crypt_autosign'', ``$$crypt_replysign'' and ``$$smime_is_default''.
@@ -389,7 +445,7 @@ struct option_t MuttVars[] = {
   { "crypt_autosmime", DT_BOOL, R_NONE, OPTCRYPTAUTOSMIME, 1 },
   /*
   ** .pp
-  ** This variable controls whether or not mutt may automatically enable
+  ** This variable controls whether or not Mutt-ng may automatically enable
   ** S/MIME encryption/signing for messages. See also ``$$crypt_autoencrypt'',
   ** ``$$crypt_replyencrypt'',
   ** ``$$crypt_autosign'', ``$$crypt_replysign'' and ``$$smime_is_default''.
@@ -434,15 +490,15 @@ struct option_t MuttVars[] = {
   { "delete_untag",    DT_BOOL, R_NONE, OPTDELETEUNTAG, 1 },
   /*
   ** .pp
-  ** If this option is \fIset\fP, mutt will untag messages when marking them
+  ** If this option is \fIset\fP, Mutt-ng will untag messages when marking them
   ** for deletion.  This applies when you either explicitly delete a message,
   ** or when you save it to another folder.
   */
   { "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-ng'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 "" },
   /*
@@ -452,11 +508,14 @@ struct option_t MuttVars[] = {
   ** 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
-  ** mutt.
+  ** Availability: Standalone and Dotlock
+  **
+  ** .pp
+  ** Contains the path of the muttng_dotlock (1) binary to be used by
+  ** Mutt-ng.
   */
 #endif
   { "dsn_notify",      DT_STR,  R_NONE, UL &DsnNotify, UL "" },
@@ -489,7 +548,7 @@ struct option_t MuttVars[] = {
   { "duplicate_threads",       DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTDUPTHREADS, 1 },
   /*
   ** .pp
-  ** This variable controls whether mutt, when sorting by threads, threads
+  ** This variable controls whether Mutt-ng, when sorting by threads, threads
   ** messages with the same message-id together.  If it is set, it will indicate
   ** that it thinks they are duplicates of each other with an equals sign
   ** in the thread diagram.
@@ -506,14 +565,14 @@ struct option_t MuttVars[] = {
   { "editor",          DT_PATH, R_NONE, UL &Editor, 0 },
   /*
   ** .pp
-  ** This variable specifies which editor is used by mutt.
+  ** This variable specifies which editor is used by Mutt-ng.
   ** It defaults to the value of the VISUAL, or EDITOR, environment
   ** variable, or to the string "vi" if neither of those are set.
   */
   { "encode_from",     DT_BOOL, R_NONE, OPTENCODEFROM, 0 },
   /*
   ** .pp
-  ** When \fIset\fP, mutt will quoted-printable encode messages when
+  ** When \fIset\fP, Mutt-ng will quoted-printable encode messages when
   ** they contain the string "From " in the beginning of a line.
   ** Useful to avoid the tampering certain mail delivery and transport
   ** agents tend to do with messages.
@@ -521,7 +580,7 @@ struct option_t MuttVars[] = {
   { "envelope_from",   DT_BOOL, R_NONE, OPTENVFROM, 0 },
   /*
   ** .pp
-  ** When \fIset\fP, mutt will try to derive the message's \fIenvelope\fP
+  ** When \fIset\fP, Mutt-ng will try to derive the message's \fIenvelope\fP
   ** sender from the "From:" header.  Note that this information is passed 
   ** to sendmail command using the "-f" command line switch, so don't set this
   ** option if you are using that switch in $$sendmail yourself,
@@ -557,6 +616,20 @@ struct option_t MuttVars[] = {
   ** signed.
   ** (PGP only)
   */
+  { "file_charset",    DT_STR,  R_NONE, UL &FileCharset, UL 0 },
+  /*
+  ** .pp
+  ** This variable is a colon-separated list of character encoding
+  ** schemes for text file attatchments.
+  ** If unset, $$charset value will be used instead.
+  ** For example, the following configuration would work for Japanese
+  ** text handling:
+  ** .pp
+  **   set file_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"
+  ** .pp
+  ** Note: "iso-2022-*" must be put at the head of the value as shown above
+  ** if included.
+  */
   { "folder",          DT_PATH, R_NONE, UL &Maildir, UL "~/Mail" },
   /*
   ** .pp
@@ -593,7 +666,7 @@ struct option_t MuttVars[] = {
   /*
   ** .pp
   ** Controls whether or not the \fIMail-Followup-To\fP header field is
-  ** generated when sending mail.  When \fIset\fP, Mutt will generate this
+  ** generated when sending mail.  When \fIset\fP, Mutt-ng will generate this
   ** field when you are replying to a known mailing list, specified with
   ** the ``subscribe'' or ``$lists'' commands.
   ** .pp
@@ -612,6 +685,9 @@ struct option_t MuttVars[] = {
   { "followup_to_poster", DT_QUAD, R_NONE, OPT_FOLLOWUPTOPOSTER, M_ASKYES },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** If this variable is \fIset\fP and the keyword "poster" is present in
   ** \fIFollowup-To\fP header, follow-up to newsgroup function is not
   ** permitted.  The message will be mailed to the submitter of the
@@ -621,12 +697,22 @@ struct option_t MuttVars[] = {
   { "force_name",      DT_BOOL, R_NONE, OPTFORCENAME, 0 },
   /*
   ** .pp
-  ** This variable is similar to ``$$save_name'', except that Mutt will
+  ** This variable is similar to ``$$save_name'', except that Mutt-ng will
   ** store a copy of your outgoing message by the username of the address
   ** you are sending to even if that mailbox does not exist.
   ** .pp
   ** Also see the ``$$record'' variable.
   */
+  { "force_buffy_check", DT_BOOL, R_NONE, OPTFORCEBUFFYCHECK, 0 },
+  /*
+  ** .pp
+  ** When \fIset\fP, it causes Mutt-ng to check for new mail when the
+  ** \fIbuffy-list\fP command is invoked. When \fIunset\fP, \fIbuffy_list\fP
+  ** will just list all mailboxes which are already known to have new mail.
+  ** .pp
+  ** Also see the following variables: ``$$timeout'', ``$$mail_check'' and
+  ** ``$$imap_mail_check''.
+  */
   { "forward_decode",  DT_BOOL, R_NONE, OPTFORWDECODE, 1 },
   /*
   ** .pp
@@ -667,32 +753,38 @@ struct option_t MuttVars[] = {
   { "from",            DT_ADDR, R_NONE, UL &From, UL 0 },
   /*
   ** .pp
-  ** When set, this variable contains a default from address.  It
+  ** This variable contains a default from address.  It
   ** can be overridden using my_hdr (including from send-hooks) and
   ** ``$$reverse_name''.  This variable is ignored if ``$$use_from''
   ** is unset.
+  ** E.g. you can use 
+  ** send-hook Mutt-ng-devel@lists.berlios.de 'my_hdr From: Foo Bar <foo@bar.fb>'
+  ** when replying to Mutt-ng-devel and Mutt-ng takes this email address.
   ** .pp
   ** Defaults to the contents of the environment variable EMAIL.
   */
   { "gecos_mask",      DT_RX,   R_NONE, UL &GecosMask, UL "^[^,]*" },
   /*
   ** .pp
-  ** A regular expression used by mutt to parse the GECOS field of a password
+  ** A regular expression used by Mutt-ng to parse the GECOS field of a password
   ** entry when expanding the alias.  By default the regular expression is set
   ** to "^[^,]*" which will return the string up to the first "," encountered.
   ** If the GECOS field contains a string like "lastname, firstname" then you
   ** should set the gecos_mask=".*".
   ** .pp
   ** This can be useful if you see the following behavior: you address a e-mail
-  ** to user ID stevef whose full name is Steve Franklin.  If mutt expands 
+  ** to user ID stevef whose full name is Steve Franklin.  If Mutt-ng expands 
   ** stevef to "Franklin" stevef@foo.bar then you should set the gecos_mask to
-  ** a regular expression that will match the whole name so mutt will expand
+  ** a regular expression that will match the whole name so Mutt-ng will expand
   ** "Franklin" to "Franklin, Steve".
   */
 #ifdef USE_NNTP
   { "group_index_format", DT_STR, R_BOTH, UL &GroupFormat, UL "%4C %M%N %5s  %-45.45f %d" },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** This variable allows you to customize the newsgroup browser display to
   ** your personal taste.  This string is similar to ``$index_format'', but
   ** has its own set of printf()-like sequences:
@@ -724,7 +816,7 @@ struct option_t MuttVars[] = {
   { "header",          DT_BOOL, R_NONE, OPTHEADER, 0 },
   /*
   ** .pp
-  ** When set, this variable causes Mutt to include the header
+  ** When set, this variable causes Mutt-ng to include the header
   ** of the message you are replying to into the edit buffer.
   ** The ``$$weed'' setting applies.
   */  
@@ -736,14 +828,14 @@ struct option_t MuttVars[] = {
   ** .pp
   ** \fBNote:\fP The binding will not be displayed correctly if the
   ** function is bound to a sequence rather than a single keystroke.  Also,
-  ** the help line may not be updated if a binding is changed while Mutt is
+  ** the help line may not be updated if a binding is changed while Mutt-ng is
   ** running.  Since this variable is primarily aimed at new users, neither
   ** of these should present a major problem.
   */
   { "hidden_host",     DT_BOOL, R_NONE, OPTHIDDENHOST, 0 },
   /*
   ** .pp
-  ** When set, mutt will skip the host name part of ``$$hostname'' variable
+  ** When set, Mutt-ng will skip the host name part of ``$$hostname'' variable
   ** when adding the domain part to addresses.  This variable does not
   ** affect the generation of Message-IDs, and it will not lead to the 
   ** cut-off of first-level domains.
@@ -751,26 +843,33 @@ struct option_t MuttVars[] = {
   { "hide_limited",    DT_BOOL, R_TREE|R_INDEX, OPTHIDELIMITED, 0 },
   /*
   ** .pp
-  ** When set, mutt will not show the presence of messages that are hidden
+  ** When set, Mutt-ng will not show the presence of messages that are hidden
   ** by limiting, in the thread tree.
   */
   { "hide_missing",    DT_BOOL, R_TREE|R_INDEX, OPTHIDEMISSING, 1 },
   /*
   ** .pp
-  ** When set, mutt will not show the presence of missing messages in the
+  ** When set, Mutt-ng 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-ng 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
-  ** When set, mutt will not show the presence of messages that are hidden
+  ** When set, Mutt-ng will not show the presence of messages that are hidden
   ** by limiting, at the top of threads in the thread tree.  Note that when
   ** $$hide_missing is set, this option will have no effect.
   */
   { "hide_top_missing",        DT_BOOL, R_TREE|R_INDEX, OPTHIDETOPMISSING, 1 },
   /*
   ** .pp
-  ** When set, mutt will not show the presence of missing messages at the
+  ** When set, Mutt-ng will not show the presence of missing messages at the
   ** top of threads in the thread tree.  Note that when $$hide_limited is
   ** set, this option will have no effect.
   */
@@ -799,7 +898,7 @@ struct option_t MuttVars[] = {
   ** .pp
   ** Affects the behaviour of the \fIreply\fP function when replying to
   ** messages from mailing lists.  When set, if the ``Reply-To:'' field is
-  ** set to the same value as the ``To:'' field, Mutt assumes that the
+  ** set to the same value as the ``To:'' field, Mutt-ng assumes that the
   ** ``Reply-To:'' field was set by the mailing list to automate responses
   ** to the list, and will ignore this field.  To direct a response to the
   ** mailing list when this option is set, use the \fIlist-reply\fP
@@ -810,38 +909,62 @@ struct option_t MuttVars[] = {
   { "imap_authenticators", DT_STR, R_NONE, UL &ImapAuthenticators, UL 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
+  ** 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
   ** 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
-  ** parameter is unset (the default) mutt will try all available methods,
+  ** 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-ng will try all available methods,
   ** in order from most-secure to least-secure.
   ** .pp
   ** Example: set imap_authenticators="gssapi:cram-md5:login"
   ** .pp
-  ** \fBNote:\fP Mutt will only fall back to other authentication methods if
+  ** \fBNote:\fP Mutt-ng will only fall back to other authentication methods if
   ** the previous methods are unavailable. If a method is available but
-  ** authentication fails, mutt will not connect to the IMAP server.
+  ** authentication fails, Mutt-ng will not connect to the IMAP server.
   */
   { "imap_delim_chars",                DT_STR, R_NONE, UL &ImapDelimChars, UL "/." },
   /*
   ** .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
   ** 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
-  ** If this variable is set, Mutt will always use SSL when
+  ** Availability: IMAP and SSL or IMAP and GNUTLS
+  **
+  ** .pp
+  ** If this variable is set, Mutt-ng will always use SSL when
   ** connecting to IMAP servers.
   */
 # endif
+  { "imap_headers",    DT_STR, R_INDEX, UL &ImapHeaders, UL 0},
+  /*
+  ** .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
+  ** 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
+  ** Availability: IMAP
+  **
+  ** .pp
   ** You normally want to see your personal folders alongside
   ** your INBOX in the IMAP browser. If you see something else, you may set
   ** this variable to the IMAP path to your folders.
@@ -849,9 +972,12 @@ struct option_t MuttVars[] = {
   { "imap_keepalive",           DT_NUM,  R_NONE, UL &ImapKeepalive, 900 },
   /*
   ** .pp
-  ** This variable specifies the maximum amount of time in seconds that mutt
+  ** 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
-  ** from closing them before mutt has finished with them. The default is
+  ** from closing them before Mutt-ng has finished with them. The default is
   ** well within the RFC-specified minimum amount of time (30 minutes) before
   ** a server is allowed to do this, but in practice the RFC does get
   ** violated every now and then. Reduce this number if you find yourself
@@ -860,40 +986,74 @@ struct option_t MuttVars[] = {
   { "imap_list_subscribed",    DT_BOOL, R_NONE, OPTIMAPLSUB, 0 },
   /*
   ** .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 browser with the \fItoggle-subscribed\fP function.
   */
+  { "imap_mail_check", DT_NUM,  R_NONE, UL &ImapBuffyTimeout, 5 },
+  /*
+  ** .pp
+  ** This variable configures how often (in seconds) Mutt-ng should look for
+  ** new mail in IMAP folders. This is split from the ``$mail_check'' variable
+  ** to generate less traffic and get more accurate information for local folders.
+  ** .pp
+  ** It defaults to the default value of ``$mail_check'' which is 5 seconds. But
+  ** you may want to increase it.
+  */
   { "imap_pass",       DT_STR,  R_NONE, UL &ImapPass, UL 0 },
   /*
   ** .pp
-  ** Specifies the password for your IMAP account.  If unset, Mutt will
+  ** Availability: IMAP
+  **
+  ** .pp
+  ** Specifies the password for your IMAP account.  If unset, Mutt-ng will
   ** prompt you for your password when you invoke the fetch-mail function.
   ** \fBWarning\fP: you should only use this option when you are on a
-  ** fairly secure machine, because the superuser can read your muttrc even
+  ** fairly secure machine, because the superuser can read your muttngrc even
   ** if you are the only one who can read the file.
   */
   { "imap_passive",            DT_BOOL, R_NONE, OPTIMAPPASSIVE, 1 },
   /*
   ** .pp
-  ** When set, mutt will not open new IMAP connections to check for new
-  ** mail.  Mutt will only check for new mail over existing IMAP
+  ** Availability: IMAP
+  **
+  ** .pp
+  ** When set, Mutt-ng will not open new IMAP connections to check for new
+  ** mail.  Mutt-ng will only check for new mail over existing IMAP
   ** connections.  This is useful if you don't want to be prompted to
-  ** user/password pairs on mutt invocation, or if opening the connection
+  ** user/password pairs on Mutt-ng invocation, or if opening the connection
   ** is slow.
   */
   { "imap_peek", DT_BOOL, R_NONE, OPTIMAPPEEK, 1 },
   /*
   ** .pp
-  ** If set, mutt will avoid implicitly marking your mail as read whenever
+  ** Availability: IMAP
+  **
+  ** .pp
+  ** If set, Mutt-ng will avoid implicitly marking your mail as read whenever
   ** you fetch a message from the server. This is generally a good thing,
   ** 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
+  ** 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, 1 },
   /*
   ** .pp
-  ** When set, mutt will display warning messages from the IMAP
+  ** Availability: IMAP
+  **
+  ** .pp
+  ** When set, Mutt-ng will display warning messages from the IMAP
   ** server as error messages. Since these messages are often
   ** harmless, or generated due to configuration problems on the
   ** server which are out of the users' hands, you may wish to suppress
@@ -902,6 +1062,9 @@ struct option_t MuttVars[] = {
   { "imap_user",       DT_STR,  R_NONE, UL &ImapUser, UL 0 },
   /*
   ** .pp
+  ** Availability: IMAP
+  **
+  ** .pp
   ** Your login name on the IMAP server.
   ** .pp
   ** This variable defaults to your user name on the local machine.
@@ -910,9 +1073,9 @@ struct option_t MuttVars[] = {
   { "implicit_autoview", DT_BOOL,R_NONE, OPTIMPLICITAUTOVIEW, 0},
   /*
   ** .pp
-  ** If set to ``yes'', mutt will look for a mailcap entry with the
+  ** If set to ``yes'', Mutt-ng will look for a mailcap entry with the
   ** copiousoutput flag set for \fIevery\fP MIME attachment it doesn't have
-  ** an internal viewer defined for.  If such an entry is found, mutt will
+  ** an internal viewer defined for.  If such an entry is found, Mutt-ng will
   ** use the viewer defined in that entry to convert the body part to text
   ** form.
   */
@@ -922,6 +1085,12 @@ struct option_t MuttVars[] = {
   ** 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-ng includes only the first attachment
+  ** of the message you are replying.
+  */
   { "indent_string",   DT_STR,  R_NONE, UL &Prefix, UL "> " },
   /*
   ** .pp
@@ -940,7 +1109,7 @@ struct option_t MuttVars[] = {
   ** .pp
   ** ``Format strings'' are similar to the strings used in the ``C''
   ** function printf to format output (see the man page for more detail).
-  ** The following sequences are defined in Mutt:
+  ** The following sequences are defined in Mutt-ng:
   ** .pp
   ** .dl
   ** .dt %a .dd address of the author
@@ -957,6 +1126,7 @@ struct option_t MuttVars[] = {
   ** .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,
@@ -968,7 +1138,7 @@ struct option_t MuttVars[] = {
   ** .dt %M .dd number of hidden messages if the thread is collapsed.
   ** .dt %N .dd message score
   ** .dt %n .dd author's real name (or address if missing)
-  ** .dt %O .dd (_O_riginal save folder)  Where mutt would formerly have
+  ** .dt %O .dd (_O_riginal save folder)  Where Mutt-ng would formerly have
   **            stashed the message: list name or recipient name if no list
   ** .dt %s .dd subject of the message
   ** .dt %S .dd status of the message (N/D/d/!/r/\(as)
@@ -1003,8 +1173,11 @@ struct option_t MuttVars[] = {
   { "inews",          DT_PATH, R_NONE, UL &Inews, UL "" },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** If set, specifies the program and arguments used to deliver news posted
-  ** by Mutt.  Otherwise, mutt posts article using current connection to
+  ** by Mutt-ng.  Otherwise, Mutt-ng posts article using current connection to
   ** news server.  The following printf-style sequence is understood:
   ** .pp
   ** .ts
@@ -1039,28 +1212,72 @@ struct option_t MuttVars[] = {
   ** from (instead to the author only). Setting this option to ``ask-yes'' or
   ** ``ask-no'' will ask if you really intended to reply to the author only.
   */
+  { "max_line_length", DT_NUM, R_NONE, UL &MaxLineLength, 0 },
+  /*
+  ** .pp
+  ** When set, the maximum line length for displaying f=f messages is limited
+  ** to this length. A value of 0 (which is also the default) means that the
+  ** maximum line length is determined by the terminal width and $$wrapmargin.
+  */
   { "mail_check",      DT_NUM,  R_NONE, UL &BuffyTimeout, 5 },
   /*
   ** .pp
-  ** This variable configures how often (in seconds) mutt should look for
+  ** This variable configures how often (in seconds) Mutt-ng should look for
   ** new mail.
   */
   { "mailcap_path",    DT_STR,  R_NONE, UL &MailcapPath, 0 },
   /*
   ** .pp
   ** This variable specifies which files to consult when attempting to
-  ** display MIME bodies not directly supported by Mutt.
+  ** display MIME bodies not directly supported by Mutt-ng.
   */
   { "mailcap_sanitize",        DT_BOOL, R_NONE, OPTMAILCAPSANITIZE, 1 },
   /*
   ** .pp
-  ** If set, mutt will restrict possible characters in mailcap % expandos
+  ** If set, Mutt-ng will restrict possible characters in mailcap % expandos
   ** to a well-defined set of safe characters.  This is the safe setting,
   ** but we are not sure it doesn't break some more advanced MIME stuff.
   ** .pp
   ** \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
+  ** Availability: Header Cache
+  **
+  ** .pp
+  ** The header_cache variable points to the header cache database.
+  ** If header_cache points to a directory it will contain a header cache
+  ** database  per folder. If header_cache points to a file that file will
+  ** be a single global header cache. By default it is unset and so no
+  ** header caching will be used.
+  */
+  { "maildir_header_cache_verify", DT_BOOL, R_NONE, OPTHCACHEVERIFY, 1 },
+  /*
+  ** .pp
+  ** Availability: Header Cache
+  **
+  ** .pp
+  ** Check for Maildir unaware programs other than Mutt-ng 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
+  ** Availability: Header Cache
+  **
+  ** .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-ng maildir header
+  ** cache (first hit).
+  */
+#endif /* USE_HCACHE */
   { "maildir_trash", DT_BOOL, R_NONE, OPTMAILDIRTRASH, 0 },
   /*
   ** .pp
@@ -1068,13 +1285,14 @@ struct option_t MuttVars[] = {
   ** (T)rashed flag instead of unlinked.  \fBNOTE:\fP this only applies
   ** to maildir-style mailboxes.  Setting it will have no effect on other
   ** mailbox types.
+  ** It is similiar to the trash option.
   */
   { "mark_old",                DT_BOOL, R_BOTH, OPTMARKOLD, 1 },
   /*
   ** .pp
-  ** Controls whether or not mutt marks \fInew\fP \fBunread\fP
+  ** Controls whether or not Mutt-ng marks \fInew\fP \fBunread\fP
   ** messages as \fIold\fP if you exit a mailbox without reading them.
-  ** With this option set, the next time you start mutt, the messages
+  ** With this option set, the next time you start Mutt-ng, the messages
   ** will show up with an "O" next to them in the index menu,
   ** indicating that they are old.
   */
@@ -1098,10 +1316,24 @@ struct option_t MuttVars[] = {
   ** 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.
+  ** It looks like this Mutt-ng version (specified string)
+  */
+  { "sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, UL "|" },
+  /*
+  ** .pp
+  ** This specifies the delimiter between the sidebar (if visible) and 
+  ** other screens.
+  */
   { "sidebar_visible", DT_BOOL, R_BOTH, OPTMBOXPANE, 0 },
   /*
   ** .pp
-  ** This specifies whether or not to show the mailbox list pane.
+  ** This specifies whether or not to show the mailbox list pane (left sidebar).
   */
   { "sidebar_width", DT_NUM, R_BOTH, UL &SidebarWidth, 0 },
   /*
@@ -1117,9 +1349,22 @@ struct option_t MuttVars[] = {
   { "metoo",           DT_BOOL, R_NONE, OPTMETOO, 0 },
   /*
   ** .pp
-  ** If unset, Mutt will remove your address (see the ``alternates''
+  ** If unset, Mutt-ng will remove your address (see the ``alternates''
   ** command) from the list of recipients when replying to a message.
   */
+  { "menu_context",    DT_NUM,  R_NONE, UL &MenuContext, 0 },
+  /*
+  ** .pp
+  ** This variable controls the number of lines of context that are given
+  ** when scrolling through menus. (Similar to ``$$pager_context''.)
+  */
+  { "menu_move_off",   DT_BOOL, R_NONE, OPTMENUMOVEOFF, 0 },
+  /*
+  ** .pp
+  ** When \fIunset\fP, the bottom entry of menus will never scroll up past
+  ** the bottom of the screen, unless there are less entries than lines.
+  ** When \fIset\fP, the bottom entry may move off the bottom.
+  */
   { "menu_scroll",     DT_BOOL, R_NONE, OPTMENUSCROLL, 0 },
   /*
   ** .pp
@@ -1131,7 +1376,7 @@ struct option_t MuttVars[] = {
   { "meta_key",                DT_BOOL, R_NONE, OPTMETAKEY, 0 },
   /*
   ** .pp
-  ** If set, forces Mutt to interpret keystrokes with the high bit (bit 8)
+  ** If set, forces Mutt-ng to interpret keystrokes with the high bit (bit 8)
   ** set as if the user had pressed the ESC key and whatever key remains
   ** after having the high bit removed.  For example, if the key pressed
   ** has an ASCII value of 0xf4, then this is treated as if the user had
@@ -1142,7 +1387,7 @@ struct option_t MuttVars[] = {
   { "mh_purge",                DT_BOOL, R_NONE, OPTMHPURGE, 0 },
   /*
   ** .pp
-  ** When unset, mutt will mimic mh's behaviour and rename deleted messages
+  ** When unset, Mutt-ng will mimic mh's behaviour and rename deleted messages
   ** to \fI,<old file name>\fP in mh folders instead of really deleting
   ** them.  If the variable is set, the message files will simply be
   ** deleted.
@@ -1197,6 +1442,9 @@ struct option_t MuttVars[] = {
   { "mime_subject",   DT_BOOL, R_NONE, OPTMIMESUBJECT, 1 },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** If \fIunset\fP, 8-bit ``subject:'' line in article header will not be
   ** encoded according to RFC2047 to base64.  This is useful when message
   ** is Usenet article, because MIME for news is nonstandard feature.
@@ -1207,6 +1455,9 @@ struct option_t MuttVars[] = {
   { "mix_entry_format", DT_STR,  R_NONE, UL &MixEntryFormat, UL "%4n %c %-16s %a" },
   /*
   ** .pp
+  ** Availability: Mixmaster
+  **
+  ** .pp
   ** This variable describes the format of a remailer line on the mixmaster
   ** chain selection screen.  The following printf-like sequences are 
   ** supported:
@@ -1221,18 +1472,19 @@ struct option_t MuttVars[] = {
   { "mixmaster",       DT_PATH, R_NONE, UL &Mixmaster, UL MIXMASTER },
   /*
   ** .pp
+  ** Availability: Mixmaster
+  **
+  ** .pp
   ** This variable contains the path to the Mixmaster binary on your
   ** system.  It is used with various sets of parameters to gather the
   ** list of known remailers, and to finally send a message through the
   ** mixmaster chain.
   */
 #endif
-
-
   { "move",            DT_QUAD, R_NONE, OPT_MOVE, M_ASKNO },
   /*
   ** .pp
-  ** Controls whether you will be asked to confirm moving read messages
+  ** Controls whether or not Mutt-ng will move read messages
   ** from your spool mailbox to your ``$$mbox'' mailbox, or as a result of
   ** a ``$mbox-hook'' command.
   */
@@ -1246,6 +1498,32 @@ struct option_t MuttVars[] = {
   { "msg_format",      DT_SYN,  R_NONE, UL "message_format", 0 },
   /*
   */
+  { "msgid_format",    DT_STR, R_NONE, UL &MsgIdFormat, UL "%Y%m%d%h%M%s.G%P%p" },
+  /*
+  ** .pp
+  ** This is the format for the ``local part'' of the message-IDs generated
+  ** by Mutt-ng. The format string contains of one or more characters. The '%'
+  ** character marks that certain data will be added to the string, similar to
+  ** printf(). The following characters are allowed:
+  ** .pp
+  ** .dl
+  ** .dt %d .dd the current day of month
+  ** .dt %h .dd the current hour
+  ** .dt %m .dd the current month
+  ** .dt %M .dd the current minute
+  ** .dt %O .dd the current UNIX timestamp (octal)
+  ** .dt %p .dd the process ID
+  ** .dt %P .dd the current message-ID prefix (a character rotating with 
+  **            every message-ID being generated)
+  ** .dt %r .dd a random integer value (decimal)
+  ** .dt %R .dd a random integer value (hexadecimal)
+  ** .dt %s .dd the current second
+  ** .dt %T .dd the current UNIX timestamp (decimal)
+  ** .dt %X .dd the current UNIX timestamp (hexadecimal)
+  ** .dt %Y .dd the current year (Y2K compliant)
+  ** .dt %% .dd the '%' character
+  ** .de
+  */
   { "narrow_tree",     DT_BOOL, R_TREE|R_INDEX, OPTNARROWTREE, 0 },
   /*
   ** .pp
@@ -1256,13 +1534,19 @@ struct option_t MuttVars[] = {
   { "news_cache_dir", DT_PATH, R_NONE, UL &NewsCacheDir, UL "~/.mutt" },
   /*
   ** .pp
-  ** This variable pointing to directory where Mutt will save cached news
+  ** Availability: NNTP
+  **
+  ** .pp
+  ** This variable pointing to directory where Mutt-ng will save cached news
   ** articles headers in. If \fIunset\fP, headers will not be saved at all
   ** and will be reloaded each time when you enter to newsgroup.
   */
   { "news_server",    DT_STR,  R_NONE, UL &NewsServer, 0 },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** This variable specifies domain name or address of NNTP server. It
   ** defaults to the newsserver specified in the environment variable
   ** $$$NNTPSERVER or contained in the file /etc/nntpserver.  You can also
@@ -1273,6 +1557,9 @@ struct option_t MuttVars[] = {
   { "newsrc",         DT_PATH, R_NONE, UL &NewsRc, UL "~/.newsrc" },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** The file, containing info about subscribed newsgroups - names and
   ** indexes of read articles.  The following printf-style sequence
   ** is understood:
@@ -1284,6 +1571,9 @@ struct option_t MuttVars[] = {
   { "nntp_context",   DT_NUM,  R_NONE, UL &NntpContext, 1000 },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** This variable defines number of articles which will be in index when
   ** newsgroup entered.  If active newsgroup have more articles than this
   ** number, oldest articles will be ignored.  Also controls how many
@@ -1292,6 +1582,9 @@ struct option_t MuttVars[] = {
   { "nntp_load_description", DT_BOOL, R_NONE, OPTLOADDESC, 1 },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** This variable controls whether or not descriptions for each newsgroup
   ** must be loaded when newsgroup is added to list (first time list
   ** loading or new newsgroup adding).
@@ -1299,27 +1592,39 @@ struct option_t MuttVars[] = {
   { "nntp_user",      DT_STR,  R_NONE, UL &NntpUser, UL "" },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** Your login name on the NNTP server.  If \fIunset\fP and NNTP server requires
-  ** authentification, Mutt will prompt you for your account name when you
+  ** authentification, Mutt-ng will prompt you for your account name when you
   ** connect to newsserver.
   */
   { "nntp_pass",      DT_STR,  R_NONE, UL &NntpPass, UL "" },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** Your password for NNTP account.
   */
   { "nntp_poll",      DT_NUM,  R_NONE, UL &NewsPollTimeout, 60 },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** The time in seconds until any operations on newsgroup except post new
-  ** article will cause recheck for new news.  If set to 0, Mutt will
+  ** article will cause recheck for new news.  If set to 0, Mutt-ng will
   ** recheck newsgroup on each operation in index (stepping, read article,
   ** etc.).
   */
   { "nntp_reconnect", DT_QUAD, R_NONE, OPT_NNTPRECONNECT, M_ASKYES },
   /*
   ** .pp
-  ** Controls whether or not Mutt will try to reconnect to newsserver when
+  ** Availability: NNTP
+  **
+  ** .pp
+  ** Controls whether or not Mutt-ng will try to reconnect to newsserver when
   ** connection lost.
   */
 #endif
@@ -1332,7 +1637,7 @@ struct option_t MuttVars[] = {
   ** like to use.
   ** .pp
   ** Using an external pager may have some disadvantages: Additional
-  ** keystrokes are necessary because you can't call mutt functions
+  ** keystrokes are necessary because you can't call Mutt-ng functions
   ** directly from the pager, and screen resizes cause lines longer than
   ** the screen width to be badly formatted in the help menu.
   */
@@ -1341,7 +1646,7 @@ struct option_t MuttVars[] = {
   ** .pp
   ** This variable controls the number of lines of context that are given
   ** when displaying the next or previous page in the internal pager.  By
-  ** default, Mutt will display the line after the last one on the screen
+  ** default, Mutt-ng will display the line after the last one on the screen
   ** at the top of the next page (0 lines of context).
   */
   { "pager_format",    DT_STR,  R_PAGER, UL &PagerFmt, UL "-%Z- %C/%m: %-20.20n   %s" },
@@ -1378,7 +1683,7 @@ struct option_t MuttVars[] = {
   { "crypt_autosign",  DT_BOOL, R_NONE, OPTCRYPTAUTOSIGN, 0 },
   /*
   ** .pp
-  ** Setting this variable will cause Mutt to always attempt to
+  ** Setting this variable will cause Mutt-ng to always attempt to
   ** cryptographically sign outgoing messages.  This can be overridden
   ** by use of the \fIpgp-menu\fP, when signing is not required or
   ** encryption is requested as well. If ``$$smime_is_default'' is set,
@@ -1390,7 +1695,7 @@ struct option_t MuttVars[] = {
   { "crypt_autoencrypt",       DT_BOOL, R_NONE, OPTCRYPTAUTOENCRYPT, 0 },
   /*
   ** .pp
-  ** Setting this variable will cause Mutt to always attempt to PGP
+  ** Setting this variable will cause Mutt-ng to always attempt to PGP
   ** encrypt outgoing messages.  This is probably only useful in
   ** connection to the \fIsend-hook\fP command.  It can be overridden
   ** by use of the \fIpgp-menu\fP, when encryption is not required or
@@ -1402,7 +1707,7 @@ struct option_t MuttVars[] = {
   { "pgp_ignore_subkeys", DT_BOOL, R_NONE, OPTPGPIGNORESUB, 1},
   /*
   ** .pp
-  ** Setting this variable will cause Mutt to ignore OpenPGP subkeys. Instead,
+  ** Setting this variable will cause Mutt-ng to ignore OpenPGP subkeys. Instead,
   ** the principal key will inherit the subkeys' capabilities.  Unset this
   ** if you want to play interesting key selection games.
   ** (PGP only)
@@ -1434,14 +1739,14 @@ struct option_t MuttVars[] = {
   ** which are encrypted. This makes sense in combination with
   ** ``$$crypt_replyencrypt'', because it allows you to sign all
   ** messages which are automatically encrypted.  This works around
-  ** the problem noted in ``$$crypt_replysign'', that mutt is not able
+  ** the problem noted in ``$$crypt_replysign'', that Mutt-ng is not able
   ** to find out whether an encrypted message is also signed.
   ** (Crypto only)
   */
   { "crypt_timestamp", DT_BOOL, R_NONE, OPTCRYPTTIMESTAMP, 1 },
   /*
   ** .pp
-  ** If set, mutt will include a time stamp in the lines surrounding
+  ** If set, Mutt-ng will include a time stamp in the lines surrounding
   ** PGP or S/MIME output, so spoofing such lines is more difficult.
   ** If you are using colors to mark these lines, and rely on these,
   ** you may unset this setting.
@@ -1450,7 +1755,7 @@ struct option_t MuttVars[] = {
   { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0},
   /*
   ** .pp
-  ** If set, mutt will use a possibly-running gpg-agent process.
+  ** If set, Mutt-ng will use a possibly-running gpg-agent process.
   ** (PGP only)
   */
   { "pgp_verify_sig",   DT_SYN,  R_NONE, UL "crypt_verify_sig", 0},
@@ -1465,9 +1770,9 @@ struct option_t MuttVars[] = {
   { "smime_is_default", DT_BOOL,  R_NONE, OPTSMIMEISDEFAULT, 0},
   /*
   ** .pp
-  ** The default behaviour of mutt is to use PGP on all auto-sign/encryption
+  ** The default behaviour of Mutt-ng is to use PGP on all auto-sign/encryption
   ** operations. To override and to use OpenSSL instead this must be set.
-  ** However, this has no effect while replying, since mutt will automatically 
+  ** However, this has no effect while replying, since Mutt-ng will automatically 
   ** select the same application that was used to sign/encrypt the original
   ** message.  (Note that this variable can be overridden by unsetting $$crypt_autosmime.)
   ** (S/MIME only)
@@ -1483,8 +1788,8 @@ struct option_t MuttVars[] = {
   { "smime_decrypt_use_default_key",   DT_BOOL, R_NONE, OPTSDEFAULTDECRYPTKEY, 1 },
   /*
   ** .pp
-  ** If set (default) this tells mutt to use the default key for decryption. Otherwise,
-  ** if manage multiple certificate-key-pairs, mutt will try to use the mailbox-address
+  ** If set (default) this tells Mutt-ng to use the default key for decryption. Otherwise,
+  ** if manage multiple certificate-key-pairs, Mutt-ng will try to use the mailbox-address
   ** to determine the key to use. It will ask you to supply a key, if it can't find one.
   ** (S/MIME only)
   */
@@ -1521,7 +1826,7 @@ struct option_t MuttVars[] = {
   { "pgp_check_exit",  DT_BOOL, R_NONE, OPTPGPCHECKEXIT, 1 },
   /*
   ** .pp
-  ** If set, mutt will check the exit code of the PGP subprocess when
+  ** If set, Mutt-ng will check the exit code of the PGP subprocess when
   ** signing or encrypting.  A non-zero exit code means that the
   ** subprocess failed.
   ** (PGP only)
@@ -1543,10 +1848,52 @@ struct option_t MuttVars[] = {
   ** 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-ng 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-ng might automatically use PGP/MIME for messages
+  ** which consist of more than a single MIME part.  Mutt-ng 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-ng 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-ng
+  ** internals for previously checked/flagged messages.
+  ** .pp
+  ** Note that Mutt-ng might automatically use PGP/MIME for messages
+  ** which consist of more than a single MIME part.  Mutt-ng 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
-  ** If set, mutt will display non-usable keys on the PGP key selection
+  ** If set, Mutt-ng will display non-usable keys on the PGP key selection
   ** menu.  This includes keys which have been revoked, have expired, or
   ** have been marked as ``disabled'' by the user.
   ** (PGP only)
@@ -1562,7 +1909,7 @@ struct option_t MuttVars[] = {
   { "pgp_strict_enc",  DT_BOOL, R_NONE, OPTPGPSTRICTENC, 1 },
   /*
   ** .pp
-  ** If set, Mutt will automatically encode PGP/MIME signed messages as
+  ** If set, Mutt-ng will automatically encode PGP/MIME signed messages as
   ** \fIquoted-printable\fP.  Please note that unsetting this variable may
   ** lead to problems with non-verifyable PGP signatures, so only change
   ** this if you know what you are doing.
@@ -1572,7 +1919,7 @@ struct option_t MuttVars[] = {
   /*
   ** .pp
   ** The number of seconds after which a cached passphrase will expire if
-  ** not used.
+  ** not used. Default: 300.
   ** (PGP only)
   */
   { "pgp_sort_keys",   DT_SORT|DT_SORT_KEYS, R_NONE, UL &PgpSortKeys, SORT_ADDRESS },
@@ -1592,38 +1939,29 @@ struct option_t MuttVars[] = {
   ** `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-ng 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 },
+  { "pgp_auto_decode", DT_BOOL, R_NONE, OPTPGPAUTODEC, 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)
+  ** If set, Mutt-ng will automatically attempt to decrypt traditional PGP
+  ** messages whenever the user performs an operation which ordinarily would
+  ** result in the contents of the message being operated on.  For example,
+  ** if the user displays a pgp-traditional message which has not been manually
+  ** checked with the check-traditional-pgp function, Mutt-ng will automatically
+  ** check the message for traditional pgp.
   */
 
+
   /* XXX Default values! */
   
   { "pgp_decode_command",      DT_STR, R_NONE, UL &PgpDecodeCommand, 0},
@@ -1653,7 +1991,7 @@ struct option_t MuttVars[] = {
   { "pgp_getkeys_command",     DT_STR, R_NONE, UL &PgpGetkeysCommand, 0},
   /*
   ** .pp
-  ** This command is invoked whenever mutt will need public key information.
+  ** This command is invoked whenever Mutt-ng will need public key information.
   ** %r is the only printf-like sequence used with this format.
   ** (PGP only)
   */
@@ -1725,7 +2063,7 @@ struct option_t MuttVars[] = {
   ** gpg --list-keys --with-colons.
   ** .pp
   ** This format is also generated by the pgpring utility which comes 
-  ** with mutt.
+  ** with Mutt-ng.
   ** (PGP only)
   */  
   { "pgp_list_pubring_command", DT_STR, R_NONE, UL &PgpListPubringCommand, 0},
@@ -1736,7 +2074,7 @@ struct option_t MuttVars[] = {
   ** gpg --list-keys --with-colons.
   ** .pp
   ** This format is also generated by the pgpring utility which comes 
-  ** with mutt.
+  ** with Mutt-ng.
   ** (PGP only)
   */  
   { "forward_decrypt", DT_BOOL, R_NONE, OPTFORWDECRYPT, 1 },
@@ -1770,7 +2108,7 @@ struct option_t MuttVars[] = {
   { "smime_keys",              DT_PATH, R_NONE, UL &SmimeKeys, 0 },
   /*
   ** .pp
-  ** Since there is no pubring/secring as with PGP, mutt has to handle
+  ** Since there is no pubring/secring as with PGP, Mutt-ng has to handle
   ** storage ad retrieval of keys/certs by itself. This is very basic right now,
   ** and stores keys and certificates in two different directories, both
   ** named as the hash-value retrieved from OpenSSL. There is an index file
@@ -1788,7 +2126,7 @@ struct option_t MuttVars[] = {
   { "smime_certificates",      DT_PATH, R_NONE, UL &SmimeCertificates, 0 },
   /*
   ** .pp
-  ** Since there is no pubring/secring as with PGP, mutt has to handle
+  ** Since there is no pubring/secring as with PGP, Mutt-ng has to handle
   ** storage and retrieval of keys by itself. This is very basic right
   ** now, and keys and certificates are stored in two different
   ** directories, both named as the hash-value retrieved from
@@ -1874,8 +2212,8 @@ struct option_t MuttVars[] = {
   /*
   ** .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},
@@ -1904,12 +2242,18 @@ struct option_t MuttVars[] = {
   { "smtp_auth_username", DT_STR, R_NONE, UL &SmtpAuthUser, 0 },
   /*
   ** .pp
+  ** Availability: SMTP
+  **
+  ** .pp
   ** Defines the username to use with SMTP AUTH.  Setting this variable will
-  ** cause mutt to attempt to use SMTP AUTH when sending.
+  ** cause Mutt-ng to attempt to use SMTP AUTH when sending.
   */
   { "smtp_auth_password", DT_STR, R_NONE, UL &SmtpAuthPass, 0 },
   /*
   ** .pp
+  ** Availability: SMTP
+  **
+  ** .pp
   ** Defines the password to use with SMTP AUTH.  If ``$$smtp_auth_username''
   ** is set, but this variable is not, you will be prompted for a password
   ** when sending.
@@ -1917,6 +2261,9 @@ struct option_t MuttVars[] = {
   { "smtp_host", DT_STR, R_NONE, UL &SmtpHost, 0 },
   /*
   ** .pp
+  ** Availability: SMTP
+  **
+  ** .pp
   ** Defines the SMTP host which will be used to deliver mail, as opposed
   ** to invoking the sendmail binary.  Setting this variable overrides the
   ** value of ``$$sendmail'', and any associated variables.
@@ -1924,6 +2271,9 @@ struct option_t MuttVars[] = {
   { "smtp_port", DT_NUM, R_NONE, UL &SmtpPort, 25 },
   /*
   ** .pp
+  ** Availability: SMTP
+  **
+  ** .pp
   ** Defines the port that the SMTP host is listening on for mail delivery.
   ** Must be specified as a number.
   ** .pp
@@ -1931,20 +2281,36 @@ struct option_t MuttVars[] = {
   ** servers will probably desire 587, the mail submission port.
   */
 #endif
-#if defined(USE_SSL)||defined(USE_NSS)
-# ifndef USE_NSS  
+#if defined(USE_SSL)||defined(USE_NSS)||defined(USE_GNUTLS)
+#ifdef USE_SSL
+  { "ssl_client_cert", DT_PATH, R_NONE, UL &SslClientCert, 0 },
+  /*
+  ** .pp
+  ** Availability: SSL
+  **
+  ** .pp
+  ** The file containing a client certificate and its associated private
+  ** key.
+  */
+#endif
+# if defined(USE_SSL)||defined(USE_GNUTLS)
   { "ssl_starttls", DT_QUAD, R_NONE, OPT_SSLSTARTTLS, M_YES },
   /*
   ** .pp
-  ** If set (the default), mutt will attempt to use STARTTLS on servers
-  ** advertising the capability. When unset, mutt will not attempt to
+  ** Availability: SSL or GNUTLS
+  **
+  ** .pp
+  ** If set (the default), Mutt-ng will attempt to use STARTTLS on servers
+  ** advertising the capability. When unset, Mutt-ng will not attempt to
   ** 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
+  ** Availability: SSL or NSS or GNUTLS
+  **
+  ** .pp
   ** This variable specifies the file where the certificates you trust
   ** are saved. When an unknown certificate is encountered, you are asked
   ** if you accept it or not. If you accept it, the certificate can also 
@@ -1957,46 +2323,83 @@ struct option_t MuttVars[] = {
   ** .pp
   ** Example: set certificate_file=~/.mutt/certificates
   */
+# ifndef USE_GNUTLS
   { "ssl_usesystemcerts", DT_BOOL, R_NONE, OPTSSLSYSTEMCERTS, 1 },
   /*
   ** .pp
-  ** If set to \fIyes\fP, mutt will use CA certificates in the
+  ** Availability: SSL or NSS
+  **
+  ** .pp
+  ** If set to \fIyes\fP, Mutt-ng will use CA certificates in the
   ** system-wide certificate store when checking if server certificate 
   ** is signed by a trusted CA.
   */
   { "entropy_file",    DT_PATH, R_NONE, UL &SslEntropyFile, 0 },
   /*
   ** .pp
+  ** Availability: SSL or NSS
+  **
+  ** .pp
   ** The file which includes random data that is used to initialize SSL
   ** library functions.
    */
   { "ssl_use_sslv2", DT_BOOL, R_NONE, OPTSSLV2, 1 },
   /*
   ** .pp
+  ** Availability: SSL or NSS
+  **
+  ** .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
+  ** Availability: SSL or NSS or GNUTLS
+  **
+  ** .pp
   ** This variables specifies whether to attempt to use SSLv3 in the
   ** SSL authentication process.
   */
   { "ssl_use_tlsv1", DT_BOOL, R_NONE, OPTTLSV1, 1 },
   /*
   ** .pp
+  ** Availability: SSL or NSS or GNUTLS
+  **
+  ** .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
+  ** Availability: GNUTLS
+  **
+  ** .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
-
   { "pipe_split",      DT_BOOL, R_NONE, OPTPIPESPLIT, 0 },
   /*
   ** .pp
   ** Used in connection with the \fIpipe-message\fP command and the ``tag-
   ** prefix'' operator.  If this variable is unset, when piping a list of
-  ** tagged messages Mutt will concatenate the messages and will pipe them
-  ** as a single folder.  When set, Mutt will pipe the messages one by one.
+  ** tagged messages Mutt-ng will concatenate the messages and will pipe them
+  ** as a single folder.  When set, Mutt-ng will pipe the messages one by one.
   ** In both cases the messages are piped in the current sorted order,
   ** and the ``$$pipe_sep'' separator is added after each message.
   */
@@ -2004,7 +2407,7 @@ struct option_t MuttVars[] = {
   /*
   ** .pp
   ** Used in connection with the \fIpipe-message\fP command.  When unset,
-  ** Mutt will pipe the messages without any preprocessing. When set, Mutt
+  ** Mutt-ng will pipe the messages without any preprocessing. When set, Mutt-ng
   ** will weed headers and will attempt to PGP/MIME decode the messages
   ** first.
   */
@@ -2018,12 +2421,15 @@ struct option_t MuttVars[] = {
   { "pop_authenticators", DT_STR, R_NONE, UL &PopAuthenticators, UL 0 },
   /*
   ** .pp
-  ** This is a colon-delimited list of authentication methods mutt may
-  ** attempt to use to log in to an POP server, in the order mutt should
+  ** 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
   ** try them.  Authentication methods are either 'user', 'apop' or any
   ** SASL mechanism, 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
+  ** (the default) Mutt-ng will try all available methods, in order from
   ** most-secure to least-secure.
   ** .pp
   ** Example: set pop_authenticators="digest-md5:apop:user"
@@ -2031,27 +2437,39 @@ struct option_t MuttVars[] = {
   { "pop_auth_try_all",        DT_BOOL, R_NONE, OPTPOPAUTHTRYALL, 1 },
   /*
   ** .pp
-  ** If set, Mutt will try all available methods. When unset, Mutt will
+  ** Availability: POP
+  **
+  ** .pp
+  ** If set, Mutt-ng will try all available methods. When unset, Mutt-ng will
   ** only fall back to other authentication methods if the previous
   ** methods are unavailable. If a method is available but authentication
-  ** fails, Mutt will not connect to the POP server.
+  ** fails, Mutt-ng will not connect to the POP server.
   */
   { "pop_checkinterval", DT_NUM, R_NONE, UL &PopCheckTimeout, 60 },
   /*
   ** .pp
+  ** Availability: POP
+  **
+  ** .pp
   ** This variable configures how often (in seconds) POP should look for
   ** new mail.
   */
   { "pop_delete",      DT_QUAD, R_NONE, OPT_POPDELETE, M_ASKNO },
   /*
   ** .pp
-  ** If set, Mutt will delete successfully downloaded messages from the POP
-  ** server when using the fetch-mail function.  When unset, Mutt will
+  ** Availability: POP
+  **
+  ** .pp
+  ** If set, Mutt-ng will delete successfully downloaded messages from the POP
+  ** server when using the fetch-mail function.  When unset, Mutt-ng will
   ** download messages but also leave them on the POP server.
   */
   { "pop_host",                DT_STR,  R_NONE, UL &PopHost, UL "" },
   /*
   ** .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, ie:
   ** .pp
@@ -2060,19 +2478,28 @@ struct option_t MuttVars[] = {
   { "pop_last",                DT_BOOL, R_NONE, OPTPOPLAST, 0 },
   /*
   ** .pp
-  ** If this variable is set, mutt will try to use the "LAST" POP command
+  ** Availability: POP
+  **
+  ** .pp
+  ** If this variable is set, Mutt-ng will try to use the "LAST" POP command
   ** for retrieving only unread messages from the POP server when using
   ** the fetch-mail function.
   */
   { "pop_reconnect",   DT_QUAD, R_NONE, OPT_POPRECONNECT, M_ASKYES },
   /*
   ** .pp
-  ** Controls whether or not Mutt will try to reconnect to POP server when
+  ** Availability: POP
+  **
+  ** .pp
+  ** Controls whether or not Mutt-ng will try to reconnect to POP server when
   ** connection lost.
   */
   { "pop_user",                DT_STR,  R_NONE, UL &PopUser, 0 },
   /*
   ** .pp
+  ** Availability: POP
+  **
+  ** .pp
   ** Your login name on the POP server.
   ** .pp
   ** This variable defaults to your user name on the local machine.
@@ -2080,17 +2507,20 @@ struct option_t MuttVars[] = {
   { "pop_pass",                DT_STR,  R_NONE, UL &PopPass, UL "" },
   /*
   ** .pp
-  ** Specifies the password for your POP account.  If unset, Mutt will
+  ** Availability: POP
+  **
+  ** .pp
+  ** Specifies the password for your POP account.  If unset, Mutt-ng will
   ** prompt you for your password when you open POP mailbox.
   ** \fBWarning\fP: you should only use this option when you are on a
-  ** fairly secure machine, because the superuser can read your muttrc
+  ** fairly secure machine, because the superuser can read your muttngrc
   ** even if you are the only one who can read the file.
   */
 #endif /* USE_POP */
   { "post_indent_string",DT_STR, R_NONE, UL &PostIndentString, UL "" },
   /*
   ** .pp
-  ** Similar to the ``$$attribution'' variable, Mutt will append this
+  ** Similar to the ``$$attribution'' variable, Mutt-ng will append this
   ** string after the inclusion of a message which is being replied to.
   */
   { "post_indent_str",  DT_SYN,  R_NONE, UL "post_indent_string", 0 },
@@ -2100,7 +2530,10 @@ struct option_t MuttVars[] = {
   { "post_moderated", DT_QUAD, R_NONE, OPT_TOMODERATED, M_ASKYES },
   /*
   ** .pp
-  ** If set to \fIyes\fP, Mutt will post article to newsgroup that have
+  ** Availability: NNTP
+  **
+  ** .pp
+  ** If set to \fIyes\fP, Mutt-ng will post article to newsgroup that have
   ** not permissions to posting (e.g. moderated).  \fBNote:\fP if newsserver
   ** does not support posting to that newsgroup or totally read-only, that
   ** posting will not have an effect.
@@ -2115,8 +2548,8 @@ struct option_t MuttVars[] = {
   { "postponed",       DT_PATH, R_NONE, UL &Postponed, UL "~/postponed" },
   /*
   ** .pp
-  ** Mutt allows you to indefinitely ``$postpone sending a message'' which
-  ** you are editing.  When you choose to postpone a message, Mutt saves it
+  ** Mutt-ng allows you to indefinitely ``$postpone sending a message'' which
+  ** you are editing.  When you choose to postpone a message, Mutt-ng saves it
   ** in the mailbox specified by this variable.  Also see the ``$$postpone''
   ** variable.
   */
@@ -2124,10 +2557,10 @@ struct option_t MuttVars[] = {
   { "preconnect",      DT_STR, R_NONE, UL &Preconnect, UL 0},
   /*
   ** .pp
-  ** If set, a shell command to be executed if mutt fails to establish
+  ** If set, a shell command to be executed if Mutt-ng fails to establish
   ** a connection to the server. This is useful for setting up secure
   ** connections, e.g. with ssh(1). If the command returns a  nonzero
-  ** status, mutt gives up opening the server. Example:
+  ** status, Mutt-ng gives up opening the server. Example:
   ** .pp
   ** preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net
   **                   sleep 20 < /dev/null > /dev/null"
@@ -2142,8 +2575,9 @@ struct option_t MuttVars[] = {
   { "print",           DT_QUAD, R_NONE, OPT_PRINT, M_ASKNO },
   /*
   ** .pp
-  ** Controls whether or not Mutt asks for confirmation before printing.
-  ** This is useful for people (like me) who accidentally hit ``p'' often.
+  ** Controls whether or not Mutt-ng really prints messages.
+  ** This is set to \fIask-no\fP by default, because some people
+  ** accidentally hit ``p'' often (like me).
   */
   { "print_command",   DT_PATH, R_NONE, UL &PrintCmd, UL "lpr" },
   /*
@@ -2181,14 +2615,14 @@ struct option_t MuttVars[] = {
   /*
   ** .pp
   ** If you use an \fIexternal\fP ``$$pager'', setting this variable will
-  ** cause Mutt to prompt you for a command when the pager exits rather
-  ** than returning to the index menu.  If unset, Mutt will return to the
+  ** cause Mutt-ng to prompt you for a command when the pager exits rather
+  ** than returning to the index menu.  If unset, Mutt-ng will return to the
   ** index menu when the external pager exits.
   */
   { "query_command",   DT_PATH, R_NONE, UL &QueryCmd, UL "" },
   /*
   ** .pp
-  ** This specifies the command that mutt will use to make external address
+  ** This specifies the command that Mutt-ng will use to make external address
   ** queries.  The string should contain a %s, which will be substituted
   ** with the query string the user types.  See ``$query'' for more
   ** information.
@@ -2197,7 +2631,7 @@ struct option_t MuttVars[] = {
   /*
   ** .pp
   ** This variable controls whether ``quit'' and ``exit'' actually quit
-  ** from mutt.  If it set to yes, they do quit, if it is set to no, they
+  ** from Mutt-ng.  If it set to yes, they do quit, if it is set to no, they
   ** have no effect, and if it is set to ask-yes or ask-no, you are
   ** prompted for confirmation when you try to quit.
   */
@@ -2228,9 +2662,9 @@ struct option_t MuttVars[] = {
   { "read_inc",                DT_NUM,  R_NONE, UL &ReadInc, 10 },
   /*
   ** .pp
-  ** If set to a value greater than 0, Mutt will display which message it
+  ** If set to a value greater than 0, Mutt-ng will display which message it
   ** is currently on when reading a mailbox.  The message is printed after
-  ** \fIread_inc\fP messages have been read (e.g., if set to 25, Mutt will
+  ** \fIread_inc\fP messages have been read (e.g., if set to 25, Mutt-ng will
   ** print a message when it reads message 25, and then again when it gets
   ** to message 50).  This variable is meant to indicate progress when
   ** reading large mailboxes which may take some time.
@@ -2257,7 +2691,7 @@ struct option_t MuttVars[] = {
   { "recall",          DT_QUAD, R_NONE, OPT_RECALL, M_ASKYES },
   /*
   ** .pp
-  ** Controls whether or not you are prompted to recall postponed messages
+  ** Controls whether or not Mutt-ng recalls postponed messages
   ** when composing a new message.  Also see ``$$postponed''.
   ** .pp
   ** Setting this variable to ``yes'' is not generally useful, and thus not
@@ -2284,15 +2718,15 @@ struct option_t MuttVars[] = {
   { "reply_self",      DT_BOOL, R_NONE, OPTREPLYSELF, 0 },
   /*
   ** .pp
-  ** If unset and you are replying to a message sent by you, Mutt will
+  ** If unset and you are replying to a message sent by you, Mutt-ng will
   ** assume that you want to reply to the recipients of that message rather
   ** than to yourself.
   */
   { "reply_to",                DT_QUAD, R_NONE, OPT_REPLYTO, M_ASKYES },
   /*
   ** .pp
-  ** If set, Mutt will ask you if you want to use the address listed in the
-  ** Reply-To: header field when replying to a message.  If you answer no,
+  ** If set, when replying to a message, Mutt-ng will use the address listed
+  ** in the Reply-to: header as the recipient of the reply.  If unset,
   ** it will use the address in the From: header field instead.  This
   ** option is useful for reading a mailing list that sets the Reply-To:
   ** header field to the list address and you want to send a private
@@ -2308,7 +2742,7 @@ struct option_t MuttVars[] = {
   { "reverse_alias",   DT_BOOL, R_BOTH, OPTREVALIAS, 0 },
   /*
   ** .pp
-  ** This variable controls whether or not Mutt will display the "personal"
+  ** This variable controls whether or not Mutt-ng will display the "personal"
   ** name from your aliases in the index menu if it finds an alias that
   ** matches the message's sender.  For example, if you have the following
   ** alias:
@@ -2334,22 +2768,24 @@ struct option_t MuttVars[] = {
   ** 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 },
   /*
   ** .pp
   ** This variable fine-tunes the behaviour of the $reverse_name feature.
-  ** When it is set, mutt will use the address from incoming messages as-is,
-  ** possibly including eventual real names.  When it is unset, mutt will
+  ** When it is set, Mutt-ng will use the address from incoming messages as-is,
+  ** possibly including eventual real names.  When it is unset, Mutt-ng will
   ** override any such real names with the setting of the $realname variable.
   */
   { "rfc2047_parameters", DT_BOOL, R_NONE, OPTRFC2047PARAMS, 0 },
   /*
   ** .pp
-  ** When this variable is set, Mutt will decode RFC-2047-encoded MIME 
-  ** parameters. You want to set this variable when mutt suggests you
+  ** When this variable is set, Mutt-ng will decode RFC-2047-encoded MIME 
+  ** parameters. You want to set this variable when Mutt-ng suggests you
   ** to save attachments to files named like this: 
   ** =?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?=
   ** .pp
@@ -2360,13 +2796,13 @@ struct option_t MuttVars[] = {
   ** prohibited by the standard, but nevertheless encountered in the
   ** wild.
   ** Also note that setting this parameter will \fInot\fP have the effect 
-  ** that mutt \fIgenerates\fP this kind of encoding.  Instead, mutt will
+  ** that Mutt-ng \fIgenerates\fP this kind of encoding.  Instead, Mutt-ng will
   ** unconditionally use the encoding specified in RFC 2231.
   */
   { "save_address",    DT_BOOL, R_NONE, OPTSAVEADDRESS, 0 },
   /*
   ** .pp
-  ** If set, mutt will take the sender's full address when choosing a
+  ** If set, Mutt-ng will take the sender's full address when choosing a
   ** default folder for saving a mail. If ``$$save_name'' or ``$$force_name''
   ** is set too, the selection of the fcc folder will be changed as well.
   */
@@ -2377,7 +2813,7 @@ struct option_t MuttVars[] = {
   ** when closed (the exception is ``$$spoolfile'' which is never removed).
   ** If set, mailboxes are never removed.
   ** .pp
-  ** \fBNote:\fP This only applies to mbox and MMDF folders, Mutt does not
+  ** \fBNote:\fP This only applies to mbox and MMDF folders, Mutt-ng does not
   ** delete MH and Maildir directories.
   */
   { "save_name",       DT_BOOL, R_NONE, OPTSAVENAME, 0 },
@@ -2405,8 +2841,8 @@ struct option_t MuttVars[] = {
   /*
   ** .pp
   ** Messages which have been assigned a score equal to or lower than the value
-  ** of this variable are automatically marked for deletion by mutt.  Since
-  ** mutt scores are always greater than or equal to zero, the default setting
+  ** of this variable are automatically marked for deletion by Mutt-ng.  Since
+  ** Mutt-ng scores are always greater than or equal to zero, the default setting
   ** of this variable will never mark a message for deletion.
   */
   { "score_threshold_flag", DT_NUM, R_NONE, UL &ScoreThresholdFlag, 9999 },
@@ -2419,14 +2855,14 @@ struct option_t MuttVars[] = {
   /*
   ** .pp
   ** Messages which have been assigned a score equal to or lower than the value
-  ** of this variable are automatically marked as read by mutt.  Since
-  ** mutt scores are always greater than or equal to zero, the default setting
+  ** of this variable are automatically marked as read by Mutt-ng.  Since
+  ** Mutt-ng scores are always greater than or equal to zero, the default setting
   ** of this variable will never mark a message read.
   */
   { "send_charset",    DT_STR,  R_NONE, UL &SendCharset, UL "us-ascii:iso-8859-1:utf-8" },
   /*
   ** .pp
-  ** A list of character sets for outgoing messages. Mutt will use the
+  ** A list of character sets for outgoing messages. Mutt-ng will use the
   ** first character set into which the text can be converted exactly.
   ** If your ``$$charset'' is not iso-8859-1 and recipients may not
   ** understand UTF-8, it is advisable to include in the list an
@@ -2437,8 +2873,8 @@ struct option_t MuttVars[] = {
   { "sendmail",                DT_PATH, R_NONE, UL &Sendmail, UL SENDMAIL " -oem -oi" },
   /*
   ** .pp
-  ** Specifies the program and arguments used to deliver mail sent by Mutt.
-  ** Mutt expects that the specified program interprets additional
+  ** Specifies the program and arguments used to deliver mail sent by Mutt-ng.
+  ** Mutt-ng expects that the specified program interprets additional
   ** arguments as recipient addresses.
   */
   { "sendmail_wait",   DT_NUM,  R_NONE, UL &SendmailWait, 0 },
@@ -2447,7 +2883,7 @@ struct option_t MuttVars[] = {
   ** Specifies the number of seconds to wait for the ``$$sendmail'' process
   ** to finish before giving up and putting delivery in the background.
   ** .pp
-  ** Mutt interprets the value of this variable as follows:
+  ** Mutt-ng interprets the value of this variable as follows:
   ** .dl
   ** .dt >0 .dd number of seconds to wait for sendmail to finish before continuing
   ** .dt 0  .dd wait forever for sendmail to finish
@@ -2468,12 +2904,30 @@ struct option_t MuttVars[] = {
   { "save_unsubscribed",DT_BOOL, R_NONE, OPTSAVEUNSUB, 0 },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** When \fIset\fP, info about unsubscribed newsgroups will be saved into
   ** ``newsrc'' file and into cache.
   */
+#endif
+  { "shorten_hierarchy", DT_BOOL, R_NONE, OPTSHORTENHIERARCHY, 0 },
+  /*
+  ** .pp
+  ** When \fIset\fP, the "hierarchy" of the sidebar entries will be shortened
+  ** only if they cannot be printed in full length (because ``$$sidebar_width''
+  ** is set to a too low value). For example, if the newsgroup name 
+  ** ``de.alt.sysadmin.recovery'' doesn't fit on the screen, it'll get shortened
+  ** ``d.a.s.recovery'' while ``de.alt.d0'' still would and thus will not get 
+  ** shortened.
+  */
+#ifdef USE_NNTP
   { "show_new_news",  DT_BOOL, R_NONE, OPTSHOWNEWNEWS, 1 },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** If \fIset\fP, newsserver will be asked for new newsgroups on entering
   ** the browser.  Otherwise, it will be done only once for a newsserver.
   ** Also controls whether or not number of new articles of subscribed
@@ -2482,6 +2936,9 @@ struct option_t MuttVars[] = {
   { "show_only_unread",  DT_BOOL, R_NONE, OPTSHOWONLYUNREAD, 0 },
   /*
   ** .pp
+  ** Availability: NNTP
+  **
+  ** .pp
   ** If \fIset\fP, only subscribed newsgroups that contain unread articles
   ** will be displayed in browser.
   */
@@ -2493,7 +2950,7 @@ struct option_t MuttVars[] = {
   ** ``$$signature''.  It is \fBstrongly\fP recommended that you not unset
   ** this variable unless your ``signature'' contains just your name.  The
   ** reason for this is because many software packages use ``-- \n'' to
-  ** detect your signature.  For example, Mutt has the ability to highlight
+  ** detect your signature.  For example, Mutt-ng has the ability to highlight
   ** the signature in a different color in the builtin pager.
   */
   { "sig_on_top",      DT_BOOL, R_NONE, OPTSIGONTOP, 0},
@@ -2512,14 +2969,24 @@ struct option_t MuttVars[] = {
   ** assumed that filename is a shell command and input should be read from
   ** its stdout.
   */
+  { "signoff_string",  DT_STR, R_NONE, UL &SignOffString, UL 0 },
+  /*
+  ** .pp
+  ** If set, this string will be inserted before the signature. This is useful
+  ** for people that want to sign off every message they send with their name.
+  ** .pp
+  ** If you want to insert your website's URL, additional contact information or 
+  ** witty quotes into your mails, better use a signature file instead of
+  ** the signoff string.
+  */
   { "simple_search",   DT_STR,  R_NONE, UL &SimpleSearch, UL "~f %s | ~s %s" },
   /*
   ** .pp
-  ** Specifies how Mutt should expand a simple search into a real search
+  ** Specifies how Mutt-ng should expand a simple search into a real search
   ** pattern.  A simple search is one that does not contain any of the ~
   ** operators.  See ``$patterns'' for more information on search patterns.
   ** .pp
-  ** For example, if you simply type joe at a search or limit prompt, Mutt
+  ** For example, if you simply type joe at a search or limit prompt, Mutt-ng
   ** will automatically expand it to the value specified by this variable.
   ** For the default value it would be:
   ** .pp
@@ -2561,6 +3028,7 @@ struct option_t MuttVars[] = {
   ** .  mailbox-order (unsorted)
   ** .  score
   ** .  size
+  ** .  spam
   ** .  subject
   ** .  threads
   ** .  to
@@ -2587,7 +3055,7 @@ struct option_t MuttVars[] = {
   ** When sorting by threads, this variable controls how threads are sorted
   ** in relation to other threads, and how the branches of the thread trees
   ** are sorted.  This can be set to any value that ``$$sort'' can, except
-  ** threads (in that case, mutt will just use date-sent).  You can also
+  ** threads (in that case, Mutt-ng will just use date-sent).  You can also
   ** specify the last- prefix in addition to the reverse- prefix, but last-
   ** must come after reverse-.  The last- prefix causes messages to be
   ** sorted against its siblings by which has the last descendant, using
@@ -2598,7 +3066,7 @@ struct option_t MuttVars[] = {
   ** 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
@@ -2619,18 +3087,27 @@ struct option_t MuttVars[] = {
   ** .pp
   ** This variable is only useful when sorting by threads with
   ** ``$$strict_threads'' unset.  In that case, it changes the heuristic
-  ** mutt uses to thread messages by subject.  With sort_re set, mutt will
+  ** Mutt-ng uses to thread messages by subject.  With sort_re set, Mutt-ng will
   ** only attach a message as the child of another message by subject if
   ** the subject of the child message starts with a substring matching the
-  ** setting of ``$$reply_regexp''.  With sort_re unset, mutt will attach
+  ** setting of ``$$reply_regexp''.  With sort_re unset, Mutt-ng will attach
   ** 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
-  ** If your spool mailbox is in a non-default place where Mutt cannot find
-  ** it, you can specify its location with this variable.  Mutt will
+  ** If your spool mailbox is in a non-default place where Mutt-ng cannot find
+  ** it, you can specify its location with this variable.  Mutt-ng will
   ** automatically set this variable to the value of the environment
   ** variable $$$MAIL if it is not set.
   */
@@ -2657,6 +3134,7 @@ struct option_t MuttVars[] = {
   ** .pp
   ** .dl
   ** .dt %b  .dd number of mailboxes with new mail *
+  ** .dt %B  .dd the short pathname of the current mailbox
   ** .dt %d  .dd number of deleted messages *
   ** .dt %f  .dd the full pathname of the current mailbox
   ** .dt %F  .dd number of flagged messages *
@@ -2667,7 +3145,7 @@ struct option_t MuttVars[] = {
   ** .dt %m  .dd the number of messages in the mailbox *
   ** .dt %M  .dd the number of messages shown (i.e., which match the current limit) *
   ** .dt %n  .dd number of new messages in the mailbox *
-  ** .dt %o  .dd number of old unread messages
+  ** .dt %o  .dd number of old unread messages *
   ** .dt %p  .dd number of postponed messages *
   ** .dt %P  .dd percentage of the way through the index
   ** .dt %r  .dd modified/read-only/won't-write/attach-message indicator,
@@ -2676,7 +3154,7 @@ struct option_t MuttVars[] = {
   ** .dt %S  .dd current aux sorting method ($$sort_aux)
   ** .dt %t  .dd number of tagged messages *
   ** .dt %u  .dd number of unread messages *
-  ** .dt %v  .dd Mutt version string
+  ** .dt %v  .dd Mutt-ng version string
   ** .dt %V  .dd currently active limit pattern, if any *
   ** .dt %>X .dd right justify the rest of the string and pad with "X"
   ** .dt %|X .dd pad to the end of the line with "X"
@@ -2694,8 +3172,8 @@ struct option_t MuttVars[] = {
   ** .pp
   ** where \fIsequence_char\fP is a character from the table above, and
   ** \fIoptional_string\fP is the string you would like printed if
-  ** \fIstatus_char\fP is nonzero.  \fIoptional_string\fP \fBmay\fP contain
-  ** other sequence as well as normal text, but you may \fBnot\fP nest
+  ** \fIsequence_char\fP is nonzero.  \fIoptional_string\fP \fBmay\fP contain
+  ** other sequences as well as normal text, but you may \fBnot\fP nest
   ** optional strings.
   ** .pp
   ** Here is an example illustrating how to optionally print the number of
@@ -2713,7 +3191,7 @@ struct option_t MuttVars[] = {
   ** lowercase, you would use:
   ** %_h
   ** .pp
-  ** If you prefix the sequence character with a colon (:) character, mutt
+  ** If you prefix the sequence character with a colon (:) character, Mutt-ng
   ** will replace any dots in the expansion by underscores. This might be helpful 
   ** with IMAP folders that don't like dots in folder names.
   */
@@ -2723,6 +3201,19 @@ struct option_t MuttVars[] = {
   ** Setting this variable causes the ``status bar'' to be displayed on
   ** the first line of the screen rather than near the bottom.
   */
+  { "strict_mime",    DT_BOOL, R_NONE, OPTSTRICTMIME, 1 },
+  /*
+  ** .pp
+  ** When unset, non MIME-compliant messages that doesn't have any
+  ** charset indication in ``Content-Type'' field can be displayed
+  ** (non MIME-compliant messages are often generated by old mailers
+  ** or buggy mailers like MS Outlook Express).
+  ** See also $$assumed_charset.
+  ** .pp
+  ** This option also replaces linear-white-space between encoded-word
+  ** and *text to a single space to prevent the display of MIME-encoded
+  ** ``Subject'' field from being devided into multiple lines.
+  */
   { "strict_threads",  DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTSTRICTTHREADS, 0 },
   /*
   ** .pp
@@ -2733,17 +3224,24 @@ struct option_t MuttVars[] = {
   ** personal mailbox where you might have several unrelated messages with
   ** the subject ``hi'' which will get grouped together.
   */
+  { "stuff_quoted",    DT_BOOL, R_BOTH, OPTSTUFFQUOTED, 0 },
+  /*
+  ** .pp
+  ** If set, attachments with flowed format will have their quoting ``stuffed'',
+  ** i.e. a space will be inserted between the quote characters and the actual
+  ** text.
+  */
   { "suspend",         DT_BOOL, R_NONE, OPTSUSPEND, 1 },
   /*
   ** .pp
-  ** When \fIunset\fP, mutt won't stop when the user presses the terminal's
-  ** \fIsusp\fP key, usually ``control-Z''. This is useful if you run mutt
-  ** inside an xterm using a command like xterm -e mutt.
+  ** When \fIunset\fP, Mutt-ng won't stop when the user presses the terminal's
+  ** \fIsusp\fP key, usually ``control-Z''. This is useful if you run Mutt-ng
+  ** inside an xterm using a command like xterm -e Mutt-ng.
   */
   { "text_flowed",     DT_BOOL, R_NONE, OPTTEXTFLOWED,  0 },
   /*
   ** .pp
-  ** When set, mutt will generate text/plain; format=flowed attachments.
+  ** When set, Mutt-ng will generate text/plain; format=flowed attachments.
   ** This format is easier to handle for some mailing software, and generally
   ** just looks like ordinary text.  To actually make use of this format's 
   ** features, you'll need support in your editor.
@@ -2753,7 +3251,7 @@ struct option_t MuttVars[] = {
   { "thread_received", DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTTHREADRECEIVED, 0 },
   /*
   ** .pp
-  ** When set, mutt uses the date received rather than the date sent
+  ** When set, Mutt-ng uses the date received rather than the date sent
   ** to thread messages by subject.
   */
   { "thorough_search", DT_BOOL, R_NONE, OPTTHOROUGHSRC, 0 },
@@ -2773,15 +3271,15 @@ struct option_t MuttVars[] = {
   { "timeout",         DT_NUM,  R_NONE, UL &Timeout, 600 },
   /*
   ** .pp
-  ** This variable controls the \fInumber of seconds\fP Mutt will wait
+  ** This variable controls the \fInumber of seconds\fP Mutt-ng will wait
   ** for a key to be pressed in the main menu before timing out and
-  ** checking for new mail.  A value of zero or less will cause Mutt
+  ** checking for new mail.  A value of zero or less will cause Mutt-ng
   ** to never time out.
   */
   { "tmpdir",          DT_PATH, R_NONE, UL &Tempdir, 0 },
   /*
   ** .pp
-  ** This variable allows you to specify where Mutt will place its
+  ** This variable allows you to specify where Mutt-ng will place its
   ** temporary files needed for displaying and composing messages.  If
   ** this variable is not set, the environment variable TMPDIR is
   ** used.  If TMPDIR is not set then "/tmp" is used.
@@ -2808,13 +3306,13 @@ struct option_t MuttVars[] = {
   ** purged.
   ** .pp
   ** NOTE: When you delete a message in the trash folder, it is really
-  ** deleted, so that you have a way to clean the trash.
+  ** deleted, so that there is no way to recover mail.
   */
 #ifdef USE_SOCKET
   { "tunnel",            DT_STR, R_NONE, UL &Tunnel, UL 0 },
   /*
   ** .pp
-  ** Setting this variable will cause mutt to open a pipe to a command
+  ** Setting this variable will cause Mutt-ng to open a pipe to a command
   ** instead of a raw socket. You may be able to use this to set up
   ** preauthenticated connections to your IMAP/POP3 server. Example:
   ** .pp
@@ -2824,6 +3322,12 @@ struct option_t MuttVars[] = {
   ** 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
@@ -2831,38 +3335,50 @@ struct option_t MuttVars[] = {
   ** of sendmail which supports the -B8BITMIME flag (such as sendmail
   ** 8.8.x) or you may not be able to send mail.
   ** .pp
-  ** When \fIset\fP, Mutt will invoke ``$$sendmail'' with the -B8BITMIME
+  ** When \fIset\fP, Mutt-ng will invoke ``$$sendmail'' with the -B8BITMIME
   ** flag when sending 8-bit messages to enable ESMTP negotiation.
   */
   { "use_domain",      DT_BOOL, R_NONE, OPTUSEDOMAIN, 1 },
   /*
   ** .pp
-  ** When set, Mutt will qualify all local addresses (ones without the
+  ** When set, Mutt-ng will qualify all local addresses (ones without the
   ** @host portion) with the value of ``$$hostname''.  If \fIunset\fP, no
   ** addresses will be qualified.
   */
   { "use_from",                DT_BOOL, R_NONE, OPTUSEFROM, 1 },
   /*
   ** .pp
-  ** When \fIset\fP, Mutt will generate the `From:' header field when
+  ** When \fIset\fP, Mutt-ng will generate the `From:' header field when
   ** sending messages.  If \fIunset\fP, no `From:' header field will be
   ** generated unless the user explicitly sets one using the ``$my_hdr''
   ** command.
   */
+#ifdef HAVE_LIBIDN
+  { "use_idn",         DT_BOOL, R_BOTH, OPTUSEIDN, 1},
+  /*
+  ** .pp
+  ** Availability: IDN
+  **
+  ** .pp
+  ** When \fIset\fP, Mutt-ng will show you international domain names decoded.
+  ** Note: You can use IDNs for addresses even if this is \fIunset\fP.
+  ** This variable only affects decoding.
+  */
+#endif /* HAVE_LIBIDN */
 #ifdef HAVE_GETADDRINFO
   { "use_ipv6",                DT_BOOL, R_NONE, OPTUSEIPV6, 1},
   /*
   ** .pp
-  ** When \fIset\fP, Mutt will look for IPv6 addresses of hosts it tries to
-  ** contact.  If this option is unset, Mutt will restrict itself to IPv4 addresses.
+  ** When \fIset\fP, Mutt-ng will look for IPv6 addresses of hosts it tries to
+  ** contact.  If this option is unset, Mutt-ng will restrict itself to IPv4 addresses.
   ** Normally, the default should work.
   */
 #endif /* HAVE_GETADDRINFO */
   { "user_agent",      DT_BOOL, R_NONE, OPTXMAILER, 1},
   /*
   ** .pp
-  ** When \fIset\fP, mutt will add a "User-Agent" header to outgoing
-  ** messages, indicating which version of mutt was used for composing
+  ** When \fIset\fP, Mutt-ng will add a "User-Agent" header to outgoing
+  ** messages, indicating which version of Mutt-ng was used for composing
   ** them.
   */
   { "visual",          DT_PATH, R_NONE, UL &Visual, 0 },
@@ -2874,7 +3390,7 @@ struct option_t MuttVars[] = {
   { "wait_key",                DT_BOOL, R_NONE, OPTWAITKEY, 1 },
   /*
   ** .pp
-  ** Controls whether Mutt will ask you to press a key after \fIshell-
+  ** Controls whether Mutt-ng will ask you to press a key after \fIshell-
   ** escape\fP, \fIpipe-message\fP, \fIpipe-entry\fP, \fIprint-message\fP,
   ** and \fIprint-entry\fP commands.
   ** .pp
@@ -2882,13 +3398,13 @@ struct option_t MuttVars[] = {
   ** that the corresponding mailcap entry has a \fIneedsterminal\fP flag,
   ** and the external program is interactive.
   ** .pp
-  ** When set, Mutt will always ask for a key. When unset, Mutt will wait
+  ** When set, Mutt-ng will always ask for a key. When unset, Mutt-ng will wait
   ** for a key only if the external command returned a non-zero status.
   */
   { "weed",            DT_BOOL, R_NONE, OPTWEED, 1 },
   /*
   ** .pp
-  ** When set, mutt will weed headers when when displaying, forwarding,
+  ** When set, Mutt-ng will weed headers when displaying, forwarding,
   ** printing, or replying to messages.
   */
   { "wrap_search",     DT_BOOL, R_NONE, OPTWRAPSEARCH, 1 },
@@ -2903,7 +3419,7 @@ struct option_t MuttVars[] = {
   /*
   ** .pp
   ** Controls the size of the margin remaining at the right side of
-  ** the terminal when mutt's pager does smart wrapping.
+  ** the terminal when Mutt-ng's pager does smart wrapping.
   */
   { "write_inc",       DT_NUM,  R_NONE, UL &WriteInc, 10 },
   /*
@@ -2917,8 +3433,8 @@ struct option_t MuttVars[] = {
   { "write_bcc",       DT_BOOL, R_NONE, OPTWRITEBCC, 1},
   /*
   ** .pp
-  ** Controls whether mutt writes out the Bcc header when preparing
-  ** messages to be sent.  Exim users may wish to use this.
+  ** Controls whether Mutt-ng writes out the Bcc header when preparing
+  ** messages to be sent.  Exim users may wish to unset this.
   */
   {"xterm_icon",       DT_STR,   R_BOTH, UL &XtermIcon,  UL "M%?n?AIL&ail?"},
   /*
@@ -2930,11 +3446,11 @@ struct option_t MuttVars[] = {
   {"xterm_set_titles", DT_BOOL,  R_BOTH, OPTXTERMSETTITLES, 0},
   /*
   ** .pp
-  ** Controls whether mutt sets the xterm title bar and icon name
+  ** Controls whether Mutt-ng sets the xterm title bar and icon name
   ** (as long as you're in an appropriate terminal). The default must
   ** be off to force in the validity checking.
   */
-  {"xterm_title",      DT_STR,   R_BOTH, UL &XtermTitle, UL "Mutt with %?m?%m messages&no messages?%?n? [%n New]?"},
+  {"xterm_title",      DT_STR,   R_BOTH, UL &XtermTitle, UL "Mutt-ng with %?m?%m messages&no messages?%?n? [%n New]?"},
   /*
   ** .pp
   ** Controls the format of the title bar of the xterm provided that
@@ -2945,7 +3461,10 @@ struct option_t MuttVars[] = {
   { "x_comment_to",   DT_BOOL, R_NONE, OPTXCOMMENTTO, 0 },
   /*
   ** .pp
-  ** If \fIset\fP, Mutt will add ``X-Comment-To:'' field (that contains full
+  ** Availability: NNTP
+  **
+  ** .pp
+  ** If \fIset\fP, Mutt-ng will add ``X-Comment-To:'' field (that contains full
   ** name of original article author) to article that followuped to newsgroup.
   */
 #endif
@@ -2953,6 +3472,132 @@ struct option_t MuttVars[] = {
   { NULL }
 };
 
+const struct feature_t Features[] = {
+  { "ncurses", 
+#ifdef NCURSES_VERSION
+    1
+#else
+    0
+#endif
+  }, { "slang",
+#ifdef USE_SLANG_CURSES
+    1
+#else
+    0
+#endif
+  }, { "iconv",
+#ifdef _LIBICONV_VERSION
+    1
+#else
+    0
+#endif
+  }, { "idn",
+#ifdef HAVE_LIBIDN
+    1
+#else
+    0
+#endif
+  }, { "dotlock",
+#ifdef USE_DOTLOCK
+    1
+#else
+    0
+#endif
+  }, { "standalone",
+#ifdef DL_STANDALONE
+    1
+#else
+    0
+#endif
+  }, { "pop",
+#ifdef USE_POP
+    1
+#else
+    0
+#endif
+  }, { "nntp",
+#ifdef USE_NNTP
+    1
+#else
+    0
+#endif
+  }, { "imap",
+#ifdef USE_IMAP
+    1
+#else
+    0
+#endif
+  }, { "ssl",
+#ifdef USE_SSL
+    1
+#else
+    0
+#endif
+  }, { "gnutls",
+#ifdef USE_GNUTLS
+    1
+#else
+    0
+#endif
+  }, { "sasl",
+#ifdef USE_SASL
+    1
+#else
+    0
+#endif
+  }, { "sasl2",
+#ifdef USE_SASL2
+    1
+#else
+    0
+#endif
+  }, { "libesmtp",
+#ifdef USE_LIBESMTP
+    1
+#else
+    0
+#endif
+  }, { "compressed",
+#ifdef USE_COMPRESSED
+    1
+#else
+    0
+#endif
+  }, { "color",
+#ifdef HAVE_COLOR
+    1
+#else
+    0
+#endif
+  }, { "classic_pgp",
+#ifdef CRYPT_BACKEND_CLASSIC_PGP
+    1
+#else
+    0
+#endif
+  }, { "classic_smime",
+#ifdef CRYPT_BACKEND_CLASSIC_SMIME
+    1
+#else
+    0
+#endif
+  }, { "gpgme",
+#ifdef CRYPT_BACKEND_GPGME
+    1
+#else
+    0
+#endif
+  }, { "header_cache",
+#ifdef USE_HCACHE
+    1
+#else
+    0
+#endif
+  },
+  /* last */
+  { NULL,       0 }
+};
+
 const struct mapping_t SortMethods[] = {
   { "date",            SORT_DATE },
   { "date-sent",       SORT_DATE },
@@ -2964,6 +3609,7 @@ const struct mapping_t SortMethods[] = {
   { "threads",         SORT_THREADS },
   { "to",              SORT_TO },
   { "score",           SORT_SCORE },
+  { "spam",            SORT_SPAM },
   { NULL,              0 }
 };
 
@@ -2982,6 +3628,7 @@ const struct mapping_t SortAuxMethods[] = {
                                         */
   { "to",              SORT_TO },
   { "score",           SORT_SCORE },
+  { "spam",            SORT_SPAM },
   { NULL,              0 }
 };
   
@@ -3013,13 +3660,18 @@ const struct mapping_t SortKeyMethods[] = {
 /* functions used to parse commands in a rc file */
 
 static int parse_list (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+#if 0
 static int parse_rx_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 *);
+#endif
+static int parse_spam_list (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unlist (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_unalias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_ifdef (BUFFER *, BUFFER *, unsigned long, BUFFER *);
 static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
 static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
 static int parse_source (BUFFER *, BUFFER *, unsigned long, BUFFER *);
@@ -3027,17 +3679,22 @@ static int parse_set (BUFFER *, BUFFER *, unsigned long, BUFFER *);
 static int parse_my_hdr (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_unsubscribe (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;
   int (*func) (BUFFER *, BUFFER *, unsigned long, BUFFER *);
   unsigned long data;
+  unsigned long data1;
 };
 
 struct command_t Commands[] = {
-  { "alternates",      parse_rx_list,          UL &Alternates },
-  { "unalternates",    parse_rx_unlist,        UL &Alternates },
+  { "alternates",      parse_alternates,       0 },
+  { "unalternates",    parse_unalternates,     0 },
 #ifdef USE_SOCKET
   { "account-hook",     mutt_parse_hook,        M_ACCOUNTHOOK },
 #endif
@@ -3054,12 +3711,19 @@ struct command_t Commands[] = {
   { "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 },
 #ifdef HAVE_ICONV
   { "iconv-hook",      mutt_parse_hook,        M_ICONVHOOK }, 
 #endif
   { "ignore",          parse_ignore,           0 },
-  { "lists",           parse_rx_list,          UL &MailLists },
+  { "lists",           parse_lists,            0 },
   { "macro",           mutt_parse_macro,       0 },
   { "mailboxes",       mutt_parse_mailboxes,   M_MAILBOXES },
   { "unmailboxes",     mutt_parse_mailboxes,   M_UNMAILBOXES },
@@ -3077,8 +3741,11 @@ struct command_t Commands[] = {
   { "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 },
@@ -3092,6 +3759,6 @@ struct command_t Commands[] = {
   { "unmy_hdr",                parse_unmy_hdr,         0 },
   { "unscore",         mutt_parse_unscore,     0 },
   { "unset",           parse_set,              M_SET_UNSET },
-  { "unsubscribe",     parse_rx_unlist,        UL &SubscribedLists },
+  { "unsubscribe",     parse_unsubscribe,      0 },
   { NULL }
 };