};
static const char *
-alias_format_str (char *dest, size_t destlen, char op, const char *src,
+alias_format_str (char *dest, size_t destlen, size_t col, char op, const char *src,
const char *fmt, const char *ifstring, const char *elsestring,
unsigned long data, format_flag flags)
{
static void alias_entry (char *s, size_t slen, MUTTMENU *m, int num)
{
- mutt_FormatString (s, slen, NONULL (AliasFmt), alias_format_str, (unsigned long) ((ALIAS **) m->data)[num], M_FORMAT_ARROWCURSOR);
+ mutt_FormatString (s, slen, 0, NONULL (AliasFmt), alias_format_str, (unsigned long) ((ALIAS **) m->data)[num], M_FORMAT_ARROWCURSOR);
}
static int alias_tag (MUTTMENU *menu, int n, int m)
}
static const char *
-folder_format_str (char *dest, size_t destlen, char op, const char *src,
+folder_format_str (char *dest, size_t destlen, size_t col, char op, const char *src,
const char *fmt, const char *ifstring, const char *elsestring,
unsigned long data, format_flag flags)
{
}
if (optional)
- mutt_FormatString (dest, destlen, ifstring, folder_format_str, data, 0);
+ mutt_FormatString (dest, destlen, col, ifstring, folder_format_str, data, 0);
else if (flags & M_FORMAT_OPTIONAL)
- mutt_FormatString (dest, destlen, elsestring, folder_format_str, data, 0);
+ mutt_FormatString (dest, destlen, col, elsestring, folder_format_str, data, 0);
return (src);
}
folder.ff = &((struct folder_file *) menu->data)[num];
folder.num = num;
- mutt_FormatString (s, slen, NONULL(FolderFormat), folder_format_str,
+ mutt_FormatString (s, slen, 0, NONULL(FolderFormat), folder_format_str,
(unsigned long) &folder, M_FORMAT_ARROWCURSOR);
}
static void snd_entry (char *b, size_t blen, MUTTMENU *menu, int num)
{
- mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt,
+ mutt_FormatString (b, blen, 0, NONULL (AttachFormat), mutt_attach_fmt,
(unsigned long)(((ATTACHPTR **) menu->data)[num]),
M_FORMAT_STAT_FILE | M_FORMAT_ARROWCURSOR);
}
}
/* prototype for use below */
-static void compose_status_line (char *buf, size_t buflen, MUTTMENU *menu,
+static void compose_status_line (char *buf, size_t buflen, size_t col, MUTTMENU *menu,
const char *p);
/*
*/
static const char *
-compose_format_str (char *buf, size_t buflen, char op, const char *src,
+compose_format_str (char *buf, size_t buflen, size_t col, char op, const char *src,
const char *prefix, const char *ifstring,
const char *elsestring,
unsigned long data, format_flag flags)
}
if (optional)
- compose_status_line (buf, buflen, menu, ifstring);
+ compose_status_line (buf, buflen, col, menu, ifstring);
else if (flags & M_FORMAT_OPTIONAL)
- compose_status_line (buf, buflen, menu, elsestring);
+ compose_status_line (buf, buflen, col, menu, elsestring);
return (src);
}
-static void compose_status_line (char *buf, size_t buflen, MUTTMENU *menu,
+static void compose_status_line (char *buf, size_t buflen, size_t col, MUTTMENU *menu,
const char *p)
{
- mutt_FormatString (buf, buflen, p, compose_format_str,
+ mutt_FormatString (buf, buflen, col, p, compose_format_str,
(unsigned long) menu, 0);
}
/* Draw formated compose status line */
if (menu->redraw & REDRAW_STATUS)
{
- compose_status_line (buf, sizeof (buf), menu, NONULL(ComposeFormat));
+ compose_status_line (buf, sizeof (buf), 0, menu, NONULL(ComposeFormat));
CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2);
SETCOLOR (MT_COLOR_STATUS);
printw ("%-*.*s", COLS, COLS, buf);
static const char *
hdr_format_str (char *dest,
size_t destlen,
+ size_t col,
char op,
const char *src,
const char *prefix,
}
if (optional)
- mutt_FormatString (dest, destlen, ifstring, hdr_format_str, (unsigned long) hfi, flags);
+ mutt_FormatString (dest, destlen, col, ifstring, hdr_format_str, (unsigned long) hfi, flags);
else if (flags & M_FORMAT_OPTIONAL)
- mutt_FormatString (dest, destlen, elsestring, hdr_format_str, (unsigned long) hfi, flags);
+ mutt_FormatString (dest, destlen, col, elsestring, hdr_format_str, (unsigned long) hfi, flags);
return (src);
#undef THREAD_NEW
hfi.hdr = hdr;
hfi.ctx = ctx;
- mutt_FormatString (dest, destlen, s, hdr_format_str, (unsigned long) &hfi, flags);
+ mutt_FormatString (dest, destlen, 0, s, hdr_format_str, (unsigned long) &hfi, flags);
}
void mutt_FormatString (char *dest, /* output buffer */
size_t destlen, /* output buffer len */
+ size_t col, /* starting column (nonzero when called recursively) */
const char *src, /* template string */
format_t *callback, /* callback for processing */
unsigned long data, /* callback data */
{
char prefix[SHORT_STRING], buf[LONG_STRING], *cp, *wptr = dest, ch;
char ifstring[SHORT_STRING], elsestring[SHORT_STRING];
- size_t wlen, count, len, col, wid;
+ size_t wlen, count, len, wid;
pid_t pid;
FILE *filter;
int n;
prefix[0] = '\0';
destlen--; /* save room for the terminal \0 */
wlen = (flags & M_FORMAT_ARROWCURSOR && option (OPTARROWCURSOR)) ? 3 : 0;
- col = wlen;
+ col += wlen;
if ((flags & M_FORMAT_NOFILTER) == 0)
{
mutt_extract_token(word, srcbuf, 0);
dprint(3, (debugfile, "fmtpipe %2d: %s\n", i++, word->data));
mutt_buffer_addch(command, '\'');
- mutt_FormatString(buf, sizeof(buf), word->data, callback, data,
+ mutt_FormatString(buf, sizeof(buf), 0, word->data, callback, data,
flags | M_FORMAT_NOFILTER);
for (p = buf; p && *p; p++)
{
dprint(3, (debugfile, "fmtpipe > %s\n", command->data));
+ col -= wlen; /* reset to passed in value */
wptr = dest; /* reset write ptr */
wlen = (flags & M_FORMAT_ARROWCURSOR && option (OPTARROWCURSOR)) ? 3 : 0;
if ((pid = mutt_create_filter(command->data, NULL, &filter, NULL)))
recycler = safe_strdup(dest);
if (recycler)
{
- mutt_FormatString(dest, destlen++, recycler, callback, data, flags);
+ mutt_FormatString(dest, destlen++, col, recycler, callback, data, flags);
FREE(&recycler);
}
}
if (count > col)
{
count -= col; /* how many columns left on this line */
- mutt_FormatString (buf, sizeof (buf), src, callback, data, flags);
+ mutt_FormatString (buf, sizeof (buf), 0, src, callback, data, flags);
len = mutt_strlen (buf);
wid = mutt_strwidth (buf);
if (count > wid)
}
/* use callback function to handle this case */
- src = callback (buf, sizeof (buf), ch, src, prefix, ifstring, elsestring, data, flags);
+ src = callback (buf, sizeof (buf), col, ch, src, prefix, ifstring, elsestring, data, flags);
if (tolower)
mutt_strlower (buf);
const char *_mutt_fmt_pgp_command (char *dest,
size_t destlen,
+ size_t col,
char op,
const char *src,
const char *prefix,
}
if (optional)
- mutt_FormatString (dest, destlen, ifstring, _mutt_fmt_pgp_command, data, 0);
+ mutt_FormatString (dest, destlen, col, ifstring, _mutt_fmt_pgp_command, data, 0);
else if (flags & M_FORMAT_OPTIONAL)
- mutt_FormatString (dest, destlen, elsestring, _mutt_fmt_pgp_command, data, 0);
+ mutt_FormatString (dest, destlen, col, elsestring, _mutt_fmt_pgp_command, data, 0);
return (src);
}
void mutt_pgp_command (char *d, size_t dlen, struct pgp_command_context *cctx, const char *fmt)
{
- mutt_FormatString (d, dlen, NONULL (fmt), _mutt_fmt_pgp_command, (unsigned long) cctx, 0);
+ mutt_FormatString (d, dlen, 0, NONULL (fmt), _mutt_fmt_pgp_command, (unsigned long) cctx, 0);
dprint (2, (debugfile, "mutt_pgp_command: %s\n", d));
}
static const char *pgp_entry_fmt (char *dest,
size_t destlen,
+ size_t col,
char op,
const char *src,
const char *prefix,
}
if (optional)
- mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0);
+ mutt_FormatString (dest, destlen, col, ifstring, mutt_attach_fmt, data, 0);
else if (flags & M_FORMAT_OPTIONAL)
- mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0);
+ mutt_FormatString (dest, destlen, col, elsestring, mutt_attach_fmt, data, 0);
return (src);
}
entry.uid = KeyTable[num];
entry.num = num + 1;
- mutt_FormatString (s, l, NONULL (PgpEntryFormat), pgp_entry_fmt,
+ mutt_FormatString (s, l, 0, NONULL (PgpEntryFormat), pgp_entry_fmt,
(unsigned long) &entry, M_FORMAT_ARROWCURSOR);
}
#define mutt_new_envelope() safe_calloc (1, sizeof (ENVELOPE))
#define mutt_new_enter_state() safe_calloc (1, sizeof (ENTER_STATE))
-typedef const char * format_t (char *, size_t, char, const char *, const char *, const char *, const char *, unsigned long, format_flag);
+typedef const char * format_t (char *, size_t, size_t, char, const char *, const char *, const char *, const char *, unsigned long, format_flag);
-void mutt_FormatString (char *, size_t, const char *, format_t *, unsigned long, format_flag);
+void mutt_FormatString (char *, size_t, size_t, const char *, format_t *, unsigned long, format_flag);
void mutt_parse_content_type (char *, BODY *);
void mutt_generate_boundary (PARAMETER **);
void mutt_group_add_adrlist (group_t *, ADDRESS *);
const char *mutt_attach_fmt (
char *dest,
size_t destlen,
+ size_t col,
char op,
const char *src,
const char *prefix,
*/
const char *mutt_attach_fmt (char *dest,
size_t destlen,
+ size_t col,
char op,
const char *src,
const char *prefix,
}
if (optional)
- mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0);
+ mutt_FormatString (dest, destlen, col, ifstring, mutt_attach_fmt, data, 0);
else if (flags & M_FORMAT_OPTIONAL)
- mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0);
+ mutt_FormatString (dest, destlen, col, elsestring, mutt_attach_fmt, data, 0);
return (src);
}
void attach_entry (char *b, size_t blen, MUTTMENU *menu, int num)
{
- mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt, (unsigned long) (((ATTACHPTR **)menu->data)[num]), M_FORMAT_ARROWCURSOR);
+ mutt_FormatString (b, blen, 0, NONULL (AttachFormat), mutt_attach_fmt, (unsigned long) (((ATTACHPTR **)menu->data)[num]), M_FORMAT_ARROWCURSOR);
}
int mutt_tag_attach (MUTTMENU *menu, int n, int m)
static const char *_mutt_fmt_smime_command (char *dest,
size_t destlen,
+ size_t col,
char op,
const char *src,
const char *prefix,
}
if (optional)
- mutt_FormatString (dest, destlen, ifstring, _mutt_fmt_smime_command,
+ mutt_FormatString (dest, destlen, col, ifstring, _mutt_fmt_smime_command,
data, 0);
else if (flags & M_FORMAT_OPTIONAL)
- mutt_FormatString (dest, destlen, elsestring, _mutt_fmt_smime_command,
+ mutt_FormatString (dest, destlen, col, elsestring, _mutt_fmt_smime_command,
data, 0);
return (src);
static void mutt_smime_command (char *d, size_t dlen,
struct smime_command_context *cctx, const char *fmt)
{
- mutt_FormatString (d, dlen, NONULL(fmt), _mutt_fmt_smime_command,
+ mutt_FormatString (d, dlen, 0, NONULL(fmt), _mutt_fmt_smime_command,
(unsigned long) cctx, 0);
dprint (2,(debugfile, "mutt_smime_command: %s\n", d));
}
return buf;
}
+static void _menu_status_line (char *buf, size_t buflen, size_t col, MUTTMENU *menu, const char *p);
+
/* %b = number of incoming folders with unread messages [option]
* %d = number of deleted messages [option]
* %f = full mailbox path
* %v = Mutt version
* %V = currently active limit pattern [option] */
static const char *
-status_format_str (char *buf, size_t buflen, char op, const char *src,
+status_format_str (char *buf, size_t buflen, size_t col, char op, const char *src,
const char *prefix, const char *ifstring,
const char *elsestring,
unsigned long data, format_flag flags)
}
if (optional)
- menu_status_line (buf, buflen, menu, ifstring);
+ _menu_status_line (buf, buflen, col, menu, ifstring);
else if (flags & M_FORMAT_OPTIONAL)
- menu_status_line (buf, buflen, menu, elsestring);
+ _menu_status_line (buf, buflen, col, menu, elsestring);
return (src);
}
+static void _menu_status_line (char *buf, size_t buflen, size_t col, MUTTMENU *menu, const char *p)
+{
+ mutt_FormatString (buf, buflen, col, p, status_format_str, (unsigned long) menu, 0);
+}
+
void menu_status_line (char *buf, size_t buflen, MUTTMENU *menu, const char *p)
{
- mutt_FormatString (buf, buflen, p, status_format_str, (unsigned long) menu, 0);
+ mutt_FormatString (buf, buflen, 0, p, status_format_str, (unsigned long) menu, 0);
}