Changeset 5137:0c47f7b06158
- Timestamp:
- 2007-04-11 22:36:24 (20 months ago)
- Author:
- Michael Elkins <me@…>
- Branch:
- HEAD
- Message:
-
Pass column value recursively when expanding format strings (bug #2840).
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r5010
|
r5137
|
|
| 44 | 44 | |
| 45 | 45 | static const char * |
| 46 | | alias_format_str (char *dest, size_t destlen, char op, const char *src, |
| | 46 | alias_format_str (char *dest, size_t destlen, size_t col, char op, const char *src, |
| 47 | 47 | const char *fmt, const char *ifstring, const char *elsestring, |
| 48 | 48 | unsigned long data, format_flag flags) |
| … |
… |
|
| 81 | 81 | static void alias_entry (char *s, size_t slen, MUTTMENU *m, int num) |
| 82 | 82 | { |
| 83 | | mutt_FormatString (s, slen, NONULL (AliasFmt), alias_format_str, (unsigned long) ((ALIAS **) m->data)[num], M_FORMAT_ARROWCURSOR); |
| | 83 | mutt_FormatString (s, slen, 0, NONULL (AliasFmt), alias_format_str, (unsigned long) ((ALIAS **) m->data)[num], M_FORMAT_ARROWCURSOR); |
| 84 | 84 | } |
| 85 | 85 | |
-
|
r5104
|
r5137
|
|
| 142 | 142 | |
| 143 | 143 | static const char * |
| 144 | | folder_format_str (char *dest, size_t destlen, char op, const char *src, |
| | 144 | folder_format_str (char *dest, size_t destlen, size_t col, char op, const char *src, |
| 145 | 145 | const char *fmt, const char *ifstring, const char *elsestring, |
| 146 | 146 | unsigned long data, format_flag flags) |
| … |
… |
|
| 301 | 301 | |
| 302 | 302 | if (optional) |
| 303 | | mutt_FormatString (dest, destlen, ifstring, folder_format_str, data, 0); |
| | 303 | mutt_FormatString (dest, destlen, col, ifstring, folder_format_str, data, 0); |
| 304 | 304 | else if (flags & M_FORMAT_OPTIONAL) |
| 305 | | mutt_FormatString (dest, destlen, elsestring, folder_format_str, data, 0); |
| | 305 | mutt_FormatString (dest, destlen, col, elsestring, folder_format_str, data, 0); |
| 306 | 306 | |
| 307 | 307 | return (src); |
| … |
… |
|
| 484 | 484 | folder.num = num; |
| 485 | 485 | |
| 486 | | mutt_FormatString (s, slen, NONULL(FolderFormat), folder_format_str, |
| | 486 | mutt_FormatString (s, slen, 0, NONULL(FolderFormat), folder_format_str, |
| 487 | 487 | (unsigned long) &folder, M_FORMAT_ARROWCURSOR); |
| 488 | 488 | } |
-
|
r5010
|
r5137
|
|
| 100 | 100 | static void snd_entry (char *b, size_t blen, MUTTMENU *menu, int num) |
| 101 | 101 | { |
| 102 | | mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt, |
| | 102 | mutt_FormatString (b, blen, 0, NONULL (AttachFormat), mutt_attach_fmt, |
| 103 | 103 | (unsigned long)(((ATTACHPTR **) menu->data)[num]), |
| 104 | 104 | M_FORMAT_STAT_FILE | M_FORMAT_ARROWCURSOR); |
| … |
… |
|
| 407 | 407 | |
| 408 | 408 | /* prototype for use below */ |
| 409 | | static void compose_status_line (char *buf, size_t buflen, MUTTMENU *menu, |
| | 409 | static void compose_status_line (char *buf, size_t buflen, size_t col, MUTTMENU *menu, |
| 410 | 410 | const char *p); |
| 411 | 411 | |
| … |
… |
|
| 423 | 423 | |
| 424 | 424 | static const char * |
| 425 | | compose_format_str (char *buf, size_t buflen, char op, const char *src, |
| | 425 | compose_format_str (char *buf, size_t buflen, size_t col, char op, const char *src, |
| 426 | 426 | const char *prefix, const char *ifstring, |
| 427 | 427 | const char *elsestring, |
| … |
… |
|
| 466 | 466 | |
| 467 | 467 | if (optional) |
| 468 | | compose_status_line (buf, buflen, menu, ifstring); |
| | 468 | compose_status_line (buf, buflen, col, menu, ifstring); |
| 469 | 469 | else if (flags & M_FORMAT_OPTIONAL) |
| 470 | | compose_status_line (buf, buflen, menu, elsestring); |
| | 470 | compose_status_line (buf, buflen, col, menu, elsestring); |
| 471 | 471 | |
| 472 | 472 | return (src); |
| 473 | 473 | } |
| 474 | 474 | |
| 475 | | static void compose_status_line (char *buf, size_t buflen, MUTTMENU *menu, |
| | 475 | static void compose_status_line (char *buf, size_t buflen, size_t col, MUTTMENU *menu, |
| 476 | 476 | const char *p) |
| 477 | 477 | { |
| 478 | | mutt_FormatString (buf, buflen, p, compose_format_str, |
| | 478 | mutt_FormatString (buf, buflen, col, p, compose_format_str, |
| 479 | 479 | (unsigned long) menu, 0); |
| 480 | 480 | } |
| … |
… |
|
| 1276 | 1276 | if (menu->redraw & REDRAW_STATUS) |
| 1277 | 1277 | { |
| 1278 | | compose_status_line (buf, sizeof (buf), menu, NONULL(ComposeFormat)); |
| | 1278 | compose_status_line (buf, sizeof (buf), 0, menu, NONULL(ComposeFormat)); |
| 1279 | 1279 | CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2); |
| 1280 | 1280 | SETCOLOR (MT_COLOR_STATUS); |
-
|
r5058
|
r5137
|
|
| 237 | 237 | hdr_format_str (char *dest, |
| 238 | 238 | size_t destlen, |
| | 239 | size_t col, |
| 239 | 240 | char op, |
| 240 | 241 | const char *src, |
| … |
… |
|
| 716 | 717 | |
| 717 | 718 | if (optional) |
| 718 | | mutt_FormatString (dest, destlen, ifstring, hdr_format_str, (unsigned long) hfi, flags); |
| | 719 | mutt_FormatString (dest, destlen, col, ifstring, hdr_format_str, (unsigned long) hfi, flags); |
| 719 | 720 | else if (flags & M_FORMAT_OPTIONAL) |
| 720 | | mutt_FormatString (dest, destlen, elsestring, hdr_format_str, (unsigned long) hfi, flags); |
| | 721 | mutt_FormatString (dest, destlen, col, elsestring, hdr_format_str, (unsigned long) hfi, flags); |
| 721 | 722 | |
| 722 | 723 | return (src); |
| … |
… |
|
| 733 | 734 | hfi.ctx = ctx; |
| 734 | 735 | |
| 735 | | mutt_FormatString (dest, destlen, s, hdr_format_str, (unsigned long) &hfi, flags); |
| 736 | | } |
| | 736 | mutt_FormatString (dest, destlen, 0, s, hdr_format_str, (unsigned long) &hfi, flags); |
| | 737 | } |
-
|
r5098
|
r5137
|
|
| 992 | 992 | void mutt_FormatString (char *dest, /* output buffer */ |
| 993 | 993 | size_t destlen, /* output buffer len */ |
| | 994 | size_t col, /* starting column (nonzero when called recursively) */ |
| 994 | 995 | const char *src, /* template string */ |
| 995 | 996 | format_t *callback, /* callback for processing */ |
| … |
… |
|
| 999 | 1000 | char prefix[SHORT_STRING], buf[LONG_STRING], *cp, *wptr = dest, ch; |
| 1000 | 1001 | char ifstring[SHORT_STRING], elsestring[SHORT_STRING]; |
| 1001 | | size_t wlen, count, len, col, wid; |
| | 1002 | size_t wlen, count, len, wid; |
| 1002 | 1003 | pid_t pid; |
| 1003 | 1004 | FILE *filter; |
| … |
… |
|
| 1008 | 1009 | destlen--; /* save room for the terminal \0 */ |
| 1009 | 1010 | wlen = (flags & M_FORMAT_ARROWCURSOR && option (OPTARROWCURSOR)) ? 3 : 0; |
| 1010 | | col = wlen; |
| | 1011 | col += wlen; |
| 1011 | 1012 | |
| 1012 | 1013 | if ((flags & M_FORMAT_NOFILTER) == 0) |
| … |
… |
|
| 1056 | 1057 | dprint(3, (debugfile, "fmtpipe %2d: %s\n", i++, word->data)); |
| 1057 | 1058 | mutt_buffer_addch(command, '\''); |
| 1058 | | mutt_FormatString(buf, sizeof(buf), word->data, callback, data, |
| | 1059 | mutt_FormatString(buf, sizeof(buf), 0, word->data, callback, data, |
| 1059 | 1060 | flags | M_FORMAT_NOFILTER); |
| 1060 | 1061 | for (p = buf; p && *p; p++) |
| … |
… |
|
| 1075 | 1076 | dprint(3, (debugfile, "fmtpipe > %s\n", command->data)); |
| 1076 | 1077 | |
| | 1078 | col -= wlen; /* reset to passed in value */ |
| 1077 | 1079 | wptr = dest; /* reset write ptr */ |
| 1078 | 1080 | wlen = (flags & M_FORMAT_ARROWCURSOR && option (OPTARROWCURSOR)) ? 3 : 0; |
| … |
… |
|
| 1101 | 1103 | if (recycler) |
| 1102 | 1104 | { |
| 1103 | | mutt_FormatString(dest, destlen++, recycler, callback, data, flags); |
| | 1105 | mutt_FormatString(dest, destlen++, col, recycler, callback, data, flags); |
| 1104 | 1106 | FREE(&recycler); |
| 1105 | 1107 | } |
| … |
… |
|
| 1204 | 1206 | { |
| 1205 | 1207 | count -= col; /* how many columns left on this line */ |
| 1206 | | mutt_FormatString (buf, sizeof (buf), src, callback, data, flags); |
| | 1208 | mutt_FormatString (buf, sizeof (buf), 0, src, callback, data, flags); |
| 1207 | 1209 | len = mutt_strlen (buf); |
| 1208 | 1210 | wid = mutt_strwidth (buf); |
| … |
… |
|
| 1254 | 1256 | |
| 1255 | 1257 | /* use callback function to handle this case */ |
| 1256 | | src = callback (buf, sizeof (buf), ch, src, prefix, ifstring, elsestring, data, flags); |
| | 1258 | src = callback (buf, sizeof (buf), col, ch, src, prefix, ifstring, elsestring, data, flags); |
| 1257 | 1259 | |
| 1258 | 1260 | if (tolower) |
-
|
r4343
|
r5137
|
|
| 59 | 59 | const char *_mutt_fmt_pgp_command (char *dest, |
| 60 | 60 | size_t destlen, |
| | 61 | size_t col, |
| 61 | 62 | char op, |
| 62 | 63 | const char *src, |
| … |
… |
|
| 140 | 141 | |
| 141 | 142 | if (optional) |
| 142 | | mutt_FormatString (dest, destlen, ifstring, _mutt_fmt_pgp_command, data, 0); |
| | 143 | mutt_FormatString (dest, destlen, col, ifstring, _mutt_fmt_pgp_command, data, 0); |
| 143 | 144 | else if (flags & M_FORMAT_OPTIONAL) |
| 144 | | mutt_FormatString (dest, destlen, elsestring, _mutt_fmt_pgp_command, data, 0); |
| | 145 | mutt_FormatString (dest, destlen, col, elsestring, _mutt_fmt_pgp_command, data, 0); |
| 145 | 146 | |
| 146 | 147 | return (src); |
| … |
… |
|
| 149 | 150 | void mutt_pgp_command (char *d, size_t dlen, struct pgp_command_context *cctx, const char *fmt) |
| 150 | 151 | { |
| 151 | | mutt_FormatString (d, dlen, NONULL (fmt), _mutt_fmt_pgp_command, (unsigned long) cctx, 0); |
| | 152 | mutt_FormatString (d, dlen, 0, NONULL (fmt), _mutt_fmt_pgp_command, (unsigned long) cctx, 0); |
| 152 | 153 | dprint (2, (debugfile, "mutt_pgp_command: %s\n", d)); |
| 153 | 154 | } |
-
|
r5010
|
r5137
|
|
| 122 | 122 | static const char *pgp_entry_fmt (char *dest, |
| 123 | 123 | size_t destlen, |
| | 124 | size_t col, |
| 124 | 125 | char op, |
| 125 | 126 | const char *src, |
| … |
… |
|
| 278 | 279 | |
| 279 | 280 | if (optional) |
| 280 | | mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0); |
| | 281 | mutt_FormatString (dest, destlen, col, ifstring, mutt_attach_fmt, data, 0); |
| 281 | 282 | else if (flags & M_FORMAT_OPTIONAL) |
| 282 | | mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0); |
| | 283 | mutt_FormatString (dest, destlen, col, elsestring, mutt_attach_fmt, data, 0); |
| 283 | 284 | return (src); |
| 284 | 285 | } |
| … |
… |
|
| 292 | 293 | entry.num = num + 1; |
| 293 | 294 | |
| 294 | | mutt_FormatString (s, l, NONULL (PgpEntryFormat), pgp_entry_fmt, |
| | 295 | mutt_FormatString (s, l, 0, NONULL (PgpEntryFormat), pgp_entry_fmt, |
| 295 | 296 | (unsigned long) &entry, M_FORMAT_ARROWCURSOR); |
| 296 | 297 | } |
-
|
r4955
|
r5137
|
|
| 62 | 62 | #define mutt_new_enter_state() safe_calloc (1, sizeof (ENTER_STATE)) |
| 63 | 63 | |
| 64 | | typedef const char * format_t (char *, size_t, char, const char *, const char *, const char *, const char *, unsigned long, format_flag); |
| 65 | | |
| 66 | | void mutt_FormatString (char *, size_t, const char *, format_t *, unsigned long, format_flag); |
| | 64 | typedef const char * format_t (char *, size_t, size_t, char, const char *, const char *, const char *, const char *, unsigned long, format_flag); |
| | 65 | |
| | 66 | void mutt_FormatString (char *, size_t, size_t, const char *, format_t *, unsigned long, format_flag); |
| 67 | 67 | void mutt_parse_content_type (char *, BODY *); |
| 68 | 68 | void mutt_generate_boundary (PARAMETER **); |
| … |
… |
|
| 120 | 120 | char *dest, |
| 121 | 121 | size_t destlen, |
| | 122 | size_t col, |
| 122 | 123 | char op, |
| 123 | 124 | const char *src, |
-
|
r5010
|
r5137
|
|
| 174 | 174 | const char *mutt_attach_fmt (char *dest, |
| 175 | 175 | size_t destlen, |
| | 176 | size_t col, |
| 176 | 177 | char op, |
| 177 | 178 | const char *src, |
| … |
… |
|
| 357 | 358 | |
| 358 | 359 | if (optional) |
| 359 | | mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0); |
| | 360 | mutt_FormatString (dest, destlen, col, ifstring, mutt_attach_fmt, data, 0); |
| 360 | 361 | else if (flags & M_FORMAT_OPTIONAL) |
| 361 | | mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0); |
| | 362 | mutt_FormatString (dest, destlen, col, elsestring, mutt_attach_fmt, data, 0); |
| 362 | 363 | return (src); |
| 363 | 364 | } |
| … |
… |
|
| 365 | 366 | void attach_entry (char *b, size_t blen, MUTTMENU *menu, int num) |
| 366 | 367 | { |
| 367 | | mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt, (unsigned long) (((ATTACHPTR **)menu->data)[num]), M_FORMAT_ARROWCURSOR); |
| | 368 | mutt_FormatString (b, blen, 0, NONULL (AttachFormat), mutt_attach_fmt, (unsigned long) (((ATTACHPTR **)menu->data)[num]), M_FORMAT_ARROWCURSOR); |
| 368 | 369 | } |
| 369 | 370 | |
-
|
r4490
|
r5137
|
|
| 129 | 129 | static const char *_mutt_fmt_smime_command (char *dest, |
| 130 | 130 | size_t destlen, |
| | 131 | size_t col, |
| 131 | 132 | char op, |
| 132 | 133 | const char *src, |
| … |
… |
|
| 243 | 244 | |
| 244 | 245 | if (optional) |
| 245 | | mutt_FormatString (dest, destlen, ifstring, _mutt_fmt_smime_command, |
| | 246 | mutt_FormatString (dest, destlen, col, ifstring, _mutt_fmt_smime_command, |
| 246 | 247 | data, 0); |
| 247 | 248 | else if (flags & M_FORMAT_OPTIONAL) |
| 248 | | mutt_FormatString (dest, destlen, elsestring, _mutt_fmt_smime_command, |
| | 249 | mutt_FormatString (dest, destlen, col, elsestring, _mutt_fmt_smime_command, |
| 249 | 250 | data, 0); |
| 250 | 251 | |
| … |
… |
|
| 257 | 258 | struct smime_command_context *cctx, const char *fmt) |
| 258 | 259 | { |
| 259 | | mutt_FormatString (d, dlen, NONULL(fmt), _mutt_fmt_smime_command, |
| | 260 | mutt_FormatString (d, dlen, 0, NONULL(fmt), _mutt_fmt_smime_command, |
| 260 | 261 | (unsigned long) cctx, 0); |
| 261 | 262 | dprint (2,(debugfile, "mutt_smime_command: %s\n", d)); |
-
|
r4343
|
r5137
|
|
| 40 | 40 | return buf; |
| 41 | 41 | } |
| | 42 | |
| | 43 | static void _menu_status_line (char *buf, size_t buflen, size_t col, MUTTMENU *menu, const char *p); |
| 42 | 44 | |
| 43 | 45 | /* %b = number of incoming folders with unread messages [option] |
| … |
… |
|
| 59 | 61 | * %V = currently active limit pattern [option] */ |
| 60 | 62 | static const char * |
| 61 | | status_format_str (char *buf, size_t buflen, char op, const char *src, |
| | 63 | status_format_str (char *buf, size_t buflen, size_t col, char op, const char *src, |
| 62 | 64 | const char *prefix, const char *ifstring, |
| 63 | 65 | const char *elsestring, |
| … |
… |
|
| 287 | 289 | |
| 288 | 290 | if (optional) |
| 289 | | menu_status_line (buf, buflen, menu, ifstring); |
| | 291 | _menu_status_line (buf, buflen, col, menu, ifstring); |
| 290 | 292 | else if (flags & M_FORMAT_OPTIONAL) |
| 291 | | menu_status_line (buf, buflen, menu, elsestring); |
| | 293 | _menu_status_line (buf, buflen, col, menu, elsestring); |
| 292 | 294 | |
| 293 | 295 | return (src); |
| 294 | 296 | } |
| 295 | 297 | |
| | 298 | static void _menu_status_line (char *buf, size_t buflen, size_t col, MUTTMENU *menu, const char *p) |
| | 299 | { |
| | 300 | mutt_FormatString (buf, buflen, col, p, status_format_str, (unsigned long) menu, 0); |
| | 301 | } |
| | 302 | |
| 296 | 303 | void menu_status_line (char *buf, size_t buflen, MUTTMENU *menu, const char *p) |
| 297 | 304 | { |
| 298 | | mutt_FormatString (buf, buflen, p, status_format_str, (unsigned long) menu, 0); |
| | 305 | mutt_FormatString (buf, buflen, 0, p, status_format_str, (unsigned long) menu, 0); |
| 299 | 306 | } |