]> granicus.if.org Git - mutt/commitdiff
Fix match-all for the ~p, ~P modifiers.
authorThomas Roessler <roessler@does-not-exist.org>
Wed, 21 Oct 1998 22:46:13 +0000 (22:46 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Wed, 21 Oct 1998 22:46:13 +0000 (22:46 +0000)
hdrline.c
pattern.c
protos.h

index ed577baad8c7c12c6b14063d294bc67dbeb4428f..88b27e52fb538c0afe90350bc576cc3cab7d8755 100644 (file)
--- a/hdrline.c
+++ b/hdrline.c
@@ -161,24 +161,24 @@ static int user_in_addr (ADDRESS *a)
  * 3: user is in the CC list
  * 4: user is originator
  */
-static int user_is_recipient (HEADER *h)
+int mutt_user_is_recipient (HEADER *h)
 {
-  ENVELOPE *hdr = h->env;
+  ENVELOPE *env = h->env;
 
   if(!h->recip_valid)
   {
     h->recip_valid = 1;
     
-    if (mutt_addr_is_user (hdr->from))
+    if (mutt_addr_is_user (env->from))
       h->recipient = 4;
-    else if (user_in_addr (hdr->to))
+    else if (user_in_addr (env->to))
     {
-      if (hdr->to->next || hdr->cc)
+      if (env->to->next || env->cc)
        h->recipient = 2; /* non-unique recipient */
       else
        h->recipient = 1; /* unique recipient */
     }
-    else if (user_in_addr (hdr->cc))
+    else if (user_in_addr (env->cc))
       h->recipient = 3;
     else
       h->recipient = 0;
@@ -545,7 +545,7 @@ hdr_format_str (char *dest,
     case 'T':
       snprintf (fmt, sizeof (fmt), "%%%sc", prefix);
       snprintf (dest, destlen, fmt,
-               (Tochars && ((i = user_is_recipient (hdr))) < strlen (Tochars)) ? Tochars[i] : ' ');
+               (Tochars && ((i = mutt_user_is_recipient (hdr))) < strlen (Tochars)) ? Tochars[i] : ' ');
       break;
 
     case 'u':
@@ -606,7 +606,7 @@ hdr_format_str (char *dest,
                hdr->deleted ? 'D' : (hdr->attach_del ? 'd' : ch),
                hdr->tagged ? '*' :
                (hdr->flagged ? '!' :
-                (Tochars && ((i = user_is_recipient (hdr)) < strlen (Tochars)) ? Tochars[i] : ' ')));
+                (Tochars && ((i = mutt_user_is_recipient (hdr)) < strlen (Tochars)) ? Tochars[i] : ' ')));
       snprintf (dest, destlen, fmt, buf2);
       break;
 
index 10d9a80296f3458a7aecce918275a65d4735ce16..513a3f0390dc83bdbed822a6e31b68f1cf17b6f2 100644 (file)
--- a/pattern.c
+++ b/pattern.c
@@ -833,7 +833,13 @@ mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx,
       return (pat->not ^ (mutt_is_list_recipient (h->env->to) ||
                          mutt_is_list_recipient (h->env->cc)));
     case M_PERSONAL_RECIP:
-      return (pat->not ^ (match_user (h->env->to) || match_user (h->env->cc)));
+      if (pat->alladdr)
+      {
+       int i = mutt_user_is_recipient (h);
+       return (pat->not ^ ((i == 1) || (i == 3 && h->env->cc && !h->env->cc->next)));
+      }
+      else
+       return (pat->not ^ (match_user (h->env->to) || match_user (h->env->cc)));
     case M_PERSONAL_FROM:
       return (pat->not ^ (match_user (h->env->from)));
 #ifdef _PGPPATH
index 3c4a12f7ae82897cdd2c5f812862eb03c1b316af..234ee471bd6628d1019c40818e3c1ffa50774898 100644 (file)
--- a/protos.h
+++ b/protos.h
@@ -263,6 +263,7 @@ int mutt_search_command (int, int);
 int mutt_compose_menu (HEADER *, char *, size_t, HEADER *);
 int mutt_strcmp (const char *, const char *);
 int mutt_thread_set_flag (HEADER *, int, int, int);
+int mutt_user_is_recipient (HEADER *);
 int mutt_view_attachment (FILE*, BODY *, int);
 int mutt_wait_filter (pid_t);
 int mutt_which_case (const char *);