Evans.
snprintf (dest, destlen, tmp, alias->del ? "D" : " ");
break;
case 'a':
- snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
- snprintf (dest, destlen, tmp, alias->name);
+ mutt_format_s (dest, destlen, fmt, alias->name);
break;
case 'r':
adr[0] = 0;
return addstr (buf);
}
+
/*
* This formats a string, a bit like
* snprintf (dest, destlen, "%-*.*s", min_width, max_width, s),
while (n-- > 0)
addch (' ');
}
+
+/*
+ * mutt_strwidth is like mutt_strlen except that it returns the width
+ * refering to the number of characters cells.
+ */
+
+int mutt_strwidth (const char *s)
+{
+ wchar_t wc;
+ int w;
+ size_t k, n;
+ mbstate_t mbstate;
+
+ if (!s) return 0;
+
+ n = mutt_strlen (s);
+
+ memset (&mbstate, 0, sizeof (mbstate));
+ for (w=0; n && (k = mbrtowc (&wc, s, n, &mbstate)); s += k, n -= k)
+ {
+ if (k == (size_t)(-1) || k == (size_t)(-2))
+ {
+ k = (k == (size_t)(-1)) ? 1 : n;
+ wc = replacement_char ();
+ }
+ if (!IsWPrint (wc))
+ wc = '?';
+ w += wcwidth (wc);
+ }
+ return w;
+}
void _mutt_save_message (HEADER *, CONTEXT *, int, int, int);
int mutt_save_message (HEADER *, int, int, int, int *);
int mutt_search_command (int, int);
+int mutt_strwidth (const char *);
int mutt_compose_menu (HEADER *, char *, size_t, HEADER *);
int mutt_thread_set_flag (HEADER *, int, int, int);
int mutt_user_is_recipient (HEADER *);
p = strtok(NULL, "\t\n");
if (p)
{
- l = mutt_strlen (p);
+ l = mutt_strwidth (p);
if (l > FirstColumn)
FirstColumn = l;
cur->name = safe_strdup (p);
static void query_entry (char *s, size_t slen, MUTTMENU *m, int num)
{
ENTRY *table = (ENTRY *) m->data;
- char buf[SHORT_STRING] = "";
+ char buf2[SHORT_STRING], buf[SHORT_STRING] = "";
/* need a query format ... hard coded constants are not good */
while (FirstColumn + SecondColumn > 70)
rfc822_write_address (buf, sizeof (buf), table[num].data->addr);
- snprintf (s, slen, " %c %3d %-*.*s %-*.*s %s",
+ mutt_format_string (buf2, sizeof (buf2),
+ FirstColumn + 2, FirstColumn + 2,
+ 0, ' ', table[num].data->name,
+ mutt_strlen (table[num].data->name), 0);
+
+ snprintf (s, slen, " %c %3d %s %-*.*s %s",
table[num].tagged ? '*':' ',
num+1,
- FirstColumn+2,
- FirstColumn+2,
- NONULL (table[num].data->name),
+ buf2,
SecondColumn+2,
SecondColumn+2,
buf,