X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=hdrline.c;h=72a1674066d8d9c79a6c805e732b27a03065323e;hp=2ac88f1ef09df06cbd96a257a277bce3c2bd1ddc;hb=cdb80705105e4a788baeaef0511363a88bda1db5;hpb=fa7f733a61a6fe3143198791ab470ddf4d08fdbe diff --git a/hdrline.c b/hdrline.c index 2ac88f1..72a1674 100644 --- a/hdrline.c +++ b/hdrline.c @@ -14,11 +14,15 @@ #include "mutt.h" #include "mutt_curses.h" #include "sort.h" +#include "thread.h" #include "charset.h" -#include "mutt_crypt.h" +#include #include "mutt_idna.h" -#include "lib/str.h" +#include + +#include + #include "lib/rx.h" #include @@ -26,14 +30,14 @@ #include #include -int mutt_is_mail_list (ADDRESS * addr) +int mutt_is_mail_list (address_t * addr) { if (!rx_list_match (UnMailLists, addr->mailbox)) return rx_list_match (MailLists, addr->mailbox); return 0; } -int mutt_is_subscribed_list (ADDRESS * addr) +int mutt_is_subscribed_list (address_t * addr) { if (!rx_list_match (UnMailLists, addr->mailbox) && !rx_list_match (UnSubscribedLists, addr->mailbox)) @@ -46,7 +50,7 @@ int mutt_is_subscribed_list (ADDRESS * addr) * return 1. Otherwise, simply return 0. */ static int -check_for_mailing_list (ADDRESS * adr, char *pfx, char *buf, int buflen) +check_for_mailing_list (address_t * adr, const char *pfx, char *buf, int buflen) { for (; adr; adr = adr->next) { if (mutt_is_subscribed_list (adr)) { @@ -62,7 +66,7 @@ check_for_mailing_list (ADDRESS * adr, char *pfx, char *buf, int buflen) * If one is found, print the address of the list into buf, then return 1. * Otherwise, simply return 0. */ -static int check_for_mailing_list_addr (ADDRESS * adr, char *buf, int buflen) +static int check_for_mailing_list_addr (address_t * adr, char *buf, int buflen) { for (; adr; adr = adr->next) { if (mutt_is_subscribed_list (adr)) { @@ -75,7 +79,7 @@ static int check_for_mailing_list_addr (ADDRESS * adr, char *buf, int buflen) } -static int first_mailing_list (char *buf, size_t buflen, ADDRESS * a) +static int first_mailing_list (char *buf, size_t buflen, address_t * a) { for (; a; a = a->next) { if (mutt_is_subscribed_list (a)) { @@ -104,7 +108,7 @@ static void make_from (ENVELOPE * hdr, char *buf, size_t len, int do_lists) else if (me && hdr->cc) snprintf (buf, len, "Cc %s", mutt_get_name (hdr->cc)); else if (hdr->from) - strfcpy (buf, mutt_get_name (hdr->from), len); + m_strcpy(buf, len, mutt_get_name(hdr->from)); else *buf = 0; } @@ -128,12 +132,12 @@ static void make_from_addr (ENVELOPE * hdr, char *buf, size_t len, else if (me && hdr->cc) snprintf (buf, len, "%s", hdr->cc->mailbox); else if (hdr->from) - strfcpy (buf, hdr->from->mailbox, len); + m_strcpy(buf, len, hdr->from->mailbox); else *buf = 0; } -static int user_in_addr (ADDRESS * a) +static int user_in_addr (address_t * a) { for (; a; a = a->next) if (mutt_addr_is_user (a)) @@ -205,6 +209,7 @@ int mutt_user_is_recipient (HEADER * h) * %u = user (login) name of author * %v = first name of author, unless from self * %W = where user is (organization) + * %X = number of MIME attachments * %y = `x-label:' field (if present) * %Y = `x-label:' field (if present, tree unfolded, and != parent's x-label) * %Z = status flags */ @@ -263,7 +268,7 @@ static const char *hdr_format_str (char *dest, !first_mailing_list (dest, destlen, hdr->env->cc)) dest[0] = 0; if (dest[0]) { - strfcpy (buf2, dest, sizeof (buf2)); + m_strcpy(buf2, sizeof(buf2), dest); mutt_format_s (dest, destlen, prefix, buf2); break; } @@ -272,13 +277,13 @@ static const char *hdr_format_str (char *dest, case 'b': if (ctx) { if ((p = strrchr (ctx->path, '/'))) - strfcpy (dest, p + 1, destlen); + m_strcpy(dest, destlen, p + 1); else - strfcpy (dest, ctx->path, destlen); + m_strcpy(dest, destlen, ctx->path); } else - strfcpy (dest, "(null)", destlen); - strfcpy (buf2, dest, sizeof (buf2)); + m_strcpy(dest, destlen, "(null)"); + m_strcpy(buf2, sizeof(buf2), dest); mutt_format_s (dest, destlen, prefix, buf2); break; @@ -484,7 +489,7 @@ static const char *hdr_format_str (char *dest, snprintf (dest, destlen, fmt, ctx->msgcount); } else - strfcpy (dest, "(null)", destlen); + m_strcpy(dest, destlen, "(null)"); break; case 'n': @@ -587,12 +592,12 @@ static const char *hdr_format_str (char *dest, snprintf (dest, destlen, fmt, (Tochars && ((i = mutt_user_is_recipient (hdr))) < - mutt_strlen (Tochars)) ? Tochars[i] : ' '); + m_strlen(Tochars)) ? Tochars[i] : ' '); break; case 'u': if (hdr->env->from && hdr->env->from->mailbox) { - strfcpy (buf2, mutt_addr_for_display (hdr->env->from), sizeof (buf2)); + m_strcpy(buf2, sizeof(buf2), mutt_addr_for_display(hdr->env->from)); if ((p = strpbrk (buf2, "%@"))) *p = 0; } @@ -628,39 +633,50 @@ static const char *hdr_format_str (char *dest, optional = 0; break; + case 'X': + { + int count = 0; + + if (option (OPTCOUNTATTACH)) { + if (!hdr->content->parts) + mutt_parse_mime_message(ctx, hdr); + count = mutt_count_body_parts(hdr, 0); + } + + /* The recursion allows messages without depth to return 0. */ + if (optional) + optional = count != 0; + + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, count); + } + break; + case 'Z': ch = ' '; - if (WithCrypto && hdr->security & GOODSIGN) + if (hdr->security & GOODSIGN) ch = 'S'; - else if (WithCrypto && hdr->security & ENCRYPT) + else if (hdr->security & ENCRYPT) ch = 'P'; - else if (WithCrypto && hdr->security & SIGN) + else if (hdr->security & SIGN) ch = 's'; - else if ((WithCrypto & APPLICATION_PGP) && hdr->security & PGPKEY) + else if (hdr->security & PGPKEY) ch = 'K'; - snprintf (buf2, sizeof (buf2), - "%c%c%c", (THREAD_NEW ? 'n' : (THREAD_OLD ? 'o' : - ((hdr->read - && (ctx - && ctx->msgnotreadyet != - hdr->msgno)) - ? (hdr-> - replied ? 'r' : ' ') : (hdr-> - old ? - 'O' : - 'N')))), + snprintf(buf2, sizeof (buf2), "%c%c%c", + (THREAD_NEW ? 'n' + : (THREAD_OLD + ? 'o' + : ((hdr->read && (ctx && ctx->msgnotreadyet != hdr->msgno)) + ? (hdr->replied ? 'r' : ' ') + : (hdr->old ? 'O' : 'N')))), hdr->deleted ? 'D' : (hdr->attach_del ? 'd' : ch), - hdr->tagged ? '*' : (hdr-> - flagged ? '!' : (Tochars - && - ((i = - mutt_user_is_recipient - (hdr)) < - mutt_strlen (Tochars)) ? - Tochars[i] : ' '))); + hdr->tagged ? '*' + : (hdr->flagged ? '!' + : (Tochars && ((i = mutt_user_is_recipient(hdr)) < m_strlen(Tochars)) + ? Tochars[i] : ' '))); mutt_format_s (dest, destlen, prefix, buf2); break; @@ -683,7 +699,7 @@ static const char *hdr_format_str (char *dest, && (hdr->thread->parent && hdr->thread->parent->message && hdr->thread->parent->message->env->x_label)) htmp = hdr->thread->parent->message; - if (htmp && mutt_strcasecmp (hdr->env->x_label, + if (htmp && m_strcasecmp(hdr->env->x_label, htmp->env->x_label) == 0) i = 0; }