+ int i = 0, dlen, max, shortened = 0;
+ int offset;
+
+ if (SidebarWidth > COLS)
+ SidebarWidth = COLS;
+
+ dlen = safe_strlen (SidebarDelim);
+ max = SidebarWidth - dlen - 1;
+
+ safe_realloc (&entry, SidebarWidth + 1);
+ entry[SidebarWidth] = 0;
+ for (; i < SidebarWidth; entry[i++] = ' ');
+#if USE_IMAP
+ if (ImapHomeNamespace && safe_strlen (ImapHomeNamespace) > 0) {
+ if (strncmp (box, ImapHomeNamespace, safe_strlen (ImapHomeNamespace)) == 0
+ && safe_strcmp (box, ImapHomeNamespace) != 0) {
+ box += safe_strlen (ImapHomeNamespace) + 1;
+ }
+ }
+#endif
+ max -= quick_log10 (size);
+ if (new)
+ max -= quick_log10 (new) + 2;
+ if (flagged > 0)
+ max -= quick_log10 (flagged) + 2;
+ if (option (OPTSHORTENHIERARCHY) && safe_strlen (box) > max) {
+ box = shortened_hierarchy (box);
+ shortened = 1;
+ }
+ i = safe_strlen (box);
+ strncpy (entry, box, i < SidebarWidth - dlen ? i : SidebarWidth - dlen);
+
+ if (new) {
+ if (flagged > 0) {
+ offset =
+ SidebarWidth - 5 - quick_log10 (size) - dlen - quick_log10 (new) -
+ quick_log10 (flagged);
+ if (offset < 0)
+ offset = 0;
+ snprintf (entry + offset, SidebarWidth - dlen - offset + 1,
+ "% d(%d)[%d]", size, new, flagged);
+ }
+ else {
+ offset =
+ SidebarWidth - 3 - quick_log10 (size) - dlen - quick_log10 (new);
+ if (offset < 0)
+ offset = 0;
+ snprintf (entry + offset, SidebarWidth - dlen - offset + 1,
+ "% d(%d)", size, new);
+ }
+ }
+ else {
+ if (flagged > 0) {
+ offset =
+ SidebarWidth - 3 - quick_log10 (size) - dlen - quick_log10 (flagged);
+ if (offset < 0)
+ offset = 0;
+ snprintf (entry + offset, SidebarWidth - dlen - offset + 1,
+ "% d[%d]", size, flagged);
+ }
+ else {
+ offset = SidebarWidth - 1 - quick_log10 (size) - dlen;
+ if (offset < 0)
+ offset = 0;
+ snprintf (entry + offset, SidebarWidth - dlen - offset + 1,
+ "% d", size);
+ }
+ }
+
+ if (option (OPTSHORTENHIERARCHY) && shortened) {
+ free (box);
+ }
+ return entry;
+}
+
+/* returns folder name of currently
+ * selected folder for <sidebar-open>
+ */
+const char* sidebar_get_current (void) {
+ if (list_empty(Incoming))
+ return (NULL);
+ return ((char*) ((BUFFY*) Incoming->data[CurBuffy])->path);
+}
+
+/* internally sets item to buf */
+void sidebar_set_current (const char* buf) {
+ int i = buffy_lookup (buf);
+ if (i >= 0)
+ CurBuffy = i;
+}