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.
10 #include <lib-lib/lib-lib.h>
12 #include <lib-ui/curses.h>
13 #include <lib-ui/menu.h>
14 #include <lib-mx/mx.h>
20 #define SW (option(OPTMBOXPANE)?SidebarWidth:0)
22 static char *get_sort_str (char *buf, ssize_t buflen, int method)
24 snprintf (buf, buflen, "%s%s%s",
25 (method & SORT_REVERSE) ? "reverse-" : "",
26 (method & SORT_LAST) ? "last-" : "",
27 mutt_getnamebyvalue (method & SORT_MASK, SortMethods));
31 /* %b = number of incoming folders with unread messages [option]
32 * %B = short mailbox path
33 * %d = number of deleted messages [option]
34 * %f = full mailbox path
35 * %F = number of flagged messages [option]
37 * %l = length of mailbox (in bytes) [option]
38 * %m = total number of messages [option]
39 * %M = number of messages shown (virutal message count when limiting) [option]
40 * %n = number of new messages [option]
41 * %p = number of postponed messages [option]
42 * %P = percent of way through index
43 * %r = readonly/wontwrite/changed flag
44 * %s = current sorting method ($sort)
45 * %S = current aux sorting method ($sort_aux)
46 * %t = # of tagged messages [option]
47 * %v = Madmutt version
48 * %V = currently active limit pattern [option] */
49 static const char *status_format_str (char *buf, ssize_t buflen, char op,
50 const char *src, const char *prefix,
52 const char *elsestring,
53 unsigned long data, format_flag flags)
55 char fmt[STRING], tmp[STRING];
57 int count, optional = (flags & M_FORMAT_OPTIONAL);
58 MUTTMENU *menu = (MUTTMENU *) data;
64 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
65 snprintf (buf, buflen, fmt, buffy_check (0));
67 else if (!buffy_check (0))
72 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
73 if (Context && Context->cinfo && Context->realpath) {
74 if ((p = strrchr (Context->realpath, '/')))
75 m_strcpy(tmp, sizeof(tmp), p + 1);
77 m_strcpy(tmp, sizeof(tmp), Context->realpath);
80 if (Context && Context->path) {
81 if ((p = strrchr (Context->path, '/')))
82 m_strcpy(tmp, sizeof(tmp), p + 1);
84 m_strcpy(tmp, sizeof(tmp), Context->path);
87 m_strcpy(tmp, sizeof(tmp), _("no mailbox"));
88 snprintf (buf, buflen, fmt, tmp);
93 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
94 snprintf (buf, buflen, fmt, Context ? Context->deleted : 0);
96 else if (!Context || !Context->deleted)
101 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
102 snprintf (buf, buflen, fmt, NONULL (Hostname));
106 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
107 if (Context && Context->cinfo && Context->realpath) {
108 m_strcpy(tmp, sizeof(tmp), Context->realpath);
109 mutt_pretty_mailbox (tmp);
111 if (Context && Context->path) {
112 m_strcpy(tmp, sizeof(tmp), Context->path);
113 mutt_pretty_mailbox (tmp);
115 m_strcpy(tmp, sizeof(tmp), _("(no mailbox)"));
117 snprintf (buf, buflen, fmt, tmp);
122 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
123 snprintf (buf, buflen, fmt, Context ? Context->flagged : 0);
125 else if (!Context || !Context->flagged)
131 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
132 mutt_pretty_size (tmp, sizeof (tmp), Context ? Context->size : 0);
133 snprintf (buf, buflen, fmt, tmp);
135 else if (!Context || !Context->size)
141 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
142 mutt_pretty_size (tmp, sizeof (tmp), Context ? Context->vsize : 0);
143 snprintf (buf, buflen, fmt, tmp);
145 else if (!Context || !Context->pattern)
151 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
152 snprintf (buf, buflen, fmt, Context ? Context->msgcount : 0);
154 else if (!Context || !Context->msgcount)
160 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
161 snprintf (buf, buflen, fmt, Context ? Context->vcount : 0);
163 else if (!Context || !Context->pattern)
169 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
170 snprintf (buf, buflen, fmt, Context ? Context->new : 0);
172 else if (!Context || Context->new <= 0)
178 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
179 snprintf (buf, buflen, fmt,
180 Context ? Context->unread - Context->new : 0);
182 else if (!Context || !(Context->unread - Context->new))
187 count = mutt_num_postponed (0);
189 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
190 snprintf (buf, buflen, fmt, count);
197 if (menu->top + menu->pagelen >= menu->max)
198 cp = menu->top ? "end" : "all";
200 count = (100 * (menu->top + menu->pagelen)) / menu->max;
201 snprintf (tmp, sizeof (tmp), "%d%%", count);
204 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
205 snprintf (buf, buflen, fmt, cp);
213 /* XXX: deleted doesn't necessarily mean changed in IMAP */
214 i = option (OPTATTACHMSG) ? 3
215 : ((Context->readonly || Context->dontwrite) ? 2
216 : (Context->changed || (Context-> magic != M_IMAP && Context->
222 else if (i >= m_strlen(StChars))
232 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
233 snprintf (buf, buflen, fmt, get_sort_str (tmp, sizeof (tmp), Sort));
237 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
238 snprintf (buf, buflen, fmt, get_sort_str (tmp, sizeof (tmp), SortAux));
243 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
244 snprintf (buf, buflen, fmt, Context ? Context->tagged : 0);
246 else if (!Context || !Context->tagged)
252 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
253 snprintf (buf, buflen, fmt, Context ? Context->unread : 0);
255 else if (!Context || !Context->unread)
260 m_strcpy(buf, buflen, mutt_make_version(0));
265 snprintf (fmt, sizeof (fmt), "%%%ss", prefix);
266 snprintf (buf, buflen, fmt,
267 (Context && Context->pattern) ? Context->pattern : "");
269 else if (!Context || !Context->pattern)
278 snprintf (buf, buflen, "%%%s%c", prefix, op);
283 menu_status_line (buf, buflen, menu, ifstring);
284 else if (flags & M_FORMAT_OPTIONAL)
285 menu_status_line (buf, buflen, menu, elsestring);
290 void menu_status_line (char* buf, ssize_t len, MUTTMENU* menu, const char* p) {
292 * if we have enough space for buffer, format lines to $COLS-$SidebarWidth
293 * only to not wrap past end of screen
295 int width = COLS - SW;
296 mutt_FormatString (buf, (width >= len ? len : (width + 1)),
297 p, status_format_str,
298 (unsigned long) menu, 0);