patches written by Steve Kemp, it adds two new functionalities to the sidebar, so only the mailbox with new messages will be shown (and/or) selected See Debian bug http://bugs.debian.org/532510 --- a/OPS +++ b/OPS @@ -184,3 +184,5 @@ OP_SIDEBAR_NEXT "go down to next mailbox" OP_SIDEBAR_PREV "go to previous mailbox" OP_SIDEBAR_OPEN "open hilighted mailbox" +OP_SIDEBAR_NEXT_NEW "go down to next mailbox with new mail" +OP_SIDEBAR_PREV_NEW "go to previous mailbox with new mail" --- a/curs_main.c +++ b/curs_main.c @@ -2236,6 +2236,8 @@ case OP_SIDEBAR_SCROLL_DOWN: case OP_SIDEBAR_NEXT: case OP_SIDEBAR_PREV: + case OP_SIDEBAR_NEXT_NEW: + case OP_SIDEBAR_PREV_NEW: scroll_sidebar(op, menu->menu); break; default: --- a/functions.h +++ b/functions.h @@ -173,6 +173,10 @@ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, + { "sidebar-next-new", OP_SIDEBAR_NEXT_NEW, NULL}, + { "sidebar-prev-new", OP_SIDEBAR_PREV_NEW, NULL}, + { "sidebar-next-new", OP_SIDEBAR_NEXT_NEW, NULL}, + { "sidebar-prev-new", OP_SIDEBAR_PREV_NEW, NULL}, { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, { NULL, 0, NULL } }; --- a/init.h +++ b/init.h @@ -1956,6 +1956,11 @@ {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, "|"}, /* ** .pp + ** Show only new mail in the sidebar. + */ + {"sidebar_newmail_only", DT_BOOL, R_BOTH, OPTSIDEBARNEWMAILONLY, "no" }, + /* + ** .pp ** This specifies the delimiter between the sidebar (if visible) and ** other screens. */ --- a/mutt.h +++ b/mutt.h @@ -518,6 +518,8 @@ OPTDONTHANDLEPGPKEYS, /* (pseudo) used to extract PGP keys */ OPTUNBUFFEREDINPUT, /* (pseudo) don't use key buffer */ + OPTSIDEBARNEWMAILONLY, + OPTMAX }; --- a/pager.c +++ b/pager.c @@ -2756,6 +2756,8 @@ case OP_SIDEBAR_SCROLL_DOWN: case OP_SIDEBAR_NEXT: case OP_SIDEBAR_PREV: + case OP_SIDEBAR_NEXT_NEW: + case OP_SIDEBAR_PREV_NEW: scroll_sidebar(ch, MENU_PAGER); break; --- a/sidebar.c +++ b/sidebar.c @@ -261,8 +261,20 @@ SETCOLOR(MT_COLOR_NEW); else if ( tmp->msg_flagged > 0 ) SETCOLOR(MT_COLOR_FLAGGED); - else - SETCOLOR(MT_COLOR_NORMAL); + else { + /* make sure the path is either: + 1. Containing new mail. + 2. The inbox. + 3. The current box. + */ + if ((option (OPTSIDEBARNEWMAILONLY)) && + ( (tmp->msg_unread <= 0) && + ( tmp != Incoming ) && + ( strcmp( tmp->path, Context->path ) != 0 ) ) ) + continue; + else + SETCOLOR(MT_COLOR_NORMAL); + } move( lines, 0 ); if ( Context && !strcmp( tmp->path, Context->path ) ) { @@ -320,6 +332,29 @@ return 0; } +BUFFY * exist_next_new() +{ + BUFFY *tmp = CurBuffy; + if(tmp == NULL) return NULL; + while (tmp->next != NULL) + { + tmp = tmp->next; + if(tmp->msg_unread) return tmp; + } + return NULL; +} + +BUFFY * exist_prev_new() +{ + BUFFY *tmp = CurBuffy; + if(tmp == NULL) return NULL; + while (tmp->prev != NULL) + { + tmp = tmp->prev; + if(tmp->msg_unread) return tmp; + } + return NULL; +} void set_buffystats(CONTEXT* Context) { @@ -336,18 +371,33 @@ void scroll_sidebar(int op, int menu) { + BUFFY *tmp; if(!SidebarWidth) return; if(!CurBuffy) return; switch (op) { case OP_SIDEBAR_NEXT: + if (!option (OPTSIDEBARNEWMAILONLY)) { if ( CurBuffy->next == NULL ) return; CurBuffy = CurBuffy->next; break; + } + case OP_SIDEBAR_NEXT_NEW: + if ( (tmp = exist_next_new()) == NULL) + return; + else CurBuffy = tmp; + break; case OP_SIDEBAR_PREV: + if (!option (OPTSIDEBARNEWMAILONLY)) { if ( CurBuffy->prev == NULL ) return; CurBuffy = CurBuffy->prev; break; + } + case OP_SIDEBAR_PREV_NEW: + if ( (tmp = exist_prev_new()) == NULL) + return; + else CurBuffy = tmp; + break; case OP_SIDEBAR_SCROLL_UP: CurBuffy = TopBuffy; if ( CurBuffy != Incoming ) {