From: Thomas Roessler Date: Wed, 21 Oct 1998 22:46:13 +0000 (+0000) Subject: Fix match-all for the ~p, ~P modifiers. X-Git-Tag: mutt-0-94-15-rel~27 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=81817e80725b2aec981e96f6026732dbea9748e5;p=mutt Fix match-all for the ~p, ~P modifiers. --- diff --git a/hdrline.c b/hdrline.c index ed577baa..88b27e52 100644 --- 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; diff --git a/pattern.c b/pattern.c index 10d9a802..513a3f03 100644 --- 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 diff --git a/protos.h b/protos.h index 3c4a12f7..234ee471 100644 --- 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 *);