* please see the file GPL in the top level source directory.
*/
+#include <lib-lib/lib-lib.h>
#include <libgen.h>
-#include <ctype.h>
-
-#include <lib-lib/mem.h>
-#include <lib-lib/str.h>
-#include <lib-lib/macros.h>
#include <lib-ui/curses.h>
#include <lib-ui/menu.h>
/* computes first entry to be shown */
static void calc_boundaries (void) {
- if (list_empty(Incoming))
+ if (!Incoming.len)
return;
- if (CurBuffy < 0 || CurBuffy >= Incoming->length)
+ if (CurBuffy < 0 || CurBuffy >= Incoming.len)
CurBuffy = 0;
- if (TopBuffy < 0 || TopBuffy >= Incoming->length)
+ if (TopBuffy < 0 || TopBuffy >= Incoming.len)
TopBuffy = 0;
if (option (OPTSIDEBARNEWMAILONLY)) {
int i = CurBuffy;
TopBuffy = CurBuffy - 1;
while (i >= 0) {
- if (((BUFFY*) Incoming->data[i])->new > 0)
+ if (Incoming.arr[i]->new > 0)
TopBuffy = i;
i--;
}
TopBuffy = 0;
}
-static char *shortened_hierarchy (char *box, int maxlen)
+static char *shortened_hierarchy (char *hbox, int maxlen)
{
int dots = 0;
char *last_dot = NULL;
- int i, j, len = m_strlen(box);
+ int i, j, len = m_strlen(hbox);
char *new_box;
if (!SidebarBoundary || !*SidebarBoundary)
- return (m_strdup(box));
+ return (m_strdup(hbox));
for (i = 0; i < len; ++i) {
- if (strchr (SidebarBoundary, box[i])) {
+ if (strchr (SidebarBoundary, hbox[i])) {
++dots;
- last_dot = &box[i];
+ last_dot = &hbox[i];
}
}
if (last_dot) {
++last_dot;
new_box = p_new(char, maxlen + 1);
- new_box[0] = box[0];
+ new_box[0] = hbox[0];
for (i = 1, j = 1; j < maxlen && i < len; ++i) {
- if (strchr (SidebarBoundary, box[i])) {
- new_box[j++] = box[i];
+ if (strchr (SidebarBoundary, hbox[i])) {
+ new_box[j++] = hbox[i];
new_box[j] = 0;
- if (&box[i + 1] != last_dot || j + m_strlen(last_dot) > maxlen) {
- new_box[j++] = box[i + 1];
+ if (&hbox[i + 1] != last_dot || j + m_strlen(last_dot) > maxlen) {
+ new_box[j++] = hbox[i + 1];
new_box[j] = 0;
} else {
strcat (&new_box[j], last_dot);
}
return new_box;
}
- return m_strdup(box);
+ return m_strdup(hbox);
}
static const char* sidebar_number_format (char* dest, ssize_t destlen, char op,
const char* ifstr, const char* elstr,
unsigned long data, format_flag flags) {
char tmp[SHORT_STRING];
- BUFFY* b = (BUFFY*) Incoming->data[data];
+ BUFFY* b = Incoming.arr[data];
int opt = flags & M_FORMAT_OPTIONAL;
int c = Context && !m_strcmp(Context->path, b->path);
* 0 item was not printed ('cause of $sidebar_newmail_only)
* 1 item was printed
*/
-int make_sidebar_entry (char* box, int idx, ssize_t len)
+static int make_sidebar_entry (char* sbox, int idx, ssize_t len)
{
int shortened = 0, lencnt = 0;
char no[SHORT_STRING], entry[SHORT_STRING];
if (SidebarWidth > COLS)
SidebarWidth = COLS;
- if (option (OPTSIDEBARNEWMAILONLY) && box && Context && Context->path &&
- m_strcmp(Context->path, box) && ((BUFFY*) Incoming->data[idx])->new == 0)
+ if (option (OPTSIDEBARNEWMAILONLY) && sbox && Context && Context->path &&
+ m_strcmp(Context->path, sbox) && Incoming.arr[idx]->new == 0)
/* if $sidebar_newmail_only is set, don't display the
* box only if it's not the currently opened
* (i.e. always display the currently opened) */
lencnt = m_strlen(no);
memset(&entry, ' ', sizeof(entry));
- if (l > 0 && m_strncmp(box, ImapHomeNamespace, l) == 0 &&
- m_strlen(box) > l)
- box += l + 1; /* we're trimming the ImapHomeNamespace, the "+ 1" is for the separator */
+ if (l > 0 && m_strncmp(sbox, ImapHomeNamespace, l) == 0 &&
+ m_strlen(sbox) > l)
+ sbox += l + 1; /* we're trimming the ImapHomeNamespace, the "+ 1" is for the separator */
else
- if (l_m > 0 && m_strncmp(box, Maildir, l_m) == 0 &&
- m_strlen(box) > l_m) {
- box += l_m;
+ if (l_m > 0 && m_strncmp(sbox, Maildir, l_m) == 0 &&
+ m_strlen(sbox) > l_m) {
+ sbox += l_m;
if (Maildir[strlen(Maildir)-1]!='/') {
- box += 1;
+ sbox += 1;
}
} else
- box = basename (box);
+ sbox = basename (sbox);
- if (option (OPTSHORTENHIERARCHY) && m_strlen(box) > len-lencnt-1) {
- box = shortened_hierarchy (box, len-lencnt-1);
+ if (option (OPTSHORTENHIERARCHY) && m_strlen(sbox) > len-lencnt-1) {
+ sbox = shortened_hierarchy (sbox, len-lencnt-1);
shortened = 1;
}
- m_strcpy(entry, len - lencnt, box);
+ m_strcpy(entry, len - lencnt, sbox);
entry[m_strlen(entry)] = ' ';
memcpy(entry + (len - lencnt), no, lencnt);
addnstr (entry, len);
if (shortened)
- p_delete(&box);
+ p_delete(&sbox);
return (1);
}
* selected folder for <sidebar-open>
*/
const char* sidebar_get_current (void) {
- if (list_empty(Incoming))
+ if (!Incoming.len)
return (NULL);
- return ((char*) ((BUFFY*) Incoming->data[CurBuffy])->path);
+ return Incoming.arr[CurBuffy]->path;
}
/* internally sets item to buf */
/* fix counters for a context
* FIXME since ctx must not be of our business, move it elsewhere
*/
-void sidebar_set_buffystats (CONTEXT* Context) {
+void sidebar_set_buffystats (CONTEXT* curContext) {
int i = 0;
BUFFY* tmp = NULL;
- if (!Context || list_empty(Incoming) || (i = buffy_lookup (Context->path)) < 0)
+ if (!curContext || !Incoming.len || (i = buffy_lookup (curContext->path)) < 0)
return;
- tmp = (BUFFY*) Incoming->data[i];
- tmp->new = Context->new;
- tmp->msg_unread = Context->unread;
- tmp->msgcount = Context->msgcount;
- tmp->msg_flagged = Context->flagged;
+ tmp = Incoming.arr[i];
+ tmp->new = curContext->new;
+ tmp->msg_unread = curContext->unread;
+ tmp->msgcount = curContext->msgcount;
+ tmp->msg_flagged = curContext->flagged;
}
void sidebar_draw_frames (void) {
/* actually draws something
* FIXME this needs some clue when to do it
*/
-int sidebar_draw (int menu) {
+int sidebar_draw (void) {
int first_line = option (OPTSTATUSONTOP) ? 1 : option (OPTHELP) ? 1 : 0,
last_line = LINES - 2 + (option (OPTSTATUSONTOP) && !option (OPTHELP) ? 1 : 0),
i = 0,line;
sidebar_draw_frames();
- if (list_empty(Incoming))
+ if (!Incoming.len)
return 0;
/* actually print items */
- for (i = TopBuffy, line=first_line; i < Incoming->length && line < last_line; i++) {
- tmp = (BUFFY*) Incoming->data[i];
+ for (i = TopBuffy, line=first_line; i < Incoming.len && line < last_line; i++) {
+ tmp = Incoming.arr[i];
if (i == CurBuffy)
SETCOLOR (MT_COLOR_INDICATOR);
/* returns index of new item with new mail or -1 */
static int exist_next_new () {
int i = 0;
- if (list_empty(Incoming))
+ if (!Incoming.len)
return (-1);
i = CurBuffy + 1;
- while (i < Incoming->length)
- if (((BUFFY*) Incoming->data[i++])->new > 0)
+ while (i < Incoming.len)
+ if (Incoming.arr[i++]->new > 0)
return (i-1);
return (-1);
}
/* returns index of prev item with new mail or -1 */
static int exist_prev_new () {
int i = 0;
- if (list_empty(Incoming))
+ if (!Incoming.len)
return (-1);
i = CurBuffy - 1;
while (i >= 0)
- if (((BUFFY*) Incoming->data[i--])->new > 0)
+ if (Incoming.arr[i--]->new > 0)
return (i+1);
return (-1);
}
-void sidebar_scroll (int op, int menu) {
+void sidebar_scroll (int op) {
int i = 0;
- if (!SidebarWidth || list_empty(Incoming))
+ if (!SidebarWidth || !Incoming.len)
return;
switch (op) {
case OP_SIDEBAR_NEXT:
if (!option (OPTSIDEBARNEWMAILONLY)) {
- if (CurBuffy + 1 == Incoming->length) {
+ if (CurBuffy + 1 == Incoming.len) {
mutt_error (_("You are on the last mailbox."));
return;
}
CurBuffy = 0;
break;
case OP_SIDEBAR_SCROLL_DOWN:
- if (CurBuffy + 1 == Incoming->length) {
+ if (CurBuffy + 1 == Incoming.len) {
mutt_error (_("You are on the last mailbox."));
return;
}
CurBuffy += known_lines;
- if (CurBuffy >= Incoming->length)
- CurBuffy = Incoming->length - 1;
+ if (CurBuffy >= Incoming.len)
+ CurBuffy = Incoming.len - 1;
break;
default:
return;
}
calc_boundaries ();
- sidebar_draw (menu);
+ sidebar_draw ();
}