<<< Date Index >>>     <<< Thread Index >>>

[PATCH] alternates handling



The $alternates variable triggered some special handling which was
lost when it was replaced by an alternates command.  The attached
patch is intended to restore this behavior.

Comments welcome.
-- 
Thomas Roessler · Personal soap box at <http://log.does-not-exist.org/>.
diff -ur /tmp/mutt-dev/init.c mutt-dev/init.c
--- /tmp/mutt-dev/init.c        2004-08-30 16:07:08.000000000 -0400
+++ mutt-dev/init.c     2004-11-29 09:33:54.852821143 -0500
@@ -611,6 +611,28 @@
   return 0;
 }
 
+static void _alternates_clean (void)
+{
+  int i;
+  if (Context && Context->msgcount) 
+  {
+    for (i = 0; i < Context->msgcount; i++)
+      Context->hdrs[i]->recip_valid = 0;
+  }
+}
+
+static int parse_alternates (BUFFER *buf, BUFFER *s, unsigned long data, 
BUFFER *err)
+{
+  _alternates_clean();
+  return parse_rx_list (buf, s, data, err);
+}
+
+static int parse_unalternates (BUFFER *buf, BUFFER *s, unsigned long data, 
BUFFER *err)
+{
+  _alternates_clean();
+  return parse_rx_unlist (buf, s, data, err);
+}
+
 static int parse_spam_list (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER 
*err)
 {
   BUFFER templ;
@@ -1066,9 +1088,7 @@
 
          pp->rx = safe_calloc (1, sizeof (regex_t));
          pp->pattern = safe_strdup ((char *) p->init);
-         if (mutt_strcmp (p->option, "alternates") == 0)
-           flags |= REG_ICASE;
-         else if (mutt_strcmp (p->option, "mask") != 0)
+         if (mutt_strcmp (p->option, "mask") != 0)
            flags |= mutt_which_case ((const char *) p->init);
          if (mutt_strcmp (p->option, "mask") == 0 && *s == '!')
          {
@@ -1280,8 +1300,7 @@
        break;
       }
 
-      if (option(OPTATTACHMSG) && (!mutt_strcmp(MuttVars[idx].option, 
"alternates")
-                                  || !mutt_strcmp(MuttVars[idx].option, 
"reply_regexp")))
+      if (option(OPTATTACHMSG) && !mutt_strcmp(MuttVars[idx].option, 
"reply_regexp"))
       {
        snprintf (err->data, err->dsize, "Operation not permitted when in 
attach-message mode.");
        r = -1;
@@ -1297,11 +1316,8 @@
       {
        int not = 0;
 
-       /* $alternates is case-insensitive,
-          $mask is case-sensitive */
-       if (mutt_strcmp (MuttVars[idx].option, "alternates") == 0)
-         flags |= REG_ICASE;
-       else if (mutt_strcmp (MuttVars[idx].option, "mask") != 0)
+       /* $mask is case-sensitive */
+       if (mutt_strcmp (MuttVars[idx].option, "mask") != 0)
          flags |= mutt_which_case (tmp->data);
 
        p = tmp->data;
@@ -1356,15 +1372,6 @@
          }
 #undef CUR_ENV
        }
-       
-       if(Context && Context->msgcount &&
-          mutt_strcmp(MuttVars[idx].option, "alternates") == 0)
-       {
-         int i;
-         
-         for(i = 0; i < Context->msgcount; i++)
-           Context->hdrs[i]->recip_valid = 0;
-       }
       }
     }
     else if (DTYPE(MuttVars[idx].type) == DT_MAGIC)
diff -ur /tmp/mutt-dev/init.h mutt-dev/init.h
--- /tmp/mutt-dev/init.h        2004-08-30 16:09:06.000000000 -0400
+++ mutt-dev/init.h     2004-11-29 09:28:13.373136144 -0500
@@ -2824,6 +2824,9 @@
 static int parse_unmy_hdr (BUFFER *, BUFFER *, unsigned long, BUFFER *);
 static int parse_subscribe (BUFFER *, BUFFER *, unsigned long, BUFFER *);
 
+static int parse_alternates (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unalternates (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+
 struct command_t
 {
   char *name;
@@ -2832,8 +2835,8 @@
 };
 
 struct command_t Commands[] = {
-  { "alternates",      parse_rx_list,          UL &Alternates },
-  { "unalternates",    parse_rx_unlist,        UL &Alternates },
+  { "alternates",      parse_alternates,       UL &Alternates },
+  { "unalternates",    parse_unalternates,     UL &Alternates },
 #ifdef USE_SOCKET
   { "account-hook",     mutt_parse_hook,        M_ACCOUNTHOOK },
 #endif
Binary files /tmp/mutt-dev/init.o and mutt-dev/init.o differ
Binary files /tmp/mutt-dev/mutt and mutt-dev/mutt differ
Binary files /tmp/mutt-dev/patchlist.o and mutt-dev/patchlist.o differ

Attachment: pgpFf3UL8aKrR.pgp
Description: PGP signature