summaryrefslogtreecommitdiffstats
path: root/hdrline.c
diff options
context:
space:
mode:
authorThomas Roessler <roessler@does-not-exist.org>2000-05-09 15:19:26 +0000
committerThomas Roessler <roessler@does-not-exist.org>2000-05-09 15:19:26 +0000
commit3de049372c8ca458e096b8c8ece2d4f95da0fe82 (patch)
treebedf3c7648d8815163ff60f0a557a554fdc32545 /hdrline.c
parentee09e5f42399a6016f3e96dcbd03bab1effa07ff (diff)
Edmund Grimley Evans' UTF-8 patch.
Diffstat (limited to 'hdrline.c')
-rw-r--r--hdrline.c92
1 files changed, 53 insertions, 39 deletions
diff --git a/hdrline.c b/hdrline.c
index 7e63b5cb..9ee54bef 100644
--- a/hdrline.c
+++ b/hdrline.c
@@ -19,6 +19,7 @@
#include "mutt.h"
#include "mutt_curses.h"
#include "sort.h"
+#include "charset.h"
#ifdef HAVE_PGP
@@ -224,6 +225,36 @@ struct hdr_format_info
HEADER *hdr;
};
+static void hdr_format_s (char *dest,
+ size_t destlen,
+ const char *prefix,
+ char *s)
+{
+ int right_justify = 0;
+ char *p;
+ int min_width;
+ int max_width = INT_MAX;
+
+ if (*prefix == '-')
+ ++prefix, right_justify = 0;
+ min_width = strtol (prefix, &p, 10);
+ if (p > prefix)
+ {
+ if (*p == '.')
+ {
+ prefix = p + 1;
+ max_width = strtol (prefix, &p, 10);
+ if (p <= prefix)
+ max_width = INT_MAX;
+ }
+ }
+ else
+ min_width = 0;
+
+ mutt_format_string (dest, destlen, min_width, max_width,
+ right_justify, ' ', s, -1);
+}
+
static const char *
hdr_format_str (char *dest,
size_t destlen,
@@ -256,8 +287,7 @@ hdr_format_str (char *dest,
case 'a':
if(hdr->env->from && hdr->env->from->mailbox)
{
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, hdr->env->from->mailbox);
+ hdr_format_s (dest, destlen, prefix, hdr->env->from->mailbox);
}
else
dest[0] = '\0';
@@ -270,8 +300,7 @@ hdr_format_str (char *dest,
if (dest[0])
{
strfcpy (buf2, dest, sizeof(buf2));
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, buf2);
+ snprintf (dest, destlen, prefix, buf2);
break;
}
/* fall through if 'B' returns nothing */
@@ -286,15 +315,13 @@ hdr_format_str (char *dest,
}
else
strfcpy(dest, "(null)", destlen);
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
strfcpy (buf2, dest, sizeof(buf2));
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
break;
case 'c':
mutt_pretty_size (buf2, sizeof (buf2), (long) hdr->content->length);
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
break;
case 'C':
@@ -397,8 +424,7 @@ hdr_format_str (char *dest,
if (do_locales)
setlocale (LC_TIME, "C");
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
if (len > 0 && op != 'd')
src = cp + 1;
}
@@ -407,24 +433,21 @@ hdr_format_str (char *dest,
case 'f':
buf2[0] = 0;
rfc822_write_address (buf2, sizeof (buf2), hdr->env->from);
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
break;
case 'F':
if (!optional)
{
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
make_from (hdr->env, buf2, sizeof (buf2), 0);
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
}
else if (mutt_addr_is_user (hdr->env->from))
optional = 0;
break;
case 'i':
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, hdr->env->message_id ? hdr->env->message_id : "<no.id>");
+ hdr_format_s (dest, destlen, prefix, hdr->env->message_id ? hdr->env->message_id : "<no.id>");
break;
case 'l':
@@ -444,8 +467,7 @@ hdr_format_str (char *dest,
if (!optional)
{
make_from (hdr->env, buf2, sizeof (buf2), 1);
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
}
else if (!check_for_mailing_list (hdr->env->to, NULL, NULL, 0) &&
!check_for_mailing_list (hdr->env->cc, NULL, NULL, 0))
@@ -465,8 +487,7 @@ hdr_format_str (char *dest,
break;
case 'n':
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, mutt_get_name (hdr->env->from));
+ hdr_format_s (dest, destlen, prefix, mutt_get_name (hdr->env->from));
break;
case 'N':
@@ -488,8 +509,7 @@ hdr_format_str (char *dest,
make_from_addr (hdr->env, buf2, sizeof (buf2), 1);
if (!option (OPTSAVEADDRESS) && (p = strpbrk (buf2, "%@")))
*p = 0;
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
}
else if (!check_for_mailing_list_addr (hdr->env->to, NULL, 0) &&
!check_for_mailing_list_addr (hdr->env->cc, NULL, 0))
@@ -500,13 +520,12 @@ hdr_format_str (char *dest,
case 'M':
snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
- snprintf (buf2, sizeof (buf2), "%%%ss", prefix);
if (!optional)
{
if (threads && is_index && hdr->collapsed && hdr->num_hidden > 1)
snprintf (dest, destlen, fmt, hdr->num_hidden);
else if (is_index && threads)
- snprintf (dest, destlen, buf2, " ");
+ hdr_format_s (dest, destlen, prefix, " ");
else
*dest = '\0';
}
@@ -519,19 +538,18 @@ hdr_format_str (char *dest,
case 's':
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
if (flags & M_FORMAT_TREE)
{
if (flags & M_FORMAT_FORCESUBJ)
{
snprintf (buf2, sizeof (buf2), "%s%s", hdr->tree, NONULL (hdr->env->subject));
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
}
else
- snprintf (dest, destlen, fmt, hdr->tree);
+ hdr_format_s (dest, destlen, prefix, hdr->tree);
}
else
- snprintf (dest, destlen, fmt, NONULL (hdr->env->subject));
+ hdr_format_s (dest, destlen, prefix, NONULL (hdr->env->subject));
break;
case 'S':
@@ -568,8 +586,7 @@ hdr_format_str (char *dest,
else if (hdr->env->cc)
snprintf (buf2, sizeof (buf2), "Cc %s", mutt_get_name (hdr->env->cc));
}
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
break;
case 'T':
@@ -587,26 +604,24 @@ hdr_format_str (char *dest,
}
else
buf2[0] = 0;
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
break;
case 'v':
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
if (mutt_addr_is_user (hdr->env->from))
{
if (hdr->env->to)
- snprintf (buf2, sizeof (buf2), fmt, mutt_get_name (hdr->env->to));
+ hdr_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->to));
else if (hdr->env->cc)
- snprintf (buf2, sizeof (buf2), fmt, mutt_get_name (hdr->env->cc));
+ hdr_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->cc));
else
*buf2 = 0;
}
else
- snprintf (buf2, sizeof (buf2), fmt, mutt_get_name (hdr->env->from));
+ hdr_format_s (buf2, sizeof (buf2), prefix, mutt_get_name (hdr->env->from));
if ((p = strpbrk (buf2, " %@")))
*p = 0;
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
break;
case 'Z':
@@ -624,7 +639,6 @@ hdr_format_str (char *dest,
ch = 'K';
#endif
- snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
snprintf (buf2, sizeof (buf2),
"%c%c%c", (THREAD_NEW ? 'n' : (THREAD_OLD ? 'o' :
((hdr->read && (ctx && ctx->msgnotreadyet != hdr->msgno))
@@ -633,7 +647,7 @@ hdr_format_str (char *dest,
hdr->tagged ? '*' :
(hdr->flagged ? '!' :
(Tochars && ((i = mutt_user_is_recipient (hdr)) < mutt_strlen (Tochars)) ? Tochars[i] : ' ')));
- snprintf (dest, destlen, fmt, buf2);
+ hdr_format_s (dest, destlen, prefix, buf2);
break;
default: