FreeBSD Bugzilla – Attachment 93767 Details for
Bug 131752
maintainer-update of mail/mutt-devel
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 77.31 KB, created by
Udo.Schweigert
on 2009-02-16 21:30:06 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
Udo.Schweigert
Created:
2009-02-16 21:30:06 UTC
Size:
77.31 KB
patch
obsolete
>diff -ru /usr/ports/mail/mutt-devel/Makefile ./Makefile >--- /usr/ports/mail/mutt-devel/Makefile 2009-02-10 06:11:55.000000000 +0100 >+++ ./Makefile 2009-02-16 17:35:14.000000000 +0100 >@@ -23,8 +23,6 @@ > # and SLANG (WITH_MUTT_SLANG). Note that you may have to set the variables > # COLORTERM=yes and COLORFGBG="color1;color2" in your environment to get slang > # function properly. >-# The default version for slang is 1.x. Define WITH_MUTT_SLANG2 if you want >-# to use the slang version 2.x > # The default version for ncurses is that which comes with the operating > # system. If you want to use the ncurses supplied by the ports-system define > # WITH_MUTT_NCURSES_PORT. >@@ -117,7 +115,7 @@ > > PORTNAME= mutt-devel > PORTVERSION= 1.5.19 >-PORTREVISION?= 0 >+PORTREVISION?= 1 > CATEGORIES+= mail ipv6 > .if defined(WITH_MUTT_NNTP) > CATEGORIES+= news >@@ -210,14 +208,6 @@ > .if defined(WITH_MUTT_MAILDIR_HEADER_CACHE) > WITH_MUTT_IMAP_HEADER_CACHE= yes > .endif >-.if defined(WITH_MUTT_SIDEBAR_PATCH) >-.if defined(WITH_MUTT_NNTP) >-IGNORE= cannot install: the WITH_MUTT_SIDEBAR_PATCH and WITH_MUTT_NNTP are not compatible >-.endif >-.if defined(WITH_MUTT_GREETING_PATCH) >-IGNORE= cannot install: the WITH_MUTT_SIDEBAR_PATCH and WITH_MUTT_GREETING_PATCH are not compatible >-.endif >-.endif > .if ${OSVERSION} >= 700033 || (${OSVERSION} < 700000 && ${OSVERSION} >= 602107) > NCURSES_IS_DEFAULT= yes > .else >@@ -271,11 +261,6 @@ > .endif > .if defined(WITH_MUTT_SLANG) || defined(WITH_SLANG) > MUTT_USES_SLANG= yes >-MUTT_USES_SLANG1= yes >-.endif >-.if defined(WITH_MUTT_SLANG2) >-MUTT_USES_SLANG= yes >-MUTT_USES_SLANG2= yes > .endif > .if defined(WITH_MUTT_NCURSES) && !defined(MUTT_USES_SLANG) > MUTT_USES_NCURSES= yes >@@ -283,7 +268,6 @@ > .if !defined(MUTT_USES_SLANG) && !defined(WITHOUT_MUTT_SLANG) && !defined(MUTT_USES_NCURSES) > .if defined(SLANG_IS_DEFAULT) > MUTT_USES_SLANG= yes >-MUTT_USES_SLANG1= yes > .elif defined(NCURSES_IS_DEFAULT) > MUTT_USES_NCURSES= yes > .endif >@@ -314,9 +298,7 @@ > .if defined(MUTT_USES_NCURSES_PORT) > LIB_DEPENDS+= ncurses.5:${PORTSDIR}/devel/ncurses > CFLAGS+= -I${LOCALBASE}/include/ncurses -I${LOCALBASE}/include >-.elif defined(MUTT_USES_SLANG1) >-LIB_DEPENDS+= slang.1:${PORTSDIR}/devel/libslang >-.elif defined(MUTT_USES_SLANG2) >+.elif defined(MUTT_USES_SLANG) > LIB_DEPENDS+= slang.2:${PORTSDIR}/devel/libslang2 > .endif > .if defined(WITH_MUTT_CYRUS_SASL2) >@@ -455,14 +437,14 @@ > PATCHFILES+= p0-patch-${DW_MBOX_PATCH_VERSION}.dw.mbox-hook.1:dw > .endif > .if defined(WITH_MUTT_SIDEBAR_PATCH) >-SIDEBAR_PATCH= patch-1.5.18.sidebar.20080611.txt >-DISTFILES+= ${SIDEBAR_PATCH}:tchan > XML_NEEDED= yes >-pre-patch:: >- @${GUNZIP_CMD} -c ${DISTDIR}/${DIST_SUBDIR}/${SIDEBAR_PATCH} > ${WRKDIR}/patch-sidebar >- @${REINPLACE_CMD} -E '/^diff.*\/Makefile.in$$/,/^diff/d' \ >- ${WRKDIR}/patch-sidebar >- @${PATCH} ${PATCH_ARGS} -p1 < ${WRKDIR}/patch-sidebar >+.if defined(WITH_MUTT_NNTP) >+post-patch:: >+ @${PATCH} ${PATCH_ARGS} -p0 < ${PATCHDIR}/extra-patch-sidebar-nntp >+.else >+post-patch:: >+ @${PATCH} ${PATCH_ARGS} -p0 < ${PATCHDIR}/extra-patch-sidebar >+.endif > .endif > .if defined(WITH_MUTT_GREETING_PATCH) > PATCHFILES+= mutt-${VC_PATCH_VERSION}.vc.greeting:vc >diff -ru /usr/ports/mail/mutt-devel/distinfo ./distinfo >--- /usr/ports/mail/mutt-devel/distinfo 2009-02-10 06:11:55.000000000 +0100 >+++ ./distinfo 2009-02-16 13:06:53.000000000 +0100 >@@ -22,6 +22,3 @@ > MD5 (mutt/mutt-1.5.16.vc.greeting) = 4bd9beeb74d075e4418e86e8ed887aa0 > SHA256 (mutt/mutt-1.5.16.vc.greeting) = cf05aeab5f1813864aa72b68f59a579c46dacf2fbd8e5fd064b920012320b986 > SIZE (mutt/mutt-1.5.16.vc.greeting) = 4526 >-MD5 (mutt/patch-1.5.18.sidebar.20080611.txt) = 0f6565cecfc7fd72eaf33756abbc3088 >-SHA256 (mutt/patch-1.5.18.sidebar.20080611.txt) = a94bc11072dbfe9a4a7d5a761105bf40a496bb2706e9940978de7b64d1555fa7 >-SIZE (mutt/patch-1.5.18.sidebar.20080611.txt) = 52201 >diff -ru /usr/ports/mail/mutt-devel/files/extra-patch-sidebar ./files/extra-patch-sidebar >--- /usr/ports/mail/mutt-devel/files/extra-patch-sidebar 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/extra-patch-sidebar 2009-02-16 17:26:34.000000000 +0100 >@@ -0,0 +1,1180 @@ >+--- Makefile.am 2009-01-05 20:20:53.000000000 +0100 >++++ Makefile.am 2009-02-16 17:07:44.000000000 +0100 >+@@ -29,7 +29,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 >++ url.c ascii.c crypt-mod.c crypt-mod.h sidebar.c >+ >+ nodist_mutt_SOURCES = $(BUILT_SOURCES) >+ >+--- Makefile.in 2009-01-05 20:24:13.000000000 +0100 >++++ Makefile.in 2009-02-16 17:07:44.000000000 +0100 >+@@ -83,7 +83,7 @@ >+ system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \ >+ history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \ >+ editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \ >+- ascii.$(OBJEXT) crypt-mod.$(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,7 +307,8 @@ >+ 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 >++ 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,7 +340,7 @@ >+ 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 >++ snprintf.c regex.c crypt-gpgme.h sidebar.h hcachever.sh.in >+ >+ EXTRA_SCRIPTS = smime_keys >+ mutt_dotlock_SOURCES = mutt_dotlock.c >+--- OPS 2008-03-19 21:07:57.000000000 +0100 >++++ OPS 2009-02-16 17:07:44.000000000 +0100 >+@@ -178,3 +178,8 @@ >+ 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" >+--- PATCHES 2008-03-19 21:07:06.000000000 +0100 >++++ PATCHES 2009-02-16 17:07:44.000000000 +0100 >+@@ -0,0 +1 @@ >++patch-1.5.19.sidebar.20080611.txt >+--- buffy.c 2008-08-30 01:39:48.000000000 +0200 >++++ buffy.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -260,6 +260,7 @@ >+ struct stat contex_sb; >+ time_t t; >+ >++CONTEXT *ctx; >+ #ifdef USE_IMAP >+ /* update postponed count as well, on force */ >+ if (force) >+--- buffy.h 2008-05-22 20:25:19.000000000 +0200 >++++ buffy.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -25,7 +25,12 @@ >+ char *path; >+ 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 */ >+--- color.c 2008-03-19 21:07:57.000000000 +0100 >++++ color.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -93,6 +93,8 @@ >+ { "bold", MT_COLOR_BOLD }, >+ { "underline", MT_COLOR_UNDERLINE }, >+ { "index", MT_COLOR_INDEX }, >++ { "sidebar_new", MT_COLOR_NEW }, >++ { "sidebar_flagged", MT_COLOR_FLAGGED }, >+ { NULL, 0 } >+ }; >+ >+--- compose.c 2009-01-05 20:20:53.000000000 +0100 >++++ compose.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -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[] = >+ { >+@@ -115,16 +115,16 @@ >+ if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME)) >+ { >+ if (!msg->security) >+- mvaddstr (HDR_CRYPT, 0, "Security: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, "Security: "); >+ else if (msg->security & APPLICATION_SMIME) >+- mvaddstr (HDR_CRYPT, 0, " S/MIME: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); >+ else if (msg->security & APPLICATION_PGP) >+- mvaddstr (HDR_CRYPT, 0, " PGP: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); >+ } >+ else if ((WithCrypto & APPLICATION_SMIME)) >+- mvaddstr (HDR_CRYPT, 0, " S/MIME: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); >+ else if ((WithCrypto & APPLICATION_PGP)) >+- mvaddstr (HDR_CRYPT, 0, " PGP: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); >+ else >+ return; >+ >+@@ -148,7 +148,7 @@ >+ } >+ clrtoeol (); >+ >+- move (HDR_CRYPTINFO, 0); >++ move (HDR_CRYPTINFO, SidebarWidth); >+ clrtoeol (); >+ if ((WithCrypto & APPLICATION_PGP) >+ && msg->security & APPLICATION_PGP && msg->security & SIGN) >+@@ -164,7 +164,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; >+ } >+@@ -178,7 +178,7 @@ >+ int c; >+ char *t; >+ >+- mvaddstr (HDR_MIX, 0, " Mix: "); >++ mvaddstr (HDR_MIX, SidebarWidth, " Mix: "); >+ >+ if (!chain) >+ { >+@@ -193,7 +193,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)); >+@@ -245,7 +245,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); >+ } >+ >+@@ -255,10 +255,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) >+@@ -269,7 +269,7 @@ >+ #endif >+ >+ SETCOLOR (MT_COLOR_STATUS); >+- mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments")); >++ mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments")); >+ BKGDSET (MT_COLOR_STATUS); >+ clrtoeol (); >+ >+@@ -307,7 +307,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; >+@@ -552,7 +552,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); >+@@ -569,7 +569,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; >+ } >+--- curs_main.c 2009-01-05 20:20:53.000000000 +0100 >++++ curs_main.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -27,6 +27,9 @@ >+ #include "mapping.h" >+ #include "sort.h" >+ #include "mx.h" >++#include "attach.h" >++#include "buffy.h" >++#include "sidebar.h" >+ >+ #ifdef USE_POP >+ #include "pop.h" >+@@ -523,8 +526,12 @@ >+ 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; >+@@ -536,6 +543,7 @@ >+ if (menu->redraw & REDRAW_FULL) >+ { >+ menu_redraw_full (menu); >++ draw_sidebar(menu->menu); >+ mutt_show_error (); >+ } >+ >+@@ -558,10 +566,13 @@ >+ >+ 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,7 +586,7 @@ >+ 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 >+@@ -1048,6 +1059,7 @@ >+ menu->redraw = REDRAW_FULL; >+ break; >+ >++ case OP_SIDEBAR_OPEN: >+ case OP_MAIN_CHANGE_FOLDER: >+ case OP_MAIN_NEXT_UNREAD_MAILBOX: >+ >+@@ -1079,7 +1091,11 @@ >+ { >+ 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) >+ { >+@@ -1097,6 +1113,7 @@ >+ } >+ >+ mutt_expand_path (buf, sizeof (buf)); >++ set_curbuffy(buf); >+ if (mx_get_magic (buf) <= 0) >+ { >+ mutt_error (_("%s is not a mailbox."), buf); >+@@ -2176,6 +2193,12 @@ >+ 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); >+--- flags.c 2009-01-04 00:27:10.000000000 +0100 >++++ flags.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -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 @@ >+ */ >+ 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) >+--- functions.h 2009-01-05 20:20:53.000000000 +0100 >++++ functions.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -168,6 +168,11 @@ >+ { "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 } >+ }; >+ >+@@ -266,6 +271,11 @@ >+ >+ { "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 } >+ }; >+ >+--- globals.h 2009-01-04 00:27:10.000000000 +0100 >++++ globals.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -116,6 +116,7 @@ >+ WHERE char *SendCharset; >+ WHERE char *Sendmail; >+ WHERE char *Shell; >++WHERE char *SidebarDelim; >+ WHERE char *Signature; >+ WHERE char *SimpleSearch; >+ #if USE_SMTP >+@@ -205,6 +206,9 @@ >+ 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; >+--- init.h 2009-01-05 20:20:53.000000000 +0100 >++++ init.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -1572,6 +1572,22 @@ >+ ** 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 >+--- mailbox.h 2008-03-19 21:07:06.000000000 +0100 >++++ mailbox.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -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 */ >+--- mbox.c 2008-08-15 20:30:12.000000000 +0200 >++++ mbox.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -100,6 +100,7 @@ >+ mutt_perror (ctx->path); >+ return (-1); >+ } >++ ctx->atime = sb.st_atime; >+ ctx->mtime = sb.st_mtime; >+ ctx->size = sb.st_size; >+ >+@@ -255,6 +256,7 @@ >+ >+ 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) >+--- menu.c 2009-01-05 20:20:53.000000000 +0100 >++++ menu.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -24,6 +24,7 @@ >+ #include "mutt_curses.h" >+ #include "mutt_menu.h" >+ #include "mbyte.h" >++#include "sidebar.h" >+ >+ #include <string.h> >+ #include <stdlib.h> >+@@ -156,7 +157,7 @@ >+ { >+ 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; >+@@ -207,6 +208,7 @@ >+ char buf[LONG_STRING]; >+ int i; >+ >++ draw_sidebar(1); >+ for (i = menu->top; i < menu->top + menu->pagelen; i++) >+ { >+ if (i < menu->max) >+@@ -217,7 +219,7 @@ >+ if (option (OPTARROWCURSOR)) >+ { >+ attrset (menu->color (i)); >+- CLEARLINE (i - menu->top + menu->offset); >++ CLEARLINE_WIN (i - menu->top + menu->offset); >+ >+ if (i == menu->current) >+ { >+@@ -246,14 +248,14 @@ >+ BKGDSET (MT_COLOR_INDICATOR); >+ } >+ >+- CLEARLINE (i - menu->top + menu->offset); >++ 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 (i - menu->top + menu->offset); >++ CLEARLINE_WIN (i - menu->top + menu->offset); >+ } >+ menu->redraw = 0; >+ } >+@@ -268,7 +270,7 @@ >+ return; >+ } >+ >+- move (menu->oldcurrent + menu->offset - menu->top, 0); >++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth); >+ SETCOLOR (MT_COLOR_NORMAL); >+ BKGDSET (MT_COLOR_NORMAL); >+ >+@@ -283,13 +285,13 @@ >+ clrtoeol (); >+ 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); >+ SETCOLOR (MT_COLOR_NORMAL); >+ } >+ >+ /* now draw it in the new location */ >+- move (menu->current + menu->offset - menu->top, 0); >++ move (menu->current + menu->offset - menu->top, SidebarWidth); >+ attrset (menu->color (menu->current)); >+ ADDCOLOR (MT_COLOR_INDICATOR); >+ addstr ("->"); >+@@ -310,7 +312,7 @@ >+ attrset (menu->color (menu->current)); >+ ADDCOLOR (MT_COLOR_INDICATOR); >+ BKGDSET (MT_COLOR_INDICATOR); >+- CLEARLINE (menu->current - menu->top + menu->offset); >++ 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,7 +324,7 @@ >+ { >+ char buf[LONG_STRING]; >+ >+- 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)); >+ >+@@ -882,7 +884,7 @@ >+ >+ >+ 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 >+--- mutt.h 2008-09-26 00:00:03.000000000 +0200 >++++ mutt.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -409,6 +409,7 @@ >+ OPTSAVEEMPTY, >+ OPTSAVENAME, >+ OPTSCORE, >++ OPTSIDEBAR, >+ OPTSIGDASHES, >+ OPTSIGONTOP, >+ OPTSORTRE, >+@@ -843,6 +844,7 @@ >+ { >+ char *path; >+ FILE *fp; >++ time_t atime; >+ time_t mtime; >+ off_t size; >+ off_t vsize; >+@@ -877,6 +879,7 @@ >+ 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_curses.h 2008-03-19 21:07:57.000000000 +0100 >++++ mutt_curses.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -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) >+@@ -126,6 +127,8 @@ >+ MT_COLOR_BOLD, >+ MT_COLOR_UNDERLINE, >+ MT_COLOR_INDEX, >++ MT_COLOR_NEW, >++ MT_COLOR_FLAGGED, >+ MT_COLOR_MAX >+ }; >+ >+--- muttlib.c 2009-01-05 20:20:53.000000000 +0100 >++++ muttlib.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -1217,6 +1217,8 @@ >+ pl = pw = 1; >+ >+ /* see if there's room to add content, else ignore */ >++ if ( DrawFullLine ) >++ { >+ if ((col < COLS && wlen < destlen) || soft) >+ { >+ int pad; >+@@ -1259,6 +1261,52 @@ >+ 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 == '|') >+--- mx.c 2009-01-05 20:20:53.000000000 +0100 >++++ mx.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -611,6 +611,7 @@ >+ * 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) >+@@ -633,6 +634,8 @@ >+ ctx->quiet = 1; >+ if (flags & M_READONLY) >+ ctx->readonly = 1; >++ if (flags & M_PEEK) >++ ctx->peekonly = 1; >+ >+ if (flags & (M_APPEND|M_NEWFOLDER)) >+ { >+@@ -732,9 +735,21 @@ >+ 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); >+--- pager.c 2009-01-05 20:20:53.000000000 +0100 >++++ pager.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -29,6 +29,7 @@ >+ #include "pager.h" >+ #include "attach.h" >+ #include "mbyte.h" >++#include "sidebar.h" >+ >+ #include "mutt_crypt.h" >+ >+@@ -1060,6 +1061,8 @@ >+ 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)); >+@@ -1694,7 +1697,7 @@ >+ if ((redraw & REDRAW_BODY) || topline != oldtopline) >+ { >+ do { >+- move (bodyoffset, 0); >++ move (bodyoffset, SidebarWidth); >+ curline = oldtopline = topline; >+ lines = 0; >+ force_redraw = 0; >+@@ -1707,6 +1710,7 @@ >+ &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) >+ lines++; >+ curline++; >++ move(lines + bodyoffset, SidebarWidth); >+ } >+ last_offset = lineInfo[curline].offset; >+ } while (force_redraw); >+@@ -1720,6 +1724,7 @@ >+ 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. */ >+@@ -1743,22 +1748,22 @@ >+ /* print out the pager status bar */ >+ SETCOLOR (MT_COLOR_STATUS); >+ BKGDSET (MT_COLOR_STATUS); >+- CLEARLINE (statusoffset); >++ CLEARLINE_WIN (statusoffset); >+ if (IsHeader (extra)) >+ { >+- size_t l1 = COLS * MB_LEN_MAX; >++ size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; >+ size_t l2 = sizeof (buffer); >+ hfi.hdr = extra->hdr; >+ mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); >+ } >+ else if (IsMsgAttach (extra)) >+ { >+- size_t l1 = COLS * MB_LEN_MAX; >++ size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; >+ size_t l2 = sizeof (buffer); >+ hfi.hdr = extra->bdy->hdr; >+ mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); >+ } >+- mutt_paddstr (COLS, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); >++ mutt_paddstr (COLS-SidebarWidth, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); >+ BKGDSET (MT_COLOR_NORMAL); >+ SETCOLOR (MT_COLOR_NORMAL); >+ } >+@@ -1768,18 +1773,23 @@ >+ /* redraw the pager_index indicator, because the >+ * flags for this message might have changed. */ >+ menu_redraw_current (index); >++ draw_sidebar(MENU_PAGER); >+ >+ /* print out the index status bar */ >+ menu_status_line (buffer, sizeof (buffer), index, NONULL(Status)); >+ >+- 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); >+ } >+ >++ /* if we're not using the index, update every time */ >++ if ( index == 0 ) >++ draw_sidebar(MENU_PAGER); >++ >+ redraw = 0; >+ >+ if (option(OPTBRAILLEFRIENDLY)) { >+@@ -2671,6 +2681,13 @@ >+ 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; >+--- sidebar.c 1970-01-01 01:00:00.000000000 +0100 >++++ sidebar.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -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 { >++ 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); >++ } 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 */ >++ } >++ 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); >++} >++ >+--- sidebar.h 1970-01-01 01:00:00.000000000 +0100 >++++ sidebar.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -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 */ >diff -ru /usr/ports/mail/mutt-devel/files/extra-patch-sidebar-nntp ./files/extra-patch-sidebar-nntp >--- /usr/ports/mail/mutt-devel/files/extra-patch-sidebar-nntp 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/extra-patch-sidebar-nntp 2009-02-16 17:25:18.000000000 +0100 >@@ -0,0 +1,1194 @@ >+--- Makefile.am 2009-01-05 20:20:53.000000000 +0100 >++++ Makefile.am 2009-02-16 17:07:44.000000000 +0100 >+@@ -29,7 +29,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 >++ url.c ascii.c crypt-mod.c crypt-mod.h sidebar.c >+ >+ nodist_mutt_SOURCES = $(BUILT_SOURCES) >+ >+--- Makefile.in 2009-01-05 20:24:13.000000000 +0100 >++++ Makefile.in 2009-02-16 17:07:44.000000000 +0100 >+@@ -83,7 +83,7 @@ >+ system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \ >+ history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \ >+ editmsg.$(OBJEXT) mbyte.$(OBJEXT) url.$(OBJEXT) \ >+- ascii.$(OBJEXT) crypt-mod.$(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,7 +307,8 @@ >+ 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 >++ 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,7 +340,7 @@ >+ 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 >++ snprintf.c regex.c crypt-gpgme.h sidebar.h hcachever.sh.in >+ >+ EXTRA_SCRIPTS = smime_keys >+ mutt_dotlock_SOURCES = mutt_dotlock.c >+--- OPS 2008-03-19 21:07:57.000000000 +0100 >++++ OPS 2009-02-16 17:07:44.000000000 +0100 >+@@ -178,3 +178,8 @@ >+ 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" >+--- PATCHES 2008-03-19 21:07:06.000000000 +0100 >++++ PATCHES 2009-02-16 17:07:44.000000000 +0100 >+@@ -0,0 +1 @@ >++patch-1.5.19.sidebar.20080611.txt >+--- buffy.c 2008-08-30 01:39:48.000000000 +0200 >++++ buffy.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -260,6 +260,7 @@ >+ struct stat contex_sb; >+ time_t t; >+ >++CONTEXT *ctx; >+ #ifdef USE_IMAP >+ /* update postponed count as well, on force */ >+ if (force) >+--- buffy.h 2008-05-22 20:25:19.000000000 +0200 >++++ buffy.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -25,7 +25,12 @@ >+ char *path; >+ 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 */ >+--- color.c 2008-03-19 21:07:57.000000000 +0100 >++++ color.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -93,6 +93,8 @@ >+ { "bold", MT_COLOR_BOLD }, >+ { "underline", MT_COLOR_UNDERLINE }, >+ { "index", MT_COLOR_INDEX }, >++ { "sidebar_new", MT_COLOR_NEW }, >++ { "sidebar_flagged", MT_COLOR_FLAGGED }, >+ { NULL, 0 } >+ }; >+ >+--- compose.c.orig 2009-02-16 17:08:51.000000000 +0100 >++++ compose.c 2009-02-16 17:12:47.000000000 +0100 >+@@ -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[] = >+ { >+@@ -146,16 +146,16 @@ >+ if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME)) >+ { >+ if (!msg->security) >+- mvaddstr (HDR_CRYPT, 0, " Security: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, " Security: "); >+ else if (msg->security & APPLICATION_SMIME) >+- mvaddstr (HDR_CRYPT, 0, " S/MIME: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); >+ else if (msg->security & APPLICATION_PGP) >+- mvaddstr (HDR_CRYPT, 0, " PGP: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); >+ } >+ else if ((WithCrypto & APPLICATION_SMIME)) >+- mvaddstr (HDR_CRYPT, 0, " S/MIME: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); >+ else if ((WithCrypto & APPLICATION_PGP)) >+- mvaddstr (HDR_CRYPT, 0, " PGP: "); >++ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); >+ else >+ return; >+ >+@@ -179,7 +179,7 @@ >+ } >+ clrtoeol (); >+ >+- move (HDR_CRYPTINFO, 0); >++ move (HDR_CRYPTINFO, SidebarWidth); >+ clrtoeol (); >+ if ((WithCrypto & APPLICATION_PGP) >+ && msg->security & APPLICATION_PGP && msg->security & SIGN) >+@@ -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; >+ } >+@@ -209,7 +209,7 @@ >+ int c; >+ char *t; >+ >+- mvaddstr (HDR_MIX, 0, " Mix: "); >++ mvaddstr (HDR_MIX, SidebarWidth, " Mix: "); >+ >+ if (!chain) >+ { >+@@ -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; >+ } >+--- curs_main.c 2009-01-05 20:20:53.000000000 +0100 >++++ curs_main.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -27,6 +27,9 @@ >+ #include "mapping.h" >+ #include "sort.h" >+ #include "mx.h" >++#include "attach.h" >++#include "buffy.h" >++#include "sidebar.h" >+ >+ #ifdef USE_POP >+ #include "pop.h" >+@@ -523,8 +526,12 @@ >+ 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; >+@@ -536,6 +543,7 @@ >+ if (menu->redraw & REDRAW_FULL) >+ { >+ menu_redraw_full (menu); >++ draw_sidebar(menu->menu); >+ mutt_show_error (); >+ } >+ >+@@ -558,10 +566,13 @@ >+ >+ 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,7 +586,7 @@ >+ 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 >+@@ -1048,6 +1059,7 @@ >+ menu->redraw = REDRAW_FULL; >+ break; >+ >++ case OP_SIDEBAR_OPEN: >+ case OP_MAIN_CHANGE_FOLDER: >+ case OP_MAIN_NEXT_UNREAD_MAILBOX: >+ >+@@ -1079,7 +1091,11 @@ >+ { >+ 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) >+ { >+@@ -1097,6 +1113,7 @@ >+ } >+ >+ mutt_expand_path (buf, sizeof (buf)); >++ set_curbuffy(buf); >+ if (mx_get_magic (buf) <= 0) >+ { >+ mutt_error (_("%s is not a mailbox."), buf); >+@@ -2176,6 +2193,12 @@ >+ 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); >+--- flags.c 2009-01-04 00:27:10.000000000 +0100 >++++ flags.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -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 @@ >+ */ >+ 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) >+--- functions.h 2009-01-05 20:20:53.000000000 +0100 >++++ functions.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -168,6 +168,11 @@ >+ { "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 } >+ }; >+ >+@@ -266,6 +271,11 @@ >+ >+ { "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 } >+ }; >+ >+--- globals.h 2009-01-04 00:27:10.000000000 +0100 >++++ globals.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -116,6 +116,7 @@ >+ WHERE char *SendCharset; >+ WHERE char *Sendmail; >+ WHERE char *Shell; >++WHERE char *SidebarDelim; >+ WHERE char *Signature; >+ WHERE char *SimpleSearch; >+ #if USE_SMTP >+@@ -205,6 +206,9 @@ >+ 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; >+--- init.h 2009-01-05 20:20:53.000000000 +0100 >++++ init.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -1572,6 +1572,22 @@ >+ ** 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 >+--- mailbox.h 2008-03-19 21:07:06.000000000 +0100 >++++ mailbox.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -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 */ >+--- mbox.c 2008-08-15 20:30:12.000000000 +0200 >++++ mbox.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -100,6 +100,7 @@ >+ mutt_perror (ctx->path); >+ return (-1); >+ } >++ ctx->atime = sb.st_atime; >+ ctx->mtime = sb.st_mtime; >+ ctx->size = sb.st_size; >+ >+@@ -255,6 +256,7 @@ >+ >+ 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) >+--- menu.c 2009-01-05 20:20:53.000000000 +0100 >++++ menu.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -24,6 +24,7 @@ >+ #include "mutt_curses.h" >+ #include "mutt_menu.h" >+ #include "mbyte.h" >++#include "sidebar.h" >+ >+ #include <string.h> >+ #include <stdlib.h> >+@@ -156,7 +157,7 @@ >+ { >+ 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; >+@@ -207,6 +208,7 @@ >+ char buf[LONG_STRING]; >+ int i; >+ >++ draw_sidebar(1); >+ for (i = menu->top; i < menu->top + menu->pagelen; i++) >+ { >+ if (i < menu->max) >+@@ -217,7 +219,7 @@ >+ if (option (OPTARROWCURSOR)) >+ { >+ attrset (menu->color (i)); >+- CLEARLINE (i - menu->top + menu->offset); >++ CLEARLINE_WIN (i - menu->top + menu->offset); >+ >+ if (i == menu->current) >+ { >+@@ -246,14 +248,14 @@ >+ BKGDSET (MT_COLOR_INDICATOR); >+ } >+ >+- CLEARLINE (i - menu->top + menu->offset); >++ 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 (i - menu->top + menu->offset); >++ CLEARLINE_WIN (i - menu->top + menu->offset); >+ } >+ menu->redraw = 0; >+ } >+@@ -268,7 +270,7 @@ >+ return; >+ } >+ >+- move (menu->oldcurrent + menu->offset - menu->top, 0); >++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth); >+ SETCOLOR (MT_COLOR_NORMAL); >+ BKGDSET (MT_COLOR_NORMAL); >+ >+@@ -283,13 +285,13 @@ >+ clrtoeol (); >+ 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); >+ SETCOLOR (MT_COLOR_NORMAL); >+ } >+ >+ /* now draw it in the new location */ >+- move (menu->current + menu->offset - menu->top, 0); >++ move (menu->current + menu->offset - menu->top, SidebarWidth); >+ attrset (menu->color (menu->current)); >+ ADDCOLOR (MT_COLOR_INDICATOR); >+ addstr ("->"); >+@@ -310,7 +312,7 @@ >+ attrset (menu->color (menu->current)); >+ ADDCOLOR (MT_COLOR_INDICATOR); >+ BKGDSET (MT_COLOR_INDICATOR); >+- CLEARLINE (menu->current - menu->top + menu->offset); >++ 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,7 +324,7 @@ >+ { >+ char buf[LONG_STRING]; >+ >+- 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)); >+ >+@@ -882,7 +884,7 @@ >+ >+ >+ 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 >+--- mutt.h 2008-09-26 00:00:03.000000000 +0200 >++++ mutt.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -409,6 +409,7 @@ >+ OPTSAVEEMPTY, >+ OPTSAVENAME, >+ OPTSCORE, >++ OPTSIDEBAR, >+ OPTSIGDASHES, >+ OPTSIGONTOP, >+ OPTSORTRE, >+@@ -843,6 +844,7 @@ >+ { >+ char *path; >+ FILE *fp; >++ time_t atime; >+ time_t mtime; >+ off_t size; >+ off_t vsize; >+@@ -877,6 +879,7 @@ >+ 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_curses.h 2008-03-19 21:07:57.000000000 +0100 >++++ mutt_curses.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -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) >+@@ -126,6 +127,8 @@ >+ MT_COLOR_BOLD, >+ MT_COLOR_UNDERLINE, >+ MT_COLOR_INDEX, >++ MT_COLOR_NEW, >++ MT_COLOR_FLAGGED, >+ MT_COLOR_MAX >+ }; >+ >+--- muttlib.c 2009-01-05 20:20:53.000000000 +0100 >++++ muttlib.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -1217,6 +1217,8 @@ >+ pl = pw = 1; >+ >+ /* see if there's room to add content, else ignore */ >++ if ( DrawFullLine ) >++ { >+ if ((col < COLS && wlen < destlen) || soft) >+ { >+ int pad; >+@@ -1259,6 +1261,52 @@ >+ 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 == '|') >+--- mx.c 2009-01-05 20:20:53.000000000 +0100 >++++ mx.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -611,6 +611,7 @@ >+ * 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) >+@@ -633,6 +634,8 @@ >+ ctx->quiet = 1; >+ if (flags & M_READONLY) >+ ctx->readonly = 1; >++ if (flags & M_PEEK) >++ ctx->peekonly = 1; >+ >+ if (flags & (M_APPEND|M_NEWFOLDER)) >+ { >+@@ -732,9 +735,21 @@ >+ 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); >+--- pager.c 2009-01-05 20:20:53.000000000 +0100 >++++ pager.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -29,6 +29,7 @@ >+ #include "pager.h" >+ #include "attach.h" >+ #include "mbyte.h" >++#include "sidebar.h" >+ >+ #include "mutt_crypt.h" >+ >+@@ -1060,6 +1061,8 @@ >+ 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)); >+@@ -1694,7 +1697,7 @@ >+ if ((redraw & REDRAW_BODY) || topline != oldtopline) >+ { >+ do { >+- move (bodyoffset, 0); >++ move (bodyoffset, SidebarWidth); >+ curline = oldtopline = topline; >+ lines = 0; >+ force_redraw = 0; >+@@ -1707,6 +1710,7 @@ >+ &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) >+ lines++; >+ curline++; >++ move(lines + bodyoffset, SidebarWidth); >+ } >+ last_offset = lineInfo[curline].offset; >+ } while (force_redraw); >+@@ -1720,6 +1724,7 @@ >+ 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. */ >+@@ -1743,22 +1748,22 @@ >+ /* print out the pager status bar */ >+ SETCOLOR (MT_COLOR_STATUS); >+ BKGDSET (MT_COLOR_STATUS); >+- CLEARLINE (statusoffset); >++ CLEARLINE_WIN (statusoffset); >+ if (IsHeader (extra)) >+ { >+- size_t l1 = COLS * MB_LEN_MAX; >++ size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; >+ size_t l2 = sizeof (buffer); >+ hfi.hdr = extra->hdr; >+ mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); >+ } >+ else if (IsMsgAttach (extra)) >+ { >+- size_t l1 = COLS * MB_LEN_MAX; >++ size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; >+ size_t l2 = sizeof (buffer); >+ hfi.hdr = extra->bdy->hdr; >+ mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); >+ } >+- mutt_paddstr (COLS, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); >++ mutt_paddstr (COLS-SidebarWidth, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); >+ BKGDSET (MT_COLOR_NORMAL); >+ SETCOLOR (MT_COLOR_NORMAL); >+ } >+@@ -1768,18 +1773,23 @@ >+ /* redraw the pager_index indicator, because the >+ * flags for this message might have changed. */ >+ menu_redraw_current (index); >++ draw_sidebar(MENU_PAGER); >+ >+ /* print out the index status bar */ >+ menu_status_line (buffer, sizeof (buffer), index, NONULL(Status)); >+ >+- 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); >+ } >+ >++ /* if we're not using the index, update every time */ >++ if ( index == 0 ) >++ draw_sidebar(MENU_PAGER); >++ >+ redraw = 0; >+ >+ if (option(OPTBRAILLEFRIENDLY)) { >+@@ -2671,6 +2681,13 @@ >+ 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; >+--- sidebar.c 1970-01-01 01:00:00.000000000 +0100 >++++ sidebar.c 2009-02-16 17:07:44.000000000 +0100 >+@@ -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 { >++ 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); >++ } 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 */ >++ } >++ 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); >++} >++ >+--- sidebar.h 1970-01-01 01:00:00.000000000 +0100 >++++ sidebar.h 2009-02-16 17:07:44.000000000 +0100 >+@@ -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 */
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 131752
: 93767