-+ { "sidebar-next", OP_SIDEBAR_NEXT, NULL },
-+ { "sidebar-prev", OP_SIDEBAR_PREV, NULL },
-+ { "sidebar-open", OP_SIDEBAR_OPEN, NULL },
- { NULL, 0, NULL }
- };
-
-***************
-*** 266,271 ****
---- 271,281 ----
-
- { "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.19-orig/globals.h 2009-01-03 17:27:10.000000000 -0600
---- mutt-1.5.19-patched/globals.h 2009-05-21 23:08:38.000000000 -0500
-***************
-*** 116,121 ****
---- 116,122 ----
- WHERE char *SendCharset;
- WHERE char *Sendmail;
- WHERE char *Shell;
-+ WHERE char *SidebarDelim;
- WHERE char *Signature;
- WHERE char *SimpleSearch;
- #if USE_SMTP
-***************
-*** 205,210 ****
---- 206,214 ----
- 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.19-orig/init.h 2009-01-05 13:20:53.000000000 -0600
---- mutt-1.5.19-patched/init.h 2009-05-21 23:08:38.000000000 -0500
-***************
-*** 1572,1577 ****
---- 1572,1593 ----
- ** you may \fIunset\fP this setting.
- ** (Crypto only)
- */
-+ {"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_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.19-orig/mailbox.h 2008-03-19 15:07:06.000000000 -0500
---- mutt-1.5.19-patched/mailbox.h 2009-05-21 23:08:38.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 */
-*** mutt-1.5.19-orig/Makefile.am 2009-01-05 13:20:53.000000000 -0600
---- mutt-1.5.19-patched/Makefile.am 2009-05-21 23:08:38.000000000 -0500
-***************
-*** 29,35 ****
- 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
-
- nodist_mutt_SOURCES = $(BUILT_SOURCES)
-
---- 29,36 ----
- 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 \
-! sidebar.c
-
- nodist_mutt_SOURCES = $(BUILT_SOURCES)
-
-*** mutt-1.5.19-orig/Makefile.in 2009-01-05 13:24:13.000000000 -0600
---- mutt-1.5.19-patched/Makefile.in 2009-05-21 23:08:38.000000000 -0500
-***************
-*** 83,89 ****
- system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \
- history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \
- editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \
-! ascii.$(OBJEXT) crypt-mod.$(OBJEXT)
- am__objects_1 = patchlist.$(OBJEXT)
- nodist_mutt_OBJECTS = $(am__objects_1)
- mutt_OBJECTS = $(am_mutt_OBJECTS) $(nodist_mutt_OBJECTS)
---- 83,90 ----
- system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \
- history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \
- editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \
-! ascii.$(OBJEXT) crypt-mod.$(OBJEXT) \
-! sidebar.$(OBJEXT)
- am__objects_1 = patchlist.$(OBJEXT)
- nodist_mutt_OBJECTS = $(am__objects_1)
- mutt_OBJECTS = $(am_mutt_OBJECTS) $(nodist_mutt_OBJECTS)
-***************
-*** 307,313 ****
- 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
-
- nodist_mutt_SOURCES = $(BUILT_SOURCES)
- mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \
---- 308,315 ----
- 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 \
-! sidebar.c
-
- nodist_mutt_SOURCES = $(BUILT_SOURCES)
- mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \
-***************
-*** 339,345 ****
- README.SSL smime.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
-
- EXTRA_SCRIPTS = smime_keys
- mutt_dotlock_SOURCES = mutt_dotlock.c
---- 341,347 ----
- README.SSL smime.h \
- muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \
- ChangeLog mkchangelog.sh mutt_idna.h \
-! snprintf.c regex.c crypt-gpgme.h sidebar.h hcachever.sh.in
-
- EXTRA_SCRIPTS = smime_keys
- mutt_dotlock_SOURCES = mutt_dotlock.c
-*** mutt-1.5.19-orig/mbox.c 2008-08-15 13:30:12.000000000 -0500
---- mutt-1.5.19-patched/mbox.c 2009-05-21 23:08:38.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.19-orig/menu.c 2009-01-05 13:20:53.000000000 -0600
---- mutt-1.5.19-patched/menu.c 2009-05-21 23:08:38.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));
-
-***************
-*** 882,888 ****
-
-
- if (option (OPTARROWCURSOR))
-! move (menu->current - menu->top + menu->offset, 2);
- else if (option (OPTBRAILLEFRIENDLY))
- move (menu->current - menu->top + menu->offset, 0);
- else
---- 884,890 ----
-
-
- 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.19-orig/mutt_curses.h 2008-03-19 15:07:57.000000000 -0500
---- mutt-1.5.19-patched/mutt_curses.h 2009-05-21 23:08:38.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.19-orig/mutt.h 2008-09-25 17:00:03.000000000 -0500
---- mutt-1.5.19-patched/mutt.h 2009-05-21 23:08:38.000000000 -0500
-***************
-*** 409,414 ****
---- 409,415 ----
- OPTSAVEEMPTY,
- OPTSAVENAME,
- OPTSCORE,
-+ OPTSIDEBAR,
- OPTSIGDASHES,
- OPTSIGONTOP,
- OPTSORTRE,
-***************
-*** 843,848 ****
---- 844,850 ----
- {
- char *path;
- FILE *fp;
-+ time_t atime;
- time_t mtime;
- off_t size;
- off_t vsize;
-***************
-*** 877,882 ****
---- 879,885 ----
- 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.19-orig/muttlib.c 2009-01-05 13:20:53.000000000 -0600
---- mutt-1.5.19-patched/muttlib.c 2009-05-21 23:08:38.000000000 -0500
-***************
-*** 1217,1222 ****
---- 1217,1224 ----
- pl = pw = 1;
-
- /* see if there's room to add content, else ignore */
-+ if ( DrawFullLine )
-+ {
- if ((col < COLS && wlen < destlen) || soft)
- {
- int pad;
-***************
-*** 1259,1264 ****
---- 1261,1312 ----
- 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.19-orig/mx.c 2009-01-05 13:20:53.000000000 -0600
---- mutt-1.5.19-patched/mx.c 2009-05-21 23:08:38.000000000 -0500
-***************
-*** 611,616 ****
---- 611,617 ----
- * 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