+ return str_dup (box);
+}
+
+static const char* sidebar_number_format (char* dest, size_t destlen, char op,
+ const char* src, const char* fmt,
+ const char* ifstr, const char* elstr,
+ unsigned long data, format_flag flags) {
+ char tmp[SHORT_STRING];
+ BUFFY* b = (BUFFY*) Incoming->data[data];
+ int opt = flags & M_FORMAT_OPTIONAL;
+ int c = Context && str_eq (Context->path, b->path);
+
+ switch (op) {
+ /* deleted */
+ case 'd':
+ if (!opt) {
+ snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+ snprintf (dest, destlen, tmp, c ? Context->deleted : 0);
+ } else if ((c && Context->deleted == 0) || !c)
+ opt = 0;
+ break;
+ /* flagged */
+ case 'F':
+ case 'f': /* for compatibility */
+ if (!opt) {
+ snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+ snprintf (dest, destlen, tmp, c ? Context->flagged : b->msg_flagged);
+ } else if ((c && Context->flagged == 0) || (!c && b->msg_flagged == 0))
+ opt = 0;
+ break;
+ /* total */
+ case 'c': /* for compatibility */
+ case 'm':
+ if (!opt) {
+ snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+ snprintf (dest, destlen, tmp, c ? Context->msgcount : b->msgcount);
+ } else if ((c && Context->msgcount == 0) || (!c && b->msgcount == 0))
+ opt = 0;
+ break;
+ /* total shown, i.e. not hidden by limit */
+ case 'M':
+ if (!opt) {
+ snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+ snprintf (dest, destlen, tmp, c ? Context->vcount : 0);
+ } else if ((c && Context->vcount == 0) || !c)
+ opt = 0;
+ break;
+ /* new */
+ case 'n':
+ if (!opt) {
+ snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+ snprintf (dest, destlen, tmp, c ? Context->new : b->new);
+ } else if ((c && Context->new == 0) || (!c && b->new == 0))
+ opt = 0;
+ break;
+ /* unread */
+ case 'u':
+ if (!opt) {
+ snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+ snprintf (dest, destlen, tmp, c ? Context->unread : b->msg_unread);
+ } else if ((c && Context->unread == 0) || (!c && b->msg_unread == 0))
+ opt = 0;
+ break;
+ /* tagged */
+ case 't':
+ if (!opt) {
+ snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+ snprintf (dest, destlen, tmp, c ? Context->tagged : 0);
+ } else if ((c && Context->tagged == 0) || !c)
+ opt = 0;
+ break;
+ }
+
+ if (opt)
+ mutt_FormatString (dest, destlen, ifstr, sidebar_number_format,
+ data, M_FORMAT_OPTIONAL);
+ else if (flags & M_FORMAT_OPTIONAL)
+ mutt_FormatString (dest, destlen, elstr, sidebar_number_format,
+ data, M_FORMAT_OPTIONAL);
+ return (src);
+}
+
+int sidebar_need_count (void) {
+ if (!option (OPTMBOXPANE) || SidebarWidth == 0 ||
+ !SidebarNumberFormat || !*SidebarNumberFormat)
+ return (0);
+ return (1);