FreeBSD Bugzilla – Attachment 137626 Details for
Bug 183251
mail/mutt: failure to patch with SIDEBAR option enabled
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
mutt.diff
mutt.diff (text/x-diff; charset=us-ascii), 174.49 KB, created by
Udo.Schweigert
on 2013-10-25 08:28:58 UTC
(
hide
)
Description:
mutt.diff
Filename:
MIME Type:
Creator:
Udo.Schweigert
Created:
2013-10-25 08:28:58 UTC
Size:
174.49 KB
patch
obsolete
>diff -ru /usr/ports/mail/mutt/files/extra-patch-sidebar ./files/extra-patch-sidebar >--- /usr/ports/mail/mutt/files/extra-patch-sidebar 2012-07-22 11:15:04.057605000 +0200 >+++ ./files/extra-patch-sidebar 2013-10-25 08:46:21.837026000 +0200 >@@ -1,6 +1,29 @@ >---- orig/buffy.c.orig 2010-09-18 14:12:40.000000000 +0200 >-+++ new/buffy.c 2010-09-18 14:17:36.000000000 +0200 >-@@ -161,6 +161,49 @@ >+Based on Gentoo's updated version of the Mutt Sidebar patch, >+rebased to apply to pristine Mutt sources. >+ >+http://prefix.gentooexperimental.org:8000/mutt-patches/file/8117acc3edc0/sidebar.patch >+ >+diff -uNp -r mutt-1.5.22.orig/OPS mutt-1.5.22/OPS >+--- mutt-1.5.22.orig/OPS Tue Feb 23 06:57:28 2010 >++++ mutt-1.5.22/OPS Fri Oct 18 10:18:45 2013 >+@@ -179,3 +179,8 @@ OP_WHAT_KEY "display the keycode for a key press" >+ OP_MAIN_SHOW_LIMIT "show currently active limit pattern" >+ OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread" >+ OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads" >++OP_SIDEBAR_SCROLL_UP "scroll the mailbox pane up 1 page" >++OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page" >++OP_SIDEBAR_NEXT "go down to next mailbox" >++OP_SIDEBAR_PREV "go to previous mailbox" >++OP_SIDEBAR_OPEN "open hilighted mailbox" >+diff -uNp -r mutt-1.5.22.orig/PATCHES mutt-1.5.22/PATCHES >+--- mutt-1.5.22.orig/PATCHES Sun Feb 21 05:51:26 2010 >++++ mutt-1.5.22/PATCHES Fri Oct 18 10:19:14 2013 >+@@ -0,0 +1 @@ >++patch-1.5.22.sidebar.gentoo-openbsd >+diff -uNp -r mutt-1.5.22.orig/buffy.c mutt-1.5.22/buffy.c >+--- mutt-1.5.22.orig/buffy.c Mon Apr 22 07:14:53 2013 >++++ mutt-1.5.22/buffy.c Fri Oct 18 10:18:45 2013 >+@@ -161,6 +161,49 @@ void mutt_buffy_cleanup (const char *buf, struct stat > } > } > >@@ -50,7 +73,7 @@ > BUFFY *mutt_find_mailbox (const char *path) > { > BUFFY *tmp = NULL; >-@@ -282,6 +325,7 @@ >+@@ -282,6 +325,7 @@ int mutt_parse_mailboxes (BUFFER *path, BUFFER *s, uns > else > (*tmp)->size = 0; > } >@@ -58,884 +81,817 @@ > return 0; > } > >-@@ -371,12 +415,17 @@ >+@@ -340,6 +384,68 @@ static int buffy_maildir_hasnew (BUFFY* mailbox) > return rc; > } > >-+#define STAT_CHECK_SIZE (sb.st_size > tmp->size) >-+#define STAT_CHECK_TIME (sb.st_mtime > sb.st_atime || (tmp->newly_created && sb.st_ctime == sb.st_mtime && sb.st_ctime == sb.st_atime)) >-+#define STAT_CHECK (option(OPTCHECKMBOXSIZE) ? STAT_CHECK_SIZE : STAT_CHECK_TIME) >++/* update message counts for the sidebar */ >++void buffy_maildir_update (BUFFY* mailbox) >++{ >++ char path[_POSIX_PATH_MAX]; >++ DIR *dirp; >++ struct dirent *de; >++ char *p; >++ >++ mailbox->msgcount = 0; >++ mailbox->msg_unread = 0; >++ mailbox->msg_flagged = 0; >++ >++ snprintf (path, sizeof (path), "%s/new", mailbox->path); >++ >++ if ((dirp = opendir (path)) == NULL) >++ { >++ mailbox->magic = 0; >++ return; >++ } >++ >++ while ((de = readdir (dirp)) != NULL) >++ { >++ if (*de->d_name == '.') >++ continue; >++ >++ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) { >++ mailbox->new = 1; >++ mailbox->msgcount++; >++ mailbox->msg_unread++; >++ } >++ } >++ >++ closedir (dirp); >++ snprintf (path, sizeof (path), "%s/cur", mailbox->path); >++ >++ if ((dirp = opendir (path)) == NULL) >++ { >++ mailbox->magic = 0; >++ return; >++ } >++ >++ while ((de = readdir (dirp)) != NULL) >++ { >++ if (*de->d_name == '.') >++ continue; >++ >++ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) { >++ mailbox->msgcount++; >++ if ((p = strstr (de->d_name, ":2,"))) { >++ if (!strchr (p + 3, 'T')) { >++ if (!strchr (p + 3, 'S')) >++ mailbox->msg_unread++; >++ if (strchr(p + 3, 'F')) >++ mailbox->msg_flagged++; >++ } >++ } >++ } >++ } >++ >++ closedir (dirp); >++} >++ >+ /* returns 1 if mailbox has new mail */ >+ static int buffy_mbox_hasnew (BUFFY* mailbox, struct stat *sb) >+ { >+@@ -371,6 +477,20 @@ static int buffy_mbox_hasnew (BUFFY* mailbox, struct s >+ return rc; >+ } >+ >++/* update message counts for the sidebar */ >++void buffy_mbox_update (BUFFY* mailbox) >++{ >++ CONTEXT *ctx = NULL; >++ >++ ctx = mx_open_mailbox(mailbox->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL); >++ if(ctx) >++ { >++ mailbox->msgcount = ctx->msgcount; >++ mailbox->msg_unread = ctx->unread; >++ mx_close_mailbox(ctx, 0); >++ } >++} > + > int mutt_buffy_check (int force) > { > BUFFY *tmp; >- struct stat sb; >- struct stat contex_sb; >- time_t t; >-+ CONTEXT *ctx; >- >- sb.st_size=0; >- contex_sb.st_dev=0; >-@@ -416,6 +465,8 @@ >- >- for (tmp = Incoming; tmp; tmp = tmp->next) >- { >-+ if ( tmp->new == 1 ) >-+ tmp->has_new = 1; >- if (tmp->magic != M_IMAP) >- { >- tmp->new = 0; >-@@ -455,18 +506,122 @@ >+@@ -444,16 +564,19 @@ int mutt_buffy_check (int force) > { > case M_MBOX: > case M_MMDF: >-- if (buffy_mbox_hasnew (tmp, &sb) > 0) >-- BuffyCount++; >-- break; >-+ { >-+ if (STAT_CHECK || tmp->msgcount == 0) >-+ { >-+ BUFFY b = *tmp; >-+ int msgcount = 0; >-+ int msg_unread = 0; >-+ /* parse the mailbox, to see how much mail there is */ >-+ ctx = mx_open_mailbox( tmp->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL); >-+ if(ctx) >-+ { >-+ msgcount = ctx->msgcount; >-+ msg_unread = ctx->unread; >-+ mx_close_mailbox(ctx, 0); >-+ } >-+ *tmp = b; >-+ tmp->msgcount = msgcount; >-+ tmp->msg_unread = msg_unread; >-+ if(STAT_CHECK) { >-+ tmp->has_new = tmp->new = 1; >-+ BuffyCount++; >-+ } >-+ } >-+ else if (option(OPTCHECKMBOXSIZE)) >-+ { >-+ /* some other program has deleted mail from the folder */ >-+ tmp->size = (off_t) sb.st_size; >-+ } >-+ if (tmp->newly_created && >-+ (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) >-+ tmp->newly_created = 0; >-+ } >-+ break; >-+ >++ buffy_mbox_update (tmp); >+ if (buffy_mbox_hasnew (tmp, &sb) > 0) >+ BuffyCount++; >+ break; > > case M_MAILDIR: >-- if (buffy_maildir_hasnew (tmp) > 0) >-- BuffyCount++; >-+ { >-+ char path[_POSIX_PATH_MAX]; >-+ DIR *dirp; >-+ struct dirent *de; >-+ /* count new message */ >-+ snprintf (path, sizeof (path), "%s/new", tmp->path); >-+ if ((dirp = opendir (path)) == NULL) >-+ { >-+ tmp->magic = 0; >-+ break; >-+ } >-+ tmp->msgcount = 0; >-+ tmp->msg_unread = 0; >-+ tmp->msg_flagged = 0; >-+ while ((de = readdir (dirp)) != NULL) >-+ { >-+ char *p; >-+ if (*de->d_name != '.' && >-+ (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) >-+ { >-+ tmp->has_new = tmp->new = 1; >-+ tmp->msgcount++; >-+ tmp->msg_unread++; >-+ } >-+ } >-+ if(tmp->msg_unread) >-+ BuffyCount++; >-+ >-+ closedir (dirp); >-+ >-+ /* >-+ * count read messages (for folderlist (sidebar) we also need to count >-+ * messages in cur so that we the total number of messages >-+ */ >-+ snprintf (path, sizeof (path), "%s/cur", tmp->path); >-+ if ((dirp = opendir (path)) == NULL) >-+ { >-+ tmp->magic = 0; >-+ break; >-+ } >-+ while ((de = readdir (dirp)) != NULL) >-+ { >-+ char *p; >-+ if (*de->d_name != '.') { >-+ if ((p = strstr (de->d_name, ":2,"))) { >-+ if (!strchr (p + 3, 'T')) { >-+ tmp->msgcount++; >-+ if ( !strchr (p + 3, 'S')) >-+ tmp->msg_unread++; >-+ if (strchr(p + 3, 'F')) >-+ tmp->msg_flagged++; >-+ } >-+ } else >-+ tmp->msgcount++; >-+ } >-+ } >-+ closedir (dirp); >-+ } >++ buffy_maildir_update (tmp); >+ if (buffy_maildir_hasnew (tmp) > 0) >+ BuffyCount++; > break; > > case M_MH: >-- if ((tmp->new = mh_buffy (tmp->path)) > 0) >-- BuffyCount++; >-+ { >-+ DIR *dp; >-+ char path[_POSIX_PATH_MAX]; >-+ struct dirent *de; >-+ if ((tmp->new = mh_buffy (tmp->path)) > 0) >-+ BuffyCount++; >-+ >-+ if ((dp = opendir (path)) == NULL) >-+ break; >-+ tmp->msgcount = 0; >-+ while ((de = readdir (dp))) >-+ { >-+ if (mh_valid_message (de->d_name)) >-+ { >-+ tmp->msgcount++; >-+ tmp->has_new = tmp->new = 1; >-+ } >-+ } >-+ closedir (dp); >-+ } >- break; >- } >++ mh_buffy_update (tmp->path, &tmp->msgcount, &tmp->msg_unread, &tmp->msg_flagged); >+ mh_buffy(tmp); >+ if (tmp->new) >+ BuffyCount++; >+diff -uNp -r mutt-1.5.22.orig/buffy.h mutt-1.5.22/buffy.h >+--- mutt-1.5.22.orig/buffy.h Mon Apr 22 07:14:53 2013 >++++ mutt-1.5.22/buffy.h Fri Oct 18 10:18:45 2013 >+@@ -25,7 +25,11 @@ typedef struct buffy_t >+ char path[_POSIX_PATH_MAX]; >+ off_t size; >+ struct buffy_t *next; >++ struct buffy_t *prev; >+ short new; /* mailbox has new mail */ >++ int msgcount; /* total number of messages */ >++ int msg_unread; /* number of unread messages */ >++ int msg_flagged; /* number of flagged messages */ >+ short notified; /* user has been notified */ >+ short magic; /* mailbox type */ >+ short newly_created; /* mbox or mmdf just popped into existence */ >+diff -uNp -r mutt-1.5.22.orig/color.c mutt-1.5.22/color.c >+--- mutt-1.5.22.orig/color.c Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/color.c Fri Oct 18 10:19:53 2013 >+@@ -93,6 +93,8 @@ static const struct mapping_t Fields[] = >+ { "bold", MT_COLOR_BOLD }, >+ { "underline", MT_COLOR_UNDERLINE }, >+ { "index", MT_COLOR_INDEX }, >++ { "sidebar_new", MT_COLOR_NEW }, >++ { "sidebar_flagged", MT_COLOR_FLAGGED }, >+ { NULL, 0 } >+ }; >+ >+diff -uNp -r mutt-1.5.22.orig/compose.c mutt-1.5.22/compose.c >+--- mutt-1.5.22.orig/compose.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/compose.c Fri Oct 18 10:22:12 2013 >+@@ -72,7 +72,7 @@ enum >+ >+ #define HDR_XOFFSET 10 >+ #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */ >+-#define W (COLS - HDR_XOFFSET) >++#define W (COLS - HDR_XOFFSET - SidebarWidth) >+ >+ static const char * const Prompts[] = >+ { >+@@ -110,7 +110,7 @@ static void snd_entry (char *b, size_t blen, MUTTMENU >+ >+ static void redraw_crypt_lines (HEADER *msg) >+ { >+- mvaddstr (HDR_CRYPT, 0, "Security: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, "Security: "); >+ >+ if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME)) == 0) >+ { >+@@ -142,7 +142,7 @@ static void redraw_crypt_lines (HEADER *msg) >+ } >+ >+ clrtoeol (); >+- move (HDR_CRYPTINFO, 0); >++ move (HDR_CRYPTINFO, SidebarWidth); >+ clrtoeol (); >+ >+ if ((WithCrypto & APPLICATION_PGP) >+@@ -159,7 +159,7 @@ static void redraw_crypt_lines (HEADER *msg) >+ && (msg->security & ENCRYPT) >+ && SmimeCryptAlg >+ && *SmimeCryptAlg) { >+- mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "), >++ mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "), >+ NONULL(SmimeCryptAlg)); >+ } >+ } >+@@ -172,7 +172,7 @@ static void redraw_mix_line (LIST *chain) >+ int c; >+ char *t; >+ >+- mvaddstr (HDR_MIX, 0, " Mix: "); >++ mvaddstr (HDR_MIX, SidebarWidth, " Mix: "); >+ >+ if (!chain) >+ { >+@@ -187,7 +187,7 @@ static void redraw_mix_line (LIST *chain) >+ if (t && t[0] == '0' && t[1] == '\0') >+ t = "<random>"; >+ >+- if (c + mutt_strlen (t) + 2 >= COLS) >++ if (c + mutt_strlen (t) + 2 >= COLS - SidebarWidth) >+ break; >+ >+ addstr (NONULL(t)); >+@@ -239,7 +239,7 @@ static void draw_envelope_addr (int line, ADDRESS *add >+ >+ buf[0] = 0; >+ rfc822_write_address (buf, sizeof (buf), addr, 1); >+- mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]); >++ mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]); >+ mutt_paddstr (W, buf); >+ } >+ >+@@ -249,10 +249,10 @@ static void draw_envelope (HEADER *msg, char *fcc) >+ draw_envelope_addr (HDR_TO, msg->env->to); >+ draw_envelope_addr (HDR_CC, msg->env->cc); >+ draw_envelope_addr (HDR_BCC, msg->env->bcc); >+- mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); >++ mvprintw (HDR_SUBJECT, SidebarWidth, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); >+ mutt_paddstr (W, NONULL (msg->env->subject)); >+ draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to); >+- mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]); >++ mvprintw (HDR_FCC, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]); >+ mutt_paddstr (W, fcc); >+ >+ if (WithCrypto) >+@@ -263,7 +263,7 @@ static void draw_envelope (HEADER *msg, char *fcc) >+ #endif >+ >+ SETCOLOR (MT_COLOR_STATUS); >+- mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments")); >++ mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments")); >+ clrtoeol (); >+ >+ NORMAL_COLOR; >+@@ -299,7 +299,7 @@ static int edit_address_list (int line, ADDRESS **addr >+ /* redraw the expanded list so the user can see the result */ >+ buf[0] = 0; >+ rfc822_write_address (buf, sizeof (buf), *addr, 1); >+- move (line, HDR_XOFFSET); >++ move (line, HDR_XOFFSET+SidebarWidth); >+ mutt_paddstr (W, buf); >+ >+ return 0; >+@@ -544,7 +544,7 @@ int mutt_compose_menu (HEADER *msg, /* structure for >+ if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) >+ { >+ mutt_str_replace (&msg->env->subject, buf); >+- move (HDR_SUBJECT, HDR_XOFFSET); >++ move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth); >+ if (msg->env->subject) >+ mutt_paddstr (W, msg->env->subject); >+ else >+@@ -562,7 +562,7 @@ int mutt_compose_menu (HEADER *msg, /* structure for >+ { >+ strfcpy (fcc, buf, fcclen); >+ mutt_pretty_mailbox (fcc, fcclen); >+- move (HDR_FCC, HDR_XOFFSET); >++ move (HDR_FCC, HDR_XOFFSET + SidebarWidth); >+ mutt_paddstr (W, fcc); >+ fccSet = 1; >+ } >+diff -uNp -r mutt-1.5.22.orig/curs_main.c mutt-1.5.22/curs_main.c >+--- mutt-1.5.22.orig/curs_main.c Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/curs_main.c Fri Oct 18 10:18:45 2013 >+@@ -26,7 +26,9 @@ >+ #include "mailbox.h" >+ #include "mapping.h" >+ #include "sort.h" >++#include "buffy.h" >+ #include "mx.h" >++#include "sidebar.h" >+ >+ #ifdef USE_POP >+ #include "pop.h" >+@@ -519,8 +521,12 @@ int mutt_index_menu (void) >+ menu->redraw |= REDRAW_STATUS; >+ if (do_buffy_notify) >+ { >+- if (mutt_buffy_notify () && option (OPTBEEPNEW)) >+- beep (); >++ if (mutt_buffy_notify ()) >++ { >++ menu->redraw |= REDRAW_FULL; >++ if (option (OPTBEEPNEW)) >++ beep (); >++ } >+ } >+ else >+ do_buffy_notify = 1; >+@@ -532,6 +538,7 @@ int mutt_index_menu (void) >+ if (menu->redraw & REDRAW_FULL) >+ { >+ menu_redraw_full (menu); >++ draw_sidebar(menu->menu); >+ mutt_show_error (); > } >-*** mutt-1.5.20-orig/buffy.h 2009-04-30 00:36:16.000000000 -0500 >---- mutt-1.5.20-patched/buffy.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 25,31 **** >---- 25,36 ---- >- char path[_POSIX_PATH_MAX]; >- off_t size; >- struct buffy_t *next; >-+ struct buffy_t *prev; >- short new; /* mailbox has new mail */ >-+ short has_new; /* set it new if new and not read */ >-+ int msgcount; /* total number of messages */ >-+ int msg_unread; /* number of unread messages */ >-+ int msg_flagged; /* number of flagged messages */ >- short notified; /* user has been notified */ >- short magic; /* mailbox type */ >- short newly_created; /* mbox or mmdf just popped into existence */ >-*** mutt-1.5.20-orig/color.c 2009-05-18 19:11:35.000000000 -0500 >---- mutt-1.5.20-patched/color.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 93,98 **** >---- 93,100 ---- >- { "bold", MT_COLOR_BOLD }, >- { "underline", MT_COLOR_UNDERLINE }, >- { "index", MT_COLOR_INDEX }, >-+ { "sidebar_new", MT_COLOR_NEW }, >-+ { "sidebar_flagged", MT_COLOR_FLAGGED }, >- { NULL, 0 } >- }; >- >-*** mutt-1.5.20-orig/curs_main.c 2009-06-13 21:48:36.000000000 -0500 >---- mutt-1.5.20-patched/curs_main.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 26,32 **** >---- 26,34 ---- >- #include "mailbox.h" >- #include "mapping.h" >- #include "sort.h" >-+ #include "buffy.h" >- #include "mx.h" >-+ #include "sidebar.h" >- >- #ifdef USE_POP >- #include "pop.h" >-*************** >-*** 523,530 **** >- menu->redraw |= REDRAW_STATUS; >- if (do_buffy_notify) >- { >-! if (mutt_buffy_notify () && option (OPTBEEPNEW)) >-! beep (); >- } >- else >- do_buffy_notify = 1; >---- 525,536 ---- >- menu->redraw |= REDRAW_STATUS; >- if (do_buffy_notify) >+ >+@@ -554,9 +561,12 @@ int mutt_index_menu (void) >+ >+ if (menu->redraw & REDRAW_STATUS) > { >-! if (mutt_buffy_notify ()) >-! { >-! menu->redraw |= REDRAW_FULL; >-! if (option (OPTBEEPNEW)) >-! beep (); >-! } >- } >++ DrawFullLine = 1; >+ menu_status_line (buf, sizeof (buf), menu, NONULL (Status)); >++ DrawFullLine = 0; >+ move (option (OPTSTATUSONTOP) ? 0 : LINES-2, 0); >+ SETCOLOR (MT_COLOR_STATUS); >++ set_buffystats(Context); >+ mutt_paddstr (COLS, buf); >+ NORMAL_COLOR; >+ menu->redraw &= ~REDRAW_STATUS; >+@@ -569,7 +579,7 @@ int mutt_index_menu (void) >+ menu->oldcurrent = -1; >+ >+ if (option (OPTARROWCURSOR)) >+- move (menu->current - menu->top + menu->offset, 2); >++ move (menu->current - menu->top + menu->offset, SidebarWidth + 2); >+ else if (option (OPTBRAILLEFRIENDLY)) >+ move (menu->current - menu->top + menu->offset, 0); > else >- do_buffy_notify = 1; >-*************** >-*** 536,541 **** >---- 542,548 ---- >- if (menu->redraw & REDRAW_FULL) >- { >- menu_redraw_full (menu); >-+ draw_sidebar(menu->menu); >- mutt_show_error (); >- } >- >-*************** >-*** 558,567 **** >---- 565,577 ---- >- >- if (menu->redraw & REDRAW_STATUS) >- { >-+ DrawFullLine = 1; >- menu_status_line (buf, sizeof (buf), menu, NONULL (Status)); >-+ DrawFullLine = 0; >- CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2); >- SETCOLOR (MT_COLOR_STATUS); >- BKGDSET (MT_COLOR_STATUS); >-+ set_buffystats(Context); >- mutt_paddstr (COLS, buf); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >-*************** >-*** 575,581 **** >- menu->oldcurrent = -1; >- >- if (option (OPTARROWCURSOR)) >-! move (menu->current - menu->top + menu->offset, 2); >- else if (option (OPTBRAILLEFRIENDLY)) >- move (menu->current - menu->top + menu->offset, 0); >- else >---- 585,591 ---- >- menu->oldcurrent = -1; >- >- if (option (OPTARROWCURSOR)) >-! move (menu->current - menu->top + menu->offset, SidebarWidth + 2); >- else if (option (OPTBRAILLEFRIENDLY)) >- move (menu->current - menu->top + menu->offset, 0); >- else >-*************** >-*** 1055,1060 **** >---- 1065,1071 ---- >- menu->redraw = REDRAW_FULL; >- break; >- >-+ case OP_SIDEBAR_OPEN: >- case OP_MAIN_CHANGE_FOLDER: >- case OP_MAIN_NEXT_UNREAD_MAILBOX: >- >-*************** >-*** 1086,1092 **** >- { >- mutt_buffy (buf, sizeof (buf)); >- >-! if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) >- { >- if (menu->menu == MENU_PAGER) >- { >---- 1097,1107 ---- >- { >- mutt_buffy (buf, sizeof (buf)); >- >-! if ( op == OP_SIDEBAR_OPEN ) { >-! if(!CurBuffy) >-! break; >-! strncpy( buf, CurBuffy->path, sizeof(buf) ); >-! } else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) >- { >- if (menu->menu == MENU_PAGER) >- { >-*************** >-*** 1104,1109 **** >---- 1119,1125 ---- >- } >- >- mutt_expand_path (buf, sizeof (buf)); >-+ set_curbuffy(buf); >- if (mx_get_magic (buf) <= 0) >- { >- mutt_error (_("%s is not a mailbox."), buf); >-*************** >-*** 2183,2188 **** >---- 2199,2210 ---- >- mutt_what_key(); >- break; >- >-+ case OP_SIDEBAR_SCROLL_UP: >-+ case OP_SIDEBAR_SCROLL_DOWN: >-+ case OP_SIDEBAR_NEXT: >-+ case OP_SIDEBAR_PREV: >-+ scroll_sidebar(op, menu->menu); >-+ break; >- default: >- if (menu->menu == MENU_MAIN) >- km_error_key (MENU_MAIN); >-*** mutt-1.5.20-orig/flags.c 2008-12-16 21:50:09.000000000 -0600 >---- mutt-1.5.20-patched/flags.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 22,29 **** >---- 22,31 ---- >- >- #include "mutt.h" >- #include "mutt_curses.h" >-+ #include "mutt_menu.h" >- #include "sort.h" >- #include "mx.h" >-+ #include "sidebar.h" >- >- void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx) >- { >-*************** >-*** 263,268 **** >---- 265,271 ---- >- */ >- if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged || flagged != ctx->flagged)) >- h->searched = 0; >-+ draw_sidebar(0); >- } >- >- void mutt_tag_set_flag (int flag, int bf) >-*** mutt-1.5.20-orig/functions.h 2009-04-30 00:36:17.000000000 -0500 >---- mutt-1.5.20-patched/functions.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 168,173 **** >---- 168,178 ---- >- { "decrypt-save", OP_DECRYPT_SAVE, NULL }, >- >- >-+ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, >-+ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, >-+ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, >-+ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, >-+ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, >- { NULL, 0, NULL } >- }; >- >-*************** >-*** 268,273 **** >---- 273,283 ---- >- >- { "what-key", OP_WHAT_KEY, NULL }, >- >-+ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, >-+ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, >-+ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, >-+ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, >-+ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, >- { NULL, 0, NULL } >- }; >- >-*** mutt-1.5.20-orig/globals.h 2009-06-03 15:48:31.000000000 -0500 >---- mutt-1.5.20-patched/globals.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 117,122 **** >---- 117,123 ---- >- WHERE char *SendCharset; >- WHERE char *Sendmail; >- WHERE char *Shell; >-+ WHERE char *SidebarDelim; >- WHERE char *Signature; >- WHERE char *SimpleSearch; >- #if USE_SMTP >-*************** >-*** 206,211 **** >---- 207,215 ---- >- WHERE short ScoreThresholdRead; >- WHERE short ScoreThresholdFlag; >- >-+ WHERE struct buffy_t *CurBuffy INITVAL(0); >-+ WHERE short DrawFullLine INITVAL(0); >-+ WHERE short SidebarWidth; >- #ifdef USE_IMAP >- WHERE short ImapKeepalive; >- WHERE short ImapPipelineDepth; >-*** mutt-1.5.20-orig/init.h 2009-06-13 16:35:21.000000000 -0500 >---- mutt-1.5.20-patched/init.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 1941,1946 **** >---- 1941,1967 ---- >- ** not used. >- ** (PGP only) >+@@ -1070,6 +1080,7 @@ int mutt_index_menu (void) >+ menu->redraw = REDRAW_FULL; >+ break; >+ >++ case OP_SIDEBAR_OPEN: >+ case OP_MAIN_CHANGE_FOLDER: >+ case OP_MAIN_NEXT_UNREAD_MAILBOX: >+ >+@@ -1101,7 +1112,11 @@ int mutt_index_menu (void) >+ { >+ mutt_buffy (buf, sizeof (buf)); >+ >+- if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) >++ if ( op == OP_SIDEBAR_OPEN ) { >++ if(!CurBuffy) >++ break; >++ strncpy( buf, CurBuffy->path, sizeof(buf) ); >++ } else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) >+ { >+ if (menu->menu == MENU_PAGER) >+ { >+@@ -1119,6 +1134,7 @@ int mutt_index_menu (void) >+ } >+ >+ mutt_expand_path (buf, sizeof (buf)); >++ set_curbuffy(buf); >+ if (mx_get_magic (buf) <= 0) >+ { >+ mutt_error (_("%s is not a mailbox."), buf); >+@@ -2209,6 +2225,12 @@ int mutt_index_menu (void) >+ mutt_what_key(); >+ break; >+ >++ case OP_SIDEBAR_SCROLL_UP: >++ case OP_SIDEBAR_SCROLL_DOWN: >++ case OP_SIDEBAR_NEXT: >++ case OP_SIDEBAR_PREV: >++ scroll_sidebar(op, menu->menu); >++ break; >+ default: >+ if (menu->menu == MENU_MAIN) >+ km_error_key (MENU_MAIN); >+diff -uNp -r mutt-1.5.22.orig/flags.c mutt-1.5.22/flags.c >+--- mutt-1.5.22.orig/flags.c Sun Feb 21 22:10:41 2010 >++++ mutt-1.5.22/flags.c Fri Oct 18 10:18:45 2013 >+@@ -22,8 +22,10 @@ >+ >+ #include "mutt.h" >+ #include "mutt_curses.h" >++#include "mutt_menu.h" >+ #include "sort.h" >+ #include "mx.h" >++#include "sidebar.h" >+ >+ void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx) >+ { >+@@ -263,6 +265,7 @@ void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag > */ >-+ {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, "|"}, >-+ /* >-+ ** .pp >-+ ** This specifies the delimiter between the sidebar (if visible) and >-+ ** other screens. >-+ */ >-+ { "sidebar_visible", DT_BOOL, R_BOTH, OPTSIDEBAR, 0 }, >-+ /* >-+ ** .pp >-+ ** This specifies whether or not to show sidebar (left-side list of folders). >-+ */ >-+ { "sidebar_sort", DT_BOOL, R_BOTH, OPTSIDEBARSORT, 0 }, >-+ /* >-+ ** .pp >-+ ** This specifies whether or not to sort the sidebar alphabetically. >-+ */ >-+ { "sidebar_width", DT_NUM, R_BOTH, UL &SidebarWidth, 0 }, >-+ /* >-+ ** .pp >-+ ** The width of the sidebar. >-+ */ >- { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0}, >- /* >- ** .pp >-*** mutt-1.5.20-orig/mailbox.h 2009-04-30 00:36:17.000000000 -0500 >---- mutt-1.5.20-patched/mailbox.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 27,32 **** >---- 27,33 ---- >- #define M_NEWFOLDER (1<<4) /* create a new folder - same as M_APPEND, but uses >- * safe_fopen() for mbox-style folders. >- */ >-+ #define M_PEEK (1<<5) /* revert atime back after taking a look (if applicable) */ >- >- /* mx_open_new_message() */ >- #define M_ADD_FROM 1 /* add a From_ line */ >---- orig/Makefile.am.orig 2010-09-18 13:23:19.000000000 +0200 >-+++ new/Makefile.am 2010-09-18 13:25:19.000000000 +0200 >-@@ -34,7 +34,7 @@ >- score.c send.c sendlib.c signal.c sort.c \ >- status.c system.c thread.c charset.c history.c lib.c \ >- muttlib.c editmsg.c mbyte.c \ >-- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c >-+ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c >+ if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged || flagged != ctx->flagged)) >+ h->searched = 0; >++ draw_sidebar(0); >+ } > >- nodist_mutt_SOURCES = $(BUILT_SOURCES) >+ void mutt_tag_set_flag (int flag, int bf) >+diff -uNp -r mutt-1.5.22.orig/functions.h mutt-1.5.22/functions.h >+--- mutt-1.5.22.orig/functions.h Sat Dec 3 19:10:04 2011 >++++ mutt-1.5.22/functions.h Fri Oct 18 10:18:45 2013 >+@@ -169,6 +169,11 @@ const struct binding_t OpMain[] = { /* map: index */ >+ { "decrypt-save", OP_DECRYPT_SAVE, NULL }, >+ >+ >++ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, >++ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, >++ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, >++ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, >++ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, >+ { NULL, 0, NULL } >+ }; > >---- orig/Makefile.in.orig 2010-09-18 13:23:19.000000000 +0200 >-+++ new/Makefile.in 2010-09-18 13:27:19.000000000 +0200 >-@@ -89,7 +89,7 @@ >- system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \ >- history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \ >- editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \ >-- ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) >-+ ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) sidebar.$(OBJEXT) >- am__objects_1 = >- am__objects_2 = patchlist.$(OBJEXT) $(am__objects_1) >- nodist_mutt_OBJECTS = $(am__objects_2) >-@@ -363,7 +363,7 @@ >- score.c send.c sendlib.c signal.c sort.c \ >- status.c system.c thread.c charset.c history.c lib.c \ >- muttlib.c editmsg.c mbyte.c \ >-- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c >-+ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c >+@@ -272,6 +277,11 @@ const struct binding_t OpPager[] = { /* map: pager */ > >- nodist_mutt_SOURCES = $(BUILT_SOURCES) >- mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \ >-@@ -397,7 +397,7 @@ >- README.SSL smime.h group.h \ >- muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \ >- ChangeLog mkchangelog.sh mutt_idna.h \ >-- snprintf.c regex.c crypt-gpgme.h hcachever.sh.in >-+ snprintf.c regex.c crypt-gpgme.h sidebar.h hcachever.sh.in >+ { "what-key", OP_WHAT_KEY, NULL }, > >- EXTRA_SCRIPTS = smime_keys >- mutt_dotlock_SOURCES = mutt_dotlock.c >-*** mutt-1.5.20-orig/mbox.c 2009-06-10 23:29:41.000000000 -0500 >---- mutt-1.5.20-patched/mbox.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 100,105 **** >---- 100,106 ---- >- mutt_perror (ctx->path); >- return (-1); >- } >-+ ctx->atime = sb.st_atime; >- ctx->mtime = sb.st_mtime; >- ctx->size = sb.st_size; >- >-*************** >-*** 255,260 **** >---- 256,262 ---- >- >- ctx->size = sb.st_size; >- ctx->mtime = sb.st_mtime; >-+ ctx->atime = sb.st_atime; >- >- #ifdef NFS_ATTRIBUTE_HACK >- if (sb.st_mtime > sb.st_atime) >-*** mutt-1.5.20-orig/menu.c 2009-06-01 11:29:32.000000000 -0500 >---- mutt-1.5.20-patched/menu.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 24,29 **** >---- 24,30 ---- >- #include "mutt_curses.h" >- #include "mutt_menu.h" >- #include "mbyte.h" >-+ #include "sidebar.h" >- >- #include <string.h> >- #include <stdlib.h> >-*************** >-*** 156,162 **** >- { >- char *scratch = safe_strdup (s); >- int shift = option (OPTARROWCURSOR) ? 3 : 0; >-! int cols = COLS - shift; >- >- mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1); >- s[n - 1] = 0; >---- 157,163 ---- >- { >- char *scratch = safe_strdup (s); >- int shift = option (OPTARROWCURSOR) ? 3 : 0; >-! int cols = COLS - shift - SidebarWidth; >- >- mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1); >- s[n - 1] = 0; >-*************** >-*** 207,212 **** >---- 208,214 ---- >- char buf[LONG_STRING]; >- int i; >- >-+ draw_sidebar(1); >- for (i = menu->top; i < menu->top + menu->pagelen; i++) >- { >- if (i < menu->max) >-*************** >-*** 217,223 **** >- if (option (OPTARROWCURSOR)) >- { >- attrset (menu->color (i)); >-! CLEARLINE (i - menu->top + menu->offset); >- >- if (i == menu->current) >- { >---- 219,225 ---- >- if (option (OPTARROWCURSOR)) >- { >- attrset (menu->color (i)); >-! CLEARLINE_WIN (i - menu->top + menu->offset); >- >- if (i == menu->current) >- { >-*************** >-*** 246,259 **** >- BKGDSET (MT_COLOR_INDICATOR); >- } >- >-! CLEARLINE (i - menu->top + menu->offset); >- print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >- } >- } >- else >-! CLEARLINE (i - menu->top + menu->offset); >- } >- menu->redraw = 0; >- } >---- 248,261 ---- >- BKGDSET (MT_COLOR_INDICATOR); >- } >- >-! CLEARLINE_WIN (i - menu->top + menu->offset); >- print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >- } >- } >- else >-! CLEARLINE_WIN (i - menu->top + menu->offset); >- } >- menu->redraw = 0; >- } >-*************** >-*** 268,274 **** >- return; >- } >- >-! move (menu->oldcurrent + menu->offset - menu->top, 0); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >- >---- 270,276 ---- >- return; >- } >- >-! move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >- >-*************** >-*** 283,295 **** >- clrtoeol (); >- menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); >- menu_pad_string (buf, sizeof (buf)); >-! move (menu->oldcurrent + menu->offset - menu->top, 3); >- print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); >- SETCOLOR (MT_COLOR_NORMAL); >- } >- >- /* now draw it in the new location */ >-! move (menu->current + menu->offset - menu->top, 0); >- attrset (menu->color (menu->current)); >- ADDCOLOR (MT_COLOR_INDICATOR); >- addstr ("->"); >---- 285,297 ---- >- clrtoeol (); >- menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); >- menu_pad_string (buf, sizeof (buf)); >-! move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth + 3); >- print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); >- SETCOLOR (MT_COLOR_NORMAL); >- } >- >- /* now draw it in the new location */ >-! move (menu->current + menu->offset - menu->top, SidebarWidth); >- attrset (menu->color (menu->current)); >- ADDCOLOR (MT_COLOR_INDICATOR); >- addstr ("->"); >-*************** >-*** 310,316 **** >- attrset (menu->color (menu->current)); >- ADDCOLOR (MT_COLOR_INDICATOR); >- BKGDSET (MT_COLOR_INDICATOR); >-! CLEARLINE (menu->current - menu->top + menu->offset); >- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >---- 312,318 ---- >- attrset (menu->color (menu->current)); >- ADDCOLOR (MT_COLOR_INDICATOR); >- BKGDSET (MT_COLOR_INDICATOR); >-! CLEARLINE_WIN (menu->current - menu->top + menu->offset); >- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >-*************** >-*** 322,328 **** >- { >- char buf[LONG_STRING]; >- >-! move (menu->current + menu->offset - menu->top, 0); >- menu_make_entry (buf, sizeof (buf), menu, menu->current); >- menu_pad_string (buf, sizeof (buf)); >- >---- 324,330 ---- >- { >- char buf[LONG_STRING]; >- >-! move (menu->current + menu->offset - menu->top, SidebarWidth); >- menu_make_entry (buf, sizeof (buf), menu, menu->current); >- menu_pad_string (buf, sizeof (buf)); >- >-*************** >-*** 876,882 **** >- >- >- if (option (OPTARROWCURSOR)) >-! move (menu->current - menu->top + menu->offset, 2); >- else if (option (OPTBRAILLEFRIENDLY)) >- move (menu->current - menu->top + menu->offset, 0); >- else >---- 878,884 ---- >- >- >- if (option (OPTARROWCURSOR)) >-! move (menu->current - menu->top + menu->offset, SidebarWidth + 2); >- else if (option (OPTBRAILLEFRIENDLY)) >- move (menu->current - menu->top + menu->offset, 0); >- else >-*** mutt-1.5.20-orig/mutt_curses.h 2008-11-11 13:55:47.000000000 -0600 >---- mutt-1.5.20-patched/mutt_curses.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 64,69 **** >---- 64,70 ---- >- #undef lines >- #endif /* lines */ >- >-+ #define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol() >- #define CLEARLINE(x) move(x,0), clrtoeol() >- #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x) >- #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0) >-*************** >-*** 126,131 **** >---- 127,134 ---- >- MT_COLOR_BOLD, >- MT_COLOR_UNDERLINE, >- MT_COLOR_INDEX, >-+ MT_COLOR_NEW, >-+ MT_COLOR_FLAGGED, >- MT_COLOR_MAX >- }; >- >-*** mutt-1.5.20-orig/mutt.h 2009-06-12 17:15:42.000000000 -0500 >---- mutt-1.5.20-patched/mutt.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 418,423 **** >---- 418,425 ---- >- OPTSAVEEMPTY, >- OPTSAVENAME, >- OPTSCORE, >-+ OPTSIDEBAR, >-+ OPTSIDEBARSORT, >- OPTSIGDASHES, >- OPTSIGONTOP, >- OPTSORTRE, >-*************** >-*** 854,859 **** >---- 856,862 ---- >- { >- char *path; >- FILE *fp; >-+ time_t atime; >- time_t mtime; >- off_t size; >- off_t vsize; >-*************** >-*** 888,893 **** >---- 891,897 ---- >- unsigned int quiet : 1; /* inhibit status messages? */ >- unsigned int collapsed : 1; /* are all threads collapsed? */ >- unsigned int closing : 1; /* mailbox is being closed */ >-+ unsigned int peekonly : 1; /* just taking a glance, revert atime */ >- >- /* driver hooks */ >- void *data; /* driver specific data */ >-*** mutt-1.5.20-orig/muttlib.c 2009-05-18 19:11:35.000000000 -0500 >---- mutt-1.5.20-patched/muttlib.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 1232,1237 **** >---- 1232,1239 ---- >- pl = pw = 1; >- >- /* see if there's room to add content, else ignore */ >-+ if ( DrawFullLine ) >-+ { >- if ((col < COLS && wlen < destlen) || soft) >- { >- int pad; >-*************** >-*** 1274,1279 **** >---- 1276,1327 ---- >- col += wid; >- src += pl; >- } >-+ } >-+ else >-+ { >-+ if ((col < COLS-SidebarWidth && wlen < destlen) || soft) >-+ { >-+ int pad; >-+ >-+ /* get contents after padding */ >-+ mutt_FormatString (buf, sizeof (buf), 0, src + pl, callback, data, flags); >-+ len = mutt_strlen (buf); >-+ wid = mutt_strwidth (buf); >-+ >-+ /* try to consume as many columns as we can, if we don't have >-+ * memory for that, use as much memory as possible */ >-+ pad = (COLS - SidebarWidth - col - wid) / pw; >-+ if (pad > 0 && wlen + (pad * pl) + len > destlen) >-+ pad = ((signed)(destlen - wlen - len)) / pl; >-+ if (pad > 0) >-+ { >-+ while (pad--) >-+ { >-+ memcpy (wptr, src, pl); >-+ wptr += pl; >-+ wlen += pl; >-+ col += pw; >-+ } >-+ } >-+ else if (soft && pad < 0) >-+ { >-+ /* \0-terminate dest for length computation in mutt_wstr_trunc() */ >-+ *wptr = 0; >-+ /* make sure right part is at most as wide as display */ >-+ len = mutt_wstr_trunc (buf, destlen, COLS, &wid); >-+ /* truncate left so that right part fits completely in */ >-+ wlen = mutt_wstr_trunc (dest, destlen - len, col + pad, &col); >-+ wptr = dest + wlen; >-+ } >-+ if (len + wlen > destlen) >-+ len = mutt_wstr_trunc (buf, destlen - wlen, COLS - SidebarWidth - col, NULL); >-+ memcpy (wptr, buf, len); >-+ wptr += len; >-+ wlen += len; >-+ col += wid; >-+ src += pl; >-+ } >-+ } >- break; /* skip rest of input */ >- } >- else if (ch == '|') >-*** mutt-1.5.20-orig/mx.c 2009-06-10 23:29:41.000000000 -0500 >---- mutt-1.5.20-patched/mx.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 581,586 **** >---- 581,587 ---- >- * M_APPEND open mailbox for appending >- * M_READONLY open mailbox in read-only mode >- * M_QUIET only print error messages >-+ * M_PEEK revert atime where applicable >- * ctx if non-null, context struct to use >++ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, >++ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, >++ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, >++ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, >++ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, >+ { NULL, 0, NULL } >+ }; >+ >+diff -uNp -r mutt-1.5.22.orig/globals.h mutt-1.5.22/globals.h >+--- mutt-1.5.22.orig/globals.h Sat Dec 3 19:10:04 2011 >++++ mutt-1.5.22/globals.h Fri Oct 18 10:18:45 2013 >+@@ -117,6 +117,7 @@ WHERE short SearchContext; >+ WHERE char *SendCharset; >+ WHERE char *Sendmail; >+ WHERE char *Shell; >++WHERE char *SidebarDelim; >+ WHERE char *Signature; >+ WHERE char *SimpleSearch; >+ #if USE_SMTP >+@@ -208,6 +209,9 @@ WHERE short ScoreThresholdDelete; >+ WHERE short ScoreThresholdRead; >+ WHERE short ScoreThresholdFlag; >+ >++WHERE struct buffy_t *CurBuffy INITVAL(0); >++WHERE short DrawFullLine INITVAL(0); >++WHERE short SidebarWidth; >+ #ifdef USE_IMAP >+ WHERE short ImapKeepalive; >+ WHERE short ImapPipelineDepth; >+diff -uNp -r mutt-1.5.22.orig/imap/command.c mutt-1.5.22/imap/command.c >+--- mutt-1.5.22.orig/imap/command.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/imap/command.c Fri Oct 18 10:18:45 2013 >+@@ -1012,6 +1012,13 @@ static void cmd_parse_status (IMAP_DATA* idata, char* >+ opened */ >+ status->uidnext = oldun; >+ >++ /* Added to make the sidebar show the correct numbers */ >++ if (status->messages) >++ { >++ inc->msgcount = status->messages; >++ inc->msg_unread = status->unseen; >++ } >++ >+ FREE (&value); >+ return; >+ } >+diff -uNp -r mutt-1.5.22.orig/imap/imap.c mutt-1.5.22/imap/imap.c >+--- mutt-1.5.22.orig/imap/imap.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/imap/imap.c Fri Oct 18 10:18:45 2013 >+@@ -1514,7 +1514,7 @@ int imap_buffy_check (int force) >+ >+ imap_munge_mbox_name (munged, sizeof (munged), name); >+ snprintf (command, sizeof (command), >+- "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged); >++ "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)", munged); >+ >+ if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) >+ { >+diff -uNp -r mutt-1.5.22.orig/init.h mutt-1.5.22/init.h >+--- mutt-1.5.22.orig/init.h Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/init.h Fri Oct 18 10:18:45 2013 >+@@ -1966,6 +1966,27 @@ struct option_t MuttVars[] = { >+ ** not used. >+ ** (PGP only) > */ >- CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx) >-*************** >-*** 603,608 **** >---- 604,611 ---- >- ctx->quiet = 1; >- if (flags & M_READONLY) >- ctx->readonly = 1; >-+ if (flags & M_PEEK) >-+ ctx->peekonly = 1; >- >- if (flags & (M_APPEND|M_NEWFOLDER)) >- { >-*************** >-*** 702,710 **** >---- 705,725 ---- >- void mx_fastclose_mailbox (CONTEXT *ctx) >- { >- int i; >-+ #ifndef BUFFY_SIZE >-+ struct utimbuf ut; >-+ #endif >- >- if(!ctx) >- return; >-+ #ifndef BUFFY_SIZE >-+ /* fix up the times so buffy won't get confused */ >-+ if (ctx->peekonly && ctx->path && ctx->mtime > ctx->atime) >-+ { >-+ ut.actime = ctx->atime; >-+ ut.modtime = ctx->mtime; >-+ utime (ctx->path, &ut); >-+ } >-+ #endif >- >- if (ctx->mx_close) >- ctx->mx_close (ctx); >-*** mutt-1.5.20-orig/OPS 2009-05-13 00:01:13.000000000 -0500 >---- mutt-1.5.20-patched/OPS 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 178,180 **** >---- 178,185 ---- >- OP_MAIN_SHOW_LIMIT "show currently active limit pattern" >- OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread" >- OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads" >-+ OP_SIDEBAR_SCROLL_UP "scroll the mailbox pane up 1 page" >-+ OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page" >-+ OP_SIDEBAR_NEXT "go down to next mailbox" >-+ OP_SIDEBAR_PREV "go to previous mailbox" >-+ OP_SIDEBAR_OPEN "open hilighted mailbox" >---- orig/pager.c.orig 2010-09-18 13:23:19.000000000 +0200 >-+++ new/pager.c 2010-09-18 14:03:08.000000000 +0200 >++ {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, "|"}, >++ /* >++ ** .pp >++ ** This specifies the delimiter between the sidebar (if visible) and >++ ** other screens. >++ */ >++ { "sidebar_visible", DT_BOOL, R_BOTH, OPTSIDEBAR, 0 }, >++ /* >++ ** .pp >++ ** This specifies whether or not to show sidebar (left-side list of folders). >++ */ >++ { "sidebar_sort", DT_BOOL, R_BOTH, OPTSIDEBARSORT, 0 }, >++ /* >++ ** .pp >++ ** This specifies whether or not to sort the sidebar alphabetically. >++ */ >++ { "sidebar_width", DT_NUM, R_BOTH, UL &SidebarWidth, 0 }, >++ /* >++ ** .pp >++ ** The width of the sidebar. >++ */ >+ { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0}, >+ /* >+ ** .pp >+diff -uNp -r mutt-1.5.22.orig/mailbox.h mutt-1.5.22/mailbox.h >+--- mutt-1.5.22.orig/mailbox.h Sun Feb 21 22:10:41 2010 >++++ mutt-1.5.22/mailbox.h Fri Oct 18 10:18:45 2013 >+@@ -27,6 +27,7 @@ >+ #define M_NEWFOLDER (1<<4) /* create a new folder - same as M_APPEND, but uses >+ * safe_fopen() for mbox-style folders. >+ */ >++#define M_PEEK (1<<5) /* revert atime back after taking a look (if applicable) */ >+ >+ /* mx_open_new_message() */ >+ #define M_ADD_FROM 1 /* add a From_ line */ >+diff -uNp -r mutt-1.5.22.orig/mbox.c mutt-1.5.22/mbox.c >+--- mutt-1.5.22.orig/mbox.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/mbox.c Fri Oct 18 10:18:45 2013 >+@@ -100,6 +100,7 @@ int mmdf_parse_mailbox (CONTEXT *ctx) >+ mutt_perror (ctx->path); >+ return (-1); >+ } >++ ctx->atime = sb.st_atime; >+ ctx->mtime = sb.st_mtime; >+ ctx->size = sb.st_size; >+ >+@@ -251,6 +252,7 @@ int mbox_parse_mailbox (CONTEXT *ctx) >+ >+ ctx->size = sb.st_size; >+ ctx->mtime = sb.st_mtime; >++ ctx->atime = sb.st_atime; >+ >+ #ifdef NFS_ATTRIBUTE_HACK >+ if (sb.st_mtime > sb.st_atime) >+diff -uNp -r mutt-1.5.22.orig/menu.c mutt-1.5.22/menu.c >+--- mutt-1.5.22.orig/menu.c Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/menu.c Fri Oct 18 10:18:45 2013 >+@@ -24,6 +24,7 @@ >+ #include "mutt_curses.h" >+ #include "mutt_menu.h" >+ #include "mbyte.h" >++#include "sidebar.h" >+ >+ extern size_t UngetCount; >+ >+@@ -186,7 +187,7 @@ static void menu_pad_string (char *s, size_t n) >+ { >+ char *scratch = safe_strdup (s); >+ int shift = option (OPTARROWCURSOR) ? 3 : 0; >+- int cols = COLS - shift; >++ int cols = COLS - shift - SidebarWidth; >+ >+ mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1); >+ s[n - 1] = 0; >+@@ -239,6 +240,7 @@ void menu_redraw_index (MUTTMENU *menu) >+ int do_color; >+ int attr; >+ >++ draw_sidebar(1); >+ for (i = menu->top; i < menu->top + menu->pagelen; i++) >+ { >+ if (i < menu->max) >+@@ -249,7 +251,7 @@ void menu_redraw_index (MUTTMENU *menu) >+ menu_pad_string (buf, sizeof (buf)); >+ >+ ATTRSET(attr); >+- move(i - menu->top + menu->offset, 0); >++ move(i - menu->top + menu->offset, SidebarWidth); >+ do_color = 1; >+ >+ if (i == menu->current) >+@@ -272,7 +274,7 @@ void menu_redraw_index (MUTTMENU *menu) >+ else >+ { >+ NORMAL_COLOR; >+- CLEARLINE(i - menu->top + menu->offset); >++ CLEARLINE_WIN(i - menu->top + menu->offset); >+ } >+ } >+ NORMAL_COLOR; >+@@ -289,7 +291,7 @@ void menu_redraw_motion (MUTTMENU *menu) >+ return; >+ } >+ >+- move (menu->oldcurrent + menu->offset - menu->top, 0); >++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth); >+ ATTRSET(menu->color (menu->oldcurrent)); >+ >+ if (option (OPTARROWCURSOR)) >+@@ -301,13 +303,13 @@ void menu_redraw_motion (MUTTMENU *menu) >+ { >+ menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); >+ menu_pad_string (buf, sizeof (buf)); >+- move (menu->oldcurrent + menu->offset - menu->top, 3); >++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth + 3); >+ print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); >+ } >+ >+ /* now draw it in the new location */ >+ SETCOLOR(MT_COLOR_INDICATOR); >+- mvaddstr(menu->current + menu->offset - menu->top, 0, "->"); >++ mvaddstr(menu->current + menu->offset - menu->top, SidebarWidth, "->"); >+ } >+ else >+ { >+@@ -320,7 +322,7 @@ void menu_redraw_motion (MUTTMENU *menu) >+ menu_make_entry (buf, sizeof (buf), menu, menu->current); >+ menu_pad_string (buf, sizeof (buf)); >+ SETCOLOR(MT_COLOR_INDICATOR); >+- move(menu->current - menu->top + menu->offset, 0); >++ move(menu->current - menu->top + menu->offset, SidebarWidth); >+ print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); >+ } >+ menu->redraw &= REDRAW_STATUS; >+@@ -332,7 +334,7 @@ void menu_redraw_current (MUTTMENU *menu) >+ char buf[LONG_STRING]; >+ int attr = menu->color (menu->current); >+ >+- move (menu->current + menu->offset - menu->top, 0); >++ move (menu->current + menu->offset - menu->top, SidebarWidth); >+ menu_make_entry (buf, sizeof (buf), menu, menu->current); >+ menu_pad_string (buf, sizeof (buf)); >+ >+@@ -872,7 +874,7 @@ int mutt_menuLoop (MUTTMENU *menu) >+ >+ >+ if (option (OPTARROWCURSOR)) >+- move (menu->current - menu->top + menu->offset, 2); >++ move (menu->current - menu->top + menu->offset, SidebarWidth + 2); >+ else if (option (OPTBRAILLEFRIENDLY)) >+ move (menu->current - menu->top + menu->offset, 0); >+ else >+diff -uNp -r mutt-1.5.22.orig/mh.c mutt-1.5.22/mh.c >+--- mutt-1.5.22.orig/mh.c Mon Apr 22 07:14:53 2013 >++++ mutt-1.5.22/mh.c Fri Oct 18 10:18:45 2013 >+@@ -295,6 +295,28 @@ void mh_buffy(BUFFY *b) >+ mhs_free_sequences (&mhs); >+ } >+ >++void mh_buffy_update (const char *path, int *msgcount, int *msg_unread, int *msg_flagged) >++{ >++ int i; >++ struct mh_sequences mhs; >++ memset (&mhs, 0, sizeof (mhs)); >++ >++ if (mh_read_sequences (&mhs, path) < 0) >++ return; >++ >++ msgcount = 0; >++ msg_unread = 0; >++ msg_flagged = 0; >++ for (i = 0; i <= mhs.max; i++) >++ msgcount++; >++ if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN) { >++ msg_unread++; >++ } >++ if (mhs_check (&mhs, i) & MH_SEQ_FLAGGED) >++ msg_flagged++; >++ mhs_free_sequences (&mhs); >++} >++ >+ static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) >+ { >+ int fd; >+diff -uNp -r mutt-1.5.22.orig/mutt.h mutt-1.5.22/mutt.h >+--- mutt-1.5.22.orig/mutt.h Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/mutt.h Fri Oct 18 10:18:45 2013 >+@@ -420,6 +420,8 @@ enum >+ OPTSAVEEMPTY, >+ OPTSAVENAME, >+ OPTSCORE, >++ OPTSIDEBAR, >++ OPTSIDEBARSORT, >+ OPTSIGDASHES, >+ OPTSIGONTOP, >+ OPTSORTRE, >+@@ -860,6 +862,7 @@ typedef struct _context >+ { >+ char *path; >+ FILE *fp; >++ time_t atime; >+ time_t mtime; >+ off_t size; >+ off_t vsize; >+@@ -894,6 +897,7 @@ typedef struct _context >+ unsigned int quiet : 1; /* inhibit status messages? */ >+ unsigned int collapsed : 1; /* are all threads collapsed? */ >+ unsigned int closing : 1; /* mailbox is being closed */ >++ unsigned int peekonly : 1; /* just taking a glance, revert atime */ >+ >+ /* driver hooks */ >+ void *data; /* driver specific data */ >+diff -uNp -r mutt-1.5.22.orig/mutt_curses.h mutt-1.5.22/mutt_curses.h >+--- mutt-1.5.22.orig/mutt_curses.h Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/mutt_curses.h Fri Oct 18 10:22:32 2013 >+@@ -64,6 +64,7 @@ >+ #undef lines >+ #endif /* lines */ >+ >++#define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol() >+ #define CLEARLINE(x) move(x,0), clrtoeol() >+ #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x) >+ #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0) >+@@ -120,6 +121,8 @@ enum >+ MT_COLOR_BOLD, >+ MT_COLOR_UNDERLINE, >+ MT_COLOR_INDEX, >++ MT_COLOR_NEW, >++ MT_COLOR_FLAGGED, >+ MT_COLOR_MAX >+ }; >+ >+diff -uNp -r mutt-1.5.22.orig/muttlib.c mutt-1.5.22/muttlib.c >+--- mutt-1.5.22.orig/muttlib.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/muttlib.c Fri Oct 18 10:18:45 2013 >+@@ -1286,6 +1286,8 @@ void mutt_FormatString (char *dest, /* output buffer >+ pl = pw = 1; >+ >+ /* see if there's room to add content, else ignore */ >++ if ( DrawFullLine ) >++ { >+ if ((col < COLS && wlen < destlen) || soft) >+ { >+ int pad; >+@@ -1329,6 +1331,52 @@ void mutt_FormatString (char *dest, /* output buffer >+ col += wid; >+ src += pl; >+ } >++ } >++ else >++ { >++ if ((col < COLS-SidebarWidth && wlen < destlen) || soft) >++ { >++ int pad; >++ >++ /* get contents after padding */ >++ mutt_FormatString (buf, sizeof (buf), 0, src + pl, callback, data, flags); >++ len = mutt_strlen (buf); >++ wid = mutt_strwidth (buf); >++ >++ /* try to consume as many columns as we can, if we don't have >++ * memory for that, use as much memory as possible */ >++ pad = (COLS - SidebarWidth - col - wid) / pw; >++ if (pad > 0 && wlen + (pad * pl) + len > destlen) >++ pad = ((signed)(destlen - wlen - len)) / pl; >++ if (pad > 0) >++ { >++ while (pad--) >++ { >++ memcpy (wptr, src, pl); >++ wptr += pl; >++ wlen += pl; >++ col += pw; >++ } >++ } >++ else if (soft && pad < 0) >++ { >++ /* \0-terminate dest for length computation in mutt_wstr_trunc() */ >++ *wptr = 0; >++ /* make sure right part is at most as wide as display */ >++ len = mutt_wstr_trunc (buf, destlen, COLS, &wid); >++ /* truncate left so that right part fits completely in */ >++ wlen = mutt_wstr_trunc (dest, destlen - len, col + pad, &col); >++ wptr = dest + wlen; >++ } >++ if (len + wlen > destlen) >++ len = mutt_wstr_trunc (buf, destlen - wlen, COLS - SidebarWidth - col, NULL); >++ memcpy (wptr, buf, len); >++ wptr += len; >++ wlen += len; >++ col += wid; >++ src += pl; >++ } >++ } >+ break; /* skip rest of input */ >+ } >+ else if (ch == '|') >+diff -uNp -r mutt-1.5.22.orig/mx.c mutt-1.5.22/mx.c >+--- mutt-1.5.22.orig/mx.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/mx.c Fri Oct 18 10:18:45 2013 >+@@ -580,6 +580,7 @@ static int mx_open_mailbox_append (CONTEXT *ctx, int f >+ * M_APPEND open mailbox for appending >+ * M_READONLY open mailbox in read-only mode >+ * M_QUIET only print error messages >++ * M_PEEK revert atime where applicable >+ * ctx if non-null, context struct to use >+ */ >+ CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx) >+@@ -602,6 +603,8 @@ CONTEXT *mx_open_mailbox (const char *path, int flags, >+ ctx->quiet = 1; >+ if (flags & M_READONLY) >+ ctx->readonly = 1; >++ if (flags & M_PEEK) >++ ctx->peekonly = 1; >+ >+ if (flags & (M_APPEND|M_NEWFOLDER)) >+ { >+@@ -701,9 +704,21 @@ CONTEXT *mx_open_mailbox (const char *path, int flags, >+ void mx_fastclose_mailbox (CONTEXT *ctx) >+ { >+ int i; >++#ifndef BUFFY_SIZE >++ struct utimbuf ut; >++#endif >+ >+ if(!ctx) >+ return; >++#ifndef BUFFY_SIZE >++ /* fix up the times so buffy won't get confused */ >++ if (ctx->peekonly && ctx->path && ctx->mtime > ctx->atime) >++ { >++ ut.actime = ctx->atime; >++ ut.modtime = ctx->mtime; >++ utime (ctx->path, &ut); >++ } >++#endif >+ >+ /* never announce that a mailbox we've just left has new mail. #3290 >+ * XXX: really belongs in mx_close_mailbox, but this is a nice hook point */ >+diff -uNp -r mutt-1.5.22.orig/mx.h mutt-1.5.22/mx.h >+--- mutt-1.5.22.orig/mx.h Mon Apr 22 07:14:53 2013 >++++ mutt-1.5.22/mx.h Fri Oct 18 10:18:45 2013 >+@@ -57,6 +57,7 @@ void mbox_reset_atime (CONTEXT *, struct stat *); >+ int mh_read_dir (CONTEXT *, const char *); >+ int mh_sync_mailbox (CONTEXT *, int *); >+ int mh_check_mailbox (CONTEXT *, int *); >++void mh_buffy_update (const char *, int *, int *, int *); >+ int mh_check_empty (const char *); >+ >+ int maildir_read_dir (CONTEXT *); >+diff -uNp -r mutt-1.5.22.orig/pager.c mutt-1.5.22/pager.c >+--- mutt-1.5.22.orig/pager.c Mon Apr 22 07:17:32 2013 >++++ mutt-1.5.22/pager.c Fri Oct 18 10:18:45 2013 > @@ -29,6 +29,7 @@ > #include "pager.h" > #include "attach.h" >@@ -944,15 +900,15 @@ > > #include "mutt_crypt.h" > >-@@ -1104,6 +1105,7 @@ >- if (check_attachment_marker ((char *)buf) == 0) >- wrap_cols = COLS; >- >+@@ -1095,6 +1096,7 @@ static int format_line (struct line_t **lineInfo, int >+ wchar_t wc; >+ mbstate_t mbstate; >+ int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap); > + wrap_cols -= SidebarWidth; >- /* FIXME: this should come from lineInfo */ >- memset(&mbstate, 0, sizeof(mbstate)); > >-@@ -1778,7 +1780,7 @@ >+ if (check_attachment_marker ((char *)buf) == 0) >+ wrap_cols = COLS; >+@@ -1746,7 +1748,7 @@ mutt_pager (const char *banner, const char *fname, int > if ((redraw & REDRAW_BODY) || topline != oldtopline) > { > do { >@@ -961,7 +917,7 @@ > curline = oldtopline = topline; > lines = 0; > force_redraw = 0; >-@@ -1791,6 +1793,7 @@ >+@@ -1759,6 +1761,7 @@ mutt_pager (const char *banner, const char *fname, int > &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) > lines++; > curline++; >@@ -969,20 +925,15 @@ > } > last_offset = lineInfo[curline].offset; > } while (force_redraw); >-@@ -1804,6 +1807,7 @@ >+@@ -1771,6 +1774,7 @@ mutt_pager (const char *banner, const char *fname, int > addch ('~'); > addch ('\n'); > lines++; > + move(lines + bodyoffset, SidebarWidth); > } >- /* We are going to update the pager status bar, so it isn't >- * necessary to reset to normal color now. */ >-@@ -1827,21 +1831,21 @@ >- /* print out the pager status bar */ >- SETCOLOR (MT_COLOR_STATUS); >- BKGDSET (MT_COLOR_STATUS); >-- CLEARLINE (statusoffset); >-+ CLEARLINE_WIN (statusoffset); >+ NORMAL_COLOR; >+ >+@@ -1799,17 +1803,17 @@ mutt_pager (const char *banner, const char *fname, int > > if (IsHeader (extra) || IsMsgAttach (extra)) > { >@@ -1001,9 +952,9 @@ > - mutt_paddstr (COLS, bn); > + mutt_paddstr (COLS-SidebarWidth, bn); > } >- BKGDSET (MT_COLOR_NORMAL); >- SETCOLOR (MT_COLOR_NORMAL); >-@@ -1852,18 +1856,23 @@ >+ NORMAL_COLOR; >+ } >+@@ -1819,16 +1823,21 @@ mutt_pager (const char *banner, const char *fname, int > /* redraw the pager_index indicator, because the > * flags for this message might have changed. */ > menu_redraw_current (index); >@@ -1015,11 +966,9 @@ > - move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0); > + move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), SidebarWidth); > SETCOLOR (MT_COLOR_STATUS); >- BKGDSET (MT_COLOR_STATUS); > - mutt_paddstr (COLS, buffer); > + mutt_paddstr (COLS-SidebarWidth, buffer); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >+ NORMAL_COLOR; > } > > + /* if we're not using the index, update every time */ >@@ -1029,405 +978,437 @@ > redraw = 0; > > if (option(OPTBRAILLEFRIENDLY)) { >-@@ -2852,6 +2861,13 @@ >+@@ -2762,6 +2771,13 @@ search_next: >+ case OP_WHAT_KEY: > mutt_what_key (); > break; >- >++ > + case OP_SIDEBAR_SCROLL_UP: > + case OP_SIDEBAR_SCROLL_DOWN: > + case OP_SIDEBAR_NEXT: > + case OP_SIDEBAR_PREV: > + scroll_sidebar(ch, MENU_PAGER); > + break; >-+ >+ > default: > ch = -1; >- break; >-*** mutt-1.5.20-orig/PATCHES 2008-11-11 13:55:46.000000000 -0600 >---- mutt-1.5.20-patched/PATCHES 2009-06-19 22:20:31.000000000 -0500 >-*************** >-*** 0 **** >---- 1 ---- >-+ patch-1.5.20.sidebar.20090619.txt >-*** mutt-1.5.20-orig/sidebar.c 1969-12-31 18:00:00.000000000 -0600 >---- mutt-1.5.20-patched/sidebar.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 0 **** >---- 1,333 ---- >-+ /* >-+ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> >-+ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> >-+ * >-+ * This program is free software; you can redistribute it and/or modify >-+ * it under the terms of the GNU General Public License as published by >-+ * the Free Software Foundation; either version 2 of the License, or >-+ * (at your option) any later version. >-+ * >-+ * This program is distributed in the hope that it will be useful, >-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >-+ * GNU General Public License for more details. >-+ * >-+ * You should have received a copy of the GNU General Public License >-+ * along with this program; if not, write to the Free Software >-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >-+ */ >-+ >-+ >-+ #if HAVE_CONFIG_H >-+ # include "config.h" >-+ #endif >-+ >-+ #include "mutt.h" >-+ #include "mutt_menu.h" >-+ #include "mutt_curses.h" >-+ #include "sidebar.h" >-+ #include "buffy.h" >-+ #include <libgen.h> >-+ #include "keymap.h" >-+ #include <stdbool.h> >-+ >-+ /*BUFFY *CurBuffy = 0;*/ >-+ static BUFFY *TopBuffy = 0; >-+ static BUFFY *BottomBuffy = 0; >-+ static int known_lines = 0; >-+ >-+ static int quick_log10(int n) >-+ { >-+ char string[32]; >-+ sprintf(string, "%d", n); >-+ return strlen(string); >-+ } >-+ >-+ void calc_boundaries (int menu) >-+ { >-+ BUFFY *tmp = Incoming; >-+ >-+ if ( known_lines != LINES ) { >-+ TopBuffy = BottomBuffy = 0; >-+ known_lines = LINES; >-+ } >-+ for ( ; tmp->next != 0; tmp = tmp->next ) >-+ tmp->next->prev = tmp; >-+ >-+ if ( TopBuffy == 0 && BottomBuffy == 0 ) >-+ TopBuffy = Incoming; >-+ if ( BottomBuffy == 0 ) { >-+ int count = LINES - 2 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); >-+ BottomBuffy = TopBuffy; >-+ while ( --count && BottomBuffy->next ) >-+ BottomBuffy = BottomBuffy->next; >-+ } >-+ else if ( TopBuffy == CurBuffy->next ) { >-+ int count = LINES - 2 - (menu != MENU_PAGER); >-+ BottomBuffy = CurBuffy; >-+ tmp = BottomBuffy; >-+ while ( --count && tmp->prev) >-+ tmp = tmp->prev; >-+ TopBuffy = tmp; >-+ } >-+ else if ( BottomBuffy == CurBuffy->prev ) { >-+ int count = LINES - 2 - (menu != MENU_PAGER); >-+ TopBuffy = CurBuffy; >-+ tmp = TopBuffy; >-+ while ( --count && tmp->next ) >-+ tmp = tmp->next; >-+ BottomBuffy = tmp; >-+ } >-+ } >-+ >-+ char *make_sidebar_entry(char *box, int size, int new, int flagged) >-+ { >-+ static char *entry = 0; >-+ char *c; >-+ int i = 0; >-+ int delim_len = strlen(SidebarDelim); >-+ >-+ c = realloc(entry, SidebarWidth - delim_len + 2); >-+ if ( c ) entry = c; >-+ entry[SidebarWidth - delim_len + 1] = 0; >-+ for (; i < SidebarWidth - delim_len + 1; entry[i++] = ' ' ); >-+ i = strlen(box); >-+ strncpy( entry, box, i < (SidebarWidth - delim_len + 1) ? i : (SidebarWidth - delim_len + 1) ); >-+ >-+ if (size == -1) >-+ sprintf(entry + SidebarWidth - delim_len - 3, "?"); >-+ else if ( new ) { >-+ if (flagged > 0) { >-+ sprintf( >-+ entry + SidebarWidth - delim_len - 5 - quick_log10(size) - quick_log10(new) - quick_log10(flagged), >-+ "% d(%d)[%d]", size, new, flagged); >-+ } else { >-+ sprintf( >-+ entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(new), >-+ "% d(%d)", size, new); >-+ } >-+ } else if (flagged > 0) { >-+ sprintf( entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(flagged), "% d[%d]", size, flagged); >-+ } else { >-+ sprintf( entry + SidebarWidth - delim_len - 1 - quick_log10(size), "% d", size); >-+ } >-+ return entry; >-+ } >-+ >-+ void set_curbuffy(char buf[LONG_STRING]) >-+ { >-+ BUFFY* tmp = CurBuffy = Incoming; >-+ >-+ if (!Incoming) >-+ return; >-+ >-+ while(1) { >-+ if(!strcmp(tmp->path, buf)) { >-+ CurBuffy = tmp; >-+ break; >-+ } >-+ >-+ if(tmp->next) >-+ tmp = tmp->next; >-+ else >-+ break; >-+ } >-+ } >-+ >-+ int draw_sidebar(int menu) { >-+ >-+ int lines = option(OPTHELP) ? 1 : 0; >-+ BUFFY *tmp; >-+ #ifndef USE_SLANG_CURSES >-+ attr_t attrs; >-+ #endif >-+ short delim_len = strlen(SidebarDelim); >-+ short color_pair; >-+ >-+ static bool initialized = false; >-+ static int prev_show_value; >-+ static short saveSidebarWidth; >-+ >-+ /* initialize first time */ >-+ if(!initialized) { >-+ prev_show_value = option(OPTSIDEBAR); >-+ saveSidebarWidth = SidebarWidth; >-+ if(!option(OPTSIDEBAR)) SidebarWidth = 0; >-+ initialized = true; >-+ } >-+ >-+ /* save or restore the value SidebarWidth */ >-+ if(prev_show_value != option(OPTSIDEBAR)) { >-+ if(prev_show_value && !option(OPTSIDEBAR)) { >-+ saveSidebarWidth = SidebarWidth; >-+ SidebarWidth = 0; >-+ } else if(!prev_show_value && option(OPTSIDEBAR)) { >-+ SidebarWidth = saveSidebarWidth; >-+ } >-+ prev_show_value = option(OPTSIDEBAR); >-+ } >-+ >-+ >-+ // if ( SidebarWidth == 0 ) return 0; >-+ if (SidebarWidth > 0 && option (OPTSIDEBAR) >-+ && delim_len >= SidebarWidth) { >-+ unset_option (OPTSIDEBAR); >-+ /* saveSidebarWidth = SidebarWidth; */ >-+ if (saveSidebarWidth > delim_len) { >-+ SidebarWidth = saveSidebarWidth; >-+ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar.")); >-+ sleep (2); >+diff -uNp -r mutt-1.5.22.orig/sidebar.c mutt-1.5.22/sidebar.c >+--- mutt-1.5.22.orig/sidebar.c Thu Jan 1 01:00:00 1970 >++++ mutt-1.5.22/sidebar.c Fri Oct 18 10:18:45 2013 >+@@ -0,0 +1,333 @@ >++/* >++ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> >++ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> >++ * >++ * This program is free software; you can redistribute it and/or modify >++ * it under the terms of the GNU General Public License as published by >++ * the Free Software Foundation; either version 2 of the License, or >++ * (at your option) any later version. >++ * >++ * This program is distributed in the hope that it will be useful, >++ * but WITHOUT ANY WARRANTY; without even the implied warranty of >++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >++ * GNU General Public License for more details. >++ * >++ * You should have received a copy of the GNU General Public License >++ * along with this program; if not, write to the Free Software >++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >++ */ >++ >++ >++#if HAVE_CONFIG_H >++# include "config.h" >++#endif >++ >++#include "mutt.h" >++#include "mutt_menu.h" >++#include "mutt_curses.h" >++#include "sidebar.h" >++#include "buffy.h" >++#include <libgen.h> >++#include "keymap.h" >++#include <stdbool.h> >++ >++/*BUFFY *CurBuffy = 0;*/ >++static BUFFY *TopBuffy = 0; >++static BUFFY *BottomBuffy = 0; >++static int known_lines = 0; >++ >++static int quick_log10(int n) >++{ >++ char string[32]; >++ sprintf(string, "%d", n); >++ return strlen(string); >++} >++ >++void calc_boundaries (int menu) >++{ >++ BUFFY *tmp = Incoming; >++ >++ if ( known_lines != LINES ) { >++ TopBuffy = BottomBuffy = 0; >++ known_lines = LINES; >++ } >++ for ( ; tmp->next != 0; tmp = tmp->next ) >++ tmp->next->prev = tmp; >++ >++ if ( TopBuffy == 0 && BottomBuffy == 0 ) >++ TopBuffy = Incoming; >++ if ( BottomBuffy == 0 ) { >++ int count = LINES - 2 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); >++ BottomBuffy = TopBuffy; >++ while ( --count && BottomBuffy->next ) >++ BottomBuffy = BottomBuffy->next; >++ } >++ else if ( TopBuffy == CurBuffy->next ) { >++ int count = LINES - 2 - (menu != MENU_PAGER); >++ BottomBuffy = CurBuffy; >++ tmp = BottomBuffy; >++ while ( --count && tmp->prev) >++ tmp = tmp->prev; >++ TopBuffy = tmp; >++ } >++ else if ( BottomBuffy == CurBuffy->prev ) { >++ int count = LINES - 2 - (menu != MENU_PAGER); >++ TopBuffy = CurBuffy; >++ tmp = TopBuffy; >++ while ( --count && tmp->next ) >++ tmp = tmp->next; >++ BottomBuffy = tmp; >++ } >++} >++ >++char *make_sidebar_entry(char *box, int size, int new, int flagged) >++{ >++ static char *entry = 0; >++ char *c; >++ int i = 0; >++ int delim_len = strlen(SidebarDelim); >++ >++ c = realloc(entry, SidebarWidth - delim_len + 2); >++ if ( c ) entry = c; >++ entry[SidebarWidth - delim_len + 1] = 0; >++ for (; i < SidebarWidth - delim_len + 1; entry[i++] = ' ' ); >++ i = strlen(box); >++ strncpy( entry, box, i < (SidebarWidth - delim_len + 1) ? i : (SidebarWidth - delim_len + 1) ); >++ >++ if (size == -1) >++ sprintf(entry + SidebarWidth - delim_len - 3, "?"); >++ else if ( new ) { >++ if (flagged > 0) { >++ sprintf( >++ entry + SidebarWidth - delim_len - 5 - quick_log10(size) - quick_log10(new) - quick_log10(flagged), >++ "% d(%d)[%d]", size, new, flagged); > + } else { >-+ SidebarWidth = 0; >-+ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar. Please set your sidebar_width to a sane value.")); >-+ sleep (4); /* the advise to set a sane value should be seen long enough */ >++ sprintf( >++ entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(new), >++ "% d(%d)", size, new); > + } >-+ saveSidebarWidth = 0; >-+ return (0); >++ } else if (flagged > 0) { >++ sprintf( entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(flagged), "% d[%d]", size, flagged); >++ } else { >++ sprintf( entry + SidebarWidth - delim_len - 1 - quick_log10(size), "% d", size); > + } >-+ >-+ if ( SidebarWidth == 0 || !option(OPTSIDEBAR)) { >-+ if (SidebarWidth > 0) { >-+ saveSidebarWidth = SidebarWidth; >-+ SidebarWidth = 0; >-+ } >-+ unset_option(OPTSIDEBAR); >-+ return 0; >-+ } >-+ >-+ /* get attributes for divider */ >-+ SETCOLOR(MT_COLOR_STATUS); >-+ #ifndef USE_SLANG_CURSES >-+ attr_get(&attrs, &color_pair, 0); >-+ #else >-+ color_pair = attr_get(); >-+ #endif >-+ SETCOLOR(MT_COLOR_NORMAL); >-+ >-+ /* draw the divider */ >-+ >-+ for ( ; lines < LINES-1-(menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { >-+ move(lines, SidebarWidth - delim_len); >-+ addstr(NONULL(SidebarDelim)); >-+ #ifndef USE_SLANG_CURSES >-+ mvchgat(lines, SidebarWidth - delim_len, delim_len, 0, color_pair, NULL); >-+ #endif >-+ } >-+ >-+ if ( Incoming == 0 ) return 0; >-+ lines = option(OPTHELP) ? 1 : 0; /* go back to the top */ >-+ >-+ if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) >-+ calc_boundaries(menu); >-+ if ( CurBuffy == 0 ) CurBuffy = Incoming; >-+ >-+ tmp = TopBuffy; >-+ >-+ SETCOLOR(MT_COLOR_NORMAL); >-+ >-+ for ( ; tmp && lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); tmp = tmp->next ) { >-+ if ( tmp == CurBuffy ) >-+ SETCOLOR(MT_COLOR_INDICATOR); >-+ else if ( tmp->msg_unread > 0 ) >-+ SETCOLOR(MT_COLOR_NEW); >-+ else if ( tmp->msg_flagged > 0 ) >-+ SETCOLOR(MT_COLOR_FLAGGED); >-+ else >-+ SETCOLOR(MT_COLOR_NORMAL); >-+ >-+ move( lines, 0 ); >-+ if ( Context && !strcmp( tmp->path, Context->path ) ) { >-+ tmp->msg_unread = Context->unread; >-+ tmp->msgcount = Context->msgcount; >-+ tmp->msg_flagged = Context->flagged; >-+ } >-+ // check whether Maildir is a prefix of the current folder's path >-+ short maildir_is_prefix = 0; >-+ if ( (strlen(tmp->path) > strlen(Maildir)) && >-+ (strncmp(Maildir, tmp->path, strlen(Maildir)) == 0) ) >-+ maildir_is_prefix = 1; >-+ // calculate depth of current folder and generate its display name with indented spaces >-+ int sidebar_folder_depth = 0; >-+ char *sidebar_folder_name; >-+ sidebar_folder_name = basename(tmp->path); >-+ if ( maildir_is_prefix ) { >-+ char *tmp_folder_name; >-+ int i; >-+ tmp_folder_name = tmp->path + strlen(Maildir); >-+ for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) { >-+ if (tmp_folder_name[i] == '/') sidebar_folder_depth++; >-+ } >-+ if (sidebar_folder_depth > 0) { >-+ sidebar_folder_name = malloc(strlen(basename(tmp->path)) + sidebar_folder_depth + 1); >-+ for (i=0; i < sidebar_folder_depth; i++) >-+ sidebar_folder_name[i]=' '; >-+ sidebar_folder_name[i]=0; >-+ strncat(sidebar_folder_name, basename(tmp->path), strlen(basename(tmp->path)) + sidebar_folder_depth); >-+ } >-+ } >-+ printw( "%.*s", SidebarWidth - delim_len + 1, >-+ make_sidebar_entry(sidebar_folder_name, tmp->msgcount, >-+ tmp->msg_unread, tmp->msg_flagged)); >-+ if (sidebar_folder_depth > 0) >-+ free(sidebar_folder_name); >-+ lines++; >-+ } >-+ SETCOLOR(MT_COLOR_NORMAL); >-+ for ( ; lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { >-+ int i = 0; >-+ move( lines, 0 ); >-+ for ( ; i < SidebarWidth - delim_len; i++ ) >-+ addch(' '); >-+ } >-+ return 0; >-+ } >-+ >-+ >-+ void set_buffystats(CONTEXT* Context) >-+ { >-+ BUFFY *tmp = Incoming; >-+ while(tmp) { >-+ if(Context && !strcmp(tmp->path, Context->path)) { >-+ tmp->msg_unread = Context->unread; >-+ tmp->msgcount = Context->msgcount; >-+ break; >-+ } >-+ tmp = tmp->next; >++ return entry; >++} >++ >++void set_curbuffy(char buf[LONG_STRING]) >++{ >++ BUFFY* tmp = CurBuffy = Incoming; >++ >++ if (!Incoming) >++ return; >++ >++ while(1) { >++ if(!strcmp(tmp->path, buf)) { >++ CurBuffy = tmp; >++ break; >++ } >++ >++ if(tmp->next) >++ tmp = tmp->next; >++ else >++ break; >++ } >++} >++ >++int draw_sidebar(int menu) { >++ >++ int lines = option(OPTHELP) ? 1 : 0; >++ BUFFY *tmp; >++#ifndef USE_SLANG_CURSES >++ attr_t attrs; >++#endif >++ short delim_len = strlen(SidebarDelim); >++ short color_pair; >++ >++ static bool initialized = false; >++ static int prev_show_value; >++ static short saveSidebarWidth; >++ >++ /* initialize first time */ >++ if(!initialized) { >++ prev_show_value = option(OPTSIDEBAR); >++ saveSidebarWidth = SidebarWidth; >++ if(!option(OPTSIDEBAR)) SidebarWidth = 0; >++ initialized = true; >++ } >++ >++ /* save or restore the value SidebarWidth */ >++ if(prev_show_value != option(OPTSIDEBAR)) { >++ if(prev_show_value && !option(OPTSIDEBAR)) { >++ saveSidebarWidth = SidebarWidth; >++ SidebarWidth = 0; >++ } else if(!prev_show_value && option(OPTSIDEBAR)) { >++ SidebarWidth = saveSidebarWidth; >++ } >++ prev_show_value = option(OPTSIDEBAR); >++ } >++ >++ >++// if ( SidebarWidth == 0 ) return 0; >++ if (SidebarWidth > 0 && option (OPTSIDEBAR) >++ && delim_len >= SidebarWidth) { >++ unset_option (OPTSIDEBAR); >++ /* saveSidebarWidth = SidebarWidth; */ >++ if (saveSidebarWidth > delim_len) { >++ SidebarWidth = saveSidebarWidth; >++ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar.")); >++ sleep (2); >++ } else { >++ SidebarWidth = 0; >++ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar. Please set your sidebar_width to a sane value.")); >++ sleep (4); /* the advise to set a sane value should be seen long enough */ > + } >-+ } >-+ >-+ void scroll_sidebar(int op, int menu) >-+ { >-+ if(!SidebarWidth) return; >-+ if(!CurBuffy) return; >-+ >-+ switch (op) { >-+ case OP_SIDEBAR_NEXT: >-+ if ( CurBuffy->next == NULL ) return; >-+ CurBuffy = CurBuffy->next; >-+ break; >-+ case OP_SIDEBAR_PREV: >-+ if ( CurBuffy->prev == NULL ) return; >-+ CurBuffy = CurBuffy->prev; >-+ break; >-+ case OP_SIDEBAR_SCROLL_UP: >-+ CurBuffy = TopBuffy; >-+ if ( CurBuffy != Incoming ) { >-+ calc_boundaries(menu); >-+ CurBuffy = CurBuffy->prev; >-+ } >-+ break; >-+ case OP_SIDEBAR_SCROLL_DOWN: >-+ CurBuffy = BottomBuffy; >-+ if ( CurBuffy->next ) { >-+ calc_boundaries(menu); >-+ CurBuffy = CurBuffy->next; >-+ } >-+ break; >-+ default: >-+ return; >-+ } >-+ calc_boundaries(menu); >-+ draw_sidebar(menu); >-+ } >-+ >-*** mutt-1.5.20-orig/sidebar.h 1969-12-31 18:00:00.000000000 -0600 >---- mutt-1.5.20-patched/sidebar.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 0 **** >---- 1,36 ---- >-+ /* >-+ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> >-+ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> >-+ * >-+ * This program is free software; you can redistribute it and/or modify >-+ * it under the terms of the GNU General Public License as published by >-+ * the Free Software Foundation; either version 2 of the License, or >-+ * (at your option) any later version. >-+ * >-+ * This program is distributed in the hope that it will be useful, >-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >-+ * GNU General Public License for more details. >-+ * >-+ * You should have received a copy of the GNU General Public License >-+ * along with this program; if not, write to the Free Software >-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >-+ */ >-+ >-+ #ifndef SIDEBAR_H >-+ #define SIDEBAR_H >-+ >-+ struct MBOX_LIST { >-+ char *path; >-+ int msgcount; >-+ int new; >-+ } MBLIST; >-+ >-+ /* parameter is whether or not to go to the status line */ >-+ /* used for omitting the last | that covers up the status bar in the index */ >-+ int draw_sidebar(int); >-+ void scroll_sidebar(int, int); >-+ void set_curbuffy(char*); >-+ void set_buffystats(CONTEXT*); >-+ >-+ #endif /* SIDEBAR_H */ >++ saveSidebarWidth = 0; >++ return (0); >++ } >++ >++ if ( SidebarWidth == 0 || !option(OPTSIDEBAR)) { >++ if (SidebarWidth > 0) { >++ saveSidebarWidth = SidebarWidth; >++ SidebarWidth = 0; >++ } >++ unset_option(OPTSIDEBAR); >++ return 0; >++ } >++ >++ /* get attributes for divider */ >++ SETCOLOR(MT_COLOR_STATUS); >++#ifndef USE_SLANG_CURSES >++ attr_get(&attrs, &color_pair, 0); >++#else >++ color_pair = attr_get(); >++#endif >++ SETCOLOR(MT_COLOR_NORMAL); >++ >++ /* draw the divider */ >++ >++ for ( ; lines < LINES-1-(menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { >++ move(lines, SidebarWidth - delim_len); >++ addstr(NONULL(SidebarDelim)); >++#ifndef USE_SLANG_CURSES >++ mvchgat(lines, SidebarWidth - delim_len, delim_len, 0, color_pair, NULL); >++#endif >++ } >++ >++ if ( Incoming == 0 ) return 0; >++ lines = option(OPTHELP) ? 1 : 0; /* go back to the top */ >++ >++ if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) >++ calc_boundaries(menu); >++ if ( CurBuffy == 0 ) CurBuffy = Incoming; >++ >++ tmp = TopBuffy; >++ >++ SETCOLOR(MT_COLOR_NORMAL); >++ >++ for ( ; tmp && lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); tmp = tmp->next ) { >++ if ( tmp == CurBuffy ) >++ SETCOLOR(MT_COLOR_INDICATOR); >++ else if ( tmp->msg_unread > 0 ) >++ SETCOLOR(MT_COLOR_NEW); >++ else if ( tmp->msg_flagged > 0 ) >++ SETCOLOR(MT_COLOR_FLAGGED); >++ else >++ SETCOLOR(MT_COLOR_NORMAL); >++ >++ move( lines, 0 ); >++ if ( Context && !strcmp( tmp->path, Context->path ) ) { >++ tmp->msg_unread = Context->unread; >++ tmp->msgcount = Context->msgcount; >++ tmp->msg_flagged = Context->flagged; >++ } >++ // check whether Maildir is a prefix of the current folder's path >++ short maildir_is_prefix = 0; >++ if ( (strlen(tmp->path) > strlen(Maildir)) && >++ (strncmp(Maildir, tmp->path, strlen(Maildir)) == 0) ) >++ maildir_is_prefix = 1; >++ // calculate depth of current folder and generate its display name with indented spaces >++ int sidebar_folder_depth = 0; >++ char *sidebar_folder_name; >++ sidebar_folder_name = basename(tmp->path); >++ if ( maildir_is_prefix ) { >++ char *tmp_folder_name; >++ int i; >++ tmp_folder_name = tmp->path + strlen(Maildir); >++ for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) { >++ if (tmp_folder_name[i] == '/') sidebar_folder_depth++; >++ } >++ if (sidebar_folder_depth > 0) { >++ sidebar_folder_name = malloc(strlen(basename(tmp->path)) + sidebar_folder_depth + 1); >++ for (i=0; i < sidebar_folder_depth; i++) >++ sidebar_folder_name[i]=' '; >++ sidebar_folder_name[i]=0; >++ strncat(sidebar_folder_name, basename(tmp->path), strlen(basename(tmp->path)) + sidebar_folder_depth); >++ } >++ } >++ printw( "%.*s", SidebarWidth - delim_len + 1, >++ make_sidebar_entry(sidebar_folder_name, tmp->msgcount, >++ tmp->msg_unread, tmp->msg_flagged)); >++ if (sidebar_folder_depth > 0) >++ free(sidebar_folder_name); >++ lines++; >++ } >++ SETCOLOR(MT_COLOR_NORMAL); >++ for ( ; lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { >++ int i = 0; >++ move( lines, 0 ); >++ for ( ; i < SidebarWidth - delim_len; i++ ) >++ addch(' '); >++ } >++ return 0; >++} >++ >++ >++void set_buffystats(CONTEXT* Context) >++{ >++ BUFFY *tmp = Incoming; >++ while(tmp) { >++ if(Context && !strcmp(tmp->path, Context->path)) { >++ tmp->msg_unread = Context->unread; >++ tmp->msgcount = Context->msgcount; >++ break; >++ } >++ tmp = tmp->next; >++ } >++} >++ >++void scroll_sidebar(int op, int menu) >++{ >++ if(!SidebarWidth) return; >++ if(!CurBuffy) return; >++ >++ switch (op) { >++ case OP_SIDEBAR_NEXT: >++ if ( CurBuffy->next == NULL ) return; >++ CurBuffy = CurBuffy->next; >++ break; >++ case OP_SIDEBAR_PREV: >++ if ( CurBuffy->prev == NULL ) return; >++ CurBuffy = CurBuffy->prev; >++ break; >++ case OP_SIDEBAR_SCROLL_UP: >++ CurBuffy = TopBuffy; >++ if ( CurBuffy != Incoming ) { >++ calc_boundaries(menu); >++ CurBuffy = CurBuffy->prev; >++ } >++ break; >++ case OP_SIDEBAR_SCROLL_DOWN: >++ CurBuffy = BottomBuffy; >++ if ( CurBuffy->next ) { >++ calc_boundaries(menu); >++ CurBuffy = CurBuffy->next; >++ } >++ break; >++ default: >++ return; >++ } >++ calc_boundaries(menu); >++ draw_sidebar(menu); >++} >++ >+diff -uNp -r mutt-1.5.22.orig/sidebar.h mutt-1.5.22/sidebar.h >+--- mutt-1.5.22.orig/sidebar.h Thu Jan 1 01:00:00 1970 >++++ mutt-1.5.22/sidebar.h Fri Oct 18 10:18:45 2013 >+@@ -0,0 +1,36 @@ >++/* >++ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> >++ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> >++ * >++ * This program is free software; you can redistribute it and/or modify >++ * it under the terms of the GNU General Public License as published by >++ * the Free Software Foundation; either version 2 of the License, or >++ * (at your option) any later version. >++ * >++ * This program is distributed in the hope that it will be useful, >++ * but WITHOUT ANY WARRANTY; without even the implied warranty of >++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >++ * GNU General Public License for more details. >++ * >++ * You should have received a copy of the GNU General Public License >++ * along with this program; if not, write to the Free Software >++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >++ */ >++ >++#ifndef SIDEBAR_H >++#define SIDEBAR_H >++ >++struct MBOX_LIST { >++ char *path; >++ int msgcount; >++ int new; >++} MBLIST; >++ >++/* parameter is whether or not to go to the status line */ >++/* used for omitting the last | that covers up the status bar in the index */ >++int draw_sidebar(int); >++void scroll_sidebar(int, int); >++void set_curbuffy(char*); >++void set_buffystats(CONTEXT*); >++ >++#endif /* SIDEBAR_H */ >+--- orig/Makefile.am.orig 2010-09-18 13:23:19.000000000 +0200 >++++ new/Makefile.am 2010-09-18 13:25:19.000000000 +0200 >+@@ -34,7 +34,7 @@ >+ score.c send.c sendlib.c signal.c sort.c \ >+ status.c system.c thread.c charset.c history.c lib.c \ >+ muttlib.c editmsg.c mbyte.c \ >+- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c >++ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c >+ >+ nodist_mutt_SOURCES = $(BUILT_SOURCES) >+ >+--- orig/Makefile.in.orig 2013-10-25 08:23:07.000000000 +0200 >++++ new/Makefile.in 2013-10-25 08:26:20.000000000 +0200 >+@@ -133,7 +133,7 @@ >+ system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \ >+ history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \ >+ editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \ >+- ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) >++ ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) sidebar.$(OBJEXT) >+ am__objects_1 = >+ am__objects_2 = patchlist.$(OBJEXT) conststrings.$(OBJEXT) \ >+ $(am__objects_1) >+@@ -472,7 +472,7 @@ >+ score.c send.c sendlib.c signal.c sort.c \ >+ status.c system.c thread.c charset.c history.c lib.c \ >+ muttlib.c editmsg.c mbyte.c \ >+- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c >++ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c >+ >+ nodist_mutt_SOURCES = $(BUILT_SOURCES) >+ mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \ >+@@ -504,7 +504,7 @@ >+ README.SSL smime.h group.h \ >+ muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \ >+ ChangeLog mkchangelog.sh mutt_idna.h \ >+- snprintf.c regex.c crypt-gpgme.h hcachever.sh.in \ >++ snprintf.c regex.c crypt-gpgme.h sidebar.h hcachever.sh.in \ >+ txt2c.c txt2c.sh version.sh check_sec.sh >+ >+ EXTRA_SCRIPTS = smime_keys > *** mutt-1.5.20-orig/doc/Muttrc 2009-06-14 13:53:24.000000000 -0500 > --- mutt-1.5.20-patched/doc/Muttrc 2009-06-19 22:07:04.000000000 -0500 > *************** >@@ -1459,145 +1440,3 @@ > # set crypt_autosign=no > # > # Name: crypt_autosign >-*** mutt-1.5.20-orig/imap/imap.c 2009-06-14 12:19:16.000000000 -0500 >---- mutt-1.5.20-patched/imap/imap.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 1521,1527 **** >- >- imap_munge_mbox_name (munged, sizeof (munged), name); >- snprintf (command, sizeof (command), >-! "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged); >- >- if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) >- { >---- 1521,1527 ---- >- >- imap_munge_mbox_name (munged, sizeof (munged), name); >- snprintf (command, sizeof (command), >-! "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)", munged); >- >- if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) >- { >-*** mutt-1.5.20-orig/imap/command.c 2009-01-05 20:58:31.000000000 -0600 >---- mutt-1.5.20-patched/imap/command.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 1009,1014 **** >---- 1009,1021 ---- >- opened */ >- status->uidnext = oldun; >- >-+ /* Added to make the sidebar show the correct numbers */ >-+ if (status->messages) >-+ { >-+ inc->msgcount = status->messages; >-+ inc->msg_unread = status->unseen; >-+ } >-+ >- FREE (&value); >- return; >- } >---- orig/compose.c.orig 2010-04-14 20:50:19.000000000 +0200 >-+++ new/compose.c 2010-09-18 15:29:09.000000000 +0200 >-@@ -72,7 +72,7 @@ >- >- #define HDR_XOFFSET 10 >- #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */ >--#define W (COLS - HDR_XOFFSET) >-+#define W (COLS - HDR_XOFFSET - SidebarWidth) >- >- static char *Prompts[] = >- { >-@@ -112,7 +112,7 @@ >- { >- int off = 0; >- >-- mvaddstr (HDR_CRYPT, 0, "Security: "); >-+ mvaddstr (HDR_CRYPT, SidebarWidth, "Security: "); >- >- if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME)) == 0) >- { >-@@ -144,7 +144,7 @@ >- } >- >- clrtoeol (); >-- move (HDR_CRYPTINFO, 0); >-+ move (HDR_CRYPTINFO, SidebarWidth); >- clrtoeol (); >- >- if ((WithCrypto & APPLICATION_PGP) >-@@ -161,7 +161,7 @@ >- && (msg->security & ENCRYPT) >- && SmimeCryptAlg >- && *SmimeCryptAlg) { >-- mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "), >-+ mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "), >- NONULL(SmimeCryptAlg)); >- off = 20; >- } >-@@ -190,7 +190,7 @@ >- if (t && t[0] == '0' && t[1] == '\0') >- t = "<random>"; >- >-- if (c + mutt_strlen (t) + 2 >= COLS) >-+ if (c + mutt_strlen (t) + 2 >= COLS - SidebarWidth) >- break; >- >- addstr (NONULL(t)); >-@@ -242,7 +242,7 @@ >- >- buf[0] = 0; >- rfc822_write_address (buf, sizeof (buf), addr, 1); >-- mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]); >-+ mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]); >- mutt_paddstr (W, buf); >- } >- >-@@ -252,10 +252,10 @@ >- draw_envelope_addr (HDR_TO, msg->env->to); >- draw_envelope_addr (HDR_CC, msg->env->cc); >- draw_envelope_addr (HDR_BCC, msg->env->bcc); >-- mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); >-+ mvprintw (HDR_SUBJECT, SidebarWidth, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); >- mutt_paddstr (W, NONULL (msg->env->subject)); >- draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to); >-- mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]); >-+ mvprintw (HDR_FCC, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]); >- mutt_paddstr (W, fcc); >- >- if (WithCrypto) >-@@ -266,7 +266,7 @@ >- #endif >- >- SETCOLOR (MT_COLOR_STATUS); >-- mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments")); >-+ mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments")); >- BKGDSET (MT_COLOR_STATUS); >- clrtoeol (); >- >-@@ -304,7 +304,7 @@ >- /* redraw the expanded list so the user can see the result */ >- buf[0] = 0; >- rfc822_write_address (buf, sizeof (buf), *addr, 1); >-- move (line, HDR_XOFFSET); >-+ move (line, HDR_XOFFSET+SidebarWidth); >- mutt_paddstr (W, buf); >- >- return 0; >-@@ -549,7 +549,7 @@ >- if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) >- { >- mutt_str_replace (&msg->env->subject, buf); >-- move (HDR_SUBJECT, HDR_XOFFSET); >-+ move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth); >- clrtoeol (); >- if (msg->env->subject) >- mutt_paddstr (W, msg->env->subject); >-@@ -566,7 +566,7 @@ >- { >- strfcpy (fcc, buf, fcclen); >- mutt_pretty_mailbox (fcc, fcclen); >-- move (HDR_FCC, HDR_XOFFSET); >-+ move (HDR_FCC, HDR_XOFFSET + SidebarWidth); >- mutt_paddstr (W, fcc); >- fccSet = 1; >- } >diff -ru /usr/ports/mail/mutt/files/extra-patch-sidebar-nntp ./files/extra-patch-sidebar-nntp >--- /usr/ports/mail/mutt/files/extra-patch-sidebar-nntp 2012-07-22 11:15:04.057605000 +0200 >+++ ./files/extra-patch-sidebar-nntp 2013-10-25 08:46:21.837026000 +0200 >@@ -1,6 +1,29 @@ >---- orig/buffy.c.orig 2010-09-18 14:12:40.000000000 +0200 >-+++ new/buffy.c 2010-09-18 14:17:36.000000000 +0200 >-@@ -161,6 +161,49 @@ >+Based on Gentoo's updated version of the Mutt Sidebar patch, >+rebased to apply to pristine Mutt sources. >+ >+http://prefix.gentooexperimental.org:8000/mutt-patches/file/8117acc3edc0/sidebar.patch >+ >+diff -uNp -r mutt-1.5.22.orig/OPS mutt-1.5.22/OPS >+--- mutt-1.5.22.orig/OPS Tue Feb 23 06:57:28 2010 >++++ mutt-1.5.22/OPS Fri Oct 18 10:18:45 2013 >+@@ -179,3 +179,8 @@ OP_WHAT_KEY "display the keycode for a key press" >+ OP_MAIN_SHOW_LIMIT "show currently active limit pattern" >+ OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread" >+ OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads" >++OP_SIDEBAR_SCROLL_UP "scroll the mailbox pane up 1 page" >++OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page" >++OP_SIDEBAR_NEXT "go down to next mailbox" >++OP_SIDEBAR_PREV "go to previous mailbox" >++OP_SIDEBAR_OPEN "open hilighted mailbox" >+diff -uNp -r mutt-1.5.22.orig/PATCHES mutt-1.5.22/PATCHES >+--- mutt-1.5.22.orig/PATCHES Sun Feb 21 05:51:26 2010 >++++ mutt-1.5.22/PATCHES Fri Oct 18 10:19:14 2013 >+@@ -0,0 +1 @@ >++patch-1.5.22.sidebar.gentoo-openbsd >+diff -uNp -r mutt-1.5.22.orig/buffy.c mutt-1.5.22/buffy.c >+--- mutt-1.5.22.orig/buffy.c Mon Apr 22 07:14:53 2013 >++++ mutt-1.5.22/buffy.c Fri Oct 18 10:18:45 2013 >+@@ -161,6 +161,49 @@ void mutt_buffy_cleanup (const char *buf, struct stat > } > } > >@@ -50,7 +73,7 @@ > BUFFY *mutt_find_mailbox (const char *path) > { > BUFFY *tmp = NULL; >-@@ -282,6 +325,7 @@ >+@@ -282,6 +325,7 @@ int mutt_parse_mailboxes (BUFFER *path, BUFFER *s, uns > else > (*tmp)->size = 0; > } >@@ -58,884 +81,831 @@ > return 0; > } > >-@@ -371,12 +415,17 @@ >+@@ -340,6 +384,68 @@ static int buffy_maildir_hasnew (BUFFY* mailbox) > return rc; > } > >-+#define STAT_CHECK_SIZE (sb.st_size > tmp->size) >-+#define STAT_CHECK_TIME (sb.st_mtime > sb.st_atime || (tmp->newly_created && sb.st_ctime == sb.st_mtime && sb.st_ctime == sb.st_atime)) >-+#define STAT_CHECK (option(OPTCHECKMBOXSIZE) ? STAT_CHECK_SIZE : STAT_CHECK_TIME) >++/* update message counts for the sidebar */ >++void buffy_maildir_update (BUFFY* mailbox) >++{ >++ char path[_POSIX_PATH_MAX]; >++ DIR *dirp; >++ struct dirent *de; >++ char *p; >++ >++ mailbox->msgcount = 0; >++ mailbox->msg_unread = 0; >++ mailbox->msg_flagged = 0; >++ >++ snprintf (path, sizeof (path), "%s/new", mailbox->path); >++ >++ if ((dirp = opendir (path)) == NULL) >++ { >++ mailbox->magic = 0; >++ return; >++ } >++ >++ while ((de = readdir (dirp)) != NULL) >++ { >++ if (*de->d_name == '.') >++ continue; >++ >++ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) { >++ mailbox->new = 1; >++ mailbox->msgcount++; >++ mailbox->msg_unread++; >++ } >++ } >++ >++ closedir (dirp); >++ snprintf (path, sizeof (path), "%s/cur", mailbox->path); >++ >++ if ((dirp = opendir (path)) == NULL) >++ { >++ mailbox->magic = 0; >++ return; >++ } >++ >++ while ((de = readdir (dirp)) != NULL) >++ { >++ if (*de->d_name == '.') >++ continue; >++ >++ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) { >++ mailbox->msgcount++; >++ if ((p = strstr (de->d_name, ":2,"))) { >++ if (!strchr (p + 3, 'T')) { >++ if (!strchr (p + 3, 'S')) >++ mailbox->msg_unread++; >++ if (strchr(p + 3, 'F')) >++ mailbox->msg_flagged++; >++ } >++ } >++ } >++ } >++ >++ closedir (dirp); >++} >++ >+ /* returns 1 if mailbox has new mail */ >+ static int buffy_mbox_hasnew (BUFFY* mailbox, struct stat *sb) >+ { >+@@ -371,6 +477,20 @@ static int buffy_mbox_hasnew (BUFFY* mailbox, struct s >+ return rc; >+ } >+ >++/* update message counts for the sidebar */ >++void buffy_mbox_update (BUFFY* mailbox) >++{ >++ CONTEXT *ctx = NULL; >++ >++ ctx = mx_open_mailbox(mailbox->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL); >++ if(ctx) >++ { >++ mailbox->msgcount = ctx->msgcount; >++ mailbox->msg_unread = ctx->unread; >++ mx_close_mailbox(ctx, 0); >++ } >++} > + > int mutt_buffy_check (int force) > { > BUFFY *tmp; >- struct stat sb; >- struct stat contex_sb; >- time_t t; >-+ CONTEXT *ctx; >- >- sb.st_size=0; >- contex_sb.st_dev=0; >-@@ -416,6 +465,8 @@ >- >- for (tmp = Incoming; tmp; tmp = tmp->next) >- { >-+ if ( tmp->new == 1 ) >-+ tmp->has_new = 1; >- if (tmp->magic != M_IMAP) >- { >- tmp->new = 0; >-@@ -455,18 +506,122 @@ >+@@ -444,16 +564,19 @@ int mutt_buffy_check (int force) > { > case M_MBOX: > case M_MMDF: >-- if (buffy_mbox_hasnew (tmp, &sb) > 0) >-- BuffyCount++; >-- break; >-+ { >-+ if (STAT_CHECK || tmp->msgcount == 0) >-+ { >-+ BUFFY b = *tmp; >-+ int msgcount = 0; >-+ int msg_unread = 0; >-+ /* parse the mailbox, to see how much mail there is */ >-+ ctx = mx_open_mailbox( tmp->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL); >-+ if(ctx) >-+ { >-+ msgcount = ctx->msgcount; >-+ msg_unread = ctx->unread; >-+ mx_close_mailbox(ctx, 0); >-+ } >-+ *tmp = b; >-+ tmp->msgcount = msgcount; >-+ tmp->msg_unread = msg_unread; >-+ if(STAT_CHECK) { >-+ tmp->has_new = tmp->new = 1; >-+ BuffyCount++; >-+ } >-+ } >-+ else if (option(OPTCHECKMBOXSIZE)) >-+ { >-+ /* some other program has deleted mail from the folder */ >-+ tmp->size = (off_t) sb.st_size; >-+ } >-+ if (tmp->newly_created && >-+ (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) >-+ tmp->newly_created = 0; >-+ } >-+ break; >-+ >++ buffy_mbox_update (tmp); >+ if (buffy_mbox_hasnew (tmp, &sb) > 0) >+ BuffyCount++; >+ break; > > case M_MAILDIR: >-- if (buffy_maildir_hasnew (tmp) > 0) >-- BuffyCount++; >-+ { >-+ char path[_POSIX_PATH_MAX]; >-+ DIR *dirp; >-+ struct dirent *de; >-+ /* count new message */ >-+ snprintf (path, sizeof (path), "%s/new", tmp->path); >-+ if ((dirp = opendir (path)) == NULL) >-+ { >-+ tmp->magic = 0; >-+ break; >-+ } >-+ tmp->msgcount = 0; >-+ tmp->msg_unread = 0; >-+ tmp->msg_flagged = 0; >-+ while ((de = readdir (dirp)) != NULL) >-+ { >-+ char *p; >-+ if (*de->d_name != '.' && >-+ (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) >-+ { >-+ tmp->has_new = tmp->new = 1; >-+ tmp->msgcount++; >-+ tmp->msg_unread++; >-+ } >-+ } >-+ if(tmp->msg_unread) >-+ BuffyCount++; >-+ >-+ closedir (dirp); >-+ >-+ /* >-+ * count read messages (for folderlist (sidebar) we also need to count >-+ * messages in cur so that we the total number of messages >-+ */ >-+ snprintf (path, sizeof (path), "%s/cur", tmp->path); >-+ if ((dirp = opendir (path)) == NULL) >-+ { >-+ tmp->magic = 0; >-+ break; >-+ } >-+ while ((de = readdir (dirp)) != NULL) >-+ { >-+ char *p; >-+ if (*de->d_name != '.') { >-+ if ((p = strstr (de->d_name, ":2,"))) { >-+ if (!strchr (p + 3, 'T')) { >-+ tmp->msgcount++; >-+ if ( !strchr (p + 3, 'S')) >-+ tmp->msg_unread++; >-+ if (strchr(p + 3, 'F')) >-+ tmp->msg_flagged++; >-+ } >-+ } else >-+ tmp->msgcount++; >-+ } >-+ } >-+ closedir (dirp); >-+ } >++ buffy_maildir_update (tmp); >+ if (buffy_maildir_hasnew (tmp) > 0) >+ BuffyCount++; > break; > > case M_MH: >-- if ((tmp->new = mh_buffy (tmp->path)) > 0) >-- BuffyCount++; >-+ { >-+ DIR *dp; >-+ char path[_POSIX_PATH_MAX]; >-+ struct dirent *de; >-+ if ((tmp->new = mh_buffy (tmp->path)) > 0) >-+ BuffyCount++; >-+ >-+ if ((dp = opendir (path)) == NULL) >-+ break; >-+ tmp->msgcount = 0; >-+ while ((de = readdir (dp))) >-+ { >-+ if (mh_valid_message (de->d_name)) >-+ { >-+ tmp->msgcount++; >-+ tmp->has_new = tmp->new = 1; >-+ } >-+ } >-+ closedir (dp); >-+ } >- break; >- } >++ mh_buffy_update (tmp->path, &tmp->msgcount, &tmp->msg_unread, &tmp->msg_flagged); >+ mh_buffy(tmp); >+ if (tmp->new) >+ BuffyCount++; >+diff -uNp -r mutt-1.5.22.orig/buffy.h mutt-1.5.22/buffy.h >+--- mutt-1.5.22.orig/buffy.h Mon Apr 22 07:14:53 2013 >++++ mutt-1.5.22/buffy.h Fri Oct 18 10:18:45 2013 >+@@ -25,7 +25,11 @@ typedef struct buffy_t >+ char path[_POSIX_PATH_MAX]; >+ off_t size; >+ struct buffy_t *next; >++ struct buffy_t *prev; >+ short new; /* mailbox has new mail */ >++ int msgcount; /* total number of messages */ >++ int msg_unread; /* number of unread messages */ >++ int msg_flagged; /* number of flagged messages */ >+ short notified; /* user has been notified */ >+ short magic; /* mailbox type */ >+ short newly_created; /* mbox or mmdf just popped into existence */ >+diff -uNp -r mutt-1.5.22.orig/color.c mutt-1.5.22/color.c >+--- mutt-1.5.22.orig/color.c Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/color.c Fri Oct 18 10:19:53 2013 >+@@ -93,6 +93,8 @@ static const struct mapping_t Fields[] = >+ { "bold", MT_COLOR_BOLD }, >+ { "underline", MT_COLOR_UNDERLINE }, >+ { "index", MT_COLOR_INDEX }, >++ { "sidebar_new", MT_COLOR_NEW }, >++ { "sidebar_flagged", MT_COLOR_FLAGGED }, >+ { NULL, 0 } >+ }; >+ >+diff -uNp -r mutt-1.5.22.orig/compose.c mutt-1.5.22/compose.c >+--- mutt-1.5.22.orig/compose.c.orig 2013-10-25 08:31:26.000000000 +0200 >++++ mutt-1.5.22/compose.c 2013-10-25 08:44:32.000000000 +0200 >+@@ -83,7 +83,7 @@ >+ >+ #define HDR_XOFFSET 14 >+ #define TITLE_FMT "%14s" /* Used for Prompts, which are ASCII */ >+-#define W (COLS - HDR_XOFFSET) >++#define W (COLS - HDR_XOFFSET - SidebarWidth) >+ >+ static const char * const Prompts[] = >+ { >+@@ -144,7 +144,7 @@ >+ >+ static void redraw_crypt_lines (HEADER *msg) >+ { >+- mvprintw (HDR_CRYPT, 0, TITLE_FMT, "Security: "); >++ mvprintw (HDR_CRYPT, SidebarWidth, TITLE_FMT, "Security: "); >+ >+ if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME)) == 0) >+ { >+@@ -176,7 +176,7 @@ >+ } >+ >+ clrtoeol (); >+- move (HDR_CRYPTINFO, 0); >++ move (HDR_CRYPTINFO, SidebarWidth); >+ clrtoeol (); >+ >+ if ((WithCrypto & APPLICATION_PGP) >+@@ -194,7 +194,7 @@ >+ && (msg->security & ENCRYPT) >+ && SmimeCryptAlg >+ && *SmimeCryptAlg) { >+- mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "), >++ mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "), >+ NONULL(SmimeCryptAlg)); >+ } >+ } >+@@ -207,7 +207,7 @@ >+ int c; >+ char *t; >+ >+- mvprintw (HDR_MIX, 0, TITLE_FMT, "Mix: "); >++ mvprintw (HDR_MIX, SidebarWidth, TITLE_FMT, "Mix: "); >+ >+ if (!chain) >+ { >+@@ -222,7 +222,7 @@ >+ if (t && t[0] == '0' && t[1] == '\0') >+ t = "<random>"; >+ >+- if (c + mutt_strlen (t) + 2 >= COLS) >++ if (c + mutt_strlen (t) + 2 >= COLS - SidebarWidth) >+ break; >+ >+ addstr (NONULL(t)); >+@@ -274,7 +274,7 @@ >+ >+ buf[0] = 0; >+ rfc822_write_address (buf, sizeof (buf), addr, 1); >+- mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]); >++ mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]); >+ mutt_paddstr (W, buf); >+ } >+ >+@@ -292,21 +292,21 @@ >+ } >+ else >+ { >+- mvprintw (HDR_TO, 0, TITLE_FMT , Prompts[HDR_NEWSGROUPS - 1]); >++ mvprintw (HDR_TO, SidebarWidth, TITLE_FMT , Prompts[HDR_NEWSGROUPS - 1]); >+ mutt_paddstr (W, NONULL (msg->env->newsgroups)); >+- mvprintw (HDR_CC, 0, TITLE_FMT , Prompts[HDR_FOLLOWUPTO - 1]); >++ mvprintw (HDR_CC, SidebarWidth, TITLE_FMT , Prompts[HDR_FOLLOWUPTO - 1]); >+ mutt_paddstr (W, NONULL (msg->env->followup_to)); >+ if (option (OPTXCOMMENTTO)) >+ { >+- mvprintw (HDR_BCC, 0, TITLE_FMT , Prompts[HDR_XCOMMENTTO - 1]); >++ mvprintw (HDR_BCC, SidebarWidth, TITLE_FMT , Prompts[HDR_XCOMMENTTO - 1]); >+ mutt_paddstr (W, NONULL (msg->env->x_comment_to)); > } >-*** mutt-1.5.20-orig/buffy.h 2009-04-30 00:36:16.000000000 -0500 >---- mutt-1.5.20-patched/buffy.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 25,31 **** >---- 25,36 ---- >- char path[_POSIX_PATH_MAX]; >- off_t size; >- struct buffy_t *next; >-+ struct buffy_t *prev; >- short new; /* mailbox has new mail */ >-+ short has_new; /* set it new if new and not read */ >-+ int msgcount; /* total number of messages */ >-+ int msg_unread; /* number of unread messages */ >-+ int msg_flagged; /* number of flagged messages */ >- short notified; /* user has been notified */ >- short magic; /* mailbox type */ >- short newly_created; /* mbox or mmdf just popped into existence */ >-*** mutt-1.5.20-orig/color.c 2009-05-18 19:11:35.000000000 -0500 >---- mutt-1.5.20-patched/color.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 93,98 **** >---- 93,100 ---- >- { "bold", MT_COLOR_BOLD }, >- { "underline", MT_COLOR_UNDERLINE }, >- { "index", MT_COLOR_INDEX }, >-+ { "sidebar_new", MT_COLOR_NEW }, >-+ { "sidebar_flagged", MT_COLOR_FLAGGED }, >- { NULL, 0 } >- }; >- >-*** mutt-1.5.20-orig/curs_main.c 2009-06-13 21:48:36.000000000 -0500 >---- mutt-1.5.20-patched/curs_main.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 26,32 **** >---- 26,34 ---- >- #include "mailbox.h" >- #include "mapping.h" >- #include "sort.h" >-+ #include "buffy.h" >- #include "mx.h" >-+ #include "sidebar.h" >- >- #ifdef USE_POP >- #include "pop.h" >-*************** >-*** 523,530 **** >- menu->redraw |= REDRAW_STATUS; >- if (do_buffy_notify) >- { >-! if (mutt_buffy_notify () && option (OPTBEEPNEW)) >-! beep (); >- } >- else >- do_buffy_notify = 1; >---- 525,536 ---- >- menu->redraw |= REDRAW_STATUS; >- if (do_buffy_notify) >- { >-! if (mutt_buffy_notify ()) >-! { >-! menu->redraw |= REDRAW_FULL; >-! if (option (OPTBEEPNEW)) >-! beep (); >-! } >- } >- else >- do_buffy_notify = 1; >-*************** >-*** 536,541 **** >---- 542,548 ---- >- if (menu->redraw & REDRAW_FULL) >+ } >+ #endif >+- mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); >++ mvprintw (HDR_SUBJECT, SidebarWidth, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); >+ mutt_paddstr (W, NONULL (msg->env->subject)); >+ draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to); >+- mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]); >++ mvprintw (HDR_FCC, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]); >+ mutt_paddstr (W, fcc); >+ >+ if (WithCrypto) >+@@ -317,7 +317,7 @@ >+ #endif >+ >+ SETCOLOR (MT_COLOR_STATUS); >+- mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments")); >++ mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments")); >+ clrtoeol (); >+ >+ NORMAL_COLOR; >+@@ -353,7 +353,7 @@ >+ /* redraw the expanded list so the user can see the result */ >+ buf[0] = 0; >+ rfc822_write_address (buf, sizeof (buf), *addr, 1); >+- move (line, HDR_XOFFSET); >++ move (line, HDR_XOFFSET+SidebarWidth); >+ mutt_paddstr (W, buf); >+ >+ return 0; >+@@ -685,7 +685,7 @@ >+ if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) >+ { >+ mutt_str_replace (&msg->env->subject, buf); >+- move (HDR_SUBJECT, HDR_XOFFSET); >++ move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth); >+ if (msg->env->subject) >+ mutt_paddstr (W, msg->env->subject); >+ else >+@@ -703,7 +703,7 @@ >+ { >+ strfcpy (fcc, buf, fcclen); >+ mutt_pretty_mailbox (fcc, fcclen); >+- move (HDR_FCC, HDR_XOFFSET); >++ move (HDR_FCC, HDR_XOFFSET + SidebarWidth); >+ mutt_paddstr (W, fcc); >+ fccSet = 1; >+ } >+diff -uNp -r mutt-1.5.22.orig/curs_main.c mutt-1.5.22/curs_main.c >+--- mutt-1.5.22.orig/curs_main.c Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/curs_main.c Fri Oct 18 10:18:45 2013 >+@@ -26,7 +26,9 @@ >+ #include "mailbox.h" >+ #include "mapping.h" >+ #include "sort.h" >++#include "buffy.h" >+ #include "mx.h" >++#include "sidebar.h" >+ >+ #ifdef USE_POP >+ #include "pop.h" >+@@ -519,8 +521,12 @@ int mutt_index_menu (void) >+ menu->redraw |= REDRAW_STATUS; >+ if (do_buffy_notify) > { >- menu_redraw_full (menu); >-+ draw_sidebar(menu->menu); >- mutt_show_error (); >+- if (mutt_buffy_notify () && option (OPTBEEPNEW)) >+- beep (); >++ if (mutt_buffy_notify ()) >++ { >++ menu->redraw |= REDRAW_FULL; >++ if (option (OPTBEEPNEW)) >++ beep (); >++ } > } >- >-*************** >-*** 558,567 **** >---- 565,577 ---- >- >- if (menu->redraw & REDRAW_STATUS) >- { >-+ DrawFullLine = 1; >- menu_status_line (buf, sizeof (buf), menu, NONULL (Status)); >-+ DrawFullLine = 0; >- CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2); >- SETCOLOR (MT_COLOR_STATUS); >- BKGDSET (MT_COLOR_STATUS); >-+ set_buffystats(Context); >- mutt_paddstr (COLS, buf); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >-*************** >-*** 575,581 **** >- menu->oldcurrent = -1; >- >- if (option (OPTARROWCURSOR)) >-! move (menu->current - menu->top + menu->offset, 2); >- else if (option (OPTBRAILLEFRIENDLY)) >- move (menu->current - menu->top + menu->offset, 0); >- else >---- 585,591 ---- >- menu->oldcurrent = -1; >- >- if (option (OPTARROWCURSOR)) >-! move (menu->current - menu->top + menu->offset, SidebarWidth + 2); >- else if (option (OPTBRAILLEFRIENDLY)) >- move (menu->current - menu->top + menu->offset, 0); >- else >-*************** >-*** 1055,1060 **** >---- 1065,1071 ---- >- menu->redraw = REDRAW_FULL; >- break; >- >-+ case OP_SIDEBAR_OPEN: >- case OP_MAIN_CHANGE_FOLDER: >- case OP_MAIN_NEXT_UNREAD_MAILBOX: >- >-*************** >-*** 1086,1092 **** >- { >- mutt_buffy (buf, sizeof (buf)); >- >-! if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) >- { >- if (menu->menu == MENU_PAGER) >- { >---- 1097,1107 ---- >- { >- mutt_buffy (buf, sizeof (buf)); >- >-! if ( op == OP_SIDEBAR_OPEN ) { >-! if(!CurBuffy) >-! break; >-! strncpy( buf, CurBuffy->path, sizeof(buf) ); >-! } else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) >- { >- if (menu->menu == MENU_PAGER) >- { >-*************** >-*** 1104,1109 **** >---- 1119,1125 ---- >- } >- >- mutt_expand_path (buf, sizeof (buf)); >-+ set_curbuffy(buf); >- if (mx_get_magic (buf) <= 0) >- { >- mutt_error (_("%s is not a mailbox."), buf); >-*************** >-*** 2183,2188 **** >---- 2199,2210 ---- >- mutt_what_key(); >- break; >- >-+ case OP_SIDEBAR_SCROLL_UP: >-+ case OP_SIDEBAR_SCROLL_DOWN: >-+ case OP_SIDEBAR_NEXT: >-+ case OP_SIDEBAR_PREV: >-+ scroll_sidebar(op, menu->menu); >-+ break; >- default: >- if (menu->menu == MENU_MAIN) >- km_error_key (MENU_MAIN); >-*** mutt-1.5.20-orig/flags.c 2008-12-16 21:50:09.000000000 -0600 >---- mutt-1.5.20-patched/flags.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 22,29 **** >---- 22,31 ---- >- >- #include "mutt.h" >- #include "mutt_curses.h" >-+ #include "mutt_menu.h" >- #include "sort.h" >- #include "mx.h" >-+ #include "sidebar.h" >- >- void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx) >- { >-*************** >-*** 263,268 **** >---- 265,271 ---- >- */ >- if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged || flagged != ctx->flagged)) >- h->searched = 0; >-+ draw_sidebar(0); >- } >- >- void mutt_tag_set_flag (int flag, int bf) >-*** mutt-1.5.20-orig/functions.h 2009-04-30 00:36:17.000000000 -0500 >---- mutt-1.5.20-patched/functions.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 168,173 **** >---- 168,178 ---- >- { "decrypt-save", OP_DECRYPT_SAVE, NULL }, >- >- >-+ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, >-+ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, >-+ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, >-+ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, >-+ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, >- { NULL, 0, NULL } >- }; >- >-*************** >-*** 268,273 **** >---- 273,283 ---- >- >- { "what-key", OP_WHAT_KEY, NULL }, >- >-+ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, >-+ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, >-+ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, >-+ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, >-+ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, >- { NULL, 0, NULL } >- }; >- >-*** mutt-1.5.20-orig/globals.h 2009-06-03 15:48:31.000000000 -0500 >---- mutt-1.5.20-patched/globals.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 117,122 **** >---- 117,123 ---- >- WHERE char *SendCharset; >- WHERE char *Sendmail; >- WHERE char *Shell; >-+ WHERE char *SidebarDelim; >- WHERE char *Signature; >- WHERE char *SimpleSearch; >- #if USE_SMTP >-*************** >-*** 206,211 **** >---- 207,215 ---- >- WHERE short ScoreThresholdRead; >- WHERE short ScoreThresholdFlag; >- >-+ WHERE struct buffy_t *CurBuffy INITVAL(0); >-+ WHERE short DrawFullLine INITVAL(0); >-+ WHERE short SidebarWidth; >- #ifdef USE_IMAP >- WHERE short ImapKeepalive; >- WHERE short ImapPipelineDepth; >-*** mutt-1.5.20-orig/init.h 2009-06-13 16:35:21.000000000 -0500 >---- mutt-1.5.20-patched/init.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 1941,1946 **** >---- 1941,1967 ---- >- ** not used. >- ** (PGP only) >+ else >+ do_buffy_notify = 1; >+@@ -532,6 +538,7 @@ int mutt_index_menu (void) >+ if (menu->redraw & REDRAW_FULL) >+ { >+ menu_redraw_full (menu); >++ draw_sidebar(menu->menu); >+ mutt_show_error (); >+ } >+ >+@@ -554,9 +561,12 @@ int mutt_index_menu (void) >+ >+ if (menu->redraw & REDRAW_STATUS) >+ { >++ DrawFullLine = 1; >+ menu_status_line (buf, sizeof (buf), menu, NONULL (Status)); >++ DrawFullLine = 0; >+ move (option (OPTSTATUSONTOP) ? 0 : LINES-2, 0); >+ SETCOLOR (MT_COLOR_STATUS); >++ set_buffystats(Context); >+ mutt_paddstr (COLS, buf); >+ NORMAL_COLOR; >+ menu->redraw &= ~REDRAW_STATUS; >+@@ -569,7 +579,7 @@ int mutt_index_menu (void) >+ menu->oldcurrent = -1; >+ >+ if (option (OPTARROWCURSOR)) >+- move (menu->current - menu->top + menu->offset, 2); >++ move (menu->current - menu->top + menu->offset, SidebarWidth + 2); >+ else if (option (OPTBRAILLEFRIENDLY)) >+ move (menu->current - menu->top + menu->offset, 0); >+ else >+@@ -1070,6 +1080,7 @@ int mutt_index_menu (void) >+ menu->redraw = REDRAW_FULL; >+ break; >+ >++ case OP_SIDEBAR_OPEN: >+ case OP_MAIN_CHANGE_FOLDER: >+ case OP_MAIN_NEXT_UNREAD_MAILBOX: >+ >+@@ -1101,7 +1112,11 @@ int mutt_index_menu (void) >+ { >+ mutt_buffy (buf, sizeof (buf)); >+ >+- if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) >++ if ( op == OP_SIDEBAR_OPEN ) { >++ if(!CurBuffy) >++ break; >++ strncpy( buf, CurBuffy->path, sizeof(buf) ); >++ } else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) >+ { >+ if (menu->menu == MENU_PAGER) >+ { >+@@ -1119,6 +1134,7 @@ int mutt_index_menu (void) >+ } >+ >+ mutt_expand_path (buf, sizeof (buf)); >++ set_curbuffy(buf); >+ if (mx_get_magic (buf) <= 0) >+ { >+ mutt_error (_("%s is not a mailbox."), buf); >+@@ -2209,6 +2225,12 @@ int mutt_index_menu (void) >+ mutt_what_key(); >+ break; >+ >++ case OP_SIDEBAR_SCROLL_UP: >++ case OP_SIDEBAR_SCROLL_DOWN: >++ case OP_SIDEBAR_NEXT: >++ case OP_SIDEBAR_PREV: >++ scroll_sidebar(op, menu->menu); >++ break; >+ default: >+ if (menu->menu == MENU_MAIN) >+ km_error_key (MENU_MAIN); >+diff -uNp -r mutt-1.5.22.orig/flags.c mutt-1.5.22/flags.c >+--- mutt-1.5.22.orig/flags.c Sun Feb 21 22:10:41 2010 >++++ mutt-1.5.22/flags.c Fri Oct 18 10:18:45 2013 >+@@ -22,8 +22,10 @@ >+ >+ #include "mutt.h" >+ #include "mutt_curses.h" >++#include "mutt_menu.h" >+ #include "sort.h" >+ #include "mx.h" >++#include "sidebar.h" >+ >+ void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx) >+ { >+@@ -263,6 +265,7 @@ void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag > */ >-+ {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, "|"}, >-+ /* >-+ ** .pp >-+ ** This specifies the delimiter between the sidebar (if visible) and >-+ ** other screens. >-+ */ >-+ { "sidebar_visible", DT_BOOL, R_BOTH, OPTSIDEBAR, 0 }, >-+ /* >-+ ** .pp >-+ ** This specifies whether or not to show sidebar (left-side list of folders). >-+ */ >-+ { "sidebar_sort", DT_BOOL, R_BOTH, OPTSIDEBARSORT, 0 }, >-+ /* >-+ ** .pp >-+ ** This specifies whether or not to sort the sidebar alphabetically. >-+ */ >-+ { "sidebar_width", DT_NUM, R_BOTH, UL &SidebarWidth, 0 }, >-+ /* >-+ ** .pp >-+ ** The width of the sidebar. >-+ */ >- { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0}, >- /* >- ** .pp >-*** mutt-1.5.20-orig/mailbox.h 2009-04-30 00:36:17.000000000 -0500 >---- mutt-1.5.20-patched/mailbox.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 27,32 **** >---- 27,33 ---- >- #define M_NEWFOLDER (1<<4) /* create a new folder - same as M_APPEND, but uses >- * safe_fopen() for mbox-style folders. >- */ >-+ #define M_PEEK (1<<5) /* revert atime back after taking a look (if applicable) */ >- >- /* mx_open_new_message() */ >- #define M_ADD_FROM 1 /* add a From_ line */ >---- orig/Makefile.am.orig 2010-09-18 13:23:19.000000000 +0200 >-+++ new/Makefile.am 2010-09-18 13:25:19.000000000 +0200 >-@@ -34,7 +34,7 @@ >- score.c send.c sendlib.c signal.c sort.c \ >- status.c system.c thread.c charset.c history.c lib.c \ >- muttlib.c editmsg.c mbyte.c \ >-- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c >-+ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c >+ if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged || flagged != ctx->flagged)) >+ h->searched = 0; >++ draw_sidebar(0); >+ } > >- nodist_mutt_SOURCES = $(BUILT_SOURCES) >+ void mutt_tag_set_flag (int flag, int bf) >+diff -uNp -r mutt-1.5.22.orig/functions.h mutt-1.5.22/functions.h >+--- mutt-1.5.22.orig/functions.h Sat Dec 3 19:10:04 2011 >++++ mutt-1.5.22/functions.h Fri Oct 18 10:18:45 2013 >+@@ -169,6 +169,11 @@ const struct binding_t OpMain[] = { /* map: index */ >+ { "decrypt-save", OP_DECRYPT_SAVE, NULL }, >+ >+ >++ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, >++ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, >++ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, >++ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, >++ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, >+ { NULL, 0, NULL } >+ }; > >---- orig/Makefile.in.orig 2010-09-18 13:23:19.000000000 +0200 >-+++ new/Makefile.in 2010-09-18 13:27:19.000000000 +0200 >-@@ -89,7 +89,7 @@ >- system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \ >- history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \ >- editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \ >-- ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) >-+ ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) sidebar.$(OBJEXT) >- am__objects_1 = >- am__objects_2 = patchlist.$(OBJEXT) $(am__objects_1) >- nodist_mutt_OBJECTS = $(am__objects_2) >-@@ -363,7 +363,7 @@ >- score.c send.c sendlib.c signal.c sort.c \ >- status.c system.c thread.c charset.c history.c lib.c \ >- muttlib.c editmsg.c mbyte.c \ >-- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c >-+ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c >+@@ -272,6 +277,11 @@ const struct binding_t OpPager[] = { /* map: pager */ > >- nodist_mutt_SOURCES = $(BUILT_SOURCES) >- mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \ >-@@ -397,7 +397,7 @@ >- README.SSL smime.h group.h \ >- muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \ >- ChangeLog mkchangelog.sh mutt_idna.h \ >-- snprintf.c regex.c crypt-gpgme.h hcachever.sh.in >-+ snprintf.c regex.c crypt-gpgme.h sidebar.h hcachever.sh.in >+ { "what-key", OP_WHAT_KEY, NULL }, > >- EXTRA_SCRIPTS = smime_keys >- mutt_dotlock_SOURCES = mutt_dotlock.c >-*** mutt-1.5.20-orig/mbox.c 2009-06-10 23:29:41.000000000 -0500 >---- mutt-1.5.20-patched/mbox.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 100,105 **** >---- 100,106 ---- >- mutt_perror (ctx->path); >- return (-1); >- } >-+ ctx->atime = sb.st_atime; >- ctx->mtime = sb.st_mtime; >- ctx->size = sb.st_size; >- >-*************** >-*** 255,260 **** >---- 256,262 ---- >- >- ctx->size = sb.st_size; >- ctx->mtime = sb.st_mtime; >-+ ctx->atime = sb.st_atime; >- >- #ifdef NFS_ATTRIBUTE_HACK >- if (sb.st_mtime > sb.st_atime) >-*** mutt-1.5.20-orig/menu.c 2009-06-01 11:29:32.000000000 -0500 >---- mutt-1.5.20-patched/menu.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 24,29 **** >---- 24,30 ---- >- #include "mutt_curses.h" >- #include "mutt_menu.h" >- #include "mbyte.h" >-+ #include "sidebar.h" >- >- #include <string.h> >- #include <stdlib.h> >-*************** >-*** 156,162 **** >- { >- char *scratch = safe_strdup (s); >- int shift = option (OPTARROWCURSOR) ? 3 : 0; >-! int cols = COLS - shift; >- >- mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1); >- s[n - 1] = 0; >---- 157,163 ---- >- { >- char *scratch = safe_strdup (s); >- int shift = option (OPTARROWCURSOR) ? 3 : 0; >-! int cols = COLS - shift - SidebarWidth; >- >- mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1); >- s[n - 1] = 0; >-*************** >-*** 207,212 **** >---- 208,214 ---- >- char buf[LONG_STRING]; >- int i; >- >-+ draw_sidebar(1); >- for (i = menu->top; i < menu->top + menu->pagelen; i++) >- { >- if (i < menu->max) >-*************** >-*** 217,223 **** >- if (option (OPTARROWCURSOR)) >- { >- attrset (menu->color (i)); >-! CLEARLINE (i - menu->top + menu->offset); >- >- if (i == menu->current) >- { >---- 219,225 ---- >- if (option (OPTARROWCURSOR)) >- { >- attrset (menu->color (i)); >-! CLEARLINE_WIN (i - menu->top + menu->offset); >- >- if (i == menu->current) >- { >-*************** >-*** 246,259 **** >- BKGDSET (MT_COLOR_INDICATOR); >- } >- >-! CLEARLINE (i - menu->top + menu->offset); >- print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >- } >- } >- else >-! CLEARLINE (i - menu->top + menu->offset); >- } >- menu->redraw = 0; >- } >---- 248,261 ---- >- BKGDSET (MT_COLOR_INDICATOR); >- } >- >-! CLEARLINE_WIN (i - menu->top + menu->offset); >- print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >- } >- } >- else >-! CLEARLINE_WIN (i - menu->top + menu->offset); >- } >- menu->redraw = 0; >- } >-*************** >-*** 268,274 **** >- return; >- } >- >-! move (menu->oldcurrent + menu->offset - menu->top, 0); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >- >---- 270,276 ---- >- return; >- } >- >-! move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >- >-*************** >-*** 283,295 **** >- clrtoeol (); >- menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); >- menu_pad_string (buf, sizeof (buf)); >-! move (menu->oldcurrent + menu->offset - menu->top, 3); >- print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); >- SETCOLOR (MT_COLOR_NORMAL); >- } >- >- /* now draw it in the new location */ >-! move (menu->current + menu->offset - menu->top, 0); >- attrset (menu->color (menu->current)); >- ADDCOLOR (MT_COLOR_INDICATOR); >- addstr ("->"); >---- 285,297 ---- >- clrtoeol (); >- menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); >- menu_pad_string (buf, sizeof (buf)); >-! move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth + 3); >- print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); >- SETCOLOR (MT_COLOR_NORMAL); >- } >- >- /* now draw it in the new location */ >-! move (menu->current + menu->offset - menu->top, SidebarWidth); >- attrset (menu->color (menu->current)); >- ADDCOLOR (MT_COLOR_INDICATOR); >- addstr ("->"); >-*************** >-*** 310,316 **** >- attrset (menu->color (menu->current)); >- ADDCOLOR (MT_COLOR_INDICATOR); >- BKGDSET (MT_COLOR_INDICATOR); >-! CLEARLINE (menu->current - menu->top + menu->offset); >- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >---- 312,318 ---- >- attrset (menu->color (menu->current)); >- ADDCOLOR (MT_COLOR_INDICATOR); >- BKGDSET (MT_COLOR_INDICATOR); >-! CLEARLINE_WIN (menu->current - menu->top + menu->offset); >- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >-*************** >-*** 322,328 **** >- { >- char buf[LONG_STRING]; >- >-! move (menu->current + menu->offset - menu->top, 0); >- menu_make_entry (buf, sizeof (buf), menu, menu->current); >- menu_pad_string (buf, sizeof (buf)); >- >---- 324,330 ---- >- { >- char buf[LONG_STRING]; >- >-! move (menu->current + menu->offset - menu->top, SidebarWidth); >- menu_make_entry (buf, sizeof (buf), menu, menu->current); >- menu_pad_string (buf, sizeof (buf)); >- >-*************** >-*** 876,882 **** >- >- >- if (option (OPTARROWCURSOR)) >-! move (menu->current - menu->top + menu->offset, 2); >- else if (option (OPTBRAILLEFRIENDLY)) >- move (menu->current - menu->top + menu->offset, 0); >- else >---- 878,884 ---- >- >- >- if (option (OPTARROWCURSOR)) >-! move (menu->current - menu->top + menu->offset, SidebarWidth + 2); >- else if (option (OPTBRAILLEFRIENDLY)) >- move (menu->current - menu->top + menu->offset, 0); >- else >-*** mutt-1.5.20-orig/mutt_curses.h 2008-11-11 13:55:47.000000000 -0600 >---- mutt-1.5.20-patched/mutt_curses.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 64,69 **** >---- 64,70 ---- >- #undef lines >- #endif /* lines */ >- >-+ #define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol() >- #define CLEARLINE(x) move(x,0), clrtoeol() >- #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x) >- #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0) >-*************** >-*** 126,131 **** >---- 127,134 ---- >- MT_COLOR_BOLD, >- MT_COLOR_UNDERLINE, >- MT_COLOR_INDEX, >-+ MT_COLOR_NEW, >-+ MT_COLOR_FLAGGED, >- MT_COLOR_MAX >- }; >- >-*** mutt-1.5.20-orig/mutt.h 2009-06-12 17:15:42.000000000 -0500 >---- mutt-1.5.20-patched/mutt.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 418,423 **** >---- 418,425 ---- >- OPTSAVEEMPTY, >- OPTSAVENAME, >- OPTSCORE, >-+ OPTSIDEBAR, >-+ OPTSIDEBARSORT, >- OPTSIGDASHES, >- OPTSIGONTOP, >- OPTSORTRE, >-*************** >-*** 854,859 **** >---- 856,862 ---- >- { >- char *path; >- FILE *fp; >-+ time_t atime; >- time_t mtime; >- off_t size; >- off_t vsize; >-*************** >-*** 888,893 **** >---- 891,897 ---- >- unsigned int quiet : 1; /* inhibit status messages? */ >- unsigned int collapsed : 1; /* are all threads collapsed? */ >- unsigned int closing : 1; /* mailbox is being closed */ >-+ unsigned int peekonly : 1; /* just taking a glance, revert atime */ >- >- /* driver hooks */ >- void *data; /* driver specific data */ >-*** mutt-1.5.20-orig/muttlib.c 2009-05-18 19:11:35.000000000 -0500 >---- mutt-1.5.20-patched/muttlib.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 1232,1237 **** >---- 1232,1239 ---- >- pl = pw = 1; >- >- /* see if there's room to add content, else ignore */ >-+ if ( DrawFullLine ) >-+ { >- if ((col < COLS && wlen < destlen) || soft) >- { >- int pad; >-*************** >-*** 1274,1279 **** >---- 1276,1327 ---- >- col += wid; >- src += pl; >- } >-+ } >-+ else >-+ { >-+ if ((col < COLS-SidebarWidth && wlen < destlen) || soft) >-+ { >-+ int pad; >-+ >-+ /* get contents after padding */ >-+ mutt_FormatString (buf, sizeof (buf), 0, src + pl, callback, data, flags); >-+ len = mutt_strlen (buf); >-+ wid = mutt_strwidth (buf); >-+ >-+ /* try to consume as many columns as we can, if we don't have >-+ * memory for that, use as much memory as possible */ >-+ pad = (COLS - SidebarWidth - col - wid) / pw; >-+ if (pad > 0 && wlen + (pad * pl) + len > destlen) >-+ pad = ((signed)(destlen - wlen - len)) / pl; >-+ if (pad > 0) >-+ { >-+ while (pad--) >-+ { >-+ memcpy (wptr, src, pl); >-+ wptr += pl; >-+ wlen += pl; >-+ col += pw; >-+ } >-+ } >-+ else if (soft && pad < 0) >-+ { >-+ /* \0-terminate dest for length computation in mutt_wstr_trunc() */ >-+ *wptr = 0; >-+ /* make sure right part is at most as wide as display */ >-+ len = mutt_wstr_trunc (buf, destlen, COLS, &wid); >-+ /* truncate left so that right part fits completely in */ >-+ wlen = mutt_wstr_trunc (dest, destlen - len, col + pad, &col); >-+ wptr = dest + wlen; >-+ } >-+ if (len + wlen > destlen) >-+ len = mutt_wstr_trunc (buf, destlen - wlen, COLS - SidebarWidth - col, NULL); >-+ memcpy (wptr, buf, len); >-+ wptr += len; >-+ wlen += len; >-+ col += wid; >-+ src += pl; >-+ } >-+ } >- break; /* skip rest of input */ >- } >- else if (ch == '|') >-*** mutt-1.5.20-orig/mx.c 2009-06-10 23:29:41.000000000 -0500 >---- mutt-1.5.20-patched/mx.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 581,586 **** >---- 581,587 ---- >- * M_APPEND open mailbox for appending >- * M_READONLY open mailbox in read-only mode >- * M_QUIET only print error messages >-+ * M_PEEK revert atime where applicable >- * ctx if non-null, context struct to use >++ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, >++ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, >++ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, >++ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, >++ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, >+ { NULL, 0, NULL } >+ }; >+ >+diff -uNp -r mutt-1.5.22.orig/globals.h mutt-1.5.22/globals.h >+--- mutt-1.5.22.orig/globals.h Sat Dec 3 19:10:04 2011 >++++ mutt-1.5.22/globals.h Fri Oct 18 10:18:45 2013 >+@@ -117,6 +117,7 @@ WHERE short SearchContext; >+ WHERE char *SendCharset; >+ WHERE char *Sendmail; >+ WHERE char *Shell; >++WHERE char *SidebarDelim; >+ WHERE char *Signature; >+ WHERE char *SimpleSearch; >+ #if USE_SMTP >+@@ -208,6 +209,9 @@ WHERE short ScoreThresholdDelete; >+ WHERE short ScoreThresholdRead; >+ WHERE short ScoreThresholdFlag; >+ >++WHERE struct buffy_t *CurBuffy INITVAL(0); >++WHERE short DrawFullLine INITVAL(0); >++WHERE short SidebarWidth; >+ #ifdef USE_IMAP >+ WHERE short ImapKeepalive; >+ WHERE short ImapPipelineDepth; >+diff -uNp -r mutt-1.5.22.orig/imap/command.c mutt-1.5.22/imap/command.c >+--- mutt-1.5.22.orig/imap/command.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/imap/command.c Fri Oct 18 10:18:45 2013 >+@@ -1012,6 +1012,13 @@ static void cmd_parse_status (IMAP_DATA* idata, char* >+ opened */ >+ status->uidnext = oldun; >+ >++ /* Added to make the sidebar show the correct numbers */ >++ if (status->messages) >++ { >++ inc->msgcount = status->messages; >++ inc->msg_unread = status->unseen; >++ } >++ >+ FREE (&value); >+ return; >+ } >+diff -uNp -r mutt-1.5.22.orig/imap/imap.c mutt-1.5.22/imap/imap.c >+--- mutt-1.5.22.orig/imap/imap.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/imap/imap.c Fri Oct 18 10:18:45 2013 >+@@ -1514,7 +1514,7 @@ int imap_buffy_check (int force) >+ >+ imap_munge_mbox_name (munged, sizeof (munged), name); >+ snprintf (command, sizeof (command), >+- "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged); >++ "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)", munged); >+ >+ if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) >+ { >+diff -uNp -r mutt-1.5.22.orig/init.h mutt-1.5.22/init.h >+--- mutt-1.5.22.orig/init.h Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/init.h Fri Oct 18 10:18:45 2013 >+@@ -1966,6 +1966,27 @@ struct option_t MuttVars[] = { >+ ** not used. >+ ** (PGP only) > */ >- CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx) >-*************** >-*** 603,608 **** >---- 604,611 ---- >- ctx->quiet = 1; >- if (flags & M_READONLY) >- ctx->readonly = 1; >-+ if (flags & M_PEEK) >-+ ctx->peekonly = 1; >- >- if (flags & (M_APPEND|M_NEWFOLDER)) >- { >-*************** >-*** 702,710 **** >---- 705,725 ---- >- void mx_fastclose_mailbox (CONTEXT *ctx) >- { >- int i; >-+ #ifndef BUFFY_SIZE >-+ struct utimbuf ut; >-+ #endif >- >- if(!ctx) >- return; >-+ #ifndef BUFFY_SIZE >-+ /* fix up the times so buffy won't get confused */ >-+ if (ctx->peekonly && ctx->path && ctx->mtime > ctx->atime) >-+ { >-+ ut.actime = ctx->atime; >-+ ut.modtime = ctx->mtime; >-+ utime (ctx->path, &ut); >-+ } >-+ #endif >- >- if (ctx->mx_close) >- ctx->mx_close (ctx); >-*** mutt-1.5.20-orig/OPS 2009-05-13 00:01:13.000000000 -0500 >---- mutt-1.5.20-patched/OPS 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 178,180 **** >---- 178,185 ---- >- OP_MAIN_SHOW_LIMIT "show currently active limit pattern" >- OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread" >- OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads" >-+ OP_SIDEBAR_SCROLL_UP "scroll the mailbox pane up 1 page" >-+ OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page" >-+ OP_SIDEBAR_NEXT "go down to next mailbox" >-+ OP_SIDEBAR_PREV "go to previous mailbox" >-+ OP_SIDEBAR_OPEN "open hilighted mailbox" >---- orig/pager.c.orig 2010-09-18 13:23:19.000000000 +0200 >-+++ new/pager.c 2010-09-18 14:03:08.000000000 +0200 >++ {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, "|"}, >++ /* >++ ** .pp >++ ** This specifies the delimiter between the sidebar (if visible) and >++ ** other screens. >++ */ >++ { "sidebar_visible", DT_BOOL, R_BOTH, OPTSIDEBAR, 0 }, >++ /* >++ ** .pp >++ ** This specifies whether or not to show sidebar (left-side list of folders). >++ */ >++ { "sidebar_sort", DT_BOOL, R_BOTH, OPTSIDEBARSORT, 0 }, >++ /* >++ ** .pp >++ ** This specifies whether or not to sort the sidebar alphabetically. >++ */ >++ { "sidebar_width", DT_NUM, R_BOTH, UL &SidebarWidth, 0 }, >++ /* >++ ** .pp >++ ** The width of the sidebar. >++ */ >+ { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0}, >+ /* >+ ** .pp >+diff -uNp -r mutt-1.5.22.orig/mailbox.h mutt-1.5.22/mailbox.h >+--- mutt-1.5.22.orig/mailbox.h Sun Feb 21 22:10:41 2010 >++++ mutt-1.5.22/mailbox.h Fri Oct 18 10:18:45 2013 >+@@ -27,6 +27,7 @@ >+ #define M_NEWFOLDER (1<<4) /* create a new folder - same as M_APPEND, but uses >+ * safe_fopen() for mbox-style folders. >+ */ >++#define M_PEEK (1<<5) /* revert atime back after taking a look (if applicable) */ >+ >+ /* mx_open_new_message() */ >+ #define M_ADD_FROM 1 /* add a From_ line */ >+diff -uNp -r mutt-1.5.22.orig/mbox.c mutt-1.5.22/mbox.c >+--- mutt-1.5.22.orig/mbox.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/mbox.c Fri Oct 18 10:18:45 2013 >+@@ -100,6 +100,7 @@ int mmdf_parse_mailbox (CONTEXT *ctx) >+ mutt_perror (ctx->path); >+ return (-1); >+ } >++ ctx->atime = sb.st_atime; >+ ctx->mtime = sb.st_mtime; >+ ctx->size = sb.st_size; >+ >+@@ -251,6 +252,7 @@ int mbox_parse_mailbox (CONTEXT *ctx) >+ >+ ctx->size = sb.st_size; >+ ctx->mtime = sb.st_mtime; >++ ctx->atime = sb.st_atime; >+ >+ #ifdef NFS_ATTRIBUTE_HACK >+ if (sb.st_mtime > sb.st_atime) >+diff -uNp -r mutt-1.5.22.orig/menu.c mutt-1.5.22/menu.c >+--- mutt-1.5.22.orig/menu.c Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/menu.c Fri Oct 18 10:18:45 2013 >+@@ -24,6 +24,7 @@ >+ #include "mutt_curses.h" >+ #include "mutt_menu.h" >+ #include "mbyte.h" >++#include "sidebar.h" >+ >+ extern size_t UngetCount; >+ >+@@ -186,7 +187,7 @@ static void menu_pad_string (char *s, size_t n) >+ { >+ char *scratch = safe_strdup (s); >+ int shift = option (OPTARROWCURSOR) ? 3 : 0; >+- int cols = COLS - shift; >++ int cols = COLS - shift - SidebarWidth; >+ >+ mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1); >+ s[n - 1] = 0; >+@@ -239,6 +240,7 @@ void menu_redraw_index (MUTTMENU *menu) >+ int do_color; >+ int attr; >+ >++ draw_sidebar(1); >+ for (i = menu->top; i < menu->top + menu->pagelen; i++) >+ { >+ if (i < menu->max) >+@@ -249,7 +251,7 @@ void menu_redraw_index (MUTTMENU *menu) >+ menu_pad_string (buf, sizeof (buf)); >+ >+ ATTRSET(attr); >+- move(i - menu->top + menu->offset, 0); >++ move(i - menu->top + menu->offset, SidebarWidth); >+ do_color = 1; >+ >+ if (i == menu->current) >+@@ -272,7 +274,7 @@ void menu_redraw_index (MUTTMENU *menu) >+ else >+ { >+ NORMAL_COLOR; >+- CLEARLINE(i - menu->top + menu->offset); >++ CLEARLINE_WIN(i - menu->top + menu->offset); >+ } >+ } >+ NORMAL_COLOR; >+@@ -289,7 +291,7 @@ void menu_redraw_motion (MUTTMENU *menu) >+ return; >+ } >+ >+- move (menu->oldcurrent + menu->offset - menu->top, 0); >++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth); >+ ATTRSET(menu->color (menu->oldcurrent)); >+ >+ if (option (OPTARROWCURSOR)) >+@@ -301,13 +303,13 @@ void menu_redraw_motion (MUTTMENU *menu) >+ { >+ menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); >+ menu_pad_string (buf, sizeof (buf)); >+- move (menu->oldcurrent + menu->offset - menu->top, 3); >++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth + 3); >+ print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); >+ } >+ >+ /* now draw it in the new location */ >+ SETCOLOR(MT_COLOR_INDICATOR); >+- mvaddstr(menu->current + menu->offset - menu->top, 0, "->"); >++ mvaddstr(menu->current + menu->offset - menu->top, SidebarWidth, "->"); >+ } >+ else >+ { >+@@ -320,7 +322,7 @@ void menu_redraw_motion (MUTTMENU *menu) >+ menu_make_entry (buf, sizeof (buf), menu, menu->current); >+ menu_pad_string (buf, sizeof (buf)); >+ SETCOLOR(MT_COLOR_INDICATOR); >+- move(menu->current - menu->top + menu->offset, 0); >++ move(menu->current - menu->top + menu->offset, SidebarWidth); >+ print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); >+ } >+ menu->redraw &= REDRAW_STATUS; >+@@ -332,7 +334,7 @@ void menu_redraw_current (MUTTMENU *menu) >+ char buf[LONG_STRING]; >+ int attr = menu->color (menu->current); >+ >+- move (menu->current + menu->offset - menu->top, 0); >++ move (menu->current + menu->offset - menu->top, SidebarWidth); >+ menu_make_entry (buf, sizeof (buf), menu, menu->current); >+ menu_pad_string (buf, sizeof (buf)); >+ >+@@ -872,7 +874,7 @@ int mutt_menuLoop (MUTTMENU *menu) >+ >+ >+ if (option (OPTARROWCURSOR)) >+- move (menu->current - menu->top + menu->offset, 2); >++ move (menu->current - menu->top + menu->offset, SidebarWidth + 2); >+ else if (option (OPTBRAILLEFRIENDLY)) >+ move (menu->current - menu->top + menu->offset, 0); >+ else >+diff -uNp -r mutt-1.5.22.orig/mh.c mutt-1.5.22/mh.c >+--- mutt-1.5.22.orig/mh.c Mon Apr 22 07:14:53 2013 >++++ mutt-1.5.22/mh.c Fri Oct 18 10:18:45 2013 >+@@ -295,6 +295,28 @@ void mh_buffy(BUFFY *b) >+ mhs_free_sequences (&mhs); >+ } >+ >++void mh_buffy_update (const char *path, int *msgcount, int *msg_unread, int *msg_flagged) >++{ >++ int i; >++ struct mh_sequences mhs; >++ memset (&mhs, 0, sizeof (mhs)); >++ >++ if (mh_read_sequences (&mhs, path) < 0) >++ return; >++ >++ msgcount = 0; >++ msg_unread = 0; >++ msg_flagged = 0; >++ for (i = 0; i <= mhs.max; i++) >++ msgcount++; >++ if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN) { >++ msg_unread++; >++ } >++ if (mhs_check (&mhs, i) & MH_SEQ_FLAGGED) >++ msg_flagged++; >++ mhs_free_sequences (&mhs); >++} >++ >+ static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt) >+ { >+ int fd; >+diff -uNp -r mutt-1.5.22.orig/mutt.h mutt-1.5.22/mutt.h >+--- mutt-1.5.22.orig/mutt.h Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/mutt.h Fri Oct 18 10:18:45 2013 >+@@ -420,6 +420,8 @@ enum >+ OPTSAVEEMPTY, >+ OPTSAVENAME, >+ OPTSCORE, >++ OPTSIDEBAR, >++ OPTSIDEBARSORT, >+ OPTSIGDASHES, >+ OPTSIGONTOP, >+ OPTSORTRE, >+@@ -860,6 +862,7 @@ typedef struct _context >+ { >+ char *path; >+ FILE *fp; >++ time_t atime; >+ time_t mtime; >+ off_t size; >+ off_t vsize; >+@@ -894,6 +897,7 @@ typedef struct _context >+ unsigned int quiet : 1; /* inhibit status messages? */ >+ unsigned int collapsed : 1; /* are all threads collapsed? */ >+ unsigned int closing : 1; /* mailbox is being closed */ >++ unsigned int peekonly : 1; /* just taking a glance, revert atime */ >+ >+ /* driver hooks */ >+ void *data; /* driver specific data */ >+diff -uNp -r mutt-1.5.22.orig/mutt_curses.h mutt-1.5.22/mutt_curses.h >+--- mutt-1.5.22.orig/mutt_curses.h Tue Jan 15 07:37:15 2013 >++++ mutt-1.5.22/mutt_curses.h Fri Oct 18 10:22:32 2013 >+@@ -64,6 +64,7 @@ >+ #undef lines >+ #endif /* lines */ >+ >++#define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol() >+ #define CLEARLINE(x) move(x,0), clrtoeol() >+ #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x) >+ #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0) >+@@ -120,6 +121,8 @@ enum >+ MT_COLOR_BOLD, >+ MT_COLOR_UNDERLINE, >+ MT_COLOR_INDEX, >++ MT_COLOR_NEW, >++ MT_COLOR_FLAGGED, >+ MT_COLOR_MAX >+ }; >+ >+diff -uNp -r mutt-1.5.22.orig/muttlib.c mutt-1.5.22/muttlib.c >+--- mutt-1.5.22.orig/muttlib.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/muttlib.c Fri Oct 18 10:18:45 2013 >+@@ -1286,6 +1286,8 @@ void mutt_FormatString (char *dest, /* output buffer >+ pl = pw = 1; >+ >+ /* see if there's room to add content, else ignore */ >++ if ( DrawFullLine ) >++ { >+ if ((col < COLS && wlen < destlen) || soft) >+ { >+ int pad; >+@@ -1329,6 +1331,52 @@ void mutt_FormatString (char *dest, /* output buffer >+ col += wid; >+ src += pl; >+ } >++ } >++ else >++ { >++ if ((col < COLS-SidebarWidth && wlen < destlen) || soft) >++ { >++ int pad; >++ >++ /* get contents after padding */ >++ mutt_FormatString (buf, sizeof (buf), 0, src + pl, callback, data, flags); >++ len = mutt_strlen (buf); >++ wid = mutt_strwidth (buf); >++ >++ /* try to consume as many columns as we can, if we don't have >++ * memory for that, use as much memory as possible */ >++ pad = (COLS - SidebarWidth - col - wid) / pw; >++ if (pad > 0 && wlen + (pad * pl) + len > destlen) >++ pad = ((signed)(destlen - wlen - len)) / pl; >++ if (pad > 0) >++ { >++ while (pad--) >++ { >++ memcpy (wptr, src, pl); >++ wptr += pl; >++ wlen += pl; >++ col += pw; >++ } >++ } >++ else if (soft && pad < 0) >++ { >++ /* \0-terminate dest for length computation in mutt_wstr_trunc() */ >++ *wptr = 0; >++ /* make sure right part is at most as wide as display */ >++ len = mutt_wstr_trunc (buf, destlen, COLS, &wid); >++ /* truncate left so that right part fits completely in */ >++ wlen = mutt_wstr_trunc (dest, destlen - len, col + pad, &col); >++ wptr = dest + wlen; >++ } >++ if (len + wlen > destlen) >++ len = mutt_wstr_trunc (buf, destlen - wlen, COLS - SidebarWidth - col, NULL); >++ memcpy (wptr, buf, len); >++ wptr += len; >++ wlen += len; >++ col += wid; >++ src += pl; >++ } >++ } >+ break; /* skip rest of input */ >+ } >+ else if (ch == '|') >+diff -uNp -r mutt-1.5.22.orig/mx.c mutt-1.5.22/mx.c >+--- mutt-1.5.22.orig/mx.c Fri Oct 18 05:48:24 2013 >++++ mutt-1.5.22/mx.c Fri Oct 18 10:18:45 2013 >+@@ -580,6 +580,7 @@ static int mx_open_mailbox_append (CONTEXT *ctx, int f >+ * M_APPEND open mailbox for appending >+ * M_READONLY open mailbox in read-only mode >+ * M_QUIET only print error messages >++ * M_PEEK revert atime where applicable >+ * ctx if non-null, context struct to use >+ */ >+ CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx) >+@@ -602,6 +603,8 @@ CONTEXT *mx_open_mailbox (const char *path, int flags, >+ ctx->quiet = 1; >+ if (flags & M_READONLY) >+ ctx->readonly = 1; >++ if (flags & M_PEEK) >++ ctx->peekonly = 1; >+ >+ if (flags & (M_APPEND|M_NEWFOLDER)) >+ { >+@@ -701,9 +704,21 @@ CONTEXT *mx_open_mailbox (const char *path, int flags, >+ void mx_fastclose_mailbox (CONTEXT *ctx) >+ { >+ int i; >++#ifndef BUFFY_SIZE >++ struct utimbuf ut; >++#endif >+ >+ if(!ctx) >+ return; >++#ifndef BUFFY_SIZE >++ /* fix up the times so buffy won't get confused */ >++ if (ctx->peekonly && ctx->path && ctx->mtime > ctx->atime) >++ { >++ ut.actime = ctx->atime; >++ ut.modtime = ctx->mtime; >++ utime (ctx->path, &ut); >++ } >++#endif >+ >+ /* never announce that a mailbox we've just left has new mail. #3290 >+ * XXX: really belongs in mx_close_mailbox, but this is a nice hook point */ >+diff -uNp -r mutt-1.5.22.orig/mx.h mutt-1.5.22/mx.h >+--- mutt-1.5.22.orig/mx.h Mon Apr 22 07:14:53 2013 >++++ mutt-1.5.22/mx.h Fri Oct 18 10:18:45 2013 >+@@ -57,6 +57,7 @@ void mbox_reset_atime (CONTEXT *, struct stat *); >+ int mh_read_dir (CONTEXT *, const char *); >+ int mh_sync_mailbox (CONTEXT *, int *); >+ int mh_check_mailbox (CONTEXT *, int *); >++void mh_buffy_update (const char *, int *, int *, int *); >+ int mh_check_empty (const char *); >+ >+ int maildir_read_dir (CONTEXT *); >+diff -uNp -r mutt-1.5.22.orig/pager.c mutt-1.5.22/pager.c >+--- mutt-1.5.22.orig/pager.c Mon Apr 22 07:17:32 2013 >++++ mutt-1.5.22/pager.c Fri Oct 18 10:18:45 2013 > @@ -29,6 +29,7 @@ > #include "pager.h" > #include "attach.h" >@@ -944,15 +914,15 @@ > > #include "mutt_crypt.h" > >-@@ -1104,6 +1105,7 @@ >- if (check_attachment_marker ((char *)buf) == 0) >- wrap_cols = COLS; >- >+@@ -1095,6 +1096,7 @@ static int format_line (struct line_t **lineInfo, int >+ wchar_t wc; >+ mbstate_t mbstate; >+ int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap); > + wrap_cols -= SidebarWidth; >- /* FIXME: this should come from lineInfo */ >- memset(&mbstate, 0, sizeof(mbstate)); > >-@@ -1778,7 +1780,7 @@ >+ if (check_attachment_marker ((char *)buf) == 0) >+ wrap_cols = COLS; >+@@ -1746,7 +1748,7 @@ mutt_pager (const char *banner, const char *fname, int > if ((redraw & REDRAW_BODY) || topline != oldtopline) > { > do { >@@ -961,7 +931,7 @@ > curline = oldtopline = topline; > lines = 0; > force_redraw = 0; >-@@ -1791,6 +1793,7 @@ >+@@ -1759,6 +1761,7 @@ mutt_pager (const char *banner, const char *fname, int > &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) > lines++; > curline++; >@@ -969,20 +939,15 @@ > } > last_offset = lineInfo[curline].offset; > } while (force_redraw); >-@@ -1804,6 +1807,7 @@ >+@@ -1771,6 +1774,7 @@ mutt_pager (const char *banner, const char *fname, int > addch ('~'); > addch ('\n'); > lines++; > + move(lines + bodyoffset, SidebarWidth); > } >- /* We are going to update the pager status bar, so it isn't >- * necessary to reset to normal color now. */ >-@@ -1827,21 +1831,21 @@ >- /* print out the pager status bar */ >- SETCOLOR (MT_COLOR_STATUS); >- BKGDSET (MT_COLOR_STATUS); >-- CLEARLINE (statusoffset); >-+ CLEARLINE_WIN (statusoffset); >+ NORMAL_COLOR; >+ >+@@ -1799,17 +1803,17 @@ mutt_pager (const char *banner, const char *fname, int > > if (IsHeader (extra) || IsMsgAttach (extra)) > { >@@ -1001,9 +966,9 @@ > - mutt_paddstr (COLS, bn); > + mutt_paddstr (COLS-SidebarWidth, bn); > } >- BKGDSET (MT_COLOR_NORMAL); >- SETCOLOR (MT_COLOR_NORMAL); >-@@ -1852,18 +1856,23 @@ >+ NORMAL_COLOR; >+ } >+@@ -1819,16 +1823,21 @@ mutt_pager (const char *banner, const char *fname, int > /* redraw the pager_index indicator, because the > * flags for this message might have changed. */ > menu_redraw_current (index); >@@ -1015,11 +980,9 @@ > - move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0); > + move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), SidebarWidth); > SETCOLOR (MT_COLOR_STATUS); >- BKGDSET (MT_COLOR_STATUS); > - mutt_paddstr (COLS, buffer); > + mutt_paddstr (COLS-SidebarWidth, buffer); >- SETCOLOR (MT_COLOR_NORMAL); >- BKGDSET (MT_COLOR_NORMAL); >+ NORMAL_COLOR; > } > > + /* if we're not using the index, update every time */ >@@ -1029,405 +992,437 @@ > redraw = 0; > > if (option(OPTBRAILLEFRIENDLY)) { >-@@ -2852,6 +2861,13 @@ >+@@ -2762,6 +2771,13 @@ search_next: >+ case OP_WHAT_KEY: > mutt_what_key (); > break; >- >++ > + case OP_SIDEBAR_SCROLL_UP: > + case OP_SIDEBAR_SCROLL_DOWN: > + case OP_SIDEBAR_NEXT: > + case OP_SIDEBAR_PREV: > + scroll_sidebar(ch, MENU_PAGER); > + break; >-+ >+ > default: > ch = -1; >- break; >-*** mutt-1.5.20-orig/PATCHES 2008-11-11 13:55:46.000000000 -0600 >---- mutt-1.5.20-patched/PATCHES 2009-06-19 22:20:31.000000000 -0500 >-*************** >-*** 0 **** >---- 1 ---- >-+ patch-1.5.20.sidebar.20090619.txt >-*** mutt-1.5.20-orig/sidebar.c 1969-12-31 18:00:00.000000000 -0600 >---- mutt-1.5.20-patched/sidebar.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 0 **** >---- 1,333 ---- >-+ /* >-+ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> >-+ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> >-+ * >-+ * This program is free software; you can redistribute it and/or modify >-+ * it under the terms of the GNU General Public License as published by >-+ * the Free Software Foundation; either version 2 of the License, or >-+ * (at your option) any later version. >-+ * >-+ * This program is distributed in the hope that it will be useful, >-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >-+ * GNU General Public License for more details. >-+ * >-+ * You should have received a copy of the GNU General Public License >-+ * along with this program; if not, write to the Free Software >-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >-+ */ >-+ >-+ >-+ #if HAVE_CONFIG_H >-+ # include "config.h" >-+ #endif >-+ >-+ #include "mutt.h" >-+ #include "mutt_menu.h" >-+ #include "mutt_curses.h" >-+ #include "sidebar.h" >-+ #include "buffy.h" >-+ #include <libgen.h> >-+ #include "keymap.h" >-+ #include <stdbool.h> >-+ >-+ /*BUFFY *CurBuffy = 0;*/ >-+ static BUFFY *TopBuffy = 0; >-+ static BUFFY *BottomBuffy = 0; >-+ static int known_lines = 0; >-+ >-+ static int quick_log10(int n) >-+ { >-+ char string[32]; >-+ sprintf(string, "%d", n); >-+ return strlen(string); >-+ } >-+ >-+ void calc_boundaries (int menu) >-+ { >-+ BUFFY *tmp = Incoming; >-+ >-+ if ( known_lines != LINES ) { >-+ TopBuffy = BottomBuffy = 0; >-+ known_lines = LINES; >-+ } >-+ for ( ; tmp->next != 0; tmp = tmp->next ) >-+ tmp->next->prev = tmp; >-+ >-+ if ( TopBuffy == 0 && BottomBuffy == 0 ) >-+ TopBuffy = Incoming; >-+ if ( BottomBuffy == 0 ) { >-+ int count = LINES - 2 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); >-+ BottomBuffy = TopBuffy; >-+ while ( --count && BottomBuffy->next ) >-+ BottomBuffy = BottomBuffy->next; >-+ } >-+ else if ( TopBuffy == CurBuffy->next ) { >-+ int count = LINES - 2 - (menu != MENU_PAGER); >-+ BottomBuffy = CurBuffy; >-+ tmp = BottomBuffy; >-+ while ( --count && tmp->prev) >-+ tmp = tmp->prev; >-+ TopBuffy = tmp; >-+ } >-+ else if ( BottomBuffy == CurBuffy->prev ) { >-+ int count = LINES - 2 - (menu != MENU_PAGER); >-+ TopBuffy = CurBuffy; >-+ tmp = TopBuffy; >-+ while ( --count && tmp->next ) >-+ tmp = tmp->next; >-+ BottomBuffy = tmp; >-+ } >-+ } >-+ >-+ char *make_sidebar_entry(char *box, int size, int new, int flagged) >-+ { >-+ static char *entry = 0; >-+ char *c; >-+ int i = 0; >-+ int delim_len = strlen(SidebarDelim); >-+ >-+ c = realloc(entry, SidebarWidth - delim_len + 2); >-+ if ( c ) entry = c; >-+ entry[SidebarWidth - delim_len + 1] = 0; >-+ for (; i < SidebarWidth - delim_len + 1; entry[i++] = ' ' ); >-+ i = strlen(box); >-+ strncpy( entry, box, i < (SidebarWidth - delim_len + 1) ? i : (SidebarWidth - delim_len + 1) ); >-+ >-+ if (size == -1) >-+ sprintf(entry + SidebarWidth - delim_len - 3, "?"); >-+ else if ( new ) { >-+ if (flagged > 0) { >-+ sprintf( >-+ entry + SidebarWidth - delim_len - 5 - quick_log10(size) - quick_log10(new) - quick_log10(flagged), >-+ "% d(%d)[%d]", size, new, flagged); >-+ } else { >-+ sprintf( >-+ entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(new), >-+ "% d(%d)", size, new); >-+ } >-+ } else if (flagged > 0) { >-+ sprintf( entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(flagged), "% d[%d]", size, flagged); >-+ } else { >-+ sprintf( entry + SidebarWidth - delim_len - 1 - quick_log10(size), "% d", size); >-+ } >-+ return entry; >-+ } >-+ >-+ void set_curbuffy(char buf[LONG_STRING]) >-+ { >-+ BUFFY* tmp = CurBuffy = Incoming; >-+ >-+ if (!Incoming) >-+ return; >-+ >-+ while(1) { >-+ if(!strcmp(tmp->path, buf)) { >-+ CurBuffy = tmp; >-+ break; >-+ } >-+ >-+ if(tmp->next) >-+ tmp = tmp->next; >-+ else >-+ break; >-+ } >-+ } >-+ >-+ int draw_sidebar(int menu) { >-+ >-+ int lines = option(OPTHELP) ? 1 : 0; >-+ BUFFY *tmp; >-+ #ifndef USE_SLANG_CURSES >-+ attr_t attrs; >-+ #endif >-+ short delim_len = strlen(SidebarDelim); >-+ short color_pair; >-+ >-+ static bool initialized = false; >-+ static int prev_show_value; >-+ static short saveSidebarWidth; >-+ >-+ /* initialize first time */ >-+ if(!initialized) { >-+ prev_show_value = option(OPTSIDEBAR); >-+ saveSidebarWidth = SidebarWidth; >-+ if(!option(OPTSIDEBAR)) SidebarWidth = 0; >-+ initialized = true; >-+ } >-+ >-+ /* save or restore the value SidebarWidth */ >-+ if(prev_show_value != option(OPTSIDEBAR)) { >-+ if(prev_show_value && !option(OPTSIDEBAR)) { >-+ saveSidebarWidth = SidebarWidth; >-+ SidebarWidth = 0; >-+ } else if(!prev_show_value && option(OPTSIDEBAR)) { >-+ SidebarWidth = saveSidebarWidth; >-+ } >-+ prev_show_value = option(OPTSIDEBAR); >-+ } >-+ >-+ >-+ // if ( SidebarWidth == 0 ) return 0; >-+ if (SidebarWidth > 0 && option (OPTSIDEBAR) >-+ && delim_len >= SidebarWidth) { >-+ unset_option (OPTSIDEBAR); >-+ /* saveSidebarWidth = SidebarWidth; */ >-+ if (saveSidebarWidth > delim_len) { >-+ SidebarWidth = saveSidebarWidth; >-+ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar.")); >-+ sleep (2); >+diff -uNp -r mutt-1.5.22.orig/sidebar.c mutt-1.5.22/sidebar.c >+--- mutt-1.5.22.orig/sidebar.c Thu Jan 1 01:00:00 1970 >++++ mutt-1.5.22/sidebar.c Fri Oct 18 10:18:45 2013 >+@@ -0,0 +1,333 @@ >++/* >++ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> >++ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> >++ * >++ * This program is free software; you can redistribute it and/or modify >++ * it under the terms of the GNU General Public License as published by >++ * the Free Software Foundation; either version 2 of the License, or >++ * (at your option) any later version. >++ * >++ * This program is distributed in the hope that it will be useful, >++ * but WITHOUT ANY WARRANTY; without even the implied warranty of >++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >++ * GNU General Public License for more details. >++ * >++ * You should have received a copy of the GNU General Public License >++ * along with this program; if not, write to the Free Software >++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >++ */ >++ >++ >++#if HAVE_CONFIG_H >++# include "config.h" >++#endif >++ >++#include "mutt.h" >++#include "mutt_menu.h" >++#include "mutt_curses.h" >++#include "sidebar.h" >++#include "buffy.h" >++#include <libgen.h> >++#include "keymap.h" >++#include <stdbool.h> >++ >++/*BUFFY *CurBuffy = 0;*/ >++static BUFFY *TopBuffy = 0; >++static BUFFY *BottomBuffy = 0; >++static int known_lines = 0; >++ >++static int quick_log10(int n) >++{ >++ char string[32]; >++ sprintf(string, "%d", n); >++ return strlen(string); >++} >++ >++void calc_boundaries (int menu) >++{ >++ BUFFY *tmp = Incoming; >++ >++ if ( known_lines != LINES ) { >++ TopBuffy = BottomBuffy = 0; >++ known_lines = LINES; >++ } >++ for ( ; tmp->next != 0; tmp = tmp->next ) >++ tmp->next->prev = tmp; >++ >++ if ( TopBuffy == 0 && BottomBuffy == 0 ) >++ TopBuffy = Incoming; >++ if ( BottomBuffy == 0 ) { >++ int count = LINES - 2 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); >++ BottomBuffy = TopBuffy; >++ while ( --count && BottomBuffy->next ) >++ BottomBuffy = BottomBuffy->next; >++ } >++ else if ( TopBuffy == CurBuffy->next ) { >++ int count = LINES - 2 - (menu != MENU_PAGER); >++ BottomBuffy = CurBuffy; >++ tmp = BottomBuffy; >++ while ( --count && tmp->prev) >++ tmp = tmp->prev; >++ TopBuffy = tmp; >++ } >++ else if ( BottomBuffy == CurBuffy->prev ) { >++ int count = LINES - 2 - (menu != MENU_PAGER); >++ TopBuffy = CurBuffy; >++ tmp = TopBuffy; >++ while ( --count && tmp->next ) >++ tmp = tmp->next; >++ BottomBuffy = tmp; >++ } >++} >++ >++char *make_sidebar_entry(char *box, int size, int new, int flagged) >++{ >++ static char *entry = 0; >++ char *c; >++ int i = 0; >++ int delim_len = strlen(SidebarDelim); >++ >++ c = realloc(entry, SidebarWidth - delim_len + 2); >++ if ( c ) entry = c; >++ entry[SidebarWidth - delim_len + 1] = 0; >++ for (; i < SidebarWidth - delim_len + 1; entry[i++] = ' ' ); >++ i = strlen(box); >++ strncpy( entry, box, i < (SidebarWidth - delim_len + 1) ? i : (SidebarWidth - delim_len + 1) ); >++ >++ if (size == -1) >++ sprintf(entry + SidebarWidth - delim_len - 3, "?"); >++ else if ( new ) { >++ if (flagged > 0) { >++ sprintf( >++ entry + SidebarWidth - delim_len - 5 - quick_log10(size) - quick_log10(new) - quick_log10(flagged), >++ "% d(%d)[%d]", size, new, flagged); > + } else { >-+ SidebarWidth = 0; >-+ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar. Please set your sidebar_width to a sane value.")); >-+ sleep (4); /* the advise to set a sane value should be seen long enough */ >++ sprintf( >++ entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(new), >++ "% d(%d)", size, new); > + } >-+ saveSidebarWidth = 0; >-+ return (0); >++ } else if (flagged > 0) { >++ sprintf( entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(flagged), "% d[%d]", size, flagged); >++ } else { >++ sprintf( entry + SidebarWidth - delim_len - 1 - quick_log10(size), "% d", size); > + } >-+ >-+ if ( SidebarWidth == 0 || !option(OPTSIDEBAR)) { >-+ if (SidebarWidth > 0) { >-+ saveSidebarWidth = SidebarWidth; >-+ SidebarWidth = 0; >-+ } >-+ unset_option(OPTSIDEBAR); >-+ return 0; >-+ } >-+ >-+ /* get attributes for divider */ >-+ SETCOLOR(MT_COLOR_STATUS); >-+ #ifndef USE_SLANG_CURSES >-+ attr_get(&attrs, &color_pair, 0); >-+ #else >-+ color_pair = attr_get(); >-+ #endif >-+ SETCOLOR(MT_COLOR_NORMAL); >-+ >-+ /* draw the divider */ >-+ >-+ for ( ; lines < LINES-1-(menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { >-+ move(lines, SidebarWidth - delim_len); >-+ addstr(NONULL(SidebarDelim)); >-+ #ifndef USE_SLANG_CURSES >-+ mvchgat(lines, SidebarWidth - delim_len, delim_len, 0, color_pair, NULL); >-+ #endif >-+ } >-+ >-+ if ( Incoming == 0 ) return 0; >-+ lines = option(OPTHELP) ? 1 : 0; /* go back to the top */ >-+ >-+ if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) >-+ calc_boundaries(menu); >-+ if ( CurBuffy == 0 ) CurBuffy = Incoming; >-+ >-+ tmp = TopBuffy; >-+ >-+ SETCOLOR(MT_COLOR_NORMAL); >-+ >-+ for ( ; tmp && lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); tmp = tmp->next ) { >-+ if ( tmp == CurBuffy ) >-+ SETCOLOR(MT_COLOR_INDICATOR); >-+ else if ( tmp->msg_unread > 0 ) >-+ SETCOLOR(MT_COLOR_NEW); >-+ else if ( tmp->msg_flagged > 0 ) >-+ SETCOLOR(MT_COLOR_FLAGGED); >-+ else >-+ SETCOLOR(MT_COLOR_NORMAL); >-+ >-+ move( lines, 0 ); >-+ if ( Context && !strcmp( tmp->path, Context->path ) ) { >-+ tmp->msg_unread = Context->unread; >-+ tmp->msgcount = Context->msgcount; >-+ tmp->msg_flagged = Context->flagged; >-+ } >-+ // check whether Maildir is a prefix of the current folder's path >-+ short maildir_is_prefix = 0; >-+ if ( (strlen(tmp->path) > strlen(Maildir)) && >-+ (strncmp(Maildir, tmp->path, strlen(Maildir)) == 0) ) >-+ maildir_is_prefix = 1; >-+ // calculate depth of current folder and generate its display name with indented spaces >-+ int sidebar_folder_depth = 0; >-+ char *sidebar_folder_name; >-+ sidebar_folder_name = basename(tmp->path); >-+ if ( maildir_is_prefix ) { >-+ char *tmp_folder_name; >-+ int i; >-+ tmp_folder_name = tmp->path + strlen(Maildir); >-+ for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) { >-+ if (tmp_folder_name[i] == '/') sidebar_folder_depth++; >-+ } >-+ if (sidebar_folder_depth > 0) { >-+ sidebar_folder_name = malloc(strlen(basename(tmp->path)) + sidebar_folder_depth + 1); >-+ for (i=0; i < sidebar_folder_depth; i++) >-+ sidebar_folder_name[i]=' '; >-+ sidebar_folder_name[i]=0; >-+ strncat(sidebar_folder_name, basename(tmp->path), strlen(basename(tmp->path)) + sidebar_folder_depth); >-+ } >-+ } >-+ printw( "%.*s", SidebarWidth - delim_len + 1, >-+ make_sidebar_entry(sidebar_folder_name, tmp->msgcount, >-+ tmp->msg_unread, tmp->msg_flagged)); >-+ if (sidebar_folder_depth > 0) >-+ free(sidebar_folder_name); >-+ lines++; >-+ } >-+ SETCOLOR(MT_COLOR_NORMAL); >-+ for ( ; lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { >-+ int i = 0; >-+ move( lines, 0 ); >-+ for ( ; i < SidebarWidth - delim_len; i++ ) >-+ addch(' '); >-+ } >-+ return 0; >-+ } >-+ >-+ >-+ void set_buffystats(CONTEXT* Context) >-+ { >-+ BUFFY *tmp = Incoming; >-+ while(tmp) { >-+ if(Context && !strcmp(tmp->path, Context->path)) { >-+ tmp->msg_unread = Context->unread; >-+ tmp->msgcount = Context->msgcount; >-+ break; >-+ } >-+ tmp = tmp->next; >++ return entry; >++} >++ >++void set_curbuffy(char buf[LONG_STRING]) >++{ >++ BUFFY* tmp = CurBuffy = Incoming; >++ >++ if (!Incoming) >++ return; >++ >++ while(1) { >++ if(!strcmp(tmp->path, buf)) { >++ CurBuffy = tmp; >++ break; >++ } >++ >++ if(tmp->next) >++ tmp = tmp->next; >++ else >++ break; >++ } >++} >++ >++int draw_sidebar(int menu) { >++ >++ int lines = option(OPTHELP) ? 1 : 0; >++ BUFFY *tmp; >++#ifndef USE_SLANG_CURSES >++ attr_t attrs; >++#endif >++ short delim_len = strlen(SidebarDelim); >++ short color_pair; >++ >++ static bool initialized = false; >++ static int prev_show_value; >++ static short saveSidebarWidth; >++ >++ /* initialize first time */ >++ if(!initialized) { >++ prev_show_value = option(OPTSIDEBAR); >++ saveSidebarWidth = SidebarWidth; >++ if(!option(OPTSIDEBAR)) SidebarWidth = 0; >++ initialized = true; >++ } >++ >++ /* save or restore the value SidebarWidth */ >++ if(prev_show_value != option(OPTSIDEBAR)) { >++ if(prev_show_value && !option(OPTSIDEBAR)) { >++ saveSidebarWidth = SidebarWidth; >++ SidebarWidth = 0; >++ } else if(!prev_show_value && option(OPTSIDEBAR)) { >++ SidebarWidth = saveSidebarWidth; >++ } >++ prev_show_value = option(OPTSIDEBAR); >++ } >++ >++ >++// if ( SidebarWidth == 0 ) return 0; >++ if (SidebarWidth > 0 && option (OPTSIDEBAR) >++ && delim_len >= SidebarWidth) { >++ unset_option (OPTSIDEBAR); >++ /* saveSidebarWidth = SidebarWidth; */ >++ if (saveSidebarWidth > delim_len) { >++ SidebarWidth = saveSidebarWidth; >++ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar.")); >++ sleep (2); >++ } else { >++ SidebarWidth = 0; >++ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar. Please set your sidebar_width to a sane value.")); >++ sleep (4); /* the advise to set a sane value should be seen long enough */ > + } >-+ } >-+ >-+ void scroll_sidebar(int op, int menu) >-+ { >-+ if(!SidebarWidth) return; >-+ if(!CurBuffy) return; >-+ >-+ switch (op) { >-+ case OP_SIDEBAR_NEXT: >-+ if ( CurBuffy->next == NULL ) return; >-+ CurBuffy = CurBuffy->next; >-+ break; >-+ case OP_SIDEBAR_PREV: >-+ if ( CurBuffy->prev == NULL ) return; >-+ CurBuffy = CurBuffy->prev; >-+ break; >-+ case OP_SIDEBAR_SCROLL_UP: >-+ CurBuffy = TopBuffy; >-+ if ( CurBuffy != Incoming ) { >-+ calc_boundaries(menu); >-+ CurBuffy = CurBuffy->prev; >-+ } >-+ break; >-+ case OP_SIDEBAR_SCROLL_DOWN: >-+ CurBuffy = BottomBuffy; >-+ if ( CurBuffy->next ) { >-+ calc_boundaries(menu); >-+ CurBuffy = CurBuffy->next; >-+ } >-+ break; >-+ default: >-+ return; >-+ } >-+ calc_boundaries(menu); >-+ draw_sidebar(menu); >-+ } >-+ >-*** mutt-1.5.20-orig/sidebar.h 1969-12-31 18:00:00.000000000 -0600 >---- mutt-1.5.20-patched/sidebar.h 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 0 **** >---- 1,36 ---- >-+ /* >-+ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> >-+ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> >-+ * >-+ * This program is free software; you can redistribute it and/or modify >-+ * it under the terms of the GNU General Public License as published by >-+ * the Free Software Foundation; either version 2 of the License, or >-+ * (at your option) any later version. >-+ * >-+ * This program is distributed in the hope that it will be useful, >-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >-+ * GNU General Public License for more details. >-+ * >-+ * You should have received a copy of the GNU General Public License >-+ * along with this program; if not, write to the Free Software >-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >-+ */ >-+ >-+ #ifndef SIDEBAR_H >-+ #define SIDEBAR_H >-+ >-+ struct MBOX_LIST { >-+ char *path; >-+ int msgcount; >-+ int new; >-+ } MBLIST; >-+ >-+ /* parameter is whether or not to go to the status line */ >-+ /* used for omitting the last | that covers up the status bar in the index */ >-+ int draw_sidebar(int); >-+ void scroll_sidebar(int, int); >-+ void set_curbuffy(char*); >-+ void set_buffystats(CONTEXT*); >-+ >-+ #endif /* SIDEBAR_H */ >++ saveSidebarWidth = 0; >++ return (0); >++ } >++ >++ if ( SidebarWidth == 0 || !option(OPTSIDEBAR)) { >++ if (SidebarWidth > 0) { >++ saveSidebarWidth = SidebarWidth; >++ SidebarWidth = 0; >++ } >++ unset_option(OPTSIDEBAR); >++ return 0; >++ } >++ >++ /* get attributes for divider */ >++ SETCOLOR(MT_COLOR_STATUS); >++#ifndef USE_SLANG_CURSES >++ attr_get(&attrs, &color_pair, 0); >++#else >++ color_pair = attr_get(); >++#endif >++ SETCOLOR(MT_COLOR_NORMAL); >++ >++ /* draw the divider */ >++ >++ for ( ; lines < LINES-1-(menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { >++ move(lines, SidebarWidth - delim_len); >++ addstr(NONULL(SidebarDelim)); >++#ifndef USE_SLANG_CURSES >++ mvchgat(lines, SidebarWidth - delim_len, delim_len, 0, color_pair, NULL); >++#endif >++ } >++ >++ if ( Incoming == 0 ) return 0; >++ lines = option(OPTHELP) ? 1 : 0; /* go back to the top */ >++ >++ if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) >++ calc_boundaries(menu); >++ if ( CurBuffy == 0 ) CurBuffy = Incoming; >++ >++ tmp = TopBuffy; >++ >++ SETCOLOR(MT_COLOR_NORMAL); >++ >++ for ( ; tmp && lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); tmp = tmp->next ) { >++ if ( tmp == CurBuffy ) >++ SETCOLOR(MT_COLOR_INDICATOR); >++ else if ( tmp->msg_unread > 0 ) >++ SETCOLOR(MT_COLOR_NEW); >++ else if ( tmp->msg_flagged > 0 ) >++ SETCOLOR(MT_COLOR_FLAGGED); >++ else >++ SETCOLOR(MT_COLOR_NORMAL); >++ >++ move( lines, 0 ); >++ if ( Context && !strcmp( tmp->path, Context->path ) ) { >++ tmp->msg_unread = Context->unread; >++ tmp->msgcount = Context->msgcount; >++ tmp->msg_flagged = Context->flagged; >++ } >++ // check whether Maildir is a prefix of the current folder's path >++ short maildir_is_prefix = 0; >++ if ( (strlen(tmp->path) > strlen(Maildir)) && >++ (strncmp(Maildir, tmp->path, strlen(Maildir)) == 0) ) >++ maildir_is_prefix = 1; >++ // calculate depth of current folder and generate its display name with indented spaces >++ int sidebar_folder_depth = 0; >++ char *sidebar_folder_name; >++ sidebar_folder_name = basename(tmp->path); >++ if ( maildir_is_prefix ) { >++ char *tmp_folder_name; >++ int i; >++ tmp_folder_name = tmp->path + strlen(Maildir); >++ for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) { >++ if (tmp_folder_name[i] == '/') sidebar_folder_depth++; >++ } >++ if (sidebar_folder_depth > 0) { >++ sidebar_folder_name = malloc(strlen(basename(tmp->path)) + sidebar_folder_depth + 1); >++ for (i=0; i < sidebar_folder_depth; i++) >++ sidebar_folder_name[i]=' '; >++ sidebar_folder_name[i]=0; >++ strncat(sidebar_folder_name, basename(tmp->path), strlen(basename(tmp->path)) + sidebar_folder_depth); >++ } >++ } >++ printw( "%.*s", SidebarWidth - delim_len + 1, >++ make_sidebar_entry(sidebar_folder_name, tmp->msgcount, >++ tmp->msg_unread, tmp->msg_flagged)); >++ if (sidebar_folder_depth > 0) >++ free(sidebar_folder_name); >++ lines++; >++ } >++ SETCOLOR(MT_COLOR_NORMAL); >++ for ( ; lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { >++ int i = 0; >++ move( lines, 0 ); >++ for ( ; i < SidebarWidth - delim_len; i++ ) >++ addch(' '); >++ } >++ return 0; >++} >++ >++ >++void set_buffystats(CONTEXT* Context) >++{ >++ BUFFY *tmp = Incoming; >++ while(tmp) { >++ if(Context && !strcmp(tmp->path, Context->path)) { >++ tmp->msg_unread = Context->unread; >++ tmp->msgcount = Context->msgcount; >++ break; >++ } >++ tmp = tmp->next; >++ } >++} >++ >++void scroll_sidebar(int op, int menu) >++{ >++ if(!SidebarWidth) return; >++ if(!CurBuffy) return; >++ >++ switch (op) { >++ case OP_SIDEBAR_NEXT: >++ if ( CurBuffy->next == NULL ) return; >++ CurBuffy = CurBuffy->next; >++ break; >++ case OP_SIDEBAR_PREV: >++ if ( CurBuffy->prev == NULL ) return; >++ CurBuffy = CurBuffy->prev; >++ break; >++ case OP_SIDEBAR_SCROLL_UP: >++ CurBuffy = TopBuffy; >++ if ( CurBuffy != Incoming ) { >++ calc_boundaries(menu); >++ CurBuffy = CurBuffy->prev; >++ } >++ break; >++ case OP_SIDEBAR_SCROLL_DOWN: >++ CurBuffy = BottomBuffy; >++ if ( CurBuffy->next ) { >++ calc_boundaries(menu); >++ CurBuffy = CurBuffy->next; >++ } >++ break; >++ default: >++ return; >++ } >++ calc_boundaries(menu); >++ draw_sidebar(menu); >++} >++ >+diff -uNp -r mutt-1.5.22.orig/sidebar.h mutt-1.5.22/sidebar.h >+--- mutt-1.5.22.orig/sidebar.h Thu Jan 1 01:00:00 1970 >++++ mutt-1.5.22/sidebar.h Fri Oct 18 10:18:45 2013 >+@@ -0,0 +1,36 @@ >++/* >++ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu> >++ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com> >++ * >++ * This program is free software; you can redistribute it and/or modify >++ * it under the terms of the GNU General Public License as published by >++ * the Free Software Foundation; either version 2 of the License, or >++ * (at your option) any later version. >++ * >++ * This program is distributed in the hope that it will be useful, >++ * but WITHOUT ANY WARRANTY; without even the implied warranty of >++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >++ * GNU General Public License for more details. >++ * >++ * You should have received a copy of the GNU General Public License >++ * along with this program; if not, write to the Free Software >++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >++ */ >++ >++#ifndef SIDEBAR_H >++#define SIDEBAR_H >++ >++struct MBOX_LIST { >++ char *path; >++ int msgcount; >++ int new; >++} MBLIST; >++ >++/* parameter is whether or not to go to the status line */ >++/* used for omitting the last | that covers up the status bar in the index */ >++int draw_sidebar(int); >++void scroll_sidebar(int, int); >++void set_curbuffy(char*); >++void set_buffystats(CONTEXT*); >++ >++#endif /* SIDEBAR_H */ >+--- orig/Makefile.am.orig 2010-09-18 13:23:19.000000000 +0200 >++++ new/Makefile.am 2010-09-18 13:25:19.000000000 +0200 >+@@ -34,7 +34,7 @@ >+ score.c send.c sendlib.c signal.c sort.c \ >+ status.c system.c thread.c charset.c history.c lib.c \ >+ muttlib.c editmsg.c mbyte.c \ >+- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c >++ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c >+ >+ nodist_mutt_SOURCES = $(BUILT_SOURCES) >+ >+--- orig/Makefile.in.orig 2013-10-25 08:23:07.000000000 +0200 >++++ new/Makefile.in 2013-10-25 08:26:20.000000000 +0200 >+@@ -133,7 +133,7 @@ >+ system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \ >+ history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \ >+ editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \ >+- ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) >++ ascii.$(OBJEXT) crypt-mod.$(OBJEXT) safe_asprintf.$(OBJEXT) sidebar.$(OBJEXT) >+ am__objects_1 = >+ am__objects_2 = patchlist.$(OBJEXT) conststrings.$(OBJEXT) \ >+ $(am__objects_1) >+@@ -472,7 +472,7 @@ >+ score.c send.c sendlib.c signal.c sort.c \ >+ status.c system.c thread.c charset.c history.c lib.c \ >+ muttlib.c editmsg.c mbyte.c \ >+- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c >++ url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c sidebar.c >+ >+ nodist_mutt_SOURCES = $(BUILT_SOURCES) >+ mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \ >+@@ -504,7 +504,7 @@ >+ README.SSL smime.h group.h \ >+ muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \ >+ ChangeLog mkchangelog.sh mutt_idna.h \ >+- snprintf.c regex.c crypt-gpgme.h hcachever.sh.in \ >++ snprintf.c regex.c crypt-gpgme.h sidebar.h hcachever.sh.in \ >+ txt2c.c txt2c.sh version.sh check_sec.sh >+ >+ EXTRA_SCRIPTS = smime_keys > *** mutt-1.5.20-orig/doc/Muttrc 2009-06-14 13:53:24.000000000 -0500 > --- mutt-1.5.20-patched/doc/Muttrc 2009-06-19 22:07:04.000000000 -0500 > *************** >@@ -1459,158 +1454,3 @@ > # set crypt_autosign=no > # > # Name: crypt_autosign >-*** mutt-1.5.20-orig/imap/imap.c 2009-06-14 12:19:16.000000000 -0500 >---- mutt-1.5.20-patched/imap/imap.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 1521,1527 **** >- >- imap_munge_mbox_name (munged, sizeof (munged), name); >- snprintf (command, sizeof (command), >-! "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged); >- >- if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) >- { >---- 1521,1527 ---- >- >- imap_munge_mbox_name (munged, sizeof (munged), name); >- snprintf (command, sizeof (command), >-! "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)", munged); >- >- if (imap_exec (idata, command, IMAP_CMD_QUEUE) < 0) >- { >-*** mutt-1.5.20-orig/imap/command.c 2009-01-05 20:58:31.000000000 -0600 >---- mutt-1.5.20-patched/imap/command.c 2009-06-19 22:07:04.000000000 -0500 >-*************** >-*** 1009,1014 **** >---- 1009,1021 ---- >- opened */ >- status->uidnext = oldun; >- >-+ /* Added to make the sidebar show the correct numbers */ >-+ if (status->messages) >-+ { >-+ inc->msgcount = status->messages; >-+ inc->msg_unread = status->unseen; >-+ } >-+ >- FREE (&value); >- return; >- } >---- orig/compose.c.orig 2010-09-18 13:23:18.000000000 +0200 >-+++ new/compose.c 2010-09-18 14:01:09.000000000 +0200 >-@@ -80,7 +80,7 @@ >- >- #define HDR_XOFFSET 14 >- #define TITLE_FMT "%14s" /* Used for Prompts, which are ASCII */ >--#define W (COLS - HDR_XOFFSET) >-+#define W (COLS - HDR_XOFFSET - SidebarWidth) >- >- static char *Prompts[] = >- { >-@@ -143,7 +143,7 @@ >- { >- int off = 0; >- >-- mvprintw (HDR_CRYPT, 0, TITLE_FMT, "Security: "); >-+ mvprintw (HDR_CRYPT, SidebarWidth, TITLE_FMT, "Security: "); >- >- if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME)) == 0) >- { >-@@ -175,7 +175,7 @@ >- } >- >- clrtoeol (); >-- move (HDR_CRYPTINFO, 0); >-+ move (HDR_CRYPTINFO, SidebarWidth); >- clrtoeol (); >- >- if ((WithCrypto & APPLICATION_PGP) >-@@ -195,7 +195,7 @@ >- && (msg->security & ENCRYPT) >- && SmimeCryptAlg >- && *SmimeCryptAlg) { >-- mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "), >-+ mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "), >- NONULL(SmimeCryptAlg)); >- off = 20; >- } >-@@ -224,7 +224,7 @@ >- if (t && t[0] == '0' && t[1] == '\0') >- t = "<random>"; >- >-- if (c + mutt_strlen (t) + 2 >= COLS) >-+ if (c + mutt_strlen (t) + 2 >= COLS - SidebarWidth) >- break; >- >- addstr (NONULL(t)); >-@@ -276,7 +276,7 @@ >- >- buf[0] = 0; >- rfc822_write_address (buf, sizeof (buf), addr, 1); >-- mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]); >-+ mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]); >- mutt_paddstr (W, buf); >- } >- >-@@ -294,21 +294,21 @@ >- } >- else >- { >-- mvprintw (HDR_TO, 0, TITLE_FMT , Prompts[HDR_NEWSGROUPS - 1]); >-+ mvprintw (HDR_TO, SidebarWidth, TITLE_FMT , Prompts[HDR_NEWSGROUPS - 1]); >- mutt_paddstr (W, NONULL (msg->env->newsgroups)); >-- mvprintw (HDR_CC, 0, TITLE_FMT , Prompts[HDR_FOLLOWUPTO - 1]); >-+ mvprintw (HDR_CC, SidebarWidth, TITLE_FMT , Prompts[HDR_FOLLOWUPTO - 1]); >- mutt_paddstr (W, NONULL (msg->env->followup_to)); >- if (option (OPTXCOMMENTTO)) >- { >-- mvprintw (HDR_BCC, 0, TITLE_FMT , Prompts[HDR_XCOMMENTTO - 1]); >-+ mvprintw (HDR_BCC, SidebarWidth, TITLE_FMT , Prompts[HDR_XCOMMENTTO - 1]); >- mutt_paddstr (W, NONULL (msg->env->x_comment_to)); >- } >- } >- #endif >-- mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); >-+ mvprintw (HDR_SUBJECT, SidebarWidth, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); >- mutt_paddstr (W, NONULL (msg->env->subject)); >- draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to); >-- mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]); >-+ mvprintw (HDR_FCC, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]); >- mutt_paddstr (W, fcc); >- >- if (WithCrypto) >-@@ -319,7 +319,7 @@ >- #endif >- >- SETCOLOR (MT_COLOR_STATUS); >-- mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments")); >-+ mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments")); >- BKGDSET (MT_COLOR_STATUS); >- clrtoeol (); >- >-@@ -357,7 +357,7 @@ >- /* redraw the expanded list so the user can see the result */ >- buf[0] = 0; >- rfc822_write_address (buf, sizeof (buf), *addr, 1); >-- move (line, HDR_XOFFSET); >-+ move (line, HDR_XOFFSET+SidebarWidth); >- mutt_paddstr (W, buf); >- >- return 0; >-@@ -686,7 +686,7 @@ >- if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) >- { >- mutt_str_replace (&msg->env->subject, buf); >-- move (HDR_SUBJECT, HDR_XOFFSET); >-+ move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth); >- clrtoeol (); >- if (msg->env->subject) >- mutt_paddstr (W, msg->env->subject); >-@@ -703,7 +703,7 @@ >- { >- strfcpy (fcc, buf, fcclen); >- mutt_pretty_mailbox (fcc, fcclen); >-- move (HDR_FCC, HDR_XOFFSET); >-+ move (HDR_FCC, HDR_XOFFSET + SidebarWidth); >- mutt_paddstr (W, fcc); >- fccSet = 1;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 183251
: 137626