2 * Copyright notice from original mutt:
3 * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
5 * This file is part of mutt-ng, see http://www.muttng.org/.
6 * It's licensed under the GNU General Public License,
7 * please see the file GPL in the top level source directory.
15 #include "mutt_menu.h"
16 #include "mutt_curses.h"
25 static char *get_sort_str (char *buf, size_t buflen, int method)
27 snprintf (buf, buflen, "%s%s%s",
28 (method & SORT_REVERSE) ? "reverse-" : "",
29 (method & SORT_LAST) ? "last-" : "",
30 mutt_getnamebyvalue (method & SORT_MASK, SortMethods));
34 /* %b = number of incoming folders with unread messages [option]
35 * %B = short mailbox path
36 * %d = number of deleted messages [option]
37 * %f = full mailbox path
38 * %F = number of flagged messages [option]
40 * %l = length of mailbox (in bytes) [option]
41 * %m = total number of messages [option]
42 * %M = number of messages shown (virutal message count when limiting) [option]
43 * %n = number of new messages [option]
44 * %p = number of postponed messages [option]
45 * %P = percent of way through index
46 * %r = readonly/wontwrite/changed flag
47 * %s = current sorting method ($sort)
48 * %S = current aux sorting method ($sort_aux)
49 * %t = # of tagged messages [option]
50 * %v = Mutt-ng version
51 * %V = currently active limit pattern [option] */
52 static const char *status_format_str (char *buf, size_t buflen, char op,
53 const char *src, const char *prefix,
55 const char *elsestring,
56 unsigned long data, format_flag flags)
58 char fmt[SHORT_STRING], tmp[SHORT_STRING], *cp, *p;
59 int count, optional = (flags & M_FORMAT_OPTIONAL);
60 MUTTMENU *menu = (MUTTMENU *) data;
66 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
67 snprintf (buf, buflen, fmt, mutt_buffy_check (0));
69 else if (!mutt_buffy_check (0))
74 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
76 if (Context && Context->compressinfo && Context->realpath) {
77 if ((p = strrchr (Context->realpath, '/')))
78 strfcpy (tmp, p + 1, sizeof (tmp));
80 strfcpy (tmp, Context->realpath, sizeof (tmp));
84 if (Context && Context->path) {
85 if ((p = strrchr (Context->path, '/')))
86 strfcpy (tmp, p + 1, sizeof (tmp));
88 strfcpy (tmp, Context->path, sizeof (tmp));
91 strfcpy (tmp, _("no mailbox"), sizeof (tmp));
92 snprintf (buf, buflen, fmt, tmp);
97 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
98 snprintf (buf, buflen, fmt, Context ? Context->deleted : 0);
100 else if (!Context || !Context->deleted)
105 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
106 snprintf (buf, buflen, fmt, NONULL (Hostname));
110 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
111 #ifdef USE_COMPRESSED
112 if (Context && Context->compressinfo && Context->realpath) {
113 strfcpy (tmp, Context->realpath, sizeof (tmp));
114 mutt_pretty_mailbox (tmp);
118 if (Context && Context->path) {
119 strfcpy (tmp, Context->path, sizeof (tmp));
120 mutt_pretty_mailbox (tmp);
123 strfcpy (tmp, _("(no mailbox)"), sizeof (tmp));
124 snprintf (buf, buflen, fmt, tmp);
129 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
130 snprintf (buf, buflen, fmt, Context ? Context->flagged : 0);
132 else if (!Context || !Context->flagged)
138 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
139 mutt_pretty_size (tmp, sizeof (tmp), Context ? Context->size : 0);
140 snprintf (buf, buflen, fmt, tmp);
142 else if (!Context || !Context->size)
148 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
149 mutt_pretty_size (tmp, sizeof (tmp), Context ? Context->vsize : 0);
150 snprintf (buf, buflen, fmt, tmp);
152 else if (!Context || !Context->pattern)
158 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
159 snprintf (buf, buflen, fmt, Context ? Context->msgcount : 0);
161 else if (!Context || !Context->msgcount)
167 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
168 snprintf (buf, buflen, fmt, Context ? Context->vcount : 0);
170 else if (!Context || !Context->pattern)
176 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
177 snprintf (buf, buflen, fmt, Context ? Context->new : 0);
179 else if (!Context || Context->new <= 0)
185 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
186 snprintf (buf, buflen, fmt,
187 Context ? Context->unread - Context->new : 0);
189 else if (!Context || !(Context->unread - Context->new))
194 count = mutt_num_postponed (0);
196 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
197 snprintf (buf, buflen, fmt, count);
204 if (menu->top + menu->pagelen >= menu->max)
205 cp = menu->top ? "end" : "all";
207 count = (100 * (menu->top + menu->pagelen)) / menu->max;
208 snprintf (tmp, sizeof (tmp), "%d%%", count);
211 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
212 snprintf (buf, buflen, fmt, cp);
220 i = option (OPTATTACHMSG) ? 3 : ((Context->readonly ||
221 Context->dontwrite) ? 2 : (Context->
225 /* deleted doesn't necessarily mean changed in IMAP */
239 else if (i >= mutt_strlen (StChars))
249 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
250 snprintf (buf, buflen, fmt, get_sort_str (tmp, sizeof (tmp), Sort));
254 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
255 snprintf (buf, buflen, fmt, get_sort_str (tmp, sizeof (tmp), SortAux));
260 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
261 snprintf (buf, buflen, fmt, Context ? Context->tagged : 0);
263 else if (!Context || !Context->tagged)
269 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
270 snprintf (buf, buflen, fmt, Context ? Context->unread : 0);
272 else if (!Context || !Context->unread)
277 snprintf (fmt, sizeof (fmt), "Mutt-ng %%s");
278 snprintf (buf, buflen, fmt, MUTT_VERSION);
283 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
284 snprintf (buf, buflen, fmt,
285 (Context && Context->pattern) ? Context->pattern : "");
287 else if (!Context || !Context->pattern)
296 snprintf (buf, buflen, "%%%s%c", prefix, op);
301 menu_status_line (buf, buflen, menu, ifstring);
302 else if (flags & M_FORMAT_OPTIONAL)
303 menu_status_line (buf, buflen, menu, elsestring);
308 void menu_status_line (char *buf, size_t buflen, MUTTMENU * menu,
311 mutt_FormatString (buf, buflen, p, status_format_str, (unsigned long) menu,