FreeBSD Bugzilla – Attachment 97214 Details for
Bug 135926
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), 173.78 KB, created by
Udo.Schweigert
on 2009-06-22 18:20:01 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
Udo.Schweigert
Created:
2009-06-22 18:20:01 UTC
Size:
173.78 KB
patch
obsolete
>diff -ru /usr/ports/mail/mutt-devel/Makefile ./Makefile >--- /usr/ports/mail/mutt-devel/Makefile 2009-06-06 06:09:40.000000000 +0200 >+++ ./Makefile 2009-06-22 18:18:23.000000000 +0200 >@@ -114,8 +114,8 @@ > # > > PORTNAME= mutt-devel >-PORTVERSION= 1.5.19 >-PORTREVISION?= 2 >+PORTVERSION= 1.5.20 >+PORTREVISION?= 0 > CATEGORIES+= mail ipv6 > .if defined(WITH_MUTT_NNTP) > CATEGORIES+= news >@@ -130,7 +130,6 @@ > ftp://ftp.mutt.org.ua/pub/mutt/mutt-${VVV_PATCH_VERSION}/:vvv \ > ftp://ftp3.mutt.org.ua/pub/mutt/mutt-${VVV_PATCH_VERSION}/:vvv \ > http://www.spinnaker.de/mutt/compressed/:rr \ >- http://cedricduval.free.fr/mutt/patches/download/:cd \ > http://lunar-linux.org/~tchan/mutt/:tchan > DISTNAME= mutt-${PORTVERSION} > DISTFILES= ${DISTNAME}${EXTRACT_SUFX} >@@ -141,7 +140,6 @@ > http://www3.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \ > ftp://ftp.mutt.org.ua/pub/mutt/mutt-${VVV_PATCH_VERSION}/:vvv \ > ftp://ftp3.mutt.org.ua/pub/mutt/mutt-${VVV_PATCH_VERSION}/:vvv \ >- http://cedricduval.free.fr/mutt/patches/download/:cd \ > http://home.woolridge.ca/mutt/patches/:dw \ > http://www.spinnaker.de/mutt/compressed/:rr \ > http://www.emaillab.org/mutt/${AC_PATCH_VERSION}/:jp \ >@@ -175,8 +173,6 @@ > > .include <bsd.port.pre.mk> > >-CD_PATCH_VERSION= 1.5.5.1 >-CD_IFDEF_PATCH_VERSION= 1.5.4 > DW_PATCH_VERSION= 1.5.6 > AC_PATCH_VERSION= 1.5.9 > VC_PATCH_VERSION= 1.5.16 >@@ -184,15 +180,9 @@ > .if !defined(VVV_PATCH_VERSION) > VVV_PATCH_VERSION= ${PORTVERSION} > .endif >-.if !defined(CD_PATCH_VERSION) >-CD_PATCH_VERSION= ${PORTVERSION} >-.endif > .if !defined(RR_PATCH_VERSION) > RR_PATCH_VERSION= ${PORTVERSION} > .endif >-.if !defined(CD_IFDEF_PATCH_VERSION) >-CD_IFDEF_PATCH_VERSION= ${CD_PATCH_VERSION} >-.endif > .if !defined(DW_PATCH_VERSION) > DW_PATCH_VERSION= ${PORTVERSION} > .endif >@@ -321,7 +311,7 @@ > @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-smime-outlook > .endif > .if defined(WITH_MUTT_SIGNATURE_MENU) >-IGNORE= The WITH_MUTT_SIGNATURE_MENU does not work at the moment. >+IGNORE= The WITH_MUTT_SIGNATURE_MENU does not work at the moment > XML_NEEDED= yes > post-patch:: > @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-signature-menu >@@ -425,25 +415,21 @@ > XML_NEEDED= yes > .endif > .if defined(WITH_MUTT_IFDEF_PATCH) >-DISTFILES+= patch-${CD_IFDEF_PATCH_VERSION}.cd.ifdef.1:cd >-#XML_NEEDED= yes >-pre-patch:: >- @${CAT} ${DISTDIR}/${DIST_SUBDIR}/patch-${CD_IFDEF_PATCH_VERSION}.cd.ifdef.1 > ${WRKDIR}/patch-ifdef >- @${REINPLACE_CMD} -E '/^diff.*\/doc\/manual.sgml.head$$/,/^diff/d' \ >- ${WRKDIR}/patch-ifdef >- @${PATCH} ${PATCH_ARGS} -p1 < ${WRKDIR}/patch-ifdef >+post-patch:: >+ @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-ifdef > .endif > .if defined(WITH_MUTT_MBOX_HOOK_PATCH) >-PATCHFILES+= p0-patch-${DW_MBOX_PATCH_VERSION}.dw.mbox-hook.1:dw >+IGNORE= The WITH_MUTT_MBOX_HOOK_PATCH does not work at the moment >+#PATCHFILES+= p0-patch-${DW_MBOX_PATCH_VERSION}.dw.mbox-hook.1:dw > .endif > .if defined(WITH_MUTT_SIDEBAR_PATCH) > XML_NEEDED= yes > .if defined(WITH_MUTT_NNTP) > post-patch:: >- @${PATCH} ${PATCH_ARGS} -p0 < ${PATCHDIR}/extra-patch-sidebar-nntp >+ @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-sidebar-nntp > .else > post-patch:: >- @${PATCH} ${PATCH_ARGS} -p0 < ${PATCHDIR}/extra-patch-sidebar >+ @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-sidebar > .endif > .endif > .if defined(WITH_MUTT_GREETING_PATCH) >diff -ru /usr/ports/mail/mutt-devel/distinfo ./distinfo >--- /usr/ports/mail/mutt-devel/distinfo 2009-03-04 13:30:06.000000000 +0100 >+++ ./distinfo 2009-06-22 08:34:13.000000000 +0200 >@@ -1,21 +1,21 @@ >-MD5 (mutt/mutt-1.5.19.tar.gz) = 73b3747bc7f7c805921e8d24ebac693f >-SHA256 (mutt/mutt-1.5.19.tar.gz) = b160baedf2676a4c2c1a5c74049e2c63f00fccff43ee2594367087a08bfd63c8 >-SIZE (mutt/mutt-1.5.19.tar.gz) = 3558746 >-MD5 (mutt/patch-1.5.19.rr.compressed.gz) = 3f0aa26613fc20c7c6f21995730c1fd5 >-SHA256 (mutt/patch-1.5.19.rr.compressed.gz) = d04a7c129d11e0e8a71ecf4992986f97df17843777b3f70136a2c88464977533 >-SIZE (mutt/patch-1.5.19.rr.compressed.gz) = 10143 >-MD5 (mutt/patch-1.5.19.vvv.nntp.gz) = 1e2ad0cb9b918f8382537752df0c9958 >-SHA256 (mutt/patch-1.5.19.vvv.nntp.gz) = 213c944d196eee81fd402e35a1d04b745e01bd63971f4319645b65cf9e61e4ef >-SIZE (mutt/patch-1.5.19.vvv.nntp.gz) = 55132 >+MD5 (mutt/mutt-1.5.20.tar.gz) = 027cdd9959203de0c3c64149a7ee351c >+SHA256 (mutt/mutt-1.5.20.tar.gz) = 9579fc079d74ff5c89223ff09df402ef4e508ba8ca925c49e74aa09c02a9a796 >+SIZE (mutt/mutt-1.5.20.tar.gz) = 3635047 >+MD5 (mutt/patch-1.5.20.rr.compressed.gz) = 5e608027bda1fddc2bc38c03a560f0a9 >+SHA256 (mutt/patch-1.5.20.rr.compressed.gz) = 87a7eed23ee234fcb3564e13bb034a3bfe858fb69677c7f8e7321446acf01034 >+SIZE (mutt/patch-1.5.20.rr.compressed.gz) = 10190 >+MD5 (mutt/patch-1.5.20.vvv.nntp.gz) = 80355166f8ae9bff064124f2d2e6870f >+SHA256 (mutt/patch-1.5.20.vvv.nntp.gz) = ea199ed303519ed816bded493cc4fe2985b497ec29b1c1c201f1428b1354260b >+SIZE (mutt/patch-1.5.20.vvv.nntp.gz) = 55449 > MD5 (mutt/patch-1.5.4.cd.ifdef.1) = a545036cdb55519154d0b35465f52daa > SHA256 (mutt/patch-1.5.4.cd.ifdef.1) = 7d11892bcc688bbc82b5996ca0fda2d4446d8e928bec50b2731f8a3a5d9be373 > SIZE (mutt/patch-1.5.4.cd.ifdef.1) = 3545 >-MD5 (mutt/patch-1.5.19.vvv.initials.gz) = 10fa7e4ccfb121c699ec79157231d4f7 >-SHA256 (mutt/patch-1.5.19.vvv.initials.gz) = f803dfb7dd747c2dc749bb4fe1364234c361cb0740e8072063101ab622ffa9e0 >-SIZE (mutt/patch-1.5.19.vvv.initials.gz) = 685 >-MD5 (mutt/patch-1.5.19.vvv.quote.gz) = ce3e7f010058948ed11f5b3daa55829c >-SHA256 (mutt/patch-1.5.19.vvv.quote.gz) = 2dc24cfe09c98197e0bef8c05aba78aba9348f5dda55c8b167d982ed47bdc683 >-SIZE (mutt/patch-1.5.19.vvv.quote.gz) = 1756 >+MD5 (mutt/patch-1.5.20.vvv.initials.gz) = c71ebc64f20f516f45168530d57f6c21 >+SHA256 (mutt/patch-1.5.20.vvv.initials.gz) = fc2cf1dadfab02545116fc70855cfe14f4efd8e1a32b9a6c366fc5e09bdafd23 >+SIZE (mutt/patch-1.5.20.vvv.initials.gz) = 690 >+MD5 (mutt/patch-1.5.20.vvv.quote.gz) = 1d6213598d354942006f17b2c46720f2 >+SHA256 (mutt/patch-1.5.20.vvv.quote.gz) = 7f3ea7999f00738c2dab0e67d69d76d354d14d0615c00784233e6d1149cb749d >+SIZE (mutt/patch-1.5.20.vvv.quote.gz) = 1772 > MD5 (mutt/p0-patch-1.5.18.dw.mbox-hook.1) = ae70a6668e297bdc804b2673221b4727 > SHA256 (mutt/p0-patch-1.5.18.dw.mbox-hook.1) = 12b9f41476850a5e2eed2334be9326e4905e8a6d786740689b6966a5d285070c > SIZE (mutt/p0-patch-1.5.18.dw.mbox-hook.1) = 6812 >diff -ru /usr/ports/mail/mutt-devel/files/extra-patch-ifdef ./files/extra-patch-ifdef >--- /usr/ports/mail/mutt-devel/files/extra-patch-ifdef 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/extra-patch-ifdef 2009-06-22 15:50:36.000000000 +0200 >@@ -0,0 +1,79 @@ >+--- mutt-1.5.4.orig/init.c 2003-03-04 08:49:48.000000000 +0100 >++++ mutt-1.5.4/init.c 2003-07-22 20:14:47.000000000 +0200 >+@@ -349,6 +349,52 @@ static void remove_from_list (LIST **l, >+ } >+ } >+ >++static int parse_ifdef (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err) >++{ >++ int i, j, res = 0; >++ BUFFER token; >++ >++ memset (&token, 0, sizeof (token)); >++ mutt_extract_token (tmp, s, 0); >++ >++ /* is the item defined as a variable or a function? */ >++ if (!(res = (mutt_option_index (tmp->data) != -1))) >++ for (i = 0; !res && i < MENU_MAX; i++) >++ { >++ struct binding_t *b = km_get_table (Menus[i].value); >++ >++ if (!b) >++ continue; >++ >++ for (j = 0; b[j].name; j++) >++ if (!ascii_strncasecmp (tmp->data, b[j].name, mutt_strlen (tmp->data)) >++ && (mutt_strlen (b[j].name) == mutt_strlen (tmp->data))) >++ { >++ res = 1; >++ break; >++ } >++ } >++ >++ if (!MoreArgs (s)) >++ { >++ snprintf (err->data, err->dsize, _("ifdef: too few arguments")); >++ return (-1); >++ } >++ mutt_extract_token (tmp, s, M_TOKEN_SPACE); >++ >++ if (res) >++ { >++ if (mutt_parse_rc_line (tmp->data, &token, err) == -1) >++ { >++ mutt_error ("Erreur: %s", err->data); >++ FREE (&token.data); >++ return (-1); >++ } >++ FREE (&token.data); >++ } >++ return 0; >++} >++ >+ static int parse_unignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) >+ { >+ do >+diff -pruN mutt-1.5.4.orig/init.h mutt-1.5.4/init.h >+--- mutt-1.5.4.orig/init.h.orig 2009-06-22 15:48:16.000000000 +0200 >++++ mutt-1.5.4/init.h 2009-06-22 15:49:28.000000000 +0200 >+@@ -3658,6 +3658,7 @@ >+ static int parse_unlists (BUFFER *, BUFFER *, unsigned long, BUFFER *); >+ static int parse_alias (BUFFER *, BUFFER *, unsigned long, BUFFER *); >+ static int parse_unalias (BUFFER *, BUFFER *, unsigned long, BUFFER *); >++static int parse_ifdef (BUFFER *, BUFFER *, unsigned long, BUFFER *); >+ static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *); >+ static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *); >+ static int parse_source (BUFFER *, BUFFER *, unsigned long, BUFFER *); >+@@ -3715,6 +3716,7 @@ >+ { "hdr_order", parse_list, UL &HeaderOrderList }, >+ #ifdef HAVE_ICONV >+ { "iconv-hook", mutt_parse_hook, M_ICONVHOOK }, >++ { "ifdef", parse_ifdef, 0 }, >+ #endif >+ { "ignore", parse_ignore, 0 }, >+ { "lists", parse_lists, 0 }, >+diff -pruN mutt-1.5.4.orig/PATCHES mutt-1.5.4/PATCHES >+--- mutt-1.5.4.orig/PATCHES 2003-03-19 22:33:37.000000000 +0100 >++++ mutt-1.5.4/PATCHES 2003-07-22 20:14:47.000000000 +0200 >+@@ -1,0 +1 @@ >++patch-1.5.4.cd.ifdef.1 >diff -ru /usr/ports/mail/mutt-devel/files/extra-patch-sidebar ./files/extra-patch-sidebar >--- /usr/ports/mail/mutt-devel/files/extra-patch-sidebar 2009-06-06 06:09:40.000000000 +0200 >+++ ./files/extra-patch-sidebar 2009-06-22 15:24:47.000000000 +0200 >@@ -1,1053 +1,80 @@ >---- Makefile.am 2009-01-05 20:20:53.000000000 +0100 >-+++ Makefile.am 2009-02-17 08:13:07.000000000 +0100 >-@@ -29,7 +29,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) >- >---- OPS 2008-03-19 21:07:57.000000000 +0100 >-+++ OPS 2009-02-17 08:13:07.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-17 08:17:03.000000000 +0100 >-@@ -0,0 +1 @@ >-+patch-1.5.19.sidebar.20090523 >---- buffy.h 2008-05-22 20:25:19.000000000 +0200 >-+++ buffy.h 2009-02-17 08:13:07.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-17 08:18:58.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-17 08:13:07.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-17 08:13:07.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,13 @@ >- 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 (); >-+ } >-+ >- } >+*** mutt-1.5.20-orig/buffy.c 2009-06-02 12:16:26.000000000 -0500 >+--- mutt-1.5.20-patched/buffy.c 2009-06-19 22:37:02.000000000 -0500 >+*************** >+*** 159,164 **** >+--- 159,207 ---- >+ } >+ } >+ >++ static int buffy_compare_name(const void *a, const void *b) { >++ const BUFFY *b1 = * (BUFFY * const *) a; >++ const BUFFY *b2 = * (BUFFY * const *) b; >++ >++ return mutt_strcoll(b1->path, b2->path); >++ } >++ >++ static BUFFY *buffy_sort(BUFFY *b) >++ { >++ BUFFY *tmp = b; >++ int buffycount = 0; >++ BUFFY **ary; >++ int i; >++ >++ if (!option(OPTSIDEBARSORT)) >++ return b; >++ >++ for (; tmp != NULL; tmp = tmp->next) >++ buffycount++; >++ >++ ary = (BUFFY **) safe_calloc(buffycount, sizeof (*ary)); >++ >++ tmp = b; >++ for (i = 0; tmp != NULL; tmp = tmp->next, i++) { >++ ary[i] = tmp; >++ } >++ >++ qsort(ary, buffycount, sizeof(*ary), buffy_compare_name); >++ >++ for (i = 0; i < buffycount - 1; i++) { >++ ary[i]->next = ary[i+1]; >++ } >++ ary[buffycount - 1]->next = NULL; >++ for (i = 1; i < buffycount; i++) { >++ ary[i]->prev = ary[i-1]; >++ } >++ ary[0]->prev = NULL; >++ >++ tmp = ary[0]; >++ free(ary); >++ return tmp; >++ } >++ >+ BUFFY *mutt_find_mailbox (const char *path) >+ { >+ BUFFY *tmp = NULL; >+*************** >+*** 271,276 **** >+--- 314,320 ---- > else >- do_buffy_notify = 1; >-@@ -536,6 +544,7 @@ >- if (menu->redraw & REDRAW_FULL) >- { >- menu_redraw_full (menu); >-+ draw_sidebar(menu->menu); >- mutt_show_error (); >- } >- >-@@ -558,10 +567,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 +587,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 +1060,7 @@ >- menu->redraw = REDRAW_FULL; >- break; >- >-+ case OP_SIDEBAR_OPEN: >- case OP_MAIN_CHANGE_FOLDER: >- case OP_MAIN_NEXT_UNREAD_MAILBOX: >- >-@@ -1079,7 +1092,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 +1114,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 +2194,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); >---- doc/Muttrc.head 2008-06-14 02:08:43.000000000 +0200 >-+++ doc/Muttrc.head 2009-02-17 08:13:07.000000000 +0100 >-@@ -42,6 +42,29 @@ >- # be undone with unmime_lookup. >- mime_lookup application/octet-stream >- >-+## Sidebar specific >-+ >-+# set sidebar_visible=no >-+# >-+# Name: sidebar_visible >-+# Type: boolean >-+# Default: no >-+# >-+# >-+# This specifies whether or not to show sidebar (left-side list of folders). >-+# >-+# >-+# set sidebar_width=0 >-+# >-+# Name: sidebar_width >-+# Type: number >-+# Default: 0 >-+# >-+# >-+# The width of the sidebar. >-+# >-+# >-+ >- ## >- ## *** DEFAULT SETTINGS FOR THE ATTACHMENTS PATCH *** >- ## >---- flags.c 2009-01-04 00:27:10.000000000 +0100 >-+++ flags.c 2009-02-17 08:13:07.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-17 08:13:07.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-17 08:13:07.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; >---- imap/command.c 2009-01-06 00:57:30.000000000 +0100 >-+++ imap/command.c 2009-02-17 08:13:07.000000000 +0100 >-@@ -1009,6 +1009,13 @@ >- 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; >- } >---- imap/imap.c 2009-01-06 00:50:39.000000000 +0100 >-+++ imap/imap.c 2009-02-17 08:13:07.000000000 +0100 >-@@ -1513,7 +1513,7 @@ >- >- 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) >- { >---- init.h 2009-01-05 20:20:53.000000000 +0100 >-+++ init.h 2009-02-17 08:13:07.000000000 +0100 >-@@ -1587,6 +1587,22 @@ >- ** If \Fi``no''\fP, never attempt to verify cryptographic signatures. >- ** (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. >-+ */ >- { "smime_is_default", DT_BOOL, R_NONE, OPTSMIMEISDEFAULT, 0}, >- /* >- ** .pp >---- mailbox.h 2008-03-19 21:07:06.000000000 +0100 >-+++ mailbox.h 2009-02-17 08:13:07.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-17 08:13:07.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-17 08:24:55.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-17 08:13:07.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-17 08:26:03.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,7 +127,9 @@ >- MT_COLOR_BOLD, >- MT_COLOR_UNDERLINE, >- MT_COLOR_INDEX, >-- MT_COLOR_MAX >-+ MT_COLOR_MAX, >-+ MT_COLOR_NEW, >-+ MT_COLOR_FLAGGED, >- }; >- >- typedef struct color_line >---- mx.c 2009-01-05 20:20:53.000000000 +0100 >-+++ mx.c 2009-02-17 08:13:07.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); >---- sidebar.c 1970-01-01 01:00:00.000000000 +0100 >-+++ sidebar.c 2009-02-17 08:13:08.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-17 08:13:08.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 */ >-*** buffy.c.orig 2008-08-29 18:39:48.000000000 -0500 >---- buffy.c 2009-05-22 08:45:01.000000000 -0500 >+ (*tmp)->size = 0; >+ } >++ Incoming = buffy_sort(Incoming); >+ return 0; >+ } >+ > *************** >-*** 259,265 **** >+*** 290,295 **** >+--- 334,340 ---- > char path[_POSIX_PATH_MAX]; > struct stat contex_sb; > time_t t; >-! >- #ifdef USE_IMAP >- /* update postponed count as well, on force */ >- if (force) >---- 259,265 ---- >- char path[_POSIX_PATH_MAX]; >- struct stat contex_sb; >- time_t t; >-! CONTEXT *ctx; >- #ifdef USE_IMAP >- /* update postponed count as well, on force */ >- if (force) >++ CONTEXT *ctx; >+ >+ sb.st_size=0; >+ contex_sb.st_dev=0; > *************** >-*** 294,299 **** >---- 294,301 ---- >+*** 329,334 **** >+--- 374,381 ---- > > for (tmp = Incoming; tmp; tmp = tmp->next) > { >@@ -1057,7 +84,7 @@ > if (tmp->magic != M_IMAP) > #endif > *************** >-*** 350,359 **** >+*** 385,394 **** > case M_MBOX: > case M_MMDF: > >@@ -1068,7 +95,7 @@ > } > else if (option(OPTCHECKMBOXSIZE)) > { >---- 352,378 ---- >+--- 432,458 ---- > case M_MBOX: > case M_MMDF: > >@@ -1097,7 +124,7 @@ > else if (option(OPTCHECKMBOXSIZE)) > { > *************** >-*** 363,397 **** >+*** 398,432 **** > if (tmp->newly_created && > (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) > tmp->newly_created = 0; >@@ -1133,7 +160,7 @@ > break; > } > } >---- 382,467 ---- >+--- 462,547 ---- > if (tmp->newly_created && > (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) > tmp->newly_created = 0; >@@ -1220,11 +247,867 @@ > break; > } > } >-*** muttlib.c.orig 2009-01-05 13:20:53.000000000 -0600 >---- muttlib.c 2009-05-21 23:08:38.000000000 -0500 >+*** 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/compose.c 2009-03-31 01:52:43.000000000 -0500 >+--- mutt-1.5.20-patched/compose.c 2009-06-19 22:07:04.000000000 -0500 >+*************** >+*** 72,78 **** >+ >+ #define HDR_XOFFSET 10 >+ #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */ >+! #define W (COLS - HDR_XOFFSET) >+ >+ static char *Prompts[] = >+ { >+--- 72,78 ---- >+ >+ #define HDR_XOFFSET 10 >+ #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */ >+! #define W (COLS - HDR_XOFFSET - SidebarWidth) >+ >+ static char *Prompts[] = >+ { >+*************** >+*** 115,130 **** >+ if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME)) >+ { >+ if (!msg->security) >+! mvaddstr (HDR_CRYPT, 0, "Security: "); >+ else if (msg->security & APPLICATION_SMIME) >+! mvaddstr (HDR_CRYPT, 0, " S/MIME: "); >+ else if (msg->security & APPLICATION_PGP) >+! mvaddstr (HDR_CRYPT, 0, " PGP: "); >+ } >+ else if ((WithCrypto & APPLICATION_SMIME)) >+! mvaddstr (HDR_CRYPT, 0, " S/MIME: "); >+ else if ((WithCrypto & APPLICATION_PGP)) >+! mvaddstr (HDR_CRYPT, 0, " PGP: "); >+ else >+ return; >+ >+--- 115,130 ---- >+ if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME)) >+ { >+ if (!msg->security) >+! mvaddstr (HDR_CRYPT, SidebarWidth, "Security: "); >+ else if (msg->security & APPLICATION_SMIME) >+! mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); >+ else if (msg->security & APPLICATION_PGP) >+! mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); >+ } >+ else if ((WithCrypto & APPLICATION_SMIME)) >+! mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); >+ else if ((WithCrypto & APPLICATION_PGP)) >+! mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); >+ else >+ return; >+ >+*************** >+*** 148,154 **** >+ } >+ clrtoeol (); >+ >+! move (HDR_CRYPTINFO, 0); >+ clrtoeol (); >+ if ((WithCrypto & APPLICATION_PGP) >+ && msg->security & APPLICATION_PGP && msg->security & SIGN) >+--- 148,154 ---- >+ } >+ clrtoeol (); >+ >+! move (HDR_CRYPTINFO, SidebarWidth); >+ clrtoeol (); >+ if ((WithCrypto & APPLICATION_PGP) >+ && msg->security & APPLICATION_PGP && msg->security & SIGN) >+*************** >+*** 164,170 **** >+ && (msg->security & ENCRYPT) >+ && SmimeCryptAlg >+ && *SmimeCryptAlg) { >+! mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "), >+ NONULL(SmimeCryptAlg)); >+ off = 20; >+ } >+--- 164,170 ---- >+ && (msg->security & ENCRYPT) >+ && SmimeCryptAlg >+ && *SmimeCryptAlg) { >+! mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "), >+ NONULL(SmimeCryptAlg)); >+ off = 20; >+ } >+*************** >+*** 178,184 **** >+ int c; >+ char *t; >+ >+! mvaddstr (HDR_MIX, 0, " Mix: "); >+ >+ if (!chain) >+ { >+--- 178,184 ---- >+ int c; >+ char *t; >+ >+! mvaddstr (HDR_MIX, SidebarWidth, " Mix: "); >+ >+ if (!chain) >+ { >+*************** >+*** 193,199 **** >+ if (t && t[0] == '0' && t[1] == '\0') >+ t = "<random>"; >+ >+! if (c + mutt_strlen (t) + 2 >= COLS) >+ break; >+ >+ addstr (NONULL(t)); >+--- 193,199 ---- >+ if (t && t[0] == '0' && t[1] == '\0') >+ t = "<random>"; >+ >+! if (c + mutt_strlen (t) + 2 >= COLS - SidebarWidth) >+ break; >+ >+ addstr (NONULL(t)); >+*************** >+*** 245,251 **** >+ >+ buf[0] = 0; >+ rfc822_write_address (buf, sizeof (buf), addr, 1); >+! mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]); >+ mutt_paddstr (W, buf); >+ } >+ >+--- 245,251 ---- >+ >+ buf[0] = 0; >+ rfc822_write_address (buf, sizeof (buf), addr, 1); >+! mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]); >+ mutt_paddstr (W, buf); >+ } >+ >+*************** >+*** 255,264 **** >+ 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]); >+ 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]); >+ mutt_paddstr (W, fcc); >+ >+ if (WithCrypto) >+--- 255,264 ---- >+ 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, 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, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]); >+ mutt_paddstr (W, fcc); >+ >+ if (WithCrypto) >+*************** >+*** 269,275 **** >+ #endif >+ >+ SETCOLOR (MT_COLOR_STATUS); >+! mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments")); >+ BKGDSET (MT_COLOR_STATUS); >+ clrtoeol (); >+ >+--- 269,275 ---- >+ #endif >+ >+ SETCOLOR (MT_COLOR_STATUS); >+! mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments")); >+ BKGDSET (MT_COLOR_STATUS); >+ clrtoeol (); >+ >+*************** >+*** 307,313 **** >+ /* 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); >+ mutt_paddstr (W, buf); >+ >+ return 0; >+--- 307,313 ---- >+ /* 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+SidebarWidth); >+ mutt_paddstr (W, buf); >+ >+ return 0; >+*************** >+*** 552,558 **** >+ if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) >+ { >+ mutt_str_replace (&msg->env->subject, buf); >+! move (HDR_SUBJECT, HDR_XOFFSET); >+ clrtoeol (); >+ if (msg->env->subject) >+ mutt_paddstr (W, msg->env->subject); >+--- 552,558 ---- >+ if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) >+ { >+ mutt_str_replace (&msg->env->subject, buf); >+! move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth); >+ clrtoeol (); >+ if (msg->env->subject) >+ mutt_paddstr (W, msg->env->subject); >+*************** >+*** 569,575 **** >+ { >+ strfcpy (fcc, buf, fcclen); >+ mutt_pretty_mailbox (fcc, fcclen); >+! move (HDR_FCC, HDR_XOFFSET); >+ mutt_paddstr (W, fcc); >+ fccSet = 1; >+ } >+--- 569,575 ---- >+ { >+ strfcpy (fcc, buf, fcclen); >+ mutt_pretty_mailbox (fcc, fcclen); >+! move (HDR_FCC, HDR_XOFFSET + SidebarWidth); >+ mutt_paddstr (W, fcc); >+ fccSet = 1; >+ } >+*** 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) >+ { >+ 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) >+ */ >++ {"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 */ >+*** mutt-1.5.20-orig/Makefile.am 2009-01-04 20:11:29.000000000 -0600 >+--- mutt-1.5.20-patched/Makefile.am 2009-06-19 22:07:04.000000000 -0500 > *************** >-*** 1217,1222 **** >---- 1217,1224 ---- >+*** 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.20-orig/Makefile.in 2009-06-09 01:50:44.000000000 -0500 >+--- mutt-1.5.20-patched/Makefile.in 2009-06-19 22:07:04.000000000 -0500 >+*************** >+*** 85,91 **** >+ 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) >+--- 85,92 ---- >+ 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) >+*************** >+*** 356,362 **** >+ 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) \ >+--- 357,364 ---- >+ 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) \ >+*************** >+*** 388,394 **** >+ 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 >+--- 390,396 ---- >+ 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.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 */ >@@ -1234,8 +1117,8 @@ > { > int pad; > *************** >-*** 1259,1264 **** >---- 1261,1312 ---- >+*** 1274,1279 **** >+--- 1276,1327 ---- > col += wid; > src += pl; > } >@@ -1288,8 +1171,68 @@ > break; /* skip rest of input */ > } > else if (ch == '|') >-*** pager.c.orig 2009-01-05 13:20:53.000000000 -0600 >---- pager.c 2009-05-21 23:08:38.000000000 -0500 >+*** 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 >+ */ >+ 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" >+*** mutt-1.5.20-orig/pager.c 2009-06-03 15:48:31.000000000 -0500 >+--- mutt-1.5.20-patched/pager.c 2009-06-19 22:19:58.000000000 -0500 > *************** > *** 29,34 **** > --- 29,35 ---- >@@ -1301,8 +1244,8 @@ > #include "mutt_crypt.h" > > *************** >-*** 1060,1065 **** >---- 1061,1068 ---- >+*** 1071,1076 **** >+--- 1072,1079 ---- > mbstate_t mbstate; > > int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap); >@@ -1312,7 +1255,7 @@ > /* FIXME: this should come from lineInfo */ > memset(&mbstate, 0, sizeof(mbstate)); > *************** >-*** 1694,1700 **** >+*** 1717,1723 **** > if ((redraw & REDRAW_BODY) || topline != oldtopline) > { > do { >@@ -1320,7 +1263,7 @@ > curline = oldtopline = topline; > lines = 0; > force_redraw = 0; >---- 1697,1703 ---- >+--- 1720,1726 ---- > if ((redraw & REDRAW_BODY) || topline != oldtopline) > { > do { >@@ -1329,8 +1272,8 @@ > lines = 0; > force_redraw = 0; > *************** >-*** 1707,1712 **** >---- 1710,1716 ---- >+*** 1730,1735 **** >+--- 1733,1739 ---- > &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) > lines++; > curline++; >@@ -1339,8 +1282,8 @@ > last_offset = lineInfo[curline].offset; > } while (force_redraw); > *************** >-*** 1720,1725 **** >---- 1724,1730 ---- >+*** 1743,1748 **** >+--- 1747,1753 ---- > addch ('~'); > addch ('\n'); > lines++; >@@ -1349,54 +1292,52 @@ > /* We are going to update the pager status bar, so it isn't > * necessary to reset to normal color now. */ > *************** >-*** 1743,1764 **** >+*** 1766,1786 **** > /* print out the pager status bar */ > SETCOLOR (MT_COLOR_STATUS); > BKGDSET (MT_COLOR_STATUS); > ! CLEARLINE (statusoffset); >- if (IsHeader (extra)) >+ >+ if (IsHeader (extra) || IsMsgAttach (extra)) > { > ! size_t l1 = COLS * MB_LEN_MAX; > size_t l2 = sizeof (buffer); >- hfi.hdr = extra->hdr; >+ hfi.hdr = (IsHeader (extra)) ? extra->hdr : extra->bdy->hdr; > mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); >+! mutt_paddstr (COLS, buffer); > } >- else if (IsMsgAttach (extra)) >+ else > { >-! size_t l1 = COLS * 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); >+ char bn[STRING]; >+ snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str); >+! mutt_paddstr (COLS, bn); > } >-! mutt_paddstr (COLS, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); > BKGDSET (MT_COLOR_NORMAL); > SETCOLOR (MT_COLOR_NORMAL); >- } >---- 1748,1769 ---- >+--- 1771,1791 ---- > /* print out the pager status bar */ > SETCOLOR (MT_COLOR_STATUS); > BKGDSET (MT_COLOR_STATUS); > ! CLEARLINE_WIN (statusoffset); >- if (IsHeader (extra)) >+ >+ if (IsHeader (extra) || IsMsgAttach (extra)) > { > ! size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; > size_t l2 = sizeof (buffer); >- hfi.hdr = extra->hdr; >+ hfi.hdr = (IsHeader (extra)) ? extra->hdr : extra->bdy->hdr; > mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); >+! mutt_paddstr (COLS-SidebarWidth, buffer); > } >- else if (IsMsgAttach (extra)) >+ else > { >-! 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); >+ char bn[STRING]; >+ snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str); >+! mutt_paddstr (COLS-SidebarWidth, bn); > } >-! mutt_paddstr (COLS-SidebarWidth, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); > BKGDSET (MT_COLOR_NORMAL); > SETCOLOR (MT_COLOR_NORMAL); >- } > *************** >-*** 1768,1785 **** >+*** 1791,1808 **** > /* redraw the pager_index indicator, because the > * flags for this message might have changed. */ > menu_redraw_current (index); >@@ -1415,7 +1356,7 @@ > redraw = 0; > > if (option(OPTBRAILLEFRIENDLY)) { >---- 1773,1795 ---- >+--- 1796,1818 ---- > /* redraw the pager_index indicator, because the > * flags for this message might have changed. */ > menu_redraw_current (index); >@@ -1440,8 +1381,8 @@ > > if (option(OPTBRAILLEFRIENDLY)) { > *************** >-*** 2671,2676 **** >---- 2681,2693 ---- >+*** 2729,2734 **** >+--- 2739,2751 ---- > mutt_what_key (); > break; > >@@ -1455,3 +1396,456 @@ > 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); >++ } 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); >++ } >++ >+*** 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 */ >+*** 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 >+*************** >+*** 657,662 **** >+--- 657,682 ---- >+ # $crypt_autosign, $crypt_replysign and $smime_is_default. >+ # >+ # >++ # set sidebar_visible=no >++ # >++ # Name: sidebar_visible >++ # Type: boolean >++ # Default: no >++ # >++ # >++ # This specifies whether or not to show sidebar (left-side list of folders). >++ # >++ # >++ # set sidebar_width=0 >++ # >++ # Name: sidebar_width >++ # Type: number >++ # Default: 0 >++ # >++ # >++ # The width of the sidebar. >++ # >++ # >+ # 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; >+ } >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 2009-06-06 06:09:40.000000000 +0200 >+++ ./files/extra-patch-sidebar-nntp 2009-06-22 15:37:36.000000000 +0200 >@@ -1,1067 +1,80 @@ >---- Makefile.am 2009-01-05 20:20:53.000000000 +0100 >-+++ Makefile.am 2009-02-17 08:13:07.000000000 +0100 >-@@ -29,7 +29,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) >- >---- OPS 2008-03-19 21:07:57.000000000 +0100 >-+++ OPS 2009-02-17 08:13:07.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-17 08:17:03.000000000 +0100 >-@@ -0,0 +1 @@ >-+patch-1.5.17.sidebar.20080412 >---- buffy.h 2008-05-22 20:25:19.000000000 +0200 >-+++ buffy.h 2009-02-17 08:13:07.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-17 08:18:58.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-02-17 08:37:14.000000000 +0100 >-+++ compose.c 2009-02-17 08:40:01.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-17 08:13:07.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,13 @@ >- 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 (); >-+ } >-+ >- } >+*** mutt-1.5.20-orig/buffy.c 2009-06-02 12:16:26.000000000 -0500 >+--- mutt-1.5.20-patched/buffy.c 2009-06-19 22:37:02.000000000 -0500 >+*************** >+*** 159,164 **** >+--- 159,207 ---- >+ } >+ } >+ >++ static int buffy_compare_name(const void *a, const void *b) { >++ const BUFFY *b1 = * (BUFFY * const *) a; >++ const BUFFY *b2 = * (BUFFY * const *) b; >++ >++ return mutt_strcoll(b1->path, b2->path); >++ } >++ >++ static BUFFY *buffy_sort(BUFFY *b) >++ { >++ BUFFY *tmp = b; >++ int buffycount = 0; >++ BUFFY **ary; >++ int i; >++ >++ if (!option(OPTSIDEBARSORT)) >++ return b; >++ >++ for (; tmp != NULL; tmp = tmp->next) >++ buffycount++; >++ >++ ary = (BUFFY **) safe_calloc(buffycount, sizeof (*ary)); >++ >++ tmp = b; >++ for (i = 0; tmp != NULL; tmp = tmp->next, i++) { >++ ary[i] = tmp; >++ } >++ >++ qsort(ary, buffycount, sizeof(*ary), buffy_compare_name); >++ >++ for (i = 0; i < buffycount - 1; i++) { >++ ary[i]->next = ary[i+1]; >++ } >++ ary[buffycount - 1]->next = NULL; >++ for (i = 1; i < buffycount; i++) { >++ ary[i]->prev = ary[i-1]; >++ } >++ ary[0]->prev = NULL; >++ >++ tmp = ary[0]; >++ free(ary); >++ return tmp; >++ } >++ >+ BUFFY *mutt_find_mailbox (const char *path) >+ { >+ BUFFY *tmp = NULL; >+*************** >+*** 271,276 **** >+--- 314,320 ---- > else >- do_buffy_notify = 1; >-@@ -536,6 +544,7 @@ >- if (menu->redraw & REDRAW_FULL) >- { >- menu_redraw_full (menu); >-+ draw_sidebar(menu->menu); >- mutt_show_error (); >- } >- >-@@ -558,10 +567,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 +587,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 +1060,7 @@ >- menu->redraw = REDRAW_FULL; >- break; >- >-+ case OP_SIDEBAR_OPEN: >- case OP_MAIN_CHANGE_FOLDER: >- case OP_MAIN_NEXT_UNREAD_MAILBOX: >- >-@@ -1079,7 +1092,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 +1114,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 +2194,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); >---- doc/Muttrc.head 2008-06-14 02:08:43.000000000 +0200 >-+++ doc/Muttrc.head 2009-02-17 08:13:07.000000000 +0100 >-@@ -42,6 +42,29 @@ >- # be undone with unmime_lookup. >- mime_lookup application/octet-stream >- >-+## Sidebar specific >-+ >-+# set sidebar_visible=no >-+# >-+# Name: sidebar_visible >-+# Type: boolean >-+# Default: no >-+# >-+# >-+# This specifies whether or not to show sidebar (left-side list of folders). >-+# >-+# >-+# set sidebar_width=0 >-+# >-+# Name: sidebar_width >-+# Type: number >-+# Default: 0 >-+# >-+# >-+# The width of the sidebar. >-+# >-+# >-+ >- ## >- ## *** DEFAULT SETTINGS FOR THE ATTACHMENTS PATCH *** >- ## >---- flags.c 2009-01-04 00:27:10.000000000 +0100 >-+++ flags.c 2009-02-17 08:13:07.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-17 08:13:07.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-17 08:13:07.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; >---- imap/command.c 2009-01-06 00:57:30.000000000 +0100 >-+++ imap/command.c 2009-02-17 08:13:07.000000000 +0100 >-@@ -1009,6 +1009,13 @@ >- 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; >- } >---- imap/imap.c 2009-01-06 00:50:39.000000000 +0100 >-+++ imap/imap.c 2009-02-17 08:13:07.000000000 +0100 >-@@ -1513,7 +1513,7 @@ >- >- 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) >- { >---- init.h 2009-01-05 20:20:53.000000000 +0100 >-+++ init.h 2009-02-17 08:13:07.000000000 +0100 >-@@ -1587,6 +1587,22 @@ >- ** If \Fi``no''\fP, never attempt to verify cryptographic signatures. >- ** (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. >-+ */ >- { "smime_is_default", DT_BOOL, R_NONE, OPTSMIMEISDEFAULT, 0}, >- /* >- ** .pp >---- mailbox.h 2008-03-19 21:07:06.000000000 +0100 >-+++ mailbox.h 2009-02-17 08:13:07.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-17 08:13:07.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-17 08:24:55.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-17 08:13:07.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-17 08:26:03.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,7 +127,9 @@ >- MT_COLOR_BOLD, >- MT_COLOR_UNDERLINE, >- MT_COLOR_INDEX, >-- MT_COLOR_MAX >-+ MT_COLOR_MAX, >-+ MT_COLOR_NEW, >-+ MT_COLOR_FLAGGED, >- }; >- >- typedef struct color_line >---- mx.c 2009-01-05 20:20:53.000000000 +0100 >-+++ mx.c 2009-02-17 08:13:07.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); >---- sidebar.c 1970-01-01 01:00:00.000000000 +0100 >-+++ sidebar.c 2009-02-17 08:13:08.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-17 08:13:08.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 */ >-*** buffy.c.orig 2008-08-29 18:39:48.000000000 -0500 >---- buffy.c 2009-05-22 08:45:01.000000000 -0500 >+ (*tmp)->size = 0; >+ } >++ Incoming = buffy_sort(Incoming); >+ return 0; >+ } >+ > *************** >-*** 259,265 **** >- char path[_POSIX_PATH_MAX]; >- struct stat contex_sb; >- time_t t; >-! >- #ifdef USE_IMAP >- /* update postponed count as well, on force */ >- if (force) >---- 259,265 ---- >+*** 290,295 **** >+--- 334,340 ---- > char path[_POSIX_PATH_MAX]; > struct stat contex_sb; > time_t t; >-! CONTEXT *ctx; >- #ifdef USE_IMAP >- /* update postponed count as well, on force */ >- if (force) >++ CONTEXT *ctx; >+ >+ sb.st_size=0; >+ contex_sb.st_dev=0; > *************** >-*** 294,299 **** >---- 294,301 ---- >+*** 329,334 **** >+--- 374,381 ---- > > for (tmp = Incoming; tmp; tmp = tmp->next) > { >@@ -1071,7 +84,7 @@ > if (tmp->magic != M_IMAP) > #endif > *************** >-*** 350,359 **** >+*** 385,394 **** > case M_MBOX: > case M_MMDF: > >@@ -1082,7 +95,7 @@ > } > else if (option(OPTCHECKMBOXSIZE)) > { >---- 352,378 ---- >+--- 432,458 ---- > case M_MBOX: > case M_MMDF: > >@@ -1111,7 +124,7 @@ > else if (option(OPTCHECKMBOXSIZE)) > { > *************** >-*** 363,397 **** >+*** 398,432 **** > if (tmp->newly_created && > (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) > tmp->newly_created = 0; >@@ -1147,7 +160,7 @@ > break; > } > } >---- 382,467 ---- >+--- 462,547 ---- > if (tmp->newly_created && > (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) > tmp->newly_created = 0; >@@ -1234,11 +247,637 @@ > break; > } > } >-*** muttlib.c.orig 2009-01-05 13:20:53.000000000 -0600 >---- muttlib.c 2009-05-21 23:08:38.000000000 -0500 >+*** 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) >+ { >+ 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) >+ */ >++ {"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 */ >+*** mutt-1.5.20-orig/Makefile.am 2009-01-04 20:11:29.000000000 -0600 >+--- mutt-1.5.20-patched/Makefile.am 2009-06-19 22:07:04.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.20-orig/Makefile.in 2009-06-09 01:50:44.000000000 -0500 >+--- mutt-1.5.20-patched/Makefile.in 2009-06-19 22:07:04.000000000 -0500 >+*************** >+*** 85,91 **** >+ 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) >+--- 85,92 ---- >+ 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) >+*************** >+*** 356,362 **** >+ 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) \ >+--- 357,364 ---- >+ 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) \ >+*************** >+*** 388,394 **** >+ 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 >+--- 390,396 ---- >+ 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.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 > *************** >-*** 1217,1222 **** >---- 1217,1224 ---- >+*** 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 */ >@@ -1248,8 +887,8 @@ > { > int pad; > *************** >-*** 1259,1264 **** >---- 1261,1312 ---- >+*** 1274,1279 **** >+--- 1276,1327 ---- > col += wid; > src += pl; > } >@@ -1302,8 +941,68 @@ > break; /* skip rest of input */ > } > else if (ch == '|') >-*** pager.c.orig 2009-01-05 13:20:53.000000000 -0600 >---- pager.c 2009-05-21 23:08:38.000000000 -0500 >+*** 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 >+ */ >+ 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" >+*** mutt-1.5.20-orig/pager.c 2009-06-03 15:48:31.000000000 -0500 >+--- mutt-1.5.20-patched/pager.c 2009-06-19 22:19:58.000000000 -0500 > *************** > *** 29,34 **** > --- 29,35 ---- >@@ -1315,8 +1014,8 @@ > #include "mutt_crypt.h" > > *************** >-*** 1060,1065 **** >---- 1061,1068 ---- >+*** 1071,1076 **** >+--- 1072,1079 ---- > mbstate_t mbstate; > > int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap); >@@ -1326,7 +1025,7 @@ > /* FIXME: this should come from lineInfo */ > memset(&mbstate, 0, sizeof(mbstate)); > *************** >-*** 1694,1700 **** >+*** 1717,1723 **** > if ((redraw & REDRAW_BODY) || topline != oldtopline) > { > do { >@@ -1334,7 +1033,7 @@ > curline = oldtopline = topline; > lines = 0; > force_redraw = 0; >---- 1697,1703 ---- >+--- 1720,1726 ---- > if ((redraw & REDRAW_BODY) || topline != oldtopline) > { > do { >@@ -1343,8 +1042,8 @@ > lines = 0; > force_redraw = 0; > *************** >-*** 1707,1712 **** >---- 1710,1716 ---- >+*** 1730,1735 **** >+--- 1733,1739 ---- > &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) > lines++; > curline++; >@@ -1353,8 +1052,8 @@ > last_offset = lineInfo[curline].offset; > } while (force_redraw); > *************** >-*** 1720,1725 **** >---- 1724,1730 ---- >+*** 1743,1748 **** >+--- 1747,1753 ---- > addch ('~'); > addch ('\n'); > lines++; >@@ -1363,54 +1062,52 @@ > /* We are going to update the pager status bar, so it isn't > * necessary to reset to normal color now. */ > *************** >-*** 1743,1764 **** >+*** 1766,1786 **** > /* print out the pager status bar */ > SETCOLOR (MT_COLOR_STATUS); > BKGDSET (MT_COLOR_STATUS); > ! CLEARLINE (statusoffset); >- if (IsHeader (extra)) >+ >+ if (IsHeader (extra) || IsMsgAttach (extra)) > { > ! size_t l1 = COLS * MB_LEN_MAX; > size_t l2 = sizeof (buffer); >- hfi.hdr = extra->hdr; >+ hfi.hdr = (IsHeader (extra)) ? extra->hdr : extra->bdy->hdr; > mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); >+! mutt_paddstr (COLS, buffer); > } >- else if (IsMsgAttach (extra)) >+ else > { >-! size_t l1 = COLS * 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); >+ char bn[STRING]; >+ snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str); >+! mutt_paddstr (COLS, bn); > } >-! mutt_paddstr (COLS, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); > BKGDSET (MT_COLOR_NORMAL); > SETCOLOR (MT_COLOR_NORMAL); >- } >---- 1748,1769 ---- >+--- 1771,1791 ---- > /* print out the pager status bar */ > SETCOLOR (MT_COLOR_STATUS); > BKGDSET (MT_COLOR_STATUS); > ! CLEARLINE_WIN (statusoffset); >- if (IsHeader (extra)) >+ >+ if (IsHeader (extra) || IsMsgAttach (extra)) > { > ! size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; > size_t l2 = sizeof (buffer); >- hfi.hdr = extra->hdr; >+ hfi.hdr = (IsHeader (extra)) ? extra->hdr : extra->bdy->hdr; > mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); >+! mutt_paddstr (COLS-SidebarWidth, buffer); > } >- else if (IsMsgAttach (extra)) >+ else > { >-! 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); >+ char bn[STRING]; >+ snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str); >+! mutt_paddstr (COLS-SidebarWidth, bn); > } >-! mutt_paddstr (COLS-SidebarWidth, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); > BKGDSET (MT_COLOR_NORMAL); > SETCOLOR (MT_COLOR_NORMAL); >- } > *************** >-*** 1768,1785 **** >+*** 1791,1808 **** > /* redraw the pager_index indicator, because the > * flags for this message might have changed. */ > menu_redraw_current (index); >@@ -1429,7 +1126,7 @@ > redraw = 0; > > if (option(OPTBRAILLEFRIENDLY)) { >---- 1773,1795 ---- >+--- 1796,1818 ---- > /* redraw the pager_index indicator, because the > * flags for this message might have changed. */ > menu_redraw_current (index); >@@ -1454,8 +1151,8 @@ > > if (option(OPTBRAILLEFRIENDLY)) { > *************** >-*** 2671,2676 **** >---- 2681,2693 ---- >+*** 2729,2734 **** >+--- 2739,2751 ---- > mutt_what_key (); > break; > >@@ -1469,3 +1166,597 @@ > 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); >++ } 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); >++ } >++ >+*** 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 */ >+*** 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 >+*************** >+*** 657,662 **** >+--- 657,682 ---- >+ # $crypt_autosign, $crypt_replysign and $smime_is_default. >+ # >+ # >++ # set sidebar_visible=no >++ # >++ # Name: sidebar_visible >++ # Type: boolean >++ # Default: no >++ # >++ # >++ # This specifies whether or not to show sidebar (left-side list of folders). >++ # >++ # >++ # set sidebar_width=0 >++ # >++ # Name: sidebar_width >++ # Type: number >++ # Default: 0 >++ # >++ # >++ # The width of the sidebar. >++ # >++ # >+ # 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; >+ } >+--- mutt-1.5.20-orig/compose.c.orig 2009-06-22 15:29:56.000000000 +0200 >++++ mutt-1.5.20-patched/compose.c 2009-06-22 15:33:16.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[] = >+ { >+@@ -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; >+ } >diff -ru /usr/ports/mail/mutt-devel/files/patch-doc-manual.xml.head ./files/patch-doc-manual.xml.head >--- /usr/ports/mail/mutt-devel/files/patch-doc-manual.xml.head 2007-12-13 06:09:19.000000000 +0100 >+++ ./files/patch-doc-manual.xml.head 2009-06-22 08:38:15.000000000 +0200 >@@ -1,5 +1,5 @@ >---- doc/manual.xml.head.orig Sun Nov 4 13:58:04 2007 >-+++ doc/manual.xml.head Sun Nov 4 14:08:23 2007 >+--- doc/manual.xml.head.orig 2009-06-22 08:35:06.000000000 +0200 >++++ doc/manual.xml.head 2009-06-22 08:37:31.000000000 +0200 > @@ -1,6 +1,6 @@ > <?xml version="1.0" standalone="no"?> > <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" >@@ -8,12 +8,12 @@ > <book> > > <bookinfo> >-@@ -6160,7 +6160,7 @@ >+@@ -7271,7 +7271,7 @@ > <para> > The built-in SMTP support supports encryption (the <literal>smtps</literal> protocol > using SSL or TLS) as well as SMTP authentication using SASL. The authentication mechanisms > -for SASL are specified in <link linkend="smtp-authenticators">$smtp_authenticators</link> > +for SASL are specified in <literal>$smtp_authenticators</literal> >- defaulting to an empty list which makes mutt try all available methods >+ defaulting to an empty list which makes Mutt try all available methods > from most-secure to least-secure. > </para> >diff -ru /usr/ports/mail/mutt-devel/files/patch-examples ./files/patch-examples >--- /usr/ports/mail/mutt-devel/files/patch-examples 2009-03-04 13:30:09.000000000 +0100 >+++ ./files/patch-examples 2009-06-22 15:12:27.000000000 +0200 >@@ -68,23 +68,22 @@ > > into your system's global Muttrc, which normally resides in /etc or > /usr/local/etc. >---- doc/manual.txt.orig 2009-01-06 01:37:18.000000000 +0100 >-+++ doc/manual.txt 2009-02-06 13:32:18.000000000 +0100 >-@@ -2982,9 +2982,10 @@ >+--- doc/manual.txt.orig 2009-06-14 20:54:56.000000000 +0200 >++++ doc/manual.txt 2009-06-22 15:11:26.000000000 +0200 >+@@ -3225,9 +3225,9 @@ > shows that arguments can be quoted: the script will receive the expanded string > between the single quotes as the only argument. > > -A practical example is the mutt_xtitle script installed in the samples >--subdirectory of the mutt documentation: it can be used as filter for >+-subdirectory of the Mutt documentation: it can be used as filter for > -$status_format to set the current terminal's title, if supported. > +A practical example is the mutt_xtitle script installed in the >-+share/examples/mutt/ subdirectory of the mutt documentation: it can be used as >++share/examples/mutt/ subdirectory of the Mutt documentation: it can be used as > +filter for $status_format to set the current terminal's title, if supported. >-+ > >- Chapter 4. Advanced Usage >+ 29.4. Padding > >-@@ -7576,8 +7577,8 @@ >+@@ -7740,8 +7740,8 @@ > > For examples on how to configure these formats for the various versions of PGP > which are floating around, see the pgp and gpg sample configuration files in >@@ -93,11 +92,11 @@ > +the share/examples/mutt/ subdirectory which has been installed on your system. > +(PGP only) > >- 3.170. pgp_getkeys_command >+ 3.158. pgp_decrypt_command > >-@@ -7809,9 +7810,9 @@ >- or file, this expands to ?-CApath $smime_ca_location? or ?-CAfile >- $smime_ca_location?. >+@@ -8751,9 +8751,9 @@ >+ | |$smime_ca_location?. | >+ +-----------------------------------------------------------------------------+ > > -For examples on how to configure these formats, see the smime.rc in the samples > -/ subdirectory which has been installed on your system alongside the >@@ -106,5 +105,5 @@ > +share/examples/mutt/ subdirectory which has been installed on your system. > +(S/MIME only) > >- 3.189. smime_verify_command >+ 3.244. smime_decrypt_use_default_key > >diff -ru /usr/ports/mail/mutt-devel/scripts/generate-plist ./scripts/generate-plist >--- /usr/ports/mail/mutt-devel/scripts/generate-plist 2009-03-04 13:30:09.000000000 +0100 >+++ ./scripts/generate-plist 2009-06-22 15:27:49.000000000 +0200 >@@ -134,6 +134,7 @@ > echo "%%DOCSDIR%%/html/miscellany.html" >> $tmp_first > echo "%%DOCSDIR%%/html/optionalfeatures.html" >> $tmp_first > echo "%%DOCSDIR%%/html/reference.html" >> $tmp_first >+ echo "%%DOCSDIR%%/html/security.html" >> $tmp_first > echo "%%DOCSDIR%%/html/tuning.html" >> $tmp_first > if [ "$MUTT_COMPRESSED_FOLDERS" = "yes" ]; then > echo "%%DOCSDIR%%/html/compressed-folders.html" >> $tmp_first
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 135926
: 97214