aboutsummaryrefslogtreecommitdiff
path: root/mail/mutt
diff options
context:
space:
mode:
authorAdam Weinberger <adamw@FreeBSD.org>2016-10-05 22:55:29 +0000
committerAdam Weinberger <adamw@FreeBSD.org>2016-10-05 22:55:29 +0000
commit7968adaf51574a7cc8462a7130a46407b6eb617b (patch)
treeb4c83e95eb2fc03c1d4f6b66ce0a7b32cd8b524e /mail/mutt
parent9ecc2f4ce05cc7a62a4a39a0a601ea726c71c5f4 (diff)
Update to 1.7.0. The sidebar patch is now an official part of mutt,
and is now controlled by a SIDEBAR option. The trash patch is now a non-optional part of mutt so its knob has disappeared completely. Also, pass maintainership to submitter. Udo has looked after this port for a long time; many thanks to him for all his work! Changes for 1.7.0: ! Improved alignment when using multi-column characters with soft-fill (%*X) and right-justified (%>X) format strings. + The COLUMNS environment variable will be set to the width of the pager when invoking display filters. This can be used in copiousoutput mailcap entries to allow their output to match the pager width. + The sidebar patch has been merged. Please watch for airborne bovine. See the documentation for all the options, or simply enable it with 'set sidebar_visible'. + $mail_check_stats and $mail_check_stats_interval control whether, and how often, to scan for unread, flagged, and total message counts when checking for new mail in mailboxes. These statistics can be displayed in the sidebar and browser. + $trash, when set, specifies the path of the folder where mails marked for deletion will be moved, instead of being irremediably purged. + The <purge-message> function can be used to delete an entry and bypass the trash folder. + $folder_format has new format strings %m and %n, to display total and unread message counts for mailboxes. Note that $mail_check_stats should be enabled to use these. ! When browsing IMAP, %N will now display 'N', instead of the unread message count. Please use %n to display unread messages. PR: 213180 Submitted by: dereks lifeofadishwasher com Approved by: outgoing maintainer (Udo Schweigert)
Notes
Notes: svn path=/head/; revision=423394
Diffstat (limited to 'mail/mutt')
-rw-r--r--mail/mutt/Makefile58
-rw-r--r--mail/mutt/distinfo25
-rw-r--r--mail/mutt/files/extra-patch-greeting13
-rw-r--r--mail/mutt/files/extra-patch-ifdef4
-rw-r--r--mail/mutt/files/extra-patch-maildir-mtime12
-rw-r--r--mail/mutt/files/extra-patch-maildir-mtime-nntp2
-rw-r--r--mail/mutt/files/extra-patch-pgp-dw12
-rw-r--r--mail/mutt/files/extra-patch-sidebar2373
-rw-r--r--mail/mutt/files/extra-patch-sidebar-nntp2288
-rw-r--r--mail/mutt/files/extra-patch-sidebar-refresh113
-rw-r--r--mail/mutt/files/extra-patch-trash-purge387
-rw-r--r--mail/mutt/files/patch-date-conditional2
-rw-r--r--mail/mutt/files/patch-smime-self2
-rw-r--r--mail/mutt/files/patch-threadcomplete27
14 files changed, 73 insertions, 5245 deletions
diff --git a/mail/mutt/Makefile b/mail/mutt/Makefile
index 9e11ccee9734..df2593c4870c 100644
--- a/mail/mutt/Makefile
+++ b/mail/mutt/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= mutt
-PORTVERSION= 1.6.1
+PORTVERSION= 1.7.0
PORTREVISION?= 0
CATEGORIES+= mail ipv6
MASTER_SITES= ftp://ftp.mutt.org/pub/mutt/ \
@@ -18,8 +18,10 @@ PATCH_SITES+= http://www.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \
http://www2.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \
http://home.woolridge.ca/mutt/patches/:dw
-MAINTAINER?= udo.schweigert@siemens.com
-COMMENT?= The Mongrel of Mail User Agents (development version)
+MAINTAINER?= dereks@lifeofadishwasher.com
+COMMENT?= The Mongrel of Mail User Agents
+
+LICENSE= GPLv2+
CONFLICTS?= ja-mutt-[0-9]* ja-mutt-devel-[0-9]* mutt-1.4* mutt-devel-lite-[0-9]* mutt-lite-[0-9]* zh-mutt-devel-[0-9]*
@@ -33,7 +35,7 @@ CONFIGURE_ARGS= --disable-fcntl --with-ssl=${OPENSSLBASE} \
--enable-external-dotlock --enable-pop --enable-imap \
--disable-warnings
-USES+= cpe shebangfix
+USES+= cpe shebangfix ssl
SHEBANG_FILES= doc/gen-map-doc smime_keys.pl contrib/smime_keys_test.pl
.if defined(MUTT_CONFIGURE_ARGS)
@@ -43,7 +45,6 @@ CONFIGURE_ARGS+= ${MUTT_CONFIGURE_ARGS}
USES+= autoreconf
GNU_CONFIGURE= yes
AUTOMAKE_ARGS= --add-missing --foreign
-USE_OPENSSL= yes
OPTIONS_SUB= yes
@@ -60,9 +61,9 @@ OPTIONS_DEFINE= COMPRESSED_FOLDERS SASL DEBUG DOCS EXAMPLES FLOCK \
IMAP_HEADER_CACHE LOCALES_FIX MAILBOX_MANPAGES \
MAILDIR_HEADER_CACHE MAILDIR_MTIME_PATCH \
MIXMASTER NLS NNTP PARENT_CHILD_MATCH_PATCH \
- QUOTE_PATCH REVERSE_REPLY_PATCH SIDEBAR_PATCH \
+ QUOTE_PATCH REVERSE_REPLY_PATCH SIDEBAR \
SMART_DATE SMIME_OUTLOOK_COMPAT SMTP TOKYOCABINET \
- TRASH_PATCH URLVIEW XML
+ URLVIEW XML
OPTIONS_SINGLE= GSSAPI SCREEN
OPTIONS_RADIO= SPELL
@@ -91,13 +92,12 @@ NLS_DESC= Native language support (implies ICONV)
PARENT_CHILD_MATCH_PATCH_DESC= Parent/child match
QUOTE_PATCH_DESC= Extended quoting
REVERSE_REPLY_PATCH_DESC= Reverse_reply
-SIDEBAR_PATCH_DESC= Sidebar support
+SIDEBAR_DESC= Sidebar support
SLANG_DESC= SLANG support
SMART_DATE_DESC= Dynamic date formatting with "%@"
SMIME_OUTLOOK_COMPAT_DESC= SMIME outlook compatibility
SMTP_DESC= SMTP relay support
TOKYOCABINET_DESC= Use tokyocabinet instead of Berkley DB
-TRASH_PATCH_DESC= Trash folder support
URLVIEW_DESC= Use urlview for the URL selector menu
XML_DESC= Use XML tools for rebuilding documentation
@@ -106,16 +106,16 @@ OPTIONS_DEFAULT= COMPRESSED_FOLDERS HTML ICONV IDN IFDEF_PATCH \
MAILDIR_HEADER_CACHE MAILDIR_MTIME_PATCH NLS \
NCURSES PARENT_CHILD_MATCH_PATCH QUOTE_PATCH \
REVERSE_REPLY_PATCH SMART_DATE SMIME_OUTLOOK_COMPAT \
- SASL SMTP TRASH_PATCH URLVIEW XML GSSAPI_NONE
+ SASL SMTP URLVIEW XML GSSAPI_NONE
.endif
RUN_DEPENDS+= ${LOCALBASE}/etc/mime.types:misc/mime-support
.if !defined (LITE)
ASPELL_BUILD_DEPENDS= aspell:textproc/aspell
-ASPELL_RUN_DEPENDS= aspell:textproc/aspell
+ASPELL_RUN_DEPENDS= aspell:textproc/aspell
ISPELL_BUILD_DEPENDS= ispell:textproc/aspell-ispell
-ISPELL_RUN_DEPENDS= ispell:textproc/aspell-ispell
+ISPELL_RUN_DEPENDS= ispell:textproc/aspell-ispell
URLVIEW_RUN_DEPENDS= urlview:textproc/urlview
.endif
@@ -141,7 +141,8 @@ SLANG_VARS= PKGMESSAGE=${FILESDIR}/pkg-message.slang
NCURSES_USES= ncurses
NLS_USES= gettext
-NLS_CONFIGURE_OFF= --disable-nls
+NLS_CONFIGURE_ENABLE= nls
+#NLS_CONFIGURE_OFF= --disable-nls
NLS_IMPLIES= ICONV
# Handle GSSAPI from various places
@@ -171,22 +172,18 @@ MIXMASTER_CONFIGURE_ON= --with-mixmaster=${LOCALBASE}
SMIME_OUTLOOK_COMPAT_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-smime-outlook
SMART_DATE_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-smartdate
-FLOCK_CONFIGURE_ON= --enable-flock
-FLOCK_CONFIGURE_OFF= --disable-flock
+FLOCK_CONFIGURE_ENABLE= flock
LOCALES_FIX_CONFIGURE_ON= --enable-locales-fix
IDN_LIB_DEPENDS= libidn.so:dns/libidn
-IDN_CONFIGURE_ON= --with-idn
-IDN_CONFIGURE_OFF= --without-idn
+IDN_CONFIGURE_WITH= idn
IDN_IMPLIES= ICONV
GPGME_LIB_DEPENDS= libgpgme.so:security/gpgme
-GPGME_CONFIGURE_ON= --enable-gpgme
-GPGME_CONFIGURE_OFF= --disable-gpgme
+GPGME_CONFIGURE_ENABLE= gpgme
-SMTP_CONFIGURE_ON= --enable-smtp
-SMTP_CONFIGURE_OFF= --disable-smtp
+SMTP_CONFIGURE_ENABLE= smtp
MAILDIR_HEADER_CACHE_CONFIGURE_OFF= --without-qdbm
@@ -195,7 +192,7 @@ COMPRESSED_FOLDERS_CONFIGURE_ON= --enable-compressed
COMPRESSED_FOLDERS_VARS= XML_NEEDED=yes
QUOTE_PATCH_PATCHFILES= patch-${VVV_PATCH_VERSION}.vvv.initials.gz:vvv \
- patch-${VVV_PATCH_VERSION}.vvv.quote.gz:vvv
+ patch-${VVV_PATCH_VERSION}.vvv.quote.gz:vvv
QUOTE_PATCH_VARS= XML_NEEDED=yes
NNTP_DISTFILES= patch-${VVV_PATCH_VERSION}.vvv.nntp.gz:vvv \
@@ -204,15 +201,15 @@ NNTP_CONFIGURE_ON= --enable-nntp
NNTP_VARS= XML_NEEDED=yes
NNTP_CATEGORIES= news
-SIDEBAR_PATCH_VARS= XML_NEEDED=yes
+SIDEBAR_CONFIGURE_ENABLE= sidebar
+SIDEBAR_CONFIGURE_ON= --enable-sidebar
+SIDEBAR_VARS= XML_NEEDED=yes
DOCS_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-doc-ref
.include <bsd.port.options.mk>
DW_PATCH_VERSION= 1.5.6
-VVV_PATCH_VERSION:= 1.6.0
-RR_PATCH_VERSION:= 1.6.0
.if !defined(VVV_PATCH_VERSION)
VVV_PATCH_VERSION= ${PORTVERSION}
.endif
@@ -255,10 +252,6 @@ pre-patch-NNTP-on:
@${PATCH} ${PATCH_ARGS} -p1 < ${WRKDIR}/patch-nntp
post-patch-NNTP-on:
-.if ${PORT_OPTIONS:MSIDEBAR_PATCH}
- @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-sidebar-nntp
- @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-sidebar-refresh
-.endif
.if ${PORT_OPTIONS:MMAILDIR_MTIME_PATCH}
@${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-maildir-mtime-nntp
.endif
@@ -267,10 +260,6 @@ post-patch-NNTP-on:
.endif
post-patch-NNTP-off:
-.if ${PORT_OPTIONS:MSIDEBAR_PATCH}
- @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-sidebar
- @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-sidebar-refresh
-.endif
.if ${PORT_OPTIONS:MMAILDIR_MTIME_PATCH}
@${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-maildir-mtime
.endif
@@ -290,9 +279,6 @@ post-patch-GREETING_PATCH-on:
post-patch-IFDEF_PATCH-on:
@${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-ifdef
-post-patch-TRASH_PATCH-on:
- @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-trash-purge
-
WRKSRC= ${WRKDIR}/${DISTNAME:S/i$//}
post-patch::
diff --git a/mail/mutt/distinfo b/mail/mutt/distinfo
index 22511dbe2798..97032c1d57ea 100644
--- a/mail/mutt/distinfo
+++ b/mail/mutt/distinfo
@@ -1,12 +1,13 @@
-SHA256 (mutt/mutt-1.6.1.tar.gz) = 98b26cecc6b1713082fc880344fa345c20bd7ded6459abe18c84429c7cf8ed20
-SIZE (mutt/mutt-1.6.1.tar.gz) = 3956840
-SHA256 (mutt/patch-1.6.0.rr.compressed.gz) = c57ad6b19b2dbd812c27a098273b68b2d3b45ce2d36c3a4bff3493ad2cb75b85
-SIZE (mutt/patch-1.6.0.rr.compressed.gz) = 9977
-SHA256 (mutt/patch-1.6.0.vvv.nntp.gz) = 6a69429c2942f438d5c22cfc3f97564bbbf689b2ea482d440692048bd92f5355
-SIZE (mutt/patch-1.6.0.vvv.nntp.gz) = 61343
-SHA256 (mutt/patch-1.6.0.vvv.nntp_ru.gz) = 06f1932626a88a824f514356edf97c031a28f5d0b756353244d483285ab29c4e
-SIZE (mutt/patch-1.6.0.vvv.nntp_ru.gz) = 5729
-SHA256 (mutt/patch-1.6.0.vvv.initials.gz) = f1923f35cd5a400930d6aa6a60f213bf7b8b0f65e6a0d856e7ef23914e822f4d
-SIZE (mutt/patch-1.6.0.vvv.initials.gz) = 668
-SHA256 (mutt/patch-1.6.0.vvv.quote.gz) = 362b9462b2e45de36c962450e9b6715e7f4c00fb5dce4c041fd6c675fbb73814
-SIZE (mutt/patch-1.6.0.vvv.quote.gz) = 1252
+TIMESTAMP = 1475708081
+SHA256 (mutt/mutt-1.7.0.tar.gz) = 1d3e987433d8c92ef88a604f4dcefdb35a86ce73f3eff0157e2e491e5b55b345
+SIZE (mutt/mutt-1.7.0.tar.gz) = 4019567
+SHA256 (mutt/patch-1.7.0.rr.compressed.gz) = 663987cf588e1b55cae37efa55d078ed805f5c1eaca892d2077408855d47f561
+SIZE (mutt/patch-1.7.0.rr.compressed.gz) = 9994
+SHA256 (mutt/patch-1.7.0.vvv.nntp.gz) = c22c42f0635246532a8d806e479d963dac419b913c6fbd0a1af41c2444175aa9
+SIZE (mutt/patch-1.7.0.vvv.nntp.gz) = 61078
+SHA256 (mutt/patch-1.7.0.vvv.nntp_ru.gz) = f238786497f56925a7d230143622b9ff5c5f9baaf5643e2b0322b9cfb7013ce8
+SIZE (mutt/patch-1.7.0.vvv.nntp_ru.gz) = 5495
+SHA256 (mutt/patch-1.7.0.vvv.initials.gz) = f27a94a16233de695a004e2e720ac2b531e26956577c08ab576f79e288268420
+SIZE (mutt/patch-1.7.0.vvv.initials.gz) = 669
+SHA256 (mutt/patch-1.7.0.vvv.quote.gz) = 9f22fd73fe918520750174be6285ba9a7d95054e616db717b638ad5e3073d5dc
+SIZE (mutt/patch-1.7.0.vvv.quote.gz) = 1252
diff --git a/mail/mutt/files/extra-patch-greeting b/mail/mutt/files/extra-patch-greeting
index a1f4bc113156..40ff808ee4e6 100644
--- a/mail/mutt/files/extra-patch-greeting
+++ b/mail/mutt/files/extra-patch-greeting
@@ -12,9 +12,9 @@ diff -urN mutt-1.5.19/globals.h mutt-1.5.19-vc/globals.h
diff -urN mutt-1.5.19/hdrline.c mutt-1.5.19-vc/hdrline.c
--- mutt-1.5.19/hdrline.c 2009-01-05 21:20:53.000000000 +0200
+++ mutt-1.5.19-vc/hdrline.c 2009-02-09 19:30:31.000000000 +0200
-@@ -741,3 +741,62 @@
+@@ -741,3 +741,63 @@
{
- mutt_FormatString (dst, dstlen, 0, s, hdr_format_str, (unsigned long) hfi, flags);
+ mutt_FormatString (dst, dstlen, 0, cols, s, hdr_format_str, (unsigned long) hfi, flags);
}
+
+/* %n = recipient name
@@ -24,6 +24,7 @@ diff -urN mutt-1.5.19/hdrline.c mutt-1.5.19-vc/hdrline.c
+greeting_string (char *dest,
+ size_t destlen,
+ size_t col,
++ int cols,
+ char op,
+ const char *src,
+ const char *prefix,
@@ -70,8 +71,8 @@ diff -urN mutt-1.5.19/hdrline.c mutt-1.5.19-vc/hdrline.c
+ snprintf (dest, destlen, "%%%s%c", prefix, op);
+ break;
+ }
-+ if (flags & M_FORMAT_OPTIONAL)
-+ mutt_FormatString (dest, destlen, col, elsestring, greeting_string, data, flags);
++ if (flags & MUTT_FORMAT_OPTIONAL)
++ mutt_FormatString (dest, destlen, col, cols, elsestring, greeting_string, data, flags);
+
+ return(src);
+}
@@ -113,7 +114,7 @@ diff -urN mutt-1.5.19/protos.h mutt-1.5.19-vc/protos.h
void ci_bounce_message (HEADER *, int *);
int ci_send_message (int, HEADER *, char *, CONTEXT *, HEADER *);
-+const char *greeting_string (char *, size_t, size_t, char, const char *, const char *,
++const char *greeting_string (char *, size_t, size_t, int, char, const char *, const char *,
+ const char *, const char *, unsigned long, format_flag);
+
/* prototypes for compatibility functions */
@@ -131,7 +132,7 @@ diff -urN mutt-1.5.19/send.c mutt-1.5.19-vc/send.c
+ char buffer[STRING];
+ if (Greeting)
+ {
-+ mutt_FormatString(buffer, sizeof(buffer), 0, Greeting, greeting_string,
++ mutt_FormatString(buffer, sizeof(buffer), 0, MuttIndexWindow->cols, Greeting, greeting_string,
+ (unsigned long) hdr, flags);
+ fputs(buffer, out);
+ fputc ('\n', out);
diff --git a/mail/mutt/files/extra-patch-ifdef b/mail/mutt/files/extra-patch-ifdef
index 03f18dee9626..7c2d4fd4a818 100644
--- a/mail/mutt/files/extra-patch-ifdef
+++ b/mail/mutt/files/extra-patch-ifdef
@@ -35,7 +35,7 @@
+ snprintf (err->data, err->dsize, _("ifdef: too few arguments"));
+ return (-1);
+ }
-+ mutt_extract_token (tmp, s, M_TOKEN_SPACE);
++ mutt_extract_token (tmp, s, MUTT_TOKEN_SPACE);
+
+ if (res)
+ {
@@ -67,7 +67,7 @@ diff -pruN mutt-1.5.4.orig/init.h mutt-1.5.4/init.h
@@ -3715,6 +3716,7 @@
{ "hdr_order", parse_list, UL &HeaderOrderList },
#ifdef HAVE_ICONV
- { "iconv-hook", mutt_parse_hook, M_ICONVHOOK },
+ { "iconv-hook", mutt_parse_hook, MUTT_ICONVHOOK },
+ { "ifdef", parse_ifdef, 0 },
#endif
{ "ignore", parse_ignore, 0 },
diff --git a/mail/mutt/files/extra-patch-maildir-mtime b/mail/mutt/files/extra-patch-maildir-mtime
index b5c27bc30861..42f748554eac 100644
--- a/mail/mutt/files/extra-patch-maildir-mtime
+++ b/mail/mutt/files/extra-patch-maildir-mtime
@@ -21,7 +21,7 @@
+ char buffer[_POSIX_PATH_MAX + SHORT_STRING];
+ struct stat s;
+
-+ if(!buf || buf->magic != M_MAILDIR)
++ if(!buf || buf->magic != MUTT_MAILDIR)
+ return;
+
+ snprintf (buffer, sizeof (buffer), "%s/tmp", buf->path);
@@ -39,14 +39,14 @@
while (tmp && mutt_strcmp (buffer, tmp->path))
tmp = tmp->next;
+ check_maildir_times (tmp, &s);
- add_folder (menu, state, de->d_name, &s, (tmp) ? tmp->new : 0);
- }
- closedir (dp);
+ if (tmp && Context &&
+ !mutt_strcmp (tmp->realpath, Context->realpath))
+ {
@@ -454,6 +471,7 @@
strfcpy (buffer, NONULL(tmp->path), sizeof (buffer));
- mutt_pretty_mailbox (buffer);
+ mutt_pretty_mailbox (buffer, sizeof (buffer));
+ check_maildir_times (tmp, &s);
- add_folder (menu, state, buffer, &s, tmp->new);
+ add_folder (menu, state, buffer, &s, tmp);
}
while ((tmp = tmp->next));
diff --git a/mail/mutt/files/extra-patch-maildir-mtime-nntp b/mail/mutt/files/extra-patch-maildir-mtime-nntp
index bc8f7fb79b31..eb799b43f03b 100644
--- a/mail/mutt/files/extra-patch-maildir-mtime-nntp
+++ b/mail/mutt/files/extra-patch-maildir-mtime-nntp
@@ -18,7 +18,7 @@
+ char buffer[_POSIX_PATH_MAX + SHORT_STRING];
+ struct stat s;
+
-+ if(!buf || buf->magic != M_MAILDIR)
++ if(!buf || buf->magic != MUTT_MAILDIR)
+ return;
+
+ snprintf (buffer, sizeof (buffer), "%s/tmp", buf->path);
diff --git a/mail/mutt/files/extra-patch-pgp-dw b/mail/mutt/files/extra-patch-pgp-dw
index e75bc51e2403..95c0789b7424 100644
--- a/mail/mutt/files/extra-patch-pgp-dw
+++ b/mail/mutt/files/extra-patch-pgp-dw
@@ -130,7 +130,7 @@
}
+
+ /* otherwise inline won't work...ask for revert */
-+ if ((i = query_quadoption (OPT_PGPMIMEASK, _("Message can't be sent inline. Revert to using PGP/MIME?"))) != M_YES)
++ if ((i = query_quadoption (OPT_PGPMIMEASK, _("Message can't be sent inline. Revert to using PGP/MIME?"))) != MUTT_YES)
+ return -1;
+
+ /* go ahead with PGP/MIME */
@@ -145,8 +145,8 @@
+++ hook.c Feb 2004 06:07:13 -0000
@@ -119,3 +119,7 @@ int mutt_parse_hook (BUFFER *buf, BUFFER
{
-+#ifdef M_CRYPTHOOK
-+ if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK | M_CRYPTHOOK))
++#ifdef MUTT_CRYPTHOOK
++ if (data & (MUTT_FOLDERHOOK | MUTT_SENDHOOK | MUTT_MESSAGEHOOK | MUTT_ACCOUNTHOOK | MUTT_REPLYHOOK | MUTT_CRYPTHOOK))
+#else
if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK))
+#endif
@@ -167,7 +167,7 @@
+ {
+ if (!hook->command)
+ continue;
-+ if (!(hook->type & M_CRYPTHOOK))
++ if (!(hook->type & MUTT_CRYPTHOOK))
+ continue;
+
+ if ((regexec (hook->rx.rx, adr->mailbox, 0, NULL, 0) == 0) ^ hook->rx.not)
@@ -250,7 +250,7 @@
@@ -1423,11 +1484,8 @@ struct option_t MuttVars[] = {
*/
- { "pgp_create_traditional", DT_QUAD, R_NONE, OPT_PGPTRADITIONAL, M_NO },
-+ { "pgp_mime_ask", DT_QUAD, R_NONE, OPT_PGPMIMEASK, M_NO },
++ { "pgp_mime_ask", DT_QUAD, R_NONE, OPT_PGPMIMEASK, MUTT_NO },
/*
** .pp
- ** This option controls whether Mutt generates old-style inline PGP
@@ -373,7 +373,7 @@
- if (is_numerical_keyid (keyID))
+ keyID = (char *)hook->data;
+ snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"), keyID, p->mailbox);
-+ if (!option(OPTCRYPTCONFIRMHOOK) || (r = mutt_yesorno (buf, M_YES)) == M_YES)
++ if (!option(OPTCRYPTCONFIRMHOOK) || (r = mutt_yesorno (buf, MUTT_YES)) == MUTT_YES)
{
- if (strncmp (keyID, "0x", 2) == 0)
- keyID += 2;
diff --git a/mail/mutt/files/extra-patch-sidebar b/mail/mutt/files/extra-patch-sidebar
deleted file mode 100644
index 986537ca1e6e..000000000000
--- a/mail/mutt/files/extra-patch-sidebar
+++ /dev/null
@@ -1,2373 +0,0 @@
-Based on http://lunar-linux.org/~tchan/mutt/patch-1.5.24.sidebar.20151111.txt
- - Fixed some flaws with regard to handling of "/" instead of "." for IMAP folders.
-
-*** mutt-1.5.24-orig/buffy.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/buffy.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 161,166 ****
---- 161,209 ----
- }
- }
-
-+ 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;
-***************
-*** 196,204 ****
---- 239,251 ----
- static BUFFY *buffy_new (const char *path)
- {
- BUFFY* buffy;
-+ char rp[PATH_MAX];
-+ char *r;
-
- buffy = (BUFFY *) safe_calloc (1, sizeof (BUFFY));
- strfcpy (buffy->path, path, sizeof (buffy->path));
-+ r = realpath(path, rp);
-+ strfcpy (buffy->realpath, r ? rp : path, sizeof (buffy->realpath));
- buffy->next = NULL;
- buffy->magic = 0;
-
-***************
-*** 243,250 ****
- p = realpath (buf, f1);
- for (tmp = &Incoming; *tmp; tmp = &((*tmp)->next))
- {
-! q = realpath ((*tmp)->path, f2);
-! if (mutt_strcmp (p ? p : buf, q ? q : (*tmp)->path) == 0)
- {
- dprint(3,(debugfile,"mailbox '%s' already registered as '%s'\n", buf, (*tmp)->path));
- break;
---- 290,297 ----
- p = realpath (buf, f1);
- for (tmp = &Incoming; *tmp; tmp = &((*tmp)->next))
- {
-! q = (*tmp)->realpath;
-! if (mutt_strcmp (p ? p : buf, q) == 0)
- {
- dprint(3,(debugfile,"mailbox '%s' already registered as '%s'\n", buf, (*tmp)->path));
- break;
-***************
-*** 282,287 ****
---- 329,335 ----
- else
- (*tmp)->size = 0;
- }
-+ Incoming = buffy_sort(Incoming);
- return 0;
- }
-
-***************
-*** 306,311 ****
---- 354,364 ----
- return 0;
- }
-
-+ if (option(OPTSIDEBAR) && mailbox->msg_unread > 0) {
-+ mailbox->new = 1;
-+ return 1;
-+ }
-+
- if ((dirp = opendir (path)) == NULL)
- {
- mailbox->magic = 0;
-***************
-*** 357,362 ****
---- 410,482 ----
-
- return 0;
- }
-+
-+ /* update message counts for the sidebar */
-+ void buffy_maildir_update (BUFFY* mailbox)
-+ {
-+ char path[_POSIX_PATH_MAX];
-+ DIR *dirp;
-+ struct dirent *de;
-+ char *p;
-+
-+ if(!option(OPTSIDEBAR))
-+ return;
-+
-+ mailbox->msgcount = 0;
-+ mailbox->msg_unread = 0;
-+ mailbox->msg_flagged = 0;
-+
-+ snprintf (path, sizeof (path), "%s/new", mailbox->path);
-+
-+ if ((dirp = opendir (path)) == NULL)
-+ {
-+ mailbox->magic = 0;
-+ return;
-+ }
-+
-+ while ((de = readdir (dirp)) != NULL)
-+ {
-+ if (*de->d_name == '.')
-+ continue;
-+
-+ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) {
-+ mailbox->new = 1;
-+ mailbox->msgcount++;
-+ mailbox->msg_unread++;
-+ }
-+ }
-+
-+ closedir (dirp);
-+ snprintf (path, sizeof (path), "%s/cur", mailbox->path);
-+
-+ if ((dirp = opendir (path)) == NULL)
-+ {
-+ mailbox->magic = 0;
-+ return;
-+ }
-+
-+ while ((de = readdir (dirp)) != NULL)
-+ {
-+ if (*de->d_name == '.')
-+ continue;
-+
-+ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) {
-+ mailbox->msgcount++;
-+ if ((p = strstr (de->d_name, ":2,"))) {
-+ if (!strchr (p + 3, 'T')) {
-+ if (!strchr (p + 3, 'S'))
-+ mailbox->msg_unread++;
-+ if (strchr(p + 3, 'F'))
-+ mailbox->msg_flagged++;
-+ }
-+ }
-+ }
-+ }
-+
-+ mailbox->sb_last_checked = time(NULL);
-+ closedir (dirp);
-+ }
-+
- /* returns 1 if mailbox has new mail */
- static int buffy_mbox_hasnew (BUFFY* mailbox, struct stat *sb)
- {
-***************
-*** 368,374 ****
- else
- statcheck = sb->st_mtime > sb->st_atime
- || (mailbox->newly_created && sb->st_ctime == sb->st_mtime && sb->st_ctime == sb->st_atime);
-! if (statcheck)
- {
- if (!option(OPTMAILCHECKRECENT) || sb->st_mtime > mailbox->last_visited)
- {
---- 488,494 ----
- else
- statcheck = sb->st_mtime > sb->st_atime
- || (mailbox->newly_created && sb->st_ctime == sb->st_mtime && sb->st_ctime == sb->st_atime);
-! if ((!option(OPTSIDEBAR) && statcheck) || (option(OPTSIDEBAR) && mailbox->msg_unread > 0))
- {
- if (!option(OPTMAILCHECKRECENT) || sb->st_mtime > mailbox->last_visited)
- {
-***************
-*** 388,393 ****
---- 508,534 ----
- return rc;
- }
-
-+ /* update message counts for the sidebar */
-+ void buffy_mbox_update (BUFFY* mailbox, struct stat *sb)
-+ {
-+ CONTEXT *ctx = NULL;
-+
-+ if(!option(OPTSIDEBAR))
-+ return;
-+ if(mailbox->sb_last_checked > sb->st_mtime && mailbox->msgcount != 0)
-+ return; /* no check necessary */
-+
-+ ctx = mx_open_mailbox(mailbox->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL);
-+ if(ctx)
-+ {
-+ mailbox->msgcount = ctx->msgcount;
-+ mailbox->msg_unread = ctx->unread;
-+ mailbox->msg_flagged = ctx->flagged;
-+ mailbox->sb_last_checked = time(NULL);
-+ mx_close_mailbox(ctx, 0);
-+ }
-+ }
-+
- int mutt_buffy_check (int force)
- {
- BUFFY *tmp;
-***************
-*** 461,477 ****
- {
- case M_MBOX:
- case M_MMDF:
- if (buffy_mbox_hasnew (tmp, &sb) > 0)
- BuffyCount++;
- break;
-
- case M_MAILDIR:
- if (buffy_maildir_hasnew (tmp) > 0)
- BuffyCount++;
- break;
-
- case M_MH:
-! mh_buffy(tmp);
- if (tmp->new)
- BuffyCount++;
- break;
---- 602,621 ----
- {
- case M_MBOX:
- case M_MMDF:
-+ buffy_mbox_update (tmp, &sb);
- if (buffy_mbox_hasnew (tmp, &sb) > 0)
- BuffyCount++;
- break;
-
- case M_MAILDIR:
-+ buffy_maildir_update (tmp);
- if (buffy_maildir_hasnew (tmp) > 0)
- BuffyCount++;
- break;
-
- case M_MH:
-! mh_buffy_update (tmp->path, &tmp->msgcount, &tmp->msg_unread, &tmp->msg_flagged, &tmp->sb_last_checked);
-! mh_buffy(tmp);
- if (tmp->new)
- BuffyCount++;
- break;
-*** mutt-1.5.24-orig/buffy.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/buffy.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 23,35 ****
---- 23,41 ----
- typedef struct buffy_t
- {
- char path[_POSIX_PATH_MAX];
-+ char realpath[_POSIX_PATH_MAX];
- off_t size;
- struct buffy_t *next;
-+ struct buffy_t *prev;
- short new; /* mailbox has new mail */
-+ int msgcount; /* total number of messages */
-+ int msg_unread; /* number of unread messages */
-+ int msg_flagged; /* number of flagged messages */
- short notified; /* user has been notified */
- short magic; /* mailbox type */
- short newly_created; /* mbox or mmdf just popped into existence */
- time_t last_visited; /* time of last exit from this mailbox */
-+ time_t sb_last_checked; /* time of last buffy check from sidebar */
- }
- BUFFY;
-
-*** mutt-1.5.24-orig/color.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/color.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 94,99 ****
---- 94,101 ----
- { "underline", MT_COLOR_UNDERLINE },
- { "index", MT_COLOR_INDEX },
- { "prompt", MT_COLOR_PROMPT },
-+ { "sidebar_new", MT_COLOR_NEW },
-+ { "sidebar_flagged", MT_COLOR_FLAGGED },
- { NULL, 0 }
- };
-
-*** mutt-1.5.24-orig/compose.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/compose.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 72,78 ****
-
- #define HDR_XOFFSET 10
- #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */
-! #define W (COLS - HDR_XOFFSET)
-
- static const char * const Prompts[] =
- {
---- 72,78 ----
-
- #define HDR_XOFFSET 10
- #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */
-! #define W (COLS - HDR_XOFFSET - SidebarWidth)
-
- static const char * const Prompts[] =
- {
-***************
-*** 110,116 ****
-
- static void redraw_crypt_lines (HEADER *msg)
- {
-! mvaddstr (HDR_CRYPT, 0, "Security: ");
-
- if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME)) == 0)
- {
---- 110,116 ----
-
- static void redraw_crypt_lines (HEADER *msg)
- {
-! mvaddstr (HDR_CRYPT, SidebarWidth, "Security: ");
-
- if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME)) == 0)
- {
-***************
-*** 145,151 ****
- addstr (_(" (OppEnc mode)"));
-
- clrtoeol ();
-! move (HDR_CRYPTINFO, 0);
- clrtoeol ();
-
- if ((WithCrypto & APPLICATION_PGP)
---- 145,151 ----
- addstr (_(" (OppEnc mode)"));
-
- clrtoeol ();
-! move (HDR_CRYPTINFO, SidebarWidth);
- clrtoeol ();
-
- if ((WithCrypto & APPLICATION_PGP)
-***************
-*** 162,168 ****
- && (msg->security & ENCRYPT)
- && SmimeCryptAlg
- && *SmimeCryptAlg) {
-! mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "),
- NONULL(SmimeCryptAlg));
- }
- }
---- 162,168 ----
- && (msg->security & ENCRYPT)
- && SmimeCryptAlg
- && *SmimeCryptAlg) {
-! mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "),
- NONULL(SmimeCryptAlg));
- }
- }
-***************
-*** 175,181 ****
- int c;
- char *t;
-
-! mvaddstr (HDR_MIX, 0, " Mix: ");
-
- if (!chain)
- {
---- 175,181 ----
- int c;
- char *t;
-
-! mvaddstr (HDR_MIX, SidebarWidth, " Mix: ");
-
- if (!chain)
- {
-***************
-*** 190,196 ****
- if (t && t[0] == '0' && t[1] == '\0')
- t = "<random>";
-
-! if (c + mutt_strlen (t) + 2 >= COLS)
- break;
-
- addstr (NONULL(t));
---- 190,196 ----
- if (t && t[0] == '0' && t[1] == '\0')
- t = "<random>";
-
-! if (c + mutt_strlen (t) + 2 >= COLS - SidebarWidth)
- break;
-
- addstr (NONULL(t));
-***************
-*** 242,248 ****
-
- buf[0] = 0;
- rfc822_write_address (buf, sizeof (buf), addr, 1);
-! mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]);
- mutt_paddstr (W, buf);
- }
-
---- 242,248 ----
-
- buf[0] = 0;
- rfc822_write_address (buf, sizeof (buf), addr, 1);
-! mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]);
- mutt_paddstr (W, buf);
- }
-
-***************
-*** 252,261 ****
- 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)
---- 252,261 ----
- 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)
-***************
-*** 266,272 ****
- #endif
-
- SETCOLOR (MT_COLOR_STATUS);
-! mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments"));
- clrtoeol ();
-
- NORMAL_COLOR;
---- 266,272 ----
- #endif
-
- SETCOLOR (MT_COLOR_STATUS);
-! mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments"));
- clrtoeol ();
-
- NORMAL_COLOR;
-***************
-*** 302,308 ****
- /* 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;
---- 302,308 ----
- /* 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;
-***************
-*** 562,568 ****
- if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0)
- {
- mutt_str_replace (&msg->env->subject, buf);
-! move (HDR_SUBJECT, HDR_XOFFSET);
- if (msg->env->subject)
- mutt_paddstr (W, msg->env->subject);
- else
---- 562,568 ----
- if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0)
- {
- mutt_str_replace (&msg->env->subject, buf);
-! move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth);
- if (msg->env->subject)
- mutt_paddstr (W, msg->env->subject);
- else
-***************
-*** 580,586 ****
- {
- strfcpy (fcc, buf, fcclen);
- mutt_pretty_mailbox (fcc, fcclen);
-! move (HDR_FCC, HDR_XOFFSET);
- mutt_paddstr (W, fcc);
- fccSet = 1;
- }
---- 580,586 ----
- {
- strfcpy (fcc, buf, fcclen);
- mutt_pretty_mailbox (fcc, fcclen);
-! move (HDR_FCC, HDR_XOFFSET + SidebarWidth);
- mutt_paddstr (W, fcc);
- fccSet = 1;
- }
-*** mutt-1.5.24-orig/configure.ac 2015-08-30 12:24:20.000000000 -0500
---- mutt-1.5.24/configure.ac 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1302,1307 ****
---- 1302,1309 ----
- AC_DEFINE(HAVE_LANGINFO_YESEXPR,1,[ Define if you have <langinfo.h> and nl_langinfo(YESEXPR). ])
- fi
-
-+ AC_CHECK_FUNCS(fmemopen open_memstream)
-+
- dnl Documentation tools
- have_openjade="no"
- AC_PATH_PROG([OSPCAT], [ospcat], [none])
-*** mutt-1.5.24-orig/curs_main.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/curs_main.c 2015-09-16 23:18:13.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"
-***************
-*** 596,615 ****
- menu->redraw |= REDRAW_STATUS;
- if (do_buffy_notify)
- {
-! if (mutt_buffy_notify () && option (OPTBEEPNEW))
-! beep ();
- }
- else
- do_buffy_notify = 1;
- }
-
- if (op != -1)
- mutt_curs_set (0);
-
- if (menu->redraw & REDRAW_FULL)
- {
- menu_redraw_full (menu);
- mutt_show_error ();
- }
-
- if (menu->menu == MENU_MAIN)
---- 598,628 ----
- menu->redraw |= REDRAW_STATUS;
- if (do_buffy_notify)
- {
-! if (mutt_buffy_notify ())
-! {
-! menu->redraw |= REDRAW_STATUS;
-! if (option (OPTBEEPNEW))
-! beep ();
-! }
- }
- else
- do_buffy_notify = 1;
- }
-
-+ if(option(OPTSIDEBAR))
-+ menu->redraw |= REDRAW_SIDEBAR;
-+
- if (op != -1)
- mutt_curs_set (0);
-
- if (menu->redraw & REDRAW_FULL)
- {
- menu_redraw_full (menu);
-+ draw_sidebar(menu->menu);
- mutt_show_error ();
-+ } else if(menu->redraw & REDRAW_SIDEBAR) {
-+ draw_sidebar(menu->menu);
-+ menu->redraw &= ~REDRAW_SIDEBAR;
- }
-
- if (menu->menu == MENU_MAIN)
-***************
-*** 631,639 ****
---- 644,655 ----
-
- if (menu->redraw & REDRAW_STATUS)
- {
-+ DrawFullLine = 1;
- menu_status_line (buf, sizeof (buf), menu, NONULL (Status));
-+ DrawFullLine = 0;
- move (option (OPTSTATUSONTOP) ? 0 : LINES-2, 0);
- SETCOLOR (MT_COLOR_STATUS);
-+ set_buffystats(Context);
- mutt_paddstr (COLS, buf);
- NORMAL_COLOR;
- menu->redraw &= ~REDRAW_STATUS;
-***************
-*** 653,659 ****
- 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
---- 669,675 ----
- 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
-***************
-*** 1095,1100 ****
---- 1111,1117 ----
- break;
-
- CHECK_MSGCOUNT;
-+ CHECK_VISIBLE;
- CHECK_READONLY;
- {
- int oldvcount = Context->vcount;
-***************
-*** 1154,1159 ****
---- 1171,1177 ----
- menu->redraw = REDRAW_FULL;
- break;
-
-+ case OP_SIDEBAR_OPEN:
- case OP_MAIN_CHANGE_FOLDER:
- case OP_MAIN_NEXT_UNREAD_MAILBOX:
-
-***************
-*** 1185,1191 ****
- {
- mutt_buffy (buf, sizeof (buf));
-
-! if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1)
- {
- if (menu->menu == MENU_PAGER)
- {
---- 1203,1213 ----
- {
- 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)
- {
-***************
-*** 1203,1208 ****
---- 1225,1231 ----
- }
-
- mutt_expand_path (buf, sizeof (buf));
-+ set_curbuffy(buf);
- if (mx_get_magic (buf) <= 0)
- {
- mutt_error (_("%s is not a mailbox."), buf);
-***************
-*** 2293,2298 ****
---- 2316,2327 ----
- 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.24-orig/flags.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/flags.c 2015-09-16 23:18:13.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.24-orig/functions.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/functions.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 169,174 ****
---- 169,179 ----
- { "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 }
- };
-
-***************
-*** 272,277 ****
---- 277,287 ----
-
- { "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.24-orig/globals.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/globals.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 118,123 ****
---- 118,126 ----
- WHERE char *SendCharset;
- WHERE char *Sendmail;
- WHERE char *Shell;
-+ WHERE char *SidebarDelim;
-+ WHERE char *SidebarFormat;
-+ WHERE char *SidebarIndentStr;
- WHERE char *Signature;
- WHERE char *SimpleSearch;
- #if USE_SMTP
-***************
-*** 213,218 ****
---- 216,224 ----
- 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.24-orig/handler.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/handler.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1603,1608 ****
---- 1603,1613 ----
-
- fseeko (s->fpin, b->offset, 0);
-
-+ #ifdef HAVE_FMEMOPEN
-+ char *temp;
-+ size_t tempsize;
-+ #endif
-+
- /* see if we need to decode this part before processing it */
- if (b->encoding == ENCBASE64 || b->encoding == ENCQUOTEDPRINTABLE ||
- b->encoding == ENCUUENCODED || plaintext ||
-***************
-*** 1618,1623 ****
---- 1623,1636 ----
- {
- /* decode to a tempfile, saving the original destination */
- fp = s->fpout;
-+ #ifdef HAVE_FMEMOPEN
-+ if ((s->fpout = open_memstream(&temp, &tempsize)) == NULL)
-+ {
-+ mutt_error _("Unable to open memory stream!");
-+ dprint (1, (debugfile, "Can't open memory stream.\n"));
-+ return -1;
-+ }
-+ #else
- mutt_mktemp (tempfile, sizeof (tempfile));
- if ((s->fpout = safe_fopen (tempfile, "w")) == NULL)
- {
-***************
-*** 1625,1630 ****
---- 1638,1644 ----
- dprint (1, (debugfile, "Can't open %s.\n", tempfile));
- return -1;
- }
-+ #endif
- /* decoding the attachment changes the size and offset, so save a copy
- * of the "real" values now, and restore them after processing
- */
-***************
-*** 1653,1661 ****
- /* restore final destination and substitute the tempfile for input */
- s->fpout = fp;
- fp = s->fpin;
- s->fpin = fopen (tempfile, "r");
- unlink (tempfile);
-!
- /* restore the prefix */
- s->prefix = savePrefix;
- }
---- 1667,1685 ----
- /* restore final destination and substitute the tempfile for input */
- s->fpout = fp;
- fp = s->fpin;
-+ #ifdef HAVE_FMEMOPEN
-+ if(tempsize)
-+ s->fpin = fmemopen(temp, tempsize, "r");
-+ else /* fmemopen cannot handle zero-length buffers */
-+ s->fpin = safe_fopen ("/dev/null", "r");
-+ if(s->fpin == NULL) {
-+ mutt_perror("failed to re-open memstream!");
-+ return (-1);
-+ }
-+ #else
- s->fpin = fopen (tempfile, "r");
- unlink (tempfile);
-! #endif
- /* restore the prefix */
- s->prefix = savePrefix;
- }
-***************
-*** 1680,1685 ****
---- 1704,1713 ----
-
- /* restore the original source stream */
- safe_fclose (&s->fpin);
-+ #ifdef HAVE_FMEMOPEN
-+ if(tempsize)
-+ FREE(&temp);
-+ #endif
- s->fpin = fp;
- }
- }
-*** mutt-1.5.24-orig/init.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/init.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 2016,2021 ****
---- 2016,2069 ----
- ** not used.
- ** (PGP only)
- */
-+ {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, UL "|"},
-+ /*
-+ ** .pp
-+ ** This specifies the delimiter between the sidebar (if visible) and
-+ ** other screens.
-+ */
-+ {"sidebar_indentstr", DT_STR, R_BOTH, UL &SidebarIndentStr, UL " "},
-+ /*
-+ ** .pp
-+ ** This specifies the string that is used to indent items
-+ ** with sidebar_folderindent= yes
-+ */
-+ { "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.
-+ */
-+ { "sidebar_shortpath", DT_BOOL, R_BOTH, OPTSIDEBARSHORTPATH, 0 },
-+ /*
-+ ** .pp
-+ ** Should the sidebar shorten the path showed.
-+ */
-+ {"sidebar_format", DT_STR, R_NONE, UL &SidebarFormat, UL "%B%?F? [%F]?%* %?N?%N/?%4S"},
-+ /*
-+ ** .pp
-+ ** Format string for the sidebar. The sequences `%N', `%F' and `%S'
-+ ** will be replaced by the number of new or flagged messages or the total
-+ ** size of them mailbox. `%B' will be replaced with the name of the mailbox.
-+ ** The `%!' sequence will be expanded to `!' if there is one flagged message;
-+ ** to `!!' if there are two flagged messages; and to `n!' for n flagged
-+ ** messages, n>2.
-+ */
-+ { "sidebar_folderindent", DT_BOOL, R_BOTH, OPTSIDEBARFOLDERINDENT, 0 },
-+ /*
-+ ** .pp
-+ ** Should folders be indented in the sidebar.
-+ */
-+
- { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0},
- /*
- ** .pp
-*** mutt-1.5.24-orig/mailbox.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mailbox.h 2015-09-16 23:18:13.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<<0) /* add a From_ line */
-*** mutt-1.5.24-orig/main.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/main.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 50,55 ****
---- 50,56 ----
- #include <unistd.h>
- #include <errno.h>
- #include <sys/stat.h>
-+ #include <limits.h>
- #include <sys/utsname.h>
-
- #ifdef HAVE_GETOPT_H
-***************
-*** 555,561 ****
-
- int main (int argc, char **argv)
- {
-! char folder[_POSIX_PATH_MAX] = "";
- char *subject = NULL;
- char *includeFile = NULL;
- char *draftFile = NULL;
---- 556,562 ----
-
- int main (int argc, char **argv)
- {
-! char folder[PATH_MAX] = "";
- char *subject = NULL;
- char *includeFile = NULL;
- char *draftFile = NULL;
-***************
-*** 1036,1041 ****
---- 1037,1049 ----
- strfcpy (folder, NONULL(Spoolfile), sizeof (folder));
- mutt_expand_path (folder, sizeof (folder));
-
-+ {
-+ char tmpfolder[PATH_MAX];
-+ strfcpy (tmpfolder, folder, sizeof (tmpfolder));
-+ if(!realpath(tmpfolder, folder))
-+ strfcpy (folder, tmpfolder, sizeof (tmpfolder));
-+ }
-+
- mutt_str_replace (&CurrentFolder, folder);
- mutt_str_replace (&LastFolder, folder);
-
-***************
-*** 1058,1063 ****
---- 1066,1072 ----
- if((Context = mx_open_mailbox (folder, ((flags & M_RO) || option (OPTREADONLY)) ? M_READONLY : 0, NULL))
- || !explicit_folder)
- {
-+ set_curbuffy(folder);
- mutt_index_menu ();
- if (Context)
- FREE (&Context);
-*** mutt-1.6.0-orig/Makefile.am.orig 2016-04-09 10:50:09.604018596 +0200
---- mutt-1.6.0/Makefile.am 2016-04-09 10:51:03.718016605 +0200
-@@ -32,7 +32,7 @@
- main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \
- postpone.c query.c recvattach.c recvcmd.c \
- rfc822.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \
-- score.c send.c sendlib.c signal.c sort.c \
-+ score.c send.c sendlib.c sidebar.c signal.c sort.c \
- status.c system.c thread.c charset.c history.c lib.c \
- muttlib.c editmsg.c mbyte.c mutt_idna.c \
- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c
-
-*** mutt-1.6.0-orig/Makefile.in.orig 2016-04-09 10:50:09.495008024 +0200
---- mutt-1.5.24/Makefile.in 2016-04-09 10:53:55.074988370 +0200
-@@ -134,7 +134,7 @@
- recvcmd.$(OBJEXT) rfc822.$(OBJEXT) rfc1524.$(OBJEXT) \
- rfc2047.$(OBJEXT) rfc2231.$(OBJEXT) rfc3676.$(OBJEXT) \
- score.$(OBJEXT) send.$(OBJEXT) sendlib.$(OBJEXT) \
-- signal.$(OBJEXT) sort.$(OBJEXT) status.$(OBJEXT) \
-+ sidebar.$(OBJEXT) signal.$(OBJEXT) sort.$(OBJEXT) status.$(OBJEXT) \
- system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \
- history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \
- editmsg.$(OBJEXT) mbyte.$(OBJEXT) mutt_idna.$(OBJEXT) \
-@@ -489,7 +489,7 @@
- main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \
- postpone.c query.c recvattach.c recvcmd.c \
- rfc822.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \
-- score.c send.c sendlib.c signal.c sort.c \
-+ score.c send.c sendlib.c sidebar.c signal.c sort.c \
- status.c system.c thread.c charset.c history.c lib.c \
- muttlib.c editmsg.c mbyte.c mutt_idna.c \
- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c
-@@ -820,6 +820,7 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/send.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendlib.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Po@am__quote@
-+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sidebar.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smime.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp.Po@am__quote@
-*** mutt-1.5.24-orig/mbox.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mbox.c 2015-09-16 23:18:13.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;
-
-***************
-*** 251,256 ****
---- 252,258 ----
-
- 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.24-orig/menu.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/menu.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 24,29 ****
---- 24,30 ----
- #include "mutt_curses.h"
- #include "mutt_menu.h"
- #include "mbyte.h"
-+ #include "sidebar.h"
-
- extern size_t UngetCount;
-
-***************
-*** 186,192 ****
- {
- 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;
---- 187,193 ----
- {
- 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;
-***************
-*** 239,244 ****
---- 240,246 ----
- int do_color;
- int attr;
-
-+ draw_sidebar(1);
- for (i = menu->top; i < menu->top + menu->pagelen; i++)
- {
- if (i < menu->max)
-***************
-*** 249,255 ****
- menu_pad_string (buf, sizeof (buf));
-
- ATTRSET(attr);
-! move(i - menu->top + menu->offset, 0);
- do_color = 1;
-
- if (i == menu->current)
---- 251,257 ----
- menu_pad_string (buf, sizeof (buf));
-
- ATTRSET(attr);
-! move(i - menu->top + menu->offset, SidebarWidth);
- do_color = 1;
-
- if (i == menu->current)
-***************
-*** 272,278 ****
- else
- {
- NORMAL_COLOR;
-! CLEARLINE(i - menu->top + menu->offset);
- }
- }
- NORMAL_COLOR;
---- 274,280 ----
- else
- {
- NORMAL_COLOR;
-! CLEARLINE_WIN (i - menu->top + menu->offset);
- }
- }
- NORMAL_COLOR;
-***************
-*** 289,295 ****
- return;
- }
-
-! move (menu->oldcurrent + menu->offset - menu->top, 0);
- ATTRSET(menu->color (menu->oldcurrent));
-
- if (option (OPTARROWCURSOR))
---- 291,297 ----
- return;
- }
-
-! move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth);
- ATTRSET(menu->color (menu->oldcurrent));
-
- if (option (OPTARROWCURSOR))
-***************
-*** 301,313 ****
- {
- 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);
- }
-
- /* now draw it in the new location */
- SETCOLOR(MT_COLOR_INDICATOR);
-! mvaddstr(menu->current + menu->offset - menu->top, 0, "->");
- }
- else
- {
---- 303,315 ----
- {
- 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);
- }
-
- /* now draw it in the new location */
- SETCOLOR(MT_COLOR_INDICATOR);
-! mvaddstr(menu->current + menu->offset - menu->top, SidebarWidth, "->");
- }
- else
- {
-***************
-*** 320,326 ****
- menu_make_entry (buf, sizeof (buf), menu, menu->current);
- menu_pad_string (buf, sizeof (buf));
- SETCOLOR(MT_COLOR_INDICATOR);
-! move(menu->current - menu->top + menu->offset, 0);
- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0);
- }
- menu->redraw &= REDRAW_STATUS;
---- 322,328 ----
- menu_make_entry (buf, sizeof (buf), menu, menu->current);
- menu_pad_string (buf, sizeof (buf));
- SETCOLOR(MT_COLOR_INDICATOR);
-! move(menu->current - menu->top + menu->offset, SidebarWidth);
- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0);
- }
- menu->redraw &= REDRAW_STATUS;
-***************
-*** 332,338 ****
- char buf[LONG_STRING];
- int attr = menu->color (menu->current);
-
-! move (menu->current + menu->offset - menu->top, 0);
- menu_make_entry (buf, sizeof (buf), menu, menu->current);
- menu_pad_string (buf, sizeof (buf));
-
---- 334,340 ----
- char buf[LONG_STRING];
- int attr = menu->color (menu->current);
-
-! move (menu->current + menu->offset - menu->top, SidebarWidth);
- menu_make_entry (buf, sizeof (buf), menu, menu->current);
- menu_pad_string (buf, sizeof (buf));
-
-***************
-*** 872,878 ****
-
-
- if (option (OPTARROWCURSOR))
-! move (menu->current - menu->top + menu->offset, 2);
- else if (option (OPTBRAILLEFRIENDLY))
- move (menu->current - menu->top + menu->offset, 0);
- else
---- 874,880 ----
-
-
- 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.24-orig/mh.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mh.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 295,300 ****
---- 295,326 ----
- mhs_free_sequences (&mhs);
- }
-
-+ void mh_buffy_update (const char *path, int *msgcount, int *msg_unread, int *msg_flagged, time_t *sb_last_checked)
-+ {
-+ int i;
-+ struct mh_sequences mhs;
-+ memset (&mhs, 0, sizeof (mhs));
-+
-+ if(!option(OPTSIDEBAR))
-+ return;
-+
-+ if (mh_read_sequences (&mhs, path) < 0)
-+ return;
-+
-+ msgcount = 0;
-+ msg_unread = 0;
-+ msg_flagged = 0;
-+ for (i = 0; i <= mhs.max; i++)
-+ msgcount++;
-+ if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN) {
-+ msg_unread++;
-+ }
-+ if (mhs_check (&mhs, i) & MH_SEQ_FLAGGED)
-+ msg_flagged++;
-+ mhs_free_sequences (&mhs);
-+ *sb_last_checked = time(NULL);
-+ }
-+
- static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt)
- {
- int fd;
-*** mutt-1.5.24-orig/mutt_curses.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mutt_curses.h 2015-09-16 23:18:13.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)
-***************
-*** 121,126 ****
---- 122,129 ----
- MT_COLOR_UNDERLINE,
- MT_COLOR_INDEX,
- MT_COLOR_PROMPT,
-+ MT_COLOR_NEW,
-+ MT_COLOR_FLAGGED,
- MT_COLOR_MAX
- };
-
-*** mutt-1.5.24-orig/mutt_menu.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mutt_menu.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 34,39 ****
---- 34,40 ----
- #define REDRAW_FULL (1<<5)
- #define REDRAW_BODY (1<<6)
- #define REDRAW_SIGWINCH (1<<7)
-+ #define REDRAW_SIDEBAR (1<<8)
-
- #define M_MODEFMT "-- Mutt: %s"
-
-*** mutt-1.5.24-orig/mutt.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mutt.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 423,428 ****
---- 423,432 ----
- OPTSAVEEMPTY,
- OPTSAVENAME,
- OPTSCORE,
-+ OPTSIDEBAR,
-+ OPTSIDEBARSHORTPATH,
-+ OPTSIDEBARSORT,
-+ OPTSIDEBARFOLDERINDENT,
- OPTSIGDASHES,
- OPTSIGONTOP,
- OPTSORTRE,
-***************
-*** 866,871 ****
---- 870,876 ----
- {
- char *path;
- FILE *fp;
-+ time_t atime;
- time_t mtime;
- off_t size;
- off_t vsize;
-***************
-*** 900,905 ****
---- 905,911 ----
- 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.24-orig/muttlib.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/muttlib.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1276,1281 ****
---- 1276,1283 ----
- pl = pw = 1;
-
- /* see if there's room to add content, else ignore */
-+ if ( DrawFullLine )
-+ {
- if ((col < COLS && wlen < destlen) || soft)
- {
- int pad;
-***************
-*** 1319,1324 ****
---- 1321,1372 ----
- col += wid;
- src += pl;
- }
-+ }
-+ else
-+ {
-+ if ((col < COLS-SidebarWidth && wlen < destlen) || soft)
-+ {
-+ int pad;
-+
-+ /* get contents after padding */
-+ mutt_FormatString (buf, sizeof (buf), 0, src + pl, callback, data, flags);
-+ len = mutt_strlen (buf);
-+ wid = mutt_strwidth (buf);
-+
-+ /* try to consume as many columns as we can, if we don't have
-+ * memory for that, use as much memory as possible */
-+ pad = (COLS - SidebarWidth - col - wid) / pw;
-+ if (pad > 0 && wlen + (pad * pl) + len > destlen)
-+ pad = ((signed)(destlen - wlen - len)) / pl;
-+ if (pad > 0)
-+ {
-+ while (pad--)
-+ {
-+ memcpy (wptr, src, pl);
-+ wptr += pl;
-+ wlen += pl;
-+ col += pw;
-+ }
-+ }
-+ else if (soft && pad < 0)
-+ {
-+ /* \0-terminate dest for length computation in mutt_wstr_trunc() */
-+ *wptr = 0;
-+ /* make sure right part is at most as wide as display */
-+ len = mutt_wstr_trunc (buf, destlen, COLS, &wid);
-+ /* truncate left so that right part fits completely in */
-+ wlen = mutt_wstr_trunc (dest, destlen - len, col + pad, &col);
-+ wptr = dest + wlen;
-+ }
-+ if (len + wlen > destlen)
-+ len = mutt_wstr_trunc (buf, destlen - wlen, COLS - SidebarWidth - col, NULL);
-+ memcpy (wptr, buf, len);
-+ wptr += len;
-+ wlen += len;
-+ col += wid;
-+ src += pl;
-+ }
-+ }
- break; /* skip rest of input */
- }
- else if (ch == '|')
-*** mutt-1.5.24-orig/mx.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mx.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 580,585 ****
---- 580,586 ----
- * M_APPEND open mailbox for appending
- * M_READONLY open mailbox in read-only mode
- * M_QUIET only print error messages
-+ * M_PEEK revert atime where applicable
- * ctx if non-null, context struct to use
- */
- CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx)
-***************
-*** 602,607 ****
---- 603,610 ----
- ctx->quiet = 1;
- if (flags & M_READONLY)
- ctx->readonly = 1;
-+ if (flags & M_PEEK)
-+ ctx->peekonly = 1;
-
- if (flags & (M_APPEND|M_NEWFOLDER))
- {
-***************
-*** 701,713 ****
- void mx_fastclose_mailbox (CONTEXT *ctx)
- {
- int i;
-
- if(!ctx)
- return;
-
- /* never announce that a mailbox we've just left has new mail. #3290
- * XXX: really belongs in mx_close_mailbox, but this is a nice hook point */
-! mutt_buffy_setnotified(ctx->path);
-
- if (ctx->mx_close)
- ctx->mx_close (ctx);
---- 704,729 ----
- void mx_fastclose_mailbox (CONTEXT *ctx)
- {
- int i;
-+ #ifndef BUFFY_SIZE
-+ struct utimbuf ut;
-+ #endif
-
- if(!ctx)
- return;
-+ #ifndef BUFFY_SIZE
-+ /* fix up the times so buffy won't get confused */
-+ if (ctx->peekonly && ctx->path && ctx->mtime > ctx->atime)
-+ {
-+ ut.actime = ctx->atime;
-+ ut.modtime = ctx->mtime;
-+ utime (ctx->path, &ut);
-+ }
-+ #endif
-
- /* never announce that a mailbox we've just left has new mail. #3290
- * XXX: really belongs in mx_close_mailbox, but this is a nice hook point */
-! if(!ctx->peekonly)
-! mutt_buffy_setnotified(ctx->path);
-
- if (ctx->mx_close)
- ctx->mx_close (ctx);
-***************
-*** 719,724 ****
---- 735,742 ----
- mutt_clear_threads (ctx);
- for (i = 0; i < ctx->msgcount; i++)
- mutt_free_header (&ctx->hdrs[i]);
-+ ctx->msgcount -= ctx->deleted;
-+ set_buffystats(ctx);
- FREE (&ctx->hdrs);
- FREE (&ctx->v2r);
- FREE (&ctx->path);
-***************
-*** 812,817 ****
---- 830,839 ----
- if (!ctx->hdrs[i]->deleted && ctx->hdrs[i]->read
- && !(ctx->hdrs[i]->flagged && option (OPTKEEPFLAGGED)))
- read_msgs++;
-+ if (ctx->hdrs[i]->deleted && !ctx->hdrs[i]->read)
-+ ctx->unread--;
-+ if (ctx->hdrs[i]->deleted && ctx->hdrs[i]->flagged)
-+ ctx->flagged--;
- }
-
- if (read_msgs && quadoption (OPT_MOVE) != M_NO)
-*** mutt-1.5.24-orig/mx.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mx.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 57,62 ****
---- 57,63 ----
- int mh_read_dir (CONTEXT *, const char *);
- int mh_sync_mailbox (CONTEXT *, int *);
- int mh_check_mailbox (CONTEXT *, int *);
-+ void mh_buffy_update (const char *, int *, int *, int *, time_t *);
- int mh_check_empty (const char *);
-
- int maildir_read_dir (CONTEXT *);
-*** mutt-1.5.24-orig/OPS 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/OPS 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 179,181 ****
---- 179,186 ----
- 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.24-orig/pager.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/pager.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 29,34 ****
---- 29,35 ----
- #include "pager.h"
- #include "attach.h"
- #include "mbyte.h"
-+ #include "sidebar.h"
-
- #include "mutt_crypt.h"
-
-***************
-*** 1095,1100 ****
---- 1096,1102 ----
- wchar_t wc;
- mbstate_t mbstate;
- int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap);
-+ wrap_cols -= SidebarWidth;
-
- if (check_attachment_marker ((char *)buf) == 0)
- wrap_cols = COLS;
-***************
-*** 1572,1577 ****
---- 1574,1580 ----
-
- int bodyoffset = 1; /* offset of first line of real text */
- int statusoffset = 0; /* offset for the status bar */
-+ int statuswidth;
- int helpoffset = LINES - 2; /* offset for the help bar. */
- int bodylen = LINES - 2 - bodyoffset; /* length of displayable area */
-
-***************
-*** 1746,1752 ****
- if ((redraw & REDRAW_BODY) || topline != oldtopline)
- {
- do {
-! move (bodyoffset, 0);
- curline = oldtopline = topline;
- lines = 0;
- force_redraw = 0;
---- 1749,1755 ----
- if ((redraw & REDRAW_BODY) || topline != oldtopline)
- {
- do {
-! move (bodyoffset, SidebarWidth);
- curline = oldtopline = topline;
- lines = 0;
- force_redraw = 0;
-***************
-*** 1759,1764 ****
---- 1762,1768 ----
- &QuoteList, &q_level, &force_redraw, &SearchRE) > 0)
- lines++;
- curline++;
-+ move(lines + bodyoffset, SidebarWidth);
- }
- last_offset = lineInfo[curline].offset;
- } while (force_redraw);
-***************
-*** 1771,1776 ****
---- 1775,1781 ----
- addch ('~');
- addch ('\n');
- lines++;
-+ move(lines + bodyoffset, SidebarWidth);
- }
- NORMAL_COLOR;
-
-***************
-*** 1788,1816 ****
- hfi.ctx = Context;
- hfi.pager_progress = pager_progress_str;
-
- if (last_pos < sb.st_size - 1)
- snprintf(pager_progress_str, sizeof(pager_progress_str), OFF_T_FMT "%%", (100 * last_offset / sb.st_size));
- else
- strfcpy(pager_progress_str, (topline == 0) ? "all" : "end", sizeof(pager_progress_str));
-
- /* print out the pager status bar */
-! move (statusoffset, 0);
- SETCOLOR (MT_COLOR_STATUS);
-
- if (IsHeader (extra) || IsMsgAttach (extra))
- {
-! size_t l1 = COLS * MB_LEN_MAX;
- size_t l2 = sizeof (buffer);
- 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
- {
- char bn[STRING];
- snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str);
-! mutt_paddstr (COLS, bn);
- }
- NORMAL_COLOR;
- if (option(OPTTSENABLED) && TSSupported)
- {
---- 1793,1831 ----
- hfi.ctx = Context;
- hfi.pager_progress = pager_progress_str;
-
-+ statuswidth = COLS - (option(OPTSTATUSONTOP) && PagerIndexLines > 0 ? SidebarWidth : 0);
-+
- if (last_pos < sb.st_size - 1)
- snprintf(pager_progress_str, sizeof(pager_progress_str), OFF_T_FMT "%%", (100 * last_offset / sb.st_size));
- else
- strfcpy(pager_progress_str, (topline == 0) ? "all" : "end", sizeof(pager_progress_str));
-
- /* print out the pager status bar */
-! move (statusoffset, SidebarWidth);
- SETCOLOR (MT_COLOR_STATUS);
-+ if(option(OPTSTATUSONTOP) && PagerIndexLines > 0) {
-+ CLEARLINE_WIN (statusoffset);
-+ } else {
-+ CLEARLINE (statusoffset);
-+ DrawFullLine = 1; /* for mutt_make_string_info */
-+ }
-
- if (IsHeader (extra) || IsMsgAttach (extra))
- {
-! size_t l1 = statuswidth * MB_LEN_MAX;
- size_t l2 = sizeof (buffer);
- 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 (statuswidth, buffer);
- }
- else
- {
- char bn[STRING];
- snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str);
-! mutt_paddstr (statuswidth, bn);
- }
-+ if(!option(OPTSTATUSONTOP) || PagerIndexLines == 0)
-+ DrawFullLine = 0; /* reset */
- NORMAL_COLOR;
- if (option(OPTTSENABLED) && TSSupported)
- {
-***************
-*** 1826,1841 ****
- /* redraw the pager_index indicator, because the
- * flags for this message might have changed. */
- menu_redraw_current (index);
-
- /* print out the index status bar */
- menu_status_line (buffer, sizeof (buffer), index, NONULL(Status));
-
-! move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0);
- SETCOLOR (MT_COLOR_STATUS);
-! mutt_paddstr (COLS, buffer);
- NORMAL_COLOR;
- }
-
- redraw = 0;
-
- if (option(OPTBRAILLEFRIENDLY)) {
---- 1841,1862 ----
- /* redraw the pager_index indicator, because the
- * flags for this message might have changed. */
- menu_redraw_current (index);
-+ draw_sidebar(MENU_PAGER);
-
- /* print out the index status bar */
- menu_status_line (buffer, sizeof (buffer), index, NONULL(Status));
-
-! move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)),
-! (option(OPTSTATUSONTOP) ? 0: SidebarWidth));
- SETCOLOR (MT_COLOR_STATUS);
-! mutt_paddstr (COLS - (option(OPTSTATUSONTOP) ? 0 : SidebarWidth), buffer);
- NORMAL_COLOR;
- }
-
-+ /* if we're not using the index, update every time */
-+ if ( index == 0 )
-+ draw_sidebar(MENU_PAGER);
-+
- redraw = 0;
-
- if (option(OPTBRAILLEFRIENDLY)) {
-***************
-*** 2770,2775 ****
---- 2791,2803 ----
- mutt_what_key ();
- break;
-
-+ case OP_SIDEBAR_SCROLL_UP:
-+ case OP_SIDEBAR_SCROLL_DOWN:
-+ case OP_SIDEBAR_NEXT:
-+ case OP_SIDEBAR_PREV:
-+ scroll_sidebar(ch, MENU_PAGER);
-+ break;
-+
- default:
- ch = -1;
- break;
-*** mutt-1.5.24-orig/pattern.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/pattern.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 154,159 ****
---- 154,163 ----
- HEADER *h = ctx->hdrs[msgno];
- char *buf;
- size_t blen;
-+ #ifdef HAVE_FMEMOPEN
-+ char *temp;
-+ size_t tempsize;
-+ #endif
-
- if ((msg = mx_open_message (ctx, msgno)) != NULL)
- {
-***************
-*** 163,174 ****
---- 167,186 ----
- memset (&s, 0, sizeof (s));
- s.fpin = msg->fp;
- s.flags = M_CHARCONV;
-+ #ifdef HAVE_FMEMOPEN
-+ if((s.fpout = open_memstream(&temp, &tempsize)) == NULL)
-+ {
-+ mutt_perror ("Error opening memstream");
-+ return (0);
-+ }
-+ #else
- mutt_mktemp (tempfile, sizeof (tempfile));
- if ((s.fpout = safe_fopen (tempfile, "w+")) == NULL)
- {
- mutt_perror (tempfile);
- return (0);
- }
-+ #endif
-
- if (pat->op != M_BODY)
- mutt_copy_header (msg->fp, h, s.fpout, CH_FROM | CH_DECODE, NULL);
-***************
-*** 184,190 ****
---- 196,206 ----
- if (s.fpout)
- {
- safe_fclose (&s.fpout);
-+ #ifdef HAVE_FMEMOPEN
-+ FREE(&temp);
-+ #else
- unlink (tempfile);
-+ #endif
- }
- return (0);
- }
-***************
-*** 193,203 ****
---- 209,236 ----
- mutt_body_handler (h->content, &s);
- }
-
-+ #ifdef HAVE_FMEMOPEN
-+ fclose(s.fpout);
-+ lng = tempsize;
-+
-+ if(tempsize) {
-+ if ((fp = fmemopen(temp, tempsize, "r")) == NULL) {
-+ mutt_perror ("Error re-opening memstream");
-+ return (0);
-+ }
-+ } else { /* fmemopen cannot handle empty buffers */
-+ if ((fp = safe_fopen ("/dev/null", "r")) == NULL) {
-+ mutt_perror ("Error opening /dev/null");
-+ return (0);
-+ }
-+ }
-+ #else
- fp = s.fpout;
- fflush (fp);
- fseek (fp, 0, 0);
- fstat (fileno (fp), &st);
- lng = (long) st.st_size;
-+ #endif
- }
- else
- {
-***************
-*** 244,250 ****
---- 277,288 ----
- if (option (OPTTHOROUGHSRC))
- {
- safe_fclose (&fp);
-+ #ifdef HAVE_FMEMOPEN
-+ if(tempsize)
-+ FREE (&temp);
-+ #else
- unlink (tempfile);
-+ #endif
- }
- }
-
-*** mutt-1.5.24-orig/PATCHES 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/PATCHES 2015-11-11 09:39:02.000000000 -0600
-***************
-*** 0 ****
---- 1 ----
-+ patch-1.5.24.sidebar.20151111.txt
-*** mutt-1.5.24-orig/protos.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/protos.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 36,41 ****
---- 36,48 ----
- const char *pager_progress;
- };
-
-+ struct sidebar_entry {
-+ char box[SHORT_STRING];
-+ unsigned int size;
-+ unsigned int new;
-+ unsigned int flagged;
-+ };
-+
- void mutt_make_string_info (char *, size_t, const char *, struct hdr_format_info *, format_flag);
-
- int mutt_extract_token (BUFFER *, BUFFER *, int);
-*** mutt-1.5.24-orig/sidebar.c 1969-12-31 18:00:00.000000000 -0600
---- /dev/null 2015-12-15 19:07:50.000000000 +0100
-+++ tmp/sidebar.c 2015-12-15 19:06:57.000000000 +0100
-@@ -0,0 +1,419 @@
-+/*
-+ * 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;
-+
-+void calc_boundaries() {
-+
-+ BUFFY *tmp = Incoming;
-+
-+ int count = LINES - 2 - (option(OPTHELP) ? 1 : 0);
-+
-+ 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 ) {
-+ BottomBuffy = TopBuffy;
-+ while ( --count && BottomBuffy->next )
-+ BottomBuffy = BottomBuffy->next;
-+ }
-+ else if ( TopBuffy == CurBuffy->next ) {
-+ BottomBuffy = CurBuffy;
-+ tmp = BottomBuffy;
-+ while ( --count && tmp->prev)
-+ tmp = tmp->prev;
-+ TopBuffy = tmp;
-+ }
-+ else if ( BottomBuffy == CurBuffy->prev ) {
-+ TopBuffy = CurBuffy;
-+ tmp = TopBuffy;
-+ while ( --count && tmp->next )
-+ tmp = tmp->next;
-+ BottomBuffy = tmp;
-+ }
-+}
-+
-+static const char *
-+sidebar_format_str (char *dest,
-+ size_t destlen,
-+ size_t col,
-+ char op,
-+ const char *src,
-+ const char *prefix,
-+ const char *ifstring,
-+ const char *elsestring,
-+ unsigned long data,
-+ format_flag flags)
-+{
-+/* casting from unsigned long - srsly?! */
-+struct sidebar_entry *sbe = (struct sidebar_entry *) data;
-+unsigned int optional;
-+char fmt[SHORT_STRING], buf[SHORT_STRING];
-+
-+optional = flags & M_FORMAT_OPTIONAL;
-+
-+switch(op) {
-+ case 'F':
-+ if(!optional) {
-+ snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
-+ snprintf (dest, destlen, fmt, sbe->flagged);
-+ } else if(sbe->flagged == 0) {
-+ optional = 0;
-+ }
-+ break;
-+
-+ case '!':
-+ if(sbe->flagged == 0)
-+ mutt_format_s(dest, destlen, prefix, "");
-+ if(sbe->flagged == 1)
-+ mutt_format_s(dest, destlen, prefix, "!");
-+ if(sbe->flagged == 2)
-+ mutt_format_s(dest, destlen, prefix, "!!");
-+ if(sbe->flagged > 2) {
-+ snprintf (buf, sizeof (buf), "%d!", sbe->flagged);
-+ mutt_format_s(dest, destlen, prefix, buf);
-+ }
-+ break;
-+
-+ case 'S':
-+ if(!optional) {
-+ snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
-+ snprintf (dest, destlen, fmt, sbe->size);
-+ } else if (sbe->size == 0) {
-+ optional = 0;
-+ }
-+ break;
-+
-+ case 'N':
-+ if(!optional) {
-+ snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
-+ snprintf (dest, destlen, fmt, sbe->new);
-+ } else if(sbe->new == 0) {
-+ optional = 0;
-+ }
-+ break;
-+
-+ case 'B':
-+ mutt_format_s(dest, destlen, prefix, sbe->box);
-+ break;
-+ }
-+
-+ if(optional)
-+ mutt_FormatString (dest, destlen, col, ifstring, sidebar_format_str, (unsigned long) sbe, flags);
-+ else if (flags & M_FORMAT_OPTIONAL)
-+ mutt_FormatString (dest, destlen, col, elsestring, sidebar_format_str, (unsigned long) sbe, flags);
-+
-+ return (src);
-+}
-+
-+char *make_sidebar_entry(char *box, unsigned int size, unsigned int new, unsigned int flagged) {
-+ static char *entry = 0;
-+ struct sidebar_entry sbe;
-+ int SBvisual;
-+
-+ SBvisual = SidebarWidth - strlen(SidebarDelim);
-+ if (SBvisual < 1)
-+ return NULL;
-+
-+ sbe.new = new;
-+ sbe.flagged = flagged;
-+ sbe.size = size;
-+ strncpy(sbe.box, box, SHORT_STRING-1);
-+
-+ safe_realloc(&entry, SBvisual + 2);
-+ entry[SBvisual + 1] = '\0';
-+
-+ mutt_FormatString (entry, SBvisual+1, 0, SidebarFormat, sidebar_format_str, (unsigned long) &sbe, 0);
-+
-+ return entry;
-+}
-+
-+void set_curbuffy(char buf[LONG_STRING])
-+{
-+ BUFFY* tmp = CurBuffy = Incoming;
-+
-+ if (!Incoming)
-+ return;
-+
-+ while(1) {
-+ if(!strcmp(tmp->path, buf) || !strcmp(tmp->realpath, buf)) {
-+ CurBuffy = tmp;
-+ break;
-+ }
-+
-+ if(tmp->next)
-+ tmp = tmp->next;
-+ else
-+ break;
-+ }
-+}
-+
-+int draw_sidebar(int menu) {
-+
-+ 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;
-+ int lines = 0;
-+ int SidebarHeight;
-+
-+ if(option(OPTSTATUSONTOP) || option(OPTHELP))
-+ lines++; /* either one will occupy the first line */
-+
-+ /* 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)) {
-+ mutt_buffy_check(1); /* we probably have bad or no numbers */
-+ 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 */
-+
-+ SidebarHeight = LINES - 1;
-+ if(option(OPTHELP) || !option(OPTSTATUSONTOP))
-+ SidebarHeight--;
-+
-+ for ( ; lines < SidebarHeight; 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 = 0;
-+ if(option(OPTSTATUSONTOP) || option(OPTHELP))
-+ lines++; /* either one will occupy the first line */
-+
-+ 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 < SidebarHeight; 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 && Context->path &&
-+ (!strcmp(tmp->path, Context->path)||
-+ !strcmp(tmp->realpath, 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 = option(OPTSIDEBARSHORTPATH) ? mutt_basename(tmp->path) : tmp->path + maildir_is_prefix*(strlen(Maildir) + ((Maildir[strlen(Maildir) - 1] == '/' || Maildir[strlen(Maildir) - 1] == '}') ? 0 : 1));
-+ /* sidebar_folder_name = option(OPTSIDEBARSHORTPATH) ? mutt_basename(tmp->path) : tmp->path + maildir_is_prefix*(strlen(Maildir) + 1); */
-+ if ( maildir_is_prefix && option(OPTSIDEBARFOLDERINDENT) ) {
-+ char *tmp_folder_name;
-+ char *tmp_folder_name_dot;
-+ char *tmp_folder_name_slash;
-+ int i;
-+ tmp_folder_name = tmp->path + strlen(Maildir) + 1;
-+ for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) {
-+ if (tmp_folder_name[i] == '/' || tmp_folder_name[i] == '.') sidebar_folder_depth++;
-+ }
-+ if (sidebar_folder_depth > 0) {
-+ if (option(OPTSIDEBARSHORTPATH)) {
-+ tmp_folder_name_dot = strrchr(tmp->path, '.');
-+ tmp_folder_name_slash = strrchr(tmp->path, '/');
-+ if (tmp_folder_name_dot == NULL && tmp_folder_name_slash == NULL)
-+ tmp_folder_name = mutt_basename(tmp->path);
-+ tmp_folder_name = strrchr(tmp->path, '.');
-+ if (tmp_folder_name == NULL)
-+ tmp_folder_name = mutt_basename(tmp->path);
-+ else if (tmp_folder_name_dot > tmp_folder_name_slash)
-+ tmp_folder_name = tmp_folder_name_dot + 1;
-+ else
-+ tmp_folder_name = tmp_folder_name_slash + 1;
-+ }
-+ else
-+ tmp_folder_name = tmp->path + strlen(Maildir) + ((Maildir[strlen(Maildir) - 1] == '/' || Maildir[strlen(Maildir) - 1] == '}') ? 0 : 1);
-+ sidebar_folder_name = malloc(strlen(tmp_folder_name) + sidebar_folder_depth*strlen(NONULL(SidebarIndentStr)) + 1);
-+ sidebar_folder_name[0]=0;
-+ for (i=0; i < sidebar_folder_depth; i++)
-+ strncat(sidebar_folder_name, NONULL(SidebarIndentStr), strlen(NONULL(SidebarIndentStr)));
-+ strncat(sidebar_folder_name, tmp_folder_name, strlen(tmp_folder_name));
-+ }
-+ }
-+ 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 < SidebarHeight; 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) ||
-+ !strcmp(tmp->realpath, Context->path))) {
-+ tmp->msg_unread = Context->unread;
-+ tmp->msgcount = Context->msgcount;
-+ tmp->msg_flagged = Context->flagged;
-+ 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.24-orig/sidebar.h 1969-12-31 18:00:00.000000000 -0600
---- mutt-1.5.24/sidebar.h 2015-09-16 23:18:13.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.24-orig/doc/Muttrc 2015-08-30 12:24:53.000000000 -0500
---- mutt-1.5.24/doc/Muttrc 2015-09-16 23:18:13.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.24-orig/imap/imap.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/imap/imap.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1523,1529 ****
-
- 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)
- {
---- 1523,1529 ----
-
- 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.24-orig/imap/command.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/imap/command.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1012,1017 ****
---- 1012,1024 ----
- 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 --git a/mail/mutt/files/extra-patch-sidebar-nntp b/mail/mutt/files/extra-patch-sidebar-nntp
deleted file mode 100644
index 2139d07ae5c8..000000000000
--- a/mail/mutt/files/extra-patch-sidebar-nntp
+++ /dev/null
@@ -1,2288 +0,0 @@
-Based on http://lunar-linux.org/~tchan/mutt/patch-1.5.24.sidebar.20151111.txt
- - Fixed some flaws with regard to handling of "/" instead of "." for IMAP folders.
-
-*** mutt-1.5.24-orig/buffy.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/buffy.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 161,166 ****
---- 161,209 ----
- }
- }
-
-+ 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;
-***************
-*** 196,204 ****
---- 239,251 ----
- static BUFFY *buffy_new (const char *path)
- {
- BUFFY* buffy;
-+ char rp[PATH_MAX];
-+ char *r;
-
- buffy = (BUFFY *) safe_calloc (1, sizeof (BUFFY));
- strfcpy (buffy->path, path, sizeof (buffy->path));
-+ r = realpath(path, rp);
-+ strfcpy (buffy->realpath, r ? rp : path, sizeof (buffy->realpath));
- buffy->next = NULL;
- buffy->magic = 0;
-
-***************
-*** 243,250 ****
- p = realpath (buf, f1);
- for (tmp = &Incoming; *tmp; tmp = &((*tmp)->next))
- {
-! q = realpath ((*tmp)->path, f2);
-! if (mutt_strcmp (p ? p : buf, q ? q : (*tmp)->path) == 0)
- {
- dprint(3,(debugfile,"mailbox '%s' already registered as '%s'\n", buf, (*tmp)->path));
- break;
---- 290,297 ----
- p = realpath (buf, f1);
- for (tmp = &Incoming; *tmp; tmp = &((*tmp)->next))
- {
-! q = (*tmp)->realpath;
-! if (mutt_strcmp (p ? p : buf, q) == 0)
- {
- dprint(3,(debugfile,"mailbox '%s' already registered as '%s'\n", buf, (*tmp)->path));
- break;
-***************
-*** 282,287 ****
---- 329,335 ----
- else
- (*tmp)->size = 0;
- }
-+ Incoming = buffy_sort(Incoming);
- return 0;
- }
-
-***************
-*** 306,311 ****
---- 354,364 ----
- return 0;
- }
-
-+ if (option(OPTSIDEBAR) && mailbox->msg_unread > 0) {
-+ mailbox->new = 1;
-+ return 1;
-+ }
-+
- if ((dirp = opendir (path)) == NULL)
- {
- mailbox->magic = 0;
-***************
-*** 357,362 ****
---- 410,482 ----
-
- return 0;
- }
-+
-+ /* update message counts for the sidebar */
-+ void buffy_maildir_update (BUFFY* mailbox)
-+ {
-+ char path[_POSIX_PATH_MAX];
-+ DIR *dirp;
-+ struct dirent *de;
-+ char *p;
-+
-+ if(!option(OPTSIDEBAR))
-+ return;
-+
-+ mailbox->msgcount = 0;
-+ mailbox->msg_unread = 0;
-+ mailbox->msg_flagged = 0;
-+
-+ snprintf (path, sizeof (path), "%s/new", mailbox->path);
-+
-+ if ((dirp = opendir (path)) == NULL)
-+ {
-+ mailbox->magic = 0;
-+ return;
-+ }
-+
-+ while ((de = readdir (dirp)) != NULL)
-+ {
-+ if (*de->d_name == '.')
-+ continue;
-+
-+ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) {
-+ mailbox->new = 1;
-+ mailbox->msgcount++;
-+ mailbox->msg_unread++;
-+ }
-+ }
-+
-+ closedir (dirp);
-+ snprintf (path, sizeof (path), "%s/cur", mailbox->path);
-+
-+ if ((dirp = opendir (path)) == NULL)
-+ {
-+ mailbox->magic = 0;
-+ return;
-+ }
-+
-+ while ((de = readdir (dirp)) != NULL)
-+ {
-+ if (*de->d_name == '.')
-+ continue;
-+
-+ if (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')) {
-+ mailbox->msgcount++;
-+ if ((p = strstr (de->d_name, ":2,"))) {
-+ if (!strchr (p + 3, 'T')) {
-+ if (!strchr (p + 3, 'S'))
-+ mailbox->msg_unread++;
-+ if (strchr(p + 3, 'F'))
-+ mailbox->msg_flagged++;
-+ }
-+ }
-+ }
-+ }
-+
-+ mailbox->sb_last_checked = time(NULL);
-+ closedir (dirp);
-+ }
-+
- /* returns 1 if mailbox has new mail */
- static int buffy_mbox_hasnew (BUFFY* mailbox, struct stat *sb)
- {
-***************
-*** 368,374 ****
- else
- statcheck = sb->st_mtime > sb->st_atime
- || (mailbox->newly_created && sb->st_ctime == sb->st_mtime && sb->st_ctime == sb->st_atime);
-! if (statcheck)
- {
- if (!option(OPTMAILCHECKRECENT) || sb->st_mtime > mailbox->last_visited)
- {
---- 488,494 ----
- else
- statcheck = sb->st_mtime > sb->st_atime
- || (mailbox->newly_created && sb->st_ctime == sb->st_mtime && sb->st_ctime == sb->st_atime);
-! if ((!option(OPTSIDEBAR) && statcheck) || (option(OPTSIDEBAR) && mailbox->msg_unread > 0))
- {
- if (!option(OPTMAILCHECKRECENT) || sb->st_mtime > mailbox->last_visited)
- {
-***************
-*** 388,393 ****
---- 508,534 ----
- return rc;
- }
-
-+ /* update message counts for the sidebar */
-+ void buffy_mbox_update (BUFFY* mailbox, struct stat *sb)
-+ {
-+ CONTEXT *ctx = NULL;
-+
-+ if(!option(OPTSIDEBAR))
-+ return;
-+ if(mailbox->sb_last_checked > sb->st_mtime && mailbox->msgcount != 0)
-+ return; /* no check necessary */
-+
-+ ctx = mx_open_mailbox(mailbox->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL);
-+ if(ctx)
-+ {
-+ mailbox->msgcount = ctx->msgcount;
-+ mailbox->msg_unread = ctx->unread;
-+ mailbox->msg_flagged = ctx->flagged;
-+ mailbox->sb_last_checked = time(NULL);
-+ mx_close_mailbox(ctx, 0);
-+ }
-+ }
-+
- int mutt_buffy_check (int force)
- {
- BUFFY *tmp;
-***************
-*** 461,477 ****
- {
- case M_MBOX:
- case M_MMDF:
- if (buffy_mbox_hasnew (tmp, &sb) > 0)
- BuffyCount++;
- break;
-
- case M_MAILDIR:
- if (buffy_maildir_hasnew (tmp) > 0)
- BuffyCount++;
- break;
-
- case M_MH:
-! mh_buffy(tmp);
- if (tmp->new)
- BuffyCount++;
- break;
---- 602,621 ----
- {
- case M_MBOX:
- case M_MMDF:
-+ buffy_mbox_update (tmp, &sb);
- if (buffy_mbox_hasnew (tmp, &sb) > 0)
- BuffyCount++;
- break;
-
- case M_MAILDIR:
-+ buffy_maildir_update (tmp);
- if (buffy_maildir_hasnew (tmp) > 0)
- BuffyCount++;
- break;
-
- case M_MH:
-! mh_buffy_update (tmp->path, &tmp->msgcount, &tmp->msg_unread, &tmp->msg_flagged, &tmp->sb_last_checked);
-! mh_buffy(tmp);
- if (tmp->new)
- BuffyCount++;
- break;
-*** mutt-1.5.24-orig/buffy.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/buffy.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 23,35 ****
---- 23,41 ----
- typedef struct buffy_t
- {
- char path[_POSIX_PATH_MAX];
-+ char realpath[_POSIX_PATH_MAX];
- off_t size;
- struct buffy_t *next;
-+ struct buffy_t *prev;
- short new; /* mailbox has new mail */
-+ int msgcount; /* total number of messages */
-+ int msg_unread; /* number of unread messages */
-+ int msg_flagged; /* number of flagged messages */
- short notified; /* user has been notified */
- short magic; /* mailbox type */
- short newly_created; /* mbox or mmdf just popped into existence */
- time_t last_visited; /* time of last exit from this mailbox */
-+ time_t sb_last_checked; /* time of last buffy check from sidebar */
- }
- BUFFY;
-
-*** mutt-1.5.24-orig/color.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/color.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 94,99 ****
---- 94,101 ----
- { "underline", MT_COLOR_UNDERLINE },
- { "index", MT_COLOR_INDEX },
- { "prompt", MT_COLOR_PROMPT },
-+ { "sidebar_new", MT_COLOR_NEW },
-+ { "sidebar_flagged", MT_COLOR_FLAGGED },
- { NULL, 0 }
- };
-
-*** mutt-1.5.24-orig/compose.c 2015-12-19 15:06:15.327937000 +0100
---- mutt-1.5.24/compose.c 2015-12-19 15:22:19.475843000 +0100
-@@ -83,7 +83,7 @@
-
- #define HDR_XOFFSET 14
- #define TITLE_FMT "%14s" /* Used for Prompts, which are ASCII */
--#define W (COLS - HDR_XOFFSET)
-+#define W (COLS - HDR_XOFFSET - SidebarWidth)
-
- static const char * const Prompts[] =
- {
-@@ -144,7 +144,7 @@
-
- static void redraw_crypt_lines (HEADER *msg)
- {
-- mvprintw (HDR_CRYPT, 0, TITLE_FMT, "Security: ");
-+ mvprintw (HDR_CRYPT, SidebarWidth, TITLE_FMT, "Security: ");
-
- if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME)) == 0)
- {
-@@ -179,7 +179,7 @@
- addstr (_(" (OppEnc mode)"));
-
- clrtoeol ();
-- move (HDR_CRYPTINFO, 0);
-+ move (HDR_CRYPTINFO, SidebarWidth);
- clrtoeol ();
-
- if ((WithCrypto & APPLICATION_PGP)
-@@ -204,7 +204,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));
- }
- }
-@@ -217,7 +217,7 @@
- int c;
- char *t;
-
-- mvprintw (HDR_MIX, 0, TITLE_FMT, "Mix: ");
-+ mvprintw (HDR_MIX, SidebarWidth, TITLE_FMT, "Mix: ");
-
- if (!chain)
- {
-@@ -232,7 +232,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));
-@@ -284,7 +284,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);
- }
-
-@@ -302,21 +302,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)
-@@ -327,7 +327,7 @@
- #endif
-
- SETCOLOR (MT_COLOR_STATUS);
-- mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments"));
-+ mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments"));
- clrtoeol ();
-
- NORMAL_COLOR;
-@@ -363,7 +363,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;
-@@ -705,7 +705,7 @@
- if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0)
- {
- mutt_str_replace (&msg->env->subject, buf);
-- move (HDR_SUBJECT, HDR_XOFFSET);
-+ move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth);
- if (msg->env->subject)
- mutt_paddstr (W, msg->env->subject);
- else
-@@ -723,7 +723,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;
- }
-*** mutt-1.5.24-orig/configure.ac 2015-08-30 12:24:20.000000000 -0500
---- mutt-1.5.24/configure.ac 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1302,1307 ****
---- 1302,1309 ----
- AC_DEFINE(HAVE_LANGINFO_YESEXPR,1,[ Define if you have <langinfo.h> and nl_langinfo(YESEXPR). ])
- fi
-
-+ AC_CHECK_FUNCS(fmemopen open_memstream)
-+
- dnl Documentation tools
- have_openjade="no"
- AC_PATH_PROG([OSPCAT], [ospcat], [none])
-*** mutt-1.5.24-orig/curs_main.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/curs_main.c 2015-09-16 23:18:13.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"
-***************
-*** 596,615 ****
- menu->redraw |= REDRAW_STATUS;
- if (do_buffy_notify)
- {
-! if (mutt_buffy_notify () && option (OPTBEEPNEW))
-! beep ();
- }
- else
- do_buffy_notify = 1;
- }
-
- if (op != -1)
- mutt_curs_set (0);
-
- if (menu->redraw & REDRAW_FULL)
- {
- menu_redraw_full (menu);
- mutt_show_error ();
- }
-
- if (menu->menu == MENU_MAIN)
---- 598,628 ----
- menu->redraw |= REDRAW_STATUS;
- if (do_buffy_notify)
- {
-! if (mutt_buffy_notify ())
-! {
-! menu->redraw |= REDRAW_STATUS;
-! if (option (OPTBEEPNEW))
-! beep ();
-! }
- }
- else
- do_buffy_notify = 1;
- }
-
-+ if(option(OPTSIDEBAR))
-+ menu->redraw |= REDRAW_SIDEBAR;
-+
- if (op != -1)
- mutt_curs_set (0);
-
- if (menu->redraw & REDRAW_FULL)
- {
- menu_redraw_full (menu);
-+ draw_sidebar(menu->menu);
- mutt_show_error ();
-+ } else if(menu->redraw & REDRAW_SIDEBAR) {
-+ draw_sidebar(menu->menu);
-+ menu->redraw &= ~REDRAW_SIDEBAR;
- }
-
- if (menu->menu == MENU_MAIN)
-***************
-*** 631,639 ****
---- 644,655 ----
-
- if (menu->redraw & REDRAW_STATUS)
- {
-+ DrawFullLine = 1;
- menu_status_line (buf, sizeof (buf), menu, NONULL (Status));
-+ DrawFullLine = 0;
- move (option (OPTSTATUSONTOP) ? 0 : LINES-2, 0);
- SETCOLOR (MT_COLOR_STATUS);
-+ set_buffystats(Context);
- mutt_paddstr (COLS, buf);
- NORMAL_COLOR;
- menu->redraw &= ~REDRAW_STATUS;
-***************
-*** 653,659 ****
- 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
---- 669,675 ----
- 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
-***************
-*** 1095,1100 ****
---- 1111,1117 ----
- break;
-
- CHECK_MSGCOUNT;
-+ CHECK_VISIBLE;
- CHECK_READONLY;
- {
- int oldvcount = Context->vcount;
-***************
-*** 1154,1159 ****
---- 1171,1177 ----
- menu->redraw = REDRAW_FULL;
- break;
-
-+ case OP_SIDEBAR_OPEN:
- case OP_MAIN_CHANGE_FOLDER:
- case OP_MAIN_NEXT_UNREAD_MAILBOX:
-
-***************
-*** 1185,1191 ****
- {
- mutt_buffy (buf, sizeof (buf));
-
-! if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1)
- {
- if (menu->menu == MENU_PAGER)
- {
---- 1203,1213 ----
- {
- 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)
- {
-***************
-*** 1203,1208 ****
---- 1225,1231 ----
- }
-
- mutt_expand_path (buf, sizeof (buf));
-+ set_curbuffy(buf);
- if (mx_get_magic (buf) <= 0)
- {
- mutt_error (_("%s is not a mailbox."), buf);
-***************
-*** 2293,2298 ****
---- 2316,2327 ----
- 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.24-orig/flags.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/flags.c 2015-09-16 23:18:13.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.24-orig/functions.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/functions.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 169,174 ****
---- 169,179 ----
- { "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 }
- };
-
-***************
-*** 272,277 ****
---- 277,287 ----
-
- { "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.24-orig/globals.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/globals.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 118,123 ****
---- 118,126 ----
- WHERE char *SendCharset;
- WHERE char *Sendmail;
- WHERE char *Shell;
-+ WHERE char *SidebarDelim;
-+ WHERE char *SidebarFormat;
-+ WHERE char *SidebarIndentStr;
- WHERE char *Signature;
- WHERE char *SimpleSearch;
- #if USE_SMTP
-***************
-*** 213,218 ****
---- 216,224 ----
- 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.24-orig/handler.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/handler.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1603,1608 ****
---- 1603,1613 ----
-
- fseeko (s->fpin, b->offset, 0);
-
-+ #ifdef HAVE_FMEMOPEN
-+ char *temp;
-+ size_t tempsize;
-+ #endif
-+
- /* see if we need to decode this part before processing it */
- if (b->encoding == ENCBASE64 || b->encoding == ENCQUOTEDPRINTABLE ||
- b->encoding == ENCUUENCODED || plaintext ||
-***************
-*** 1618,1623 ****
---- 1623,1636 ----
- {
- /* decode to a tempfile, saving the original destination */
- fp = s->fpout;
-+ #ifdef HAVE_FMEMOPEN
-+ if ((s->fpout = open_memstream(&temp, &tempsize)) == NULL)
-+ {
-+ mutt_error _("Unable to open memory stream!");
-+ dprint (1, (debugfile, "Can't open memory stream.\n"));
-+ return -1;
-+ }
-+ #else
- mutt_mktemp (tempfile, sizeof (tempfile));
- if ((s->fpout = safe_fopen (tempfile, "w")) == NULL)
- {
-***************
-*** 1625,1630 ****
---- 1638,1644 ----
- dprint (1, (debugfile, "Can't open %s.\n", tempfile));
- return -1;
- }
-+ #endif
- /* decoding the attachment changes the size and offset, so save a copy
- * of the "real" values now, and restore them after processing
- */
-***************
-*** 1653,1661 ****
- /* restore final destination and substitute the tempfile for input */
- s->fpout = fp;
- fp = s->fpin;
- s->fpin = fopen (tempfile, "r");
- unlink (tempfile);
-!
- /* restore the prefix */
- s->prefix = savePrefix;
- }
---- 1667,1685 ----
- /* restore final destination and substitute the tempfile for input */
- s->fpout = fp;
- fp = s->fpin;
-+ #ifdef HAVE_FMEMOPEN
-+ if(tempsize)
-+ s->fpin = fmemopen(temp, tempsize, "r");
-+ else /* fmemopen cannot handle zero-length buffers */
-+ s->fpin = safe_fopen ("/dev/null", "r");
-+ if(s->fpin == NULL) {
-+ mutt_perror("failed to re-open memstream!");
-+ return (-1);
-+ }
-+ #else
- s->fpin = fopen (tempfile, "r");
- unlink (tempfile);
-! #endif
- /* restore the prefix */
- s->prefix = savePrefix;
- }
-***************
-*** 1680,1685 ****
---- 1704,1713 ----
-
- /* restore the original source stream */
- safe_fclose (&s->fpin);
-+ #ifdef HAVE_FMEMOPEN
-+ if(tempsize)
-+ FREE(&temp);
-+ #endif
- s->fpin = fp;
- }
- }
-*** mutt-1.5.24-orig/init.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/init.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 2016,2021 ****
---- 2016,2069 ----
- ** not used.
- ** (PGP only)
- */
-+ {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, UL "|"},
-+ /*
-+ ** .pp
-+ ** This specifies the delimiter between the sidebar (if visible) and
-+ ** other screens.
-+ */
-+ {"sidebar_indentstr", DT_STR, R_BOTH, UL &SidebarIndentStr, UL " "},
-+ /*
-+ ** .pp
-+ ** This specifies the string that is used to indent items
-+ ** with sidebar_folderindent= yes
-+ */
-+ { "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.
-+ */
-+ { "sidebar_shortpath", DT_BOOL, R_BOTH, OPTSIDEBARSHORTPATH, 0 },
-+ /*
-+ ** .pp
-+ ** Should the sidebar shorten the path showed.
-+ */
-+ {"sidebar_format", DT_STR, R_NONE, UL &SidebarFormat, UL "%B%?F? [%F]?%* %?N?%N/?%4S"},
-+ /*
-+ ** .pp
-+ ** Format string for the sidebar. The sequences `%N', `%F' and `%S'
-+ ** will be replaced by the number of new or flagged messages or the total
-+ ** size of them mailbox. `%B' will be replaced with the name of the mailbox.
-+ ** The `%!' sequence will be expanded to `!' if there is one flagged message;
-+ ** to `!!' if there are two flagged messages; and to `n!' for n flagged
-+ ** messages, n>2.
-+ */
-+ { "sidebar_folderindent", DT_BOOL, R_BOTH, OPTSIDEBARFOLDERINDENT, 0 },
-+ /*
-+ ** .pp
-+ ** Should folders be indented in the sidebar.
-+ */
-+
- { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0},
- /*
- ** .pp
-*** mutt-1.5.24-orig/mailbox.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mailbox.h 2015-09-16 23:18:13.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<<0) /* add a From_ line */
-*** mutt-1.5.24-orig/main.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/main.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 50,55 ****
---- 50,56 ----
- #include <unistd.h>
- #include <errno.h>
- #include <sys/stat.h>
-+ #include <limits.h>
- #include <sys/utsname.h>
-
- #ifdef HAVE_GETOPT_H
-***************
-*** 555,561 ****
-
- int main (int argc, char **argv)
- {
-! char folder[_POSIX_PATH_MAX] = "";
- char *subject = NULL;
- char *includeFile = NULL;
- char *draftFile = NULL;
---- 556,562 ----
-
- int main (int argc, char **argv)
- {
-! char folder[PATH_MAX] = "";
- char *subject = NULL;
- char *includeFile = NULL;
- char *draftFile = NULL;
-***************
-*** 1036,1041 ****
---- 1037,1049 ----
- strfcpy (folder, NONULL(Spoolfile), sizeof (folder));
- mutt_expand_path (folder, sizeof (folder));
-
-+ {
-+ char tmpfolder[PATH_MAX];
-+ strfcpy (tmpfolder, folder, sizeof (tmpfolder));
-+ if(!realpath(tmpfolder, folder))
-+ strfcpy (folder, tmpfolder, sizeof (tmpfolder));
-+ }
-+
- mutt_str_replace (&CurrentFolder, folder);
- mutt_str_replace (&LastFolder, folder);
-
-***************
-*** 1058,1063 ****
---- 1066,1072 ----
- if((Context = mx_open_mailbox (folder, ((flags & M_RO) || option (OPTREADONLY)) ? M_READONLY : 0, NULL))
- || !explicit_folder)
- {
-+ set_curbuffy(folder);
- mutt_index_menu ();
- if (Context)
- FREE (&Context);
-*** mutt-1.6.0-orig/Makefile.am.orig 2016-04-09 10:50:09.604018596 +0200
---- mutt-1.6.0/Makefile.am 2016-04-09 10:51:03.718016605 +0200
-@@ -32,7 +32,7 @@
- main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \
- postpone.c query.c recvattach.c recvcmd.c \
- rfc822.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \
-- score.c send.c sendlib.c signal.c sort.c \
-+ score.c send.c sendlib.c sidebar.c signal.c sort.c \
- status.c system.c thread.c charset.c history.c lib.c \
- muttlib.c editmsg.c mbyte.c mutt_idna.c \
- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c
-*** mutt-1.6.0-orig/Makefile.in.orig 2016-04-09 10:50:09.495008024 +0200
---- mutt-1.6.0/Makefile.in 2016-04-09 10:53:55.074988370 +0200
-@@ -134,7 +134,7 @@
- recvcmd.$(OBJEXT) rfc822.$(OBJEXT) rfc1524.$(OBJEXT) \
- rfc2047.$(OBJEXT) rfc2231.$(OBJEXT) rfc3676.$(OBJEXT) \
- score.$(OBJEXT) send.$(OBJEXT) sendlib.$(OBJEXT) \
-- signal.$(OBJEXT) sort.$(OBJEXT) status.$(OBJEXT) \
-+ sidebar.$(OBJEXT) signal.$(OBJEXT) sort.$(OBJEXT) status.$(OBJEXT) \
- system.$(OBJEXT) thread.$(OBJEXT) charset.$(OBJEXT) \
- history.$(OBJEXT) lib.$(OBJEXT) muttlib.$(OBJEXT) \
- editmsg.$(OBJEXT) mbyte.$(OBJEXT) mutt_idna.$(OBJEXT) \
-@@ -489,7 +489,7 @@
- main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \
- postpone.c query.c recvattach.c recvcmd.c \
- rfc822.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \
-- score.c send.c sendlib.c signal.c sort.c \
-+ score.c send.c sendlib.c sidebar.c signal.c sort.c \
- status.c system.c thread.c charset.c history.c lib.c \
- muttlib.c editmsg.c mbyte.c mutt_idna.c \
- url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c
-@@ -820,6 +820,7 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/send.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendlib.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Po@am__quote@
-+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sidebar.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smime.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp.Po@am__quote@
-*** mutt-1.5.24-orig/mbox.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mbox.c 2015-09-16 23:18:13.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;
-
-***************
-*** 251,256 ****
---- 252,258 ----
-
- 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.24-orig/menu.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/menu.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 24,29 ****
---- 24,30 ----
- #include "mutt_curses.h"
- #include "mutt_menu.h"
- #include "mbyte.h"
-+ #include "sidebar.h"
-
- extern size_t UngetCount;
-
-***************
-*** 186,192 ****
- {
- 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;
---- 187,193 ----
- {
- 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;
-***************
-*** 239,244 ****
---- 240,246 ----
- int do_color;
- int attr;
-
-+ draw_sidebar(1);
- for (i = menu->top; i < menu->top + menu->pagelen; i++)
- {
- if (i < menu->max)
-***************
-*** 249,255 ****
- menu_pad_string (buf, sizeof (buf));
-
- ATTRSET(attr);
-! move(i - menu->top + menu->offset, 0);
- do_color = 1;
-
- if (i == menu->current)
---- 251,257 ----
- menu_pad_string (buf, sizeof (buf));
-
- ATTRSET(attr);
-! move(i - menu->top + menu->offset, SidebarWidth);
- do_color = 1;
-
- if (i == menu->current)
-***************
-*** 272,278 ****
- else
- {
- NORMAL_COLOR;
-! CLEARLINE(i - menu->top + menu->offset);
- }
- }
- NORMAL_COLOR;
---- 274,280 ----
- else
- {
- NORMAL_COLOR;
-! CLEARLINE_WIN (i - menu->top + menu->offset);
- }
- }
- NORMAL_COLOR;
-***************
-*** 289,295 ****
- return;
- }
-
-! move (menu->oldcurrent + menu->offset - menu->top, 0);
- ATTRSET(menu->color (menu->oldcurrent));
-
- if (option (OPTARROWCURSOR))
---- 291,297 ----
- return;
- }
-
-! move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth);
- ATTRSET(menu->color (menu->oldcurrent));
-
- if (option (OPTARROWCURSOR))
-***************
-*** 301,313 ****
- {
- 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);
- }
-
- /* now draw it in the new location */
- SETCOLOR(MT_COLOR_INDICATOR);
-! mvaddstr(menu->current + menu->offset - menu->top, 0, "->");
- }
- else
- {
---- 303,315 ----
- {
- 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);
- }
-
- /* now draw it in the new location */
- SETCOLOR(MT_COLOR_INDICATOR);
-! mvaddstr(menu->current + menu->offset - menu->top, SidebarWidth, "->");
- }
- else
- {
-***************
-*** 320,326 ****
- menu_make_entry (buf, sizeof (buf), menu, menu->current);
- menu_pad_string (buf, sizeof (buf));
- SETCOLOR(MT_COLOR_INDICATOR);
-! move(menu->current - menu->top + menu->offset, 0);
- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0);
- }
- menu->redraw &= REDRAW_STATUS;
---- 322,328 ----
- menu_make_entry (buf, sizeof (buf), menu, menu->current);
- menu_pad_string (buf, sizeof (buf));
- SETCOLOR(MT_COLOR_INDICATOR);
-! move(menu->current - menu->top + menu->offset, SidebarWidth);
- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0);
- }
- menu->redraw &= REDRAW_STATUS;
-***************
-*** 332,338 ****
- char buf[LONG_STRING];
- int attr = menu->color (menu->current);
-
-! move (menu->current + menu->offset - menu->top, 0);
- menu_make_entry (buf, sizeof (buf), menu, menu->current);
- menu_pad_string (buf, sizeof (buf));
-
---- 334,340 ----
- char buf[LONG_STRING];
- int attr = menu->color (menu->current);
-
-! move (menu->current + menu->offset - menu->top, SidebarWidth);
- menu_make_entry (buf, sizeof (buf), menu, menu->current);
- menu_pad_string (buf, sizeof (buf));
-
-***************
-*** 872,878 ****
-
-
- if (option (OPTARROWCURSOR))
-! move (menu->current - menu->top + menu->offset, 2);
- else if (option (OPTBRAILLEFRIENDLY))
- move (menu->current - menu->top + menu->offset, 0);
- else
---- 874,880 ----
-
-
- 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.24-orig/mh.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mh.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 295,300 ****
---- 295,326 ----
- mhs_free_sequences (&mhs);
- }
-
-+ void mh_buffy_update (const char *path, int *msgcount, int *msg_unread, int *msg_flagged, time_t *sb_last_checked)
-+ {
-+ int i;
-+ struct mh_sequences mhs;
-+ memset (&mhs, 0, sizeof (mhs));
-+
-+ if(!option(OPTSIDEBAR))
-+ return;
-+
-+ if (mh_read_sequences (&mhs, path) < 0)
-+ return;
-+
-+ msgcount = 0;
-+ msg_unread = 0;
-+ msg_flagged = 0;
-+ for (i = 0; i <= mhs.max; i++)
-+ msgcount++;
-+ if (mhs_check (&mhs, i) & MH_SEQ_UNSEEN) {
-+ msg_unread++;
-+ }
-+ if (mhs_check (&mhs, i) & MH_SEQ_FLAGGED)
-+ msg_flagged++;
-+ mhs_free_sequences (&mhs);
-+ *sb_last_checked = time(NULL);
-+ }
-+
- static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt)
- {
- int fd;
-*** mutt-1.5.24-orig/mutt_curses.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mutt_curses.h 2015-09-16 23:18:13.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)
-***************
-*** 121,126 ****
---- 122,129 ----
- MT_COLOR_UNDERLINE,
- MT_COLOR_INDEX,
- MT_COLOR_PROMPT,
-+ MT_COLOR_NEW,
-+ MT_COLOR_FLAGGED,
- MT_COLOR_MAX
- };
-
-*** mutt-1.5.24-orig/mutt_menu.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mutt_menu.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 34,39 ****
---- 34,40 ----
- #define REDRAW_FULL (1<<5)
- #define REDRAW_BODY (1<<6)
- #define REDRAW_SIGWINCH (1<<7)
-+ #define REDRAW_SIDEBAR (1<<8)
-
- #define M_MODEFMT "-- Mutt: %s"
-
-*** mutt-1.5.24-orig/mutt.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mutt.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 423,428 ****
---- 423,432 ----
- OPTSAVEEMPTY,
- OPTSAVENAME,
- OPTSCORE,
-+ OPTSIDEBAR,
-+ OPTSIDEBARSHORTPATH,
-+ OPTSIDEBARSORT,
-+ OPTSIDEBARFOLDERINDENT,
- OPTSIGDASHES,
- OPTSIGONTOP,
- OPTSORTRE,
-***************
-*** 866,871 ****
---- 870,876 ----
- {
- char *path;
- FILE *fp;
-+ time_t atime;
- time_t mtime;
- off_t size;
- off_t vsize;
-***************
-*** 900,905 ****
---- 905,911 ----
- 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.24-orig/muttlib.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/muttlib.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1276,1281 ****
---- 1276,1283 ----
- pl = pw = 1;
-
- /* see if there's room to add content, else ignore */
-+ if ( DrawFullLine )
-+ {
- if ((col < COLS && wlen < destlen) || soft)
- {
- int pad;
-***************
-*** 1319,1324 ****
---- 1321,1372 ----
- col += wid;
- src += pl;
- }
-+ }
-+ else
-+ {
-+ if ((col < COLS-SidebarWidth && wlen < destlen) || soft)
-+ {
-+ int pad;
-+
-+ /* get contents after padding */
-+ mutt_FormatString (buf, sizeof (buf), 0, src + pl, callback, data, flags);
-+ len = mutt_strlen (buf);
-+ wid = mutt_strwidth (buf);
-+
-+ /* try to consume as many columns as we can, if we don't have
-+ * memory for that, use as much memory as possible */
-+ pad = (COLS - SidebarWidth - col - wid) / pw;
-+ if (pad > 0 && wlen + (pad * pl) + len > destlen)
-+ pad = ((signed)(destlen - wlen - len)) / pl;
-+ if (pad > 0)
-+ {
-+ while (pad--)
-+ {
-+ memcpy (wptr, src, pl);
-+ wptr += pl;
-+ wlen += pl;
-+ col += pw;
-+ }
-+ }
-+ else if (soft && pad < 0)
-+ {
-+ /* \0-terminate dest for length computation in mutt_wstr_trunc() */
-+ *wptr = 0;
-+ /* make sure right part is at most as wide as display */
-+ len = mutt_wstr_trunc (buf, destlen, COLS, &wid);
-+ /* truncate left so that right part fits completely in */
-+ wlen = mutt_wstr_trunc (dest, destlen - len, col + pad, &col);
-+ wptr = dest + wlen;
-+ }
-+ if (len + wlen > destlen)
-+ len = mutt_wstr_trunc (buf, destlen - wlen, COLS - SidebarWidth - col, NULL);
-+ memcpy (wptr, buf, len);
-+ wptr += len;
-+ wlen += len;
-+ col += wid;
-+ src += pl;
-+ }
-+ }
- break; /* skip rest of input */
- }
- else if (ch == '|')
-*** mutt-1.5.24-orig/mx.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mx.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 580,585 ****
---- 580,586 ----
- * M_APPEND open mailbox for appending
- * M_READONLY open mailbox in read-only mode
- * M_QUIET only print error messages
-+ * M_PEEK revert atime where applicable
- * ctx if non-null, context struct to use
- */
- CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx)
-***************
-*** 602,607 ****
---- 603,610 ----
- ctx->quiet = 1;
- if (flags & M_READONLY)
- ctx->readonly = 1;
-+ if (flags & M_PEEK)
-+ ctx->peekonly = 1;
-
- if (flags & (M_APPEND|M_NEWFOLDER))
- {
-***************
-*** 701,713 ****
- void mx_fastclose_mailbox (CONTEXT *ctx)
- {
- int i;
-
- if(!ctx)
- return;
-
- /* never announce that a mailbox we've just left has new mail. #3290
- * XXX: really belongs in mx_close_mailbox, but this is a nice hook point */
-! mutt_buffy_setnotified(ctx->path);
-
- if (ctx->mx_close)
- ctx->mx_close (ctx);
---- 704,729 ----
- void mx_fastclose_mailbox (CONTEXT *ctx)
- {
- int i;
-+ #ifndef BUFFY_SIZE
-+ struct utimbuf ut;
-+ #endif
-
- if(!ctx)
- return;
-+ #ifndef BUFFY_SIZE
-+ /* fix up the times so buffy won't get confused */
-+ if (ctx->peekonly && ctx->path && ctx->mtime > ctx->atime)
-+ {
-+ ut.actime = ctx->atime;
-+ ut.modtime = ctx->mtime;
-+ utime (ctx->path, &ut);
-+ }
-+ #endif
-
- /* never announce that a mailbox we've just left has new mail. #3290
- * XXX: really belongs in mx_close_mailbox, but this is a nice hook point */
-! if(!ctx->peekonly)
-! mutt_buffy_setnotified(ctx->path);
-
- if (ctx->mx_close)
- ctx->mx_close (ctx);
-***************
-*** 719,724 ****
---- 735,742 ----
- mutt_clear_threads (ctx);
- for (i = 0; i < ctx->msgcount; i++)
- mutt_free_header (&ctx->hdrs[i]);
-+ ctx->msgcount -= ctx->deleted;
-+ set_buffystats(ctx);
- FREE (&ctx->hdrs);
- FREE (&ctx->v2r);
- FREE (&ctx->path);
-***************
-*** 812,817 ****
---- 830,839 ----
- if (!ctx->hdrs[i]->deleted && ctx->hdrs[i]->read
- && !(ctx->hdrs[i]->flagged && option (OPTKEEPFLAGGED)))
- read_msgs++;
-+ if (ctx->hdrs[i]->deleted && !ctx->hdrs[i]->read)
-+ ctx->unread--;
-+ if (ctx->hdrs[i]->deleted && ctx->hdrs[i]->flagged)
-+ ctx->flagged--;
- }
-
- if (read_msgs && quadoption (OPT_MOVE) != M_NO)
-*** mutt-1.5.24-orig/mx.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/mx.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 57,62 ****
---- 57,63 ----
- int mh_read_dir (CONTEXT *, const char *);
- int mh_sync_mailbox (CONTEXT *, int *);
- int mh_check_mailbox (CONTEXT *, int *);
-+ void mh_buffy_update (const char *, int *, int *, int *, time_t *);
- int mh_check_empty (const char *);
-
- int maildir_read_dir (CONTEXT *);
-*** mutt-1.5.24-orig/OPS 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/OPS 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 179,181 ****
---- 179,186 ----
- 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.24-orig/pager.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/pager.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 29,34 ****
---- 29,35 ----
- #include "pager.h"
- #include "attach.h"
- #include "mbyte.h"
-+ #include "sidebar.h"
-
- #include "mutt_crypt.h"
-
-***************
-*** 1095,1100 ****
---- 1096,1102 ----
- wchar_t wc;
- mbstate_t mbstate;
- int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap);
-+ wrap_cols -= SidebarWidth;
-
- if (check_attachment_marker ((char *)buf) == 0)
- wrap_cols = COLS;
-***************
-*** 1572,1577 ****
---- 1574,1580 ----
-
- int bodyoffset = 1; /* offset of first line of real text */
- int statusoffset = 0; /* offset for the status bar */
-+ int statuswidth;
- int helpoffset = LINES - 2; /* offset for the help bar. */
- int bodylen = LINES - 2 - bodyoffset; /* length of displayable area */
-
-***************
-*** 1746,1752 ****
- if ((redraw & REDRAW_BODY) || topline != oldtopline)
- {
- do {
-! move (bodyoffset, 0);
- curline = oldtopline = topline;
- lines = 0;
- force_redraw = 0;
---- 1749,1755 ----
- if ((redraw & REDRAW_BODY) || topline != oldtopline)
- {
- do {
-! move (bodyoffset, SidebarWidth);
- curline = oldtopline = topline;
- lines = 0;
- force_redraw = 0;
-***************
-*** 1759,1764 ****
---- 1762,1768 ----
- &QuoteList, &q_level, &force_redraw, &SearchRE) > 0)
- lines++;
- curline++;
-+ move(lines + bodyoffset, SidebarWidth);
- }
- last_offset = lineInfo[curline].offset;
- } while (force_redraw);
-***************
-*** 1771,1776 ****
---- 1775,1781 ----
- addch ('~');
- addch ('\n');
- lines++;
-+ move(lines + bodyoffset, SidebarWidth);
- }
- NORMAL_COLOR;
-
-***************
-*** 1788,1816 ****
- hfi.ctx = Context;
- hfi.pager_progress = pager_progress_str;
-
- if (last_pos < sb.st_size - 1)
- snprintf(pager_progress_str, sizeof(pager_progress_str), OFF_T_FMT "%%", (100 * last_offset / sb.st_size));
- else
- strfcpy(pager_progress_str, (topline == 0) ? "all" : "end", sizeof(pager_progress_str));
-
- /* print out the pager status bar */
-! move (statusoffset, 0);
- SETCOLOR (MT_COLOR_STATUS);
-
- if (IsHeader (extra) || IsMsgAttach (extra))
- {
-! size_t l1 = COLS * MB_LEN_MAX;
- size_t l2 = sizeof (buffer);
- 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
- {
- char bn[STRING];
- snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str);
-! mutt_paddstr (COLS, bn);
- }
- NORMAL_COLOR;
- if (option(OPTTSENABLED) && TSSupported)
- {
---- 1793,1831 ----
- hfi.ctx = Context;
- hfi.pager_progress = pager_progress_str;
-
-+ statuswidth = COLS - (option(OPTSTATUSONTOP) && PagerIndexLines > 0 ? SidebarWidth : 0);
-+
- if (last_pos < sb.st_size - 1)
- snprintf(pager_progress_str, sizeof(pager_progress_str), OFF_T_FMT "%%", (100 * last_offset / sb.st_size));
- else
- strfcpy(pager_progress_str, (topline == 0) ? "all" : "end", sizeof(pager_progress_str));
-
- /* print out the pager status bar */
-! move (statusoffset, SidebarWidth);
- SETCOLOR (MT_COLOR_STATUS);
-+ if(option(OPTSTATUSONTOP) && PagerIndexLines > 0) {
-+ CLEARLINE_WIN (statusoffset);
-+ } else {
-+ CLEARLINE (statusoffset);
-+ DrawFullLine = 1; /* for mutt_make_string_info */
-+ }
-
- if (IsHeader (extra) || IsMsgAttach (extra))
- {
-! size_t l1 = statuswidth * MB_LEN_MAX;
- size_t l2 = sizeof (buffer);
- 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 (statuswidth, buffer);
- }
- else
- {
- char bn[STRING];
- snprintf (bn, sizeof (bn), "%s (%s)", banner, pager_progress_str);
-! mutt_paddstr (statuswidth, bn);
- }
-+ if(!option(OPTSTATUSONTOP) || PagerIndexLines == 0)
-+ DrawFullLine = 0; /* reset */
- NORMAL_COLOR;
- if (option(OPTTSENABLED) && TSSupported)
- {
-***************
-*** 1826,1841 ****
- /* redraw the pager_index indicator, because the
- * flags for this message might have changed. */
- menu_redraw_current (index);
-
- /* print out the index status bar */
- menu_status_line (buffer, sizeof (buffer), index, NONULL(Status));
-
-! move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0);
- SETCOLOR (MT_COLOR_STATUS);
-! mutt_paddstr (COLS, buffer);
- NORMAL_COLOR;
- }
-
- redraw = 0;
-
- if (option(OPTBRAILLEFRIENDLY)) {
---- 1841,1862 ----
- /* redraw the pager_index indicator, because the
- * flags for this message might have changed. */
- menu_redraw_current (index);
-+ draw_sidebar(MENU_PAGER);
-
- /* print out the index status bar */
- menu_status_line (buffer, sizeof (buffer), index, NONULL(Status));
-
-! move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)),
-! (option(OPTSTATUSONTOP) ? 0: SidebarWidth));
- SETCOLOR (MT_COLOR_STATUS);
-! mutt_paddstr (COLS - (option(OPTSTATUSONTOP) ? 0 : SidebarWidth), buffer);
- NORMAL_COLOR;
- }
-
-+ /* if we're not using the index, update every time */
-+ if ( index == 0 )
-+ draw_sidebar(MENU_PAGER);
-+
- redraw = 0;
-
- if (option(OPTBRAILLEFRIENDLY)) {
-***************
-*** 2770,2775 ****
---- 2791,2803 ----
- mutt_what_key ();
- break;
-
-+ case OP_SIDEBAR_SCROLL_UP:
-+ case OP_SIDEBAR_SCROLL_DOWN:
-+ case OP_SIDEBAR_NEXT:
-+ case OP_SIDEBAR_PREV:
-+ scroll_sidebar(ch, MENU_PAGER);
-+ break;
-+
- default:
- ch = -1;
- break;
-*** mutt-1.5.24-orig/pattern.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/pattern.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 154,159 ****
---- 154,163 ----
- HEADER *h = ctx->hdrs[msgno];
- char *buf;
- size_t blen;
-+ #ifdef HAVE_FMEMOPEN
-+ char *temp;
-+ size_t tempsize;
-+ #endif
-
- if ((msg = mx_open_message (ctx, msgno)) != NULL)
- {
-***************
-*** 163,174 ****
---- 167,186 ----
- memset (&s, 0, sizeof (s));
- s.fpin = msg->fp;
- s.flags = M_CHARCONV;
-+ #ifdef HAVE_FMEMOPEN
-+ if((s.fpout = open_memstream(&temp, &tempsize)) == NULL)
-+ {
-+ mutt_perror ("Error opening memstream");
-+ return (0);
-+ }
-+ #else
- mutt_mktemp (tempfile, sizeof (tempfile));
- if ((s.fpout = safe_fopen (tempfile, "w+")) == NULL)
- {
- mutt_perror (tempfile);
- return (0);
- }
-+ #endif
-
- if (pat->op != M_BODY)
- mutt_copy_header (msg->fp, h, s.fpout, CH_FROM | CH_DECODE, NULL);
-***************
-*** 184,190 ****
---- 196,206 ----
- if (s.fpout)
- {
- safe_fclose (&s.fpout);
-+ #ifdef HAVE_FMEMOPEN
-+ FREE(&temp);
-+ #else
- unlink (tempfile);
-+ #endif
- }
- return (0);
- }
-***************
-*** 193,203 ****
---- 209,236 ----
- mutt_body_handler (h->content, &s);
- }
-
-+ #ifdef HAVE_FMEMOPEN
-+ fclose(s.fpout);
-+ lng = tempsize;
-+
-+ if(tempsize) {
-+ if ((fp = fmemopen(temp, tempsize, "r")) == NULL) {
-+ mutt_perror ("Error re-opening memstream");
-+ return (0);
-+ }
-+ } else { /* fmemopen cannot handle empty buffers */
-+ if ((fp = safe_fopen ("/dev/null", "r")) == NULL) {
-+ mutt_perror ("Error opening /dev/null");
-+ return (0);
-+ }
-+ }
-+ #else
- fp = s.fpout;
- fflush (fp);
- fseek (fp, 0, 0);
- fstat (fileno (fp), &st);
- lng = (long) st.st_size;
-+ #endif
- }
- else
- {
-***************
-*** 244,250 ****
---- 277,288 ----
- if (option (OPTTHOROUGHSRC))
- {
- safe_fclose (&fp);
-+ #ifdef HAVE_FMEMOPEN
-+ if(tempsize)
-+ FREE (&temp);
-+ #else
- unlink (tempfile);
-+ #endif
- }
- }
-
-*** mutt-1.5.24-orig/PATCHES 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/PATCHES 2015-11-11 09:39:02.000000000 -0600
-***************
-*** 0 ****
---- 1 ----
-+ patch-1.5.24.sidebar.20151111.txt
-*** mutt-1.5.24-orig/protos.h 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/protos.h 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 36,41 ****
---- 36,48 ----
- const char *pager_progress;
- };
-
-+ struct sidebar_entry {
-+ char box[SHORT_STRING];
-+ unsigned int size;
-+ unsigned int new;
-+ unsigned int flagged;
-+ };
-+
- void mutt_make_string_info (char *, size_t, const char *, struct hdr_format_info *, format_flag);
-
- int mutt_extract_token (BUFFER *, BUFFER *, int);
-*** mutt-1.5.24-orig/sidebar.c 1969-12-31 18:00:00.000000000 -0600
---- /dev/null 2015-12-15 19:07:50.000000000 +0100
-+++ tmp/sidebar.c 2015-12-15 19:06:57.000000000 +0100
-@@ -0,0 +1,419 @@
-+/*
-+ * 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;
-+
-+void calc_boundaries() {
-+
-+ BUFFY *tmp = Incoming;
-+
-+ int count = LINES - 2 - (option(OPTHELP) ? 1 : 0);
-+
-+ 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 ) {
-+ BottomBuffy = TopBuffy;
-+ while ( --count && BottomBuffy->next )
-+ BottomBuffy = BottomBuffy->next;
-+ }
-+ else if ( TopBuffy == CurBuffy->next ) {
-+ BottomBuffy = CurBuffy;
-+ tmp = BottomBuffy;
-+ while ( --count && tmp->prev)
-+ tmp = tmp->prev;
-+ TopBuffy = tmp;
-+ }
-+ else if ( BottomBuffy == CurBuffy->prev ) {
-+ TopBuffy = CurBuffy;
-+ tmp = TopBuffy;
-+ while ( --count && tmp->next )
-+ tmp = tmp->next;
-+ BottomBuffy = tmp;
-+ }
-+}
-+
-+static const char *
-+sidebar_format_str (char *dest,
-+ size_t destlen,
-+ size_t col,
-+ char op,
-+ const char *src,
-+ const char *prefix,
-+ const char *ifstring,
-+ const char *elsestring,
-+ unsigned long data,
-+ format_flag flags)
-+{
-+/* casting from unsigned long - srsly?! */
-+struct sidebar_entry *sbe = (struct sidebar_entry *) data;
-+unsigned int optional;
-+char fmt[SHORT_STRING], buf[SHORT_STRING];
-+
-+optional = flags & M_FORMAT_OPTIONAL;
-+
-+switch(op) {
-+ case 'F':
-+ if(!optional) {
-+ snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
-+ snprintf (dest, destlen, fmt, sbe->flagged);
-+ } else if(sbe->flagged == 0) {
-+ optional = 0;
-+ }
-+ break;
-+
-+ case '!':
-+ if(sbe->flagged == 0)
-+ mutt_format_s(dest, destlen, prefix, "");
-+ if(sbe->flagged == 1)
-+ mutt_format_s(dest, destlen, prefix, "!");
-+ if(sbe->flagged == 2)
-+ mutt_format_s(dest, destlen, prefix, "!!");
-+ if(sbe->flagged > 2) {
-+ snprintf (buf, sizeof (buf), "%d!", sbe->flagged);
-+ mutt_format_s(dest, destlen, prefix, buf);
-+ }
-+ break;
-+
-+ case 'S':
-+ if(!optional) {
-+ snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
-+ snprintf (dest, destlen, fmt, sbe->size);
-+ } else if (sbe->size == 0) {
-+ optional = 0;
-+ }
-+ break;
-+
-+ case 'N':
-+ if(!optional) {
-+ snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
-+ snprintf (dest, destlen, fmt, sbe->new);
-+ } else if(sbe->new == 0) {
-+ optional = 0;
-+ }
-+ break;
-+
-+ case 'B':
-+ mutt_format_s(dest, destlen, prefix, sbe->box);
-+ break;
-+ }
-+
-+ if(optional)
-+ mutt_FormatString (dest, destlen, col, ifstring, sidebar_format_str, (unsigned long) sbe, flags);
-+ else if (flags & M_FORMAT_OPTIONAL)
-+ mutt_FormatString (dest, destlen, col, elsestring, sidebar_format_str, (unsigned long) sbe, flags);
-+
-+ return (src);
-+}
-+
-+char *make_sidebar_entry(char *box, unsigned int size, unsigned int new, unsigned int flagged) {
-+ static char *entry = 0;
-+ struct sidebar_entry sbe;
-+ int SBvisual;
-+
-+ SBvisual = SidebarWidth - strlen(SidebarDelim);
-+ if (SBvisual < 1)
-+ return NULL;
-+
-+ sbe.new = new;
-+ sbe.flagged = flagged;
-+ sbe.size = size;
-+ strncpy(sbe.box, box, SHORT_STRING-1);
-+
-+ safe_realloc(&entry, SBvisual + 2);
-+ entry[SBvisual + 1] = '\0';
-+
-+ mutt_FormatString (entry, SBvisual+1, 0, SidebarFormat, sidebar_format_str, (unsigned long) &sbe, 0);
-+
-+ return entry;
-+}
-+
-+void set_curbuffy(char buf[LONG_STRING])
-+{
-+ BUFFY* tmp = CurBuffy = Incoming;
-+
-+ if (!Incoming)
-+ return;
-+
-+ while(1) {
-+ if(!strcmp(tmp->path, buf) || !strcmp(tmp->realpath, buf)) {
-+ CurBuffy = tmp;
-+ break;
-+ }
-+
-+ if(tmp->next)
-+ tmp = tmp->next;
-+ else
-+ break;
-+ }
-+}
-+
-+int draw_sidebar(int menu) {
-+
-+ 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;
-+ int lines = 0;
-+ int SidebarHeight;
-+
-+ if(option(OPTSTATUSONTOP) || option(OPTHELP))
-+ lines++; /* either one will occupy the first line */
-+
-+ /* 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)) {
-+ mutt_buffy_check(1); /* we probably have bad or no numbers */
-+ 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 */
-+
-+ SidebarHeight = LINES - 1;
-+ if(option(OPTHELP) || !option(OPTSTATUSONTOP))
-+ SidebarHeight--;
-+
-+ for ( ; lines < SidebarHeight; 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 = 0;
-+ if(option(OPTSTATUSONTOP) || option(OPTHELP))
-+ lines++; /* either one will occupy the first line */
-+
-+ 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 < SidebarHeight; 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 && Context->path &&
-+ (!strcmp(tmp->path, Context->path)||
-+ !strcmp(tmp->realpath, 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 = option(OPTSIDEBARSHORTPATH) ? mutt_basename(tmp->path) : tmp->path + maildir_is_prefix*(strlen(Maildir) + ((Maildir[strlen(Maildir) - 1] == '/' || Maildir[strlen(Maildir) - 1] == '}') ? 0 : 1));
-+ /* sidebar_folder_name = option(OPTSIDEBARSHORTPATH) ? mutt_basename(tmp->path) : tmp->path + maildir_is_prefix*(strlen(Maildir) + 1); */
-+ if ( maildir_is_prefix && option(OPTSIDEBARFOLDERINDENT) ) {
-+ char *tmp_folder_name;
-+ char *tmp_folder_name_dot;
-+ char *tmp_folder_name_slash;
-+ int i;
-+ tmp_folder_name = tmp->path + strlen(Maildir) + 1;
-+ for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) {
-+ if (tmp_folder_name[i] == '/' || tmp_folder_name[i] == '.') sidebar_folder_depth++;
-+ }
-+ if (sidebar_folder_depth > 0) {
-+ if (option(OPTSIDEBARSHORTPATH)) {
-+ tmp_folder_name_dot = strrchr(tmp->path, '.');
-+ tmp_folder_name_slash = strrchr(tmp->path, '/');
-+ if (tmp_folder_name_dot == NULL && tmp_folder_name_slash == NULL)
-+ tmp_folder_name = mutt_basename(tmp->path);
-+ tmp_folder_name = strrchr(tmp->path, '.');
-+ if (tmp_folder_name == NULL)
-+ tmp_folder_name = mutt_basename(tmp->path);
-+ else if (tmp_folder_name_dot > tmp_folder_name_slash)
-+ tmp_folder_name = tmp_folder_name_dot + 1;
-+ else
-+ tmp_folder_name = tmp_folder_name_slash + 1;
-+ }
-+ else
-+ tmp_folder_name = tmp->path + strlen(Maildir) + ((Maildir[strlen(Maildir) - 1] == '/' || Maildir[strlen(Maildir) - 1] == '}') ? 0 : 1);
-+ sidebar_folder_name = malloc(strlen(tmp_folder_name) + sidebar_folder_depth*strlen(NONULL(SidebarIndentStr)) + 1);
-+ sidebar_folder_name[0]=0;
-+ for (i=0; i < sidebar_folder_depth; i++)
-+ strncat(sidebar_folder_name, NONULL(SidebarIndentStr), strlen(NONULL(SidebarIndentStr)));
-+ strncat(sidebar_folder_name, tmp_folder_name, strlen(tmp_folder_name));
-+ }
-+ }
-+ 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 < SidebarHeight; 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) ||
-+ !strcmp(tmp->realpath, Context->path))) {
-+ tmp->msg_unread = Context->unread;
-+ tmp->msgcount = Context->msgcount;
-+ tmp->msg_flagged = Context->flagged;
-+ 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.24-orig/sidebar.h 1969-12-31 18:00:00.000000000 -0600
---- mutt-1.5.24/sidebar.h 2015-09-16 23:18:13.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.24-orig/doc/Muttrc 2015-08-30 12:24:53.000000000 -0500
---- mutt-1.5.24/doc/Muttrc 2015-09-16 23:18:13.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.24-orig/imap/imap.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/imap/imap.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1523,1529 ****
-
- 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)
- {
---- 1523,1529 ----
-
- 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.24-orig/imap/command.c 2015-08-30 12:06:38.000000000 -0500
---- mutt-1.5.24/imap/command.c 2015-09-16 23:18:13.000000000 -0500
-***************
-*** 1012,1017 ****
---- 1012,1024 ----
- 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 --git a/mail/mutt/files/extra-patch-sidebar-refresh b/mail/mutt/files/extra-patch-sidebar-refresh
deleted file mode 100644
index b4c55350b6af..000000000000
--- a/mail/mutt/files/extra-patch-sidebar-refresh
+++ /dev/null
@@ -1,113 +0,0 @@
---- a/buffy.c.orig 2015-12-15 19:11:10.949983000 +0100
-+++ b/buffy.c 2015-12-15 19:11:10.963818000 +0100
-@@ -26,6 +26,7 @@
- #include "mx.h"
-
- #include "mutt_curses.h"
-+#include "sidebar.h"
-
- #ifdef USE_IMAP
- #include "imap.h"
-@@ -602,19 +603,28 @@
- {
- case M_MBOX:
- case M_MMDF:
-- buffy_mbox_update (tmp, &sb);
-+ if (sidebar_should_refresh()) {
-+ buffy_mbox_update (tmp, &sb);
-+ sidebar_updated();
-+ }
- if (buffy_mbox_hasnew (tmp, &sb) > 0)
- BuffyCount++;
- break;
-
- case M_MAILDIR:
-- buffy_maildir_update (tmp);
-+ if (sidebar_should_refresh()) {
-+ buffy_maildir_update (tmp);
-+ sidebar_updated();
-+ }
- if (buffy_maildir_hasnew (tmp) > 0)
- BuffyCount++;
- break;
-
- case M_MH:
-- mh_buffy_update (tmp->path, &tmp->msgcount, &tmp->msg_unread, &tmp->msg_flagged, &tmp->sb_last_checked);
-+ if (sidebar_should_refresh()) {
-+ mh_buffy_update (tmp->path, &tmp->msgcount, &tmp->msg_unread, &tmp->msg_flagged, &tmp->sb_last_checked);
-+ sidebar_updated();
-+ }
- mh_buffy(tmp);
- if (tmp->new)
- BuffyCount++;
-Index: mutt/globals.h
-===================================================================
---- a/globals.h.orig 2015-12-15 19:11:10.951646000 +0100
-+++ b/globals.h 2015-12-15 19:11:10.963953000 +0100
-@@ -219,6 +219,8 @@
- WHERE struct buffy_t *CurBuffy INITVAL(0);
- WHERE short DrawFullLine INITVAL(0);
- WHERE short SidebarWidth;
-+WHERE short SidebarRefresh;
-+WHERE short SidebarLastRefresh;
- #ifdef USE_IMAP
- WHERE short ImapKeepalive;
- WHERE short ImapPipelineDepth;
-Index: mutt/init.h
-===================================================================
---- a/init.h.orig 2015-12-15 19:11:10.954277000 +0100
-+++ b/init.h 2015-12-15 19:11:10.966235000 +0100
-@@ -2042,6 +2042,12 @@
- ** .pp
- ** The width of the sidebar.
- */
-+ { "sidebar_refresh", DT_NUM, R_BOTH, UL &SidebarRefresh, 60 },
-+ /*
-+ ** .pp
-+ ** Do not refresh sidebar in less than $sidebar_refresh seconds,
-+ ** (0 disables refreshing).
-+ */
- { "sidebar_shortpath", DT_BOOL, R_BOTH, OPTSIDEBARSHORTPATH, 0 },
- /*
- ** .pp
-Index: mutt/sidebar.c
-===================================================================
---- a/sidebar.c.orig 2015-12-15 19:11:10.959133000 +0100
-+++ b/sidebar.c 2015-12-15 19:11:10.966747000 +0100
-@@ -211,6 +211,7 @@
- saveSidebarWidth = SidebarWidth;
- if(!option(OPTSIDEBAR)) SidebarWidth = 0;
- initialized = true;
-+ SidebarLastRefresh = time(NULL);
- }
-
- /* save or restore the value SidebarWidth */
-@@ -417,3 +418,16 @@
- draw_sidebar(menu);
- }
-
-+int sidebar_should_refresh()
-+{
-+ if (option(OPTSIDEBAR) && SidebarRefresh > 0) {
-+ if (time(NULL) - SidebarLastRefresh >= SidebarRefresh)
-+ return 1;
-+ }
-+ return 0;
-+}
-+void sidebar_updated()
-+{
-+ SidebarLastRefresh = time(NULL);
-+}
-+
-Index: mutt/sidebar.h
-===================================================================
---- a/sidebar.h.orig 2015-12-15 19:11:10.959229000 +0100
-+++ b/sidebar.h 2015-12-15 19:11:10.966962000 +0100
-@@ -32,5 +32,7 @@
- void scroll_sidebar(int, int);
- void set_curbuffy(char*);
- void set_buffystats(CONTEXT*);
-+int sidebar_should_refresh();
-+void sidebar_updated();
-
- #endif /* SIDEBAR_H */
diff --git a/mail/mutt/files/extra-patch-trash-purge b/mail/mutt/files/extra-patch-trash-purge
deleted file mode 100644
index 544dde09f646..000000000000
--- a/mail/mutt/files/extra-patch-trash-purge
+++ /dev/null
@@ -1,387 +0,0 @@
-diff -pruN -x'*.orig' mutt-1.5.20/OPS mutt-1.5.20-trash/OPS
---- mutt-1.5.20/OPS 2009-05-13 01:01:13.000000000 -0400
-+++ mutt-1.5.20-trash/OPS 2009-07-23 09:44:40.000000000 -0400
-@@ -141,6 +141,7 @@ OP_PREV_ENTRY "move to the previous entr
- OP_PREV_LINE "scroll up one line"
- OP_PREV_PAGE "move to the previous page"
- OP_PRINT "print the current entry"
-+OP_PURGE_MESSAGE "really delete the current entry, bypassing the trash folder"
- OP_QUERY "query external program for addresses"
- OP_QUERY_APPEND "append new query results to current results"
- OP_QUIT "save changes to mailbox and quit"
-diff -pruN -x'*.orig' mutt-1.5.20/PATCHES mutt-1.5.20-trash/PATCHES
---- mutt-1.5.20/PATCHES 2008-11-11 14:55:46.000000000 -0500
-+++ mutt-1.5.20-trash/PATCHES 2009-07-23 09:53:20.000000000 -0400
-@@ -0,0 +1 @@
-+patch-1.5.20.bk.trash_folder-purge_message.1
-diff -pruN -x'*.orig' mutt-1.5.20/commands.c mutt-1.5.20-trash/commands.c
---- mutt-1.5.20/commands.c 2009-06-12 19:38:52.000000000 -0400
-+++ mutt-1.5.20-trash/commands.c 2009-07-23 09:44:40.000000000 -0400
-@@ -716,6 +716,7 @@ int _mutt_save_message (HEADER *h, CONTE
- if (option (OPTDELETEUNTAG))
- mutt_set_flag (Context, h, M_TAG, 0);
- }
-+ mutt_set_flag (Context, h, M_APPENDED, 1);
-
- return 0;
- }
-diff -pruN -x'*.orig' mutt-1.5.20/curs_main.c mutt-1.5.20-trash/curs_main.c
---- mutt-1.5.20/curs_main.c 2009-06-13 22:48:36.000000000 -0400
-+++ mutt-1.5.20-trash/curs_main.c 2009-07-23 09:44:40.000000000 -0400
-@@ -1803,6 +1803,7 @@ int mutt_index_menu (void)
- MAYBE_REDRAW (menu->redraw);
- break;
-
-+ case OP_PURGE_MESSAGE:
- case OP_DELETE:
-
- CHECK_MSGCOUNT;
-@@ -1813,6 +1814,7 @@ int mutt_index_menu (void)
- if (tag)
- {
- mutt_tag_set_flag (M_DELETE, 1);
-+ mutt_tag_set_flag (M_PURGED, (op != OP_PURGE_MESSAGE) ? 0 : 1);
- if (option (OPTDELETEUNTAG))
- mutt_tag_set_flag (M_TAG, 0);
- menu->redraw = REDRAW_INDEX;
-@@ -1820,6 +1822,8 @@ int mutt_index_menu (void)
- else
- {
- mutt_set_flag (Context, CURHDR, M_DELETE, 1);
-+ mutt_set_flag (Context, CURHDR, M_PURGED,
-+ (op != OP_PURGE_MESSAGE) ? 0 : 1);
- if (option (OPTDELETEUNTAG))
- mutt_set_flag (Context, CURHDR, M_TAG, 0);
- if (option (OPTRESOLVE))
-@@ -2116,11 +2120,13 @@ int mutt_index_menu (void)
- if (tag)
- {
- mutt_tag_set_flag (M_DELETE, 0);
-+ mutt_tag_set_flag (M_PURGED, 0);
- menu->redraw = REDRAW_INDEX;
- }
- else
- {
- mutt_set_flag (Context, CURHDR, M_DELETE, 0);
-+ mutt_set_flag (Context, CURHDR, M_PURGED, 0);
- if (option (OPTRESOLVE) && menu->current < Context->vcount - 1)
- {
- menu->current++;
-@@ -2141,9 +2147,11 @@ int mutt_index_menu (void)
- CHECK_ACL(M_ACL_DELETE, _("undelete message(s)"));
-
- rc = mutt_thread_set_flag (CURHDR, M_DELETE, 0,
-- op == OP_UNDELETE_THREAD ? 0 : 1);
-+ op == OP_UNDELETE_THREAD ? 0 : 1)
-+ + mutt_thread_set_flag (CURHDR, M_PURGED, 0,
-+ op == OP_UNDELETE_THREAD ? 0 : 1);
-
-- if (rc != -1)
-+ if (rc > -1)
- {
- if (option (OPTRESOLVE))
- {
-diff -pruN -x'*.orig' mutt-1.5.20/flags.c mutt-1.5.20-trash/flags.c
---- mutt-1.5.20/flags.c 2008-12-16 22:50:09.000000000 -0500
-+++ mutt-1.5.20-trash/flags.c 2009-07-23 09:44:40.000000000 -0400
-@@ -65,7 +65,13 @@ void _mutt_set_flag (CONTEXT *ctx, HEADE
- {
- h->deleted = 0;
- update = 1;
-- if (upd_ctx) ctx->deleted--;
-+ if (upd_ctx)
-+ {
-+ ctx->deleted--;
-+ if (h->appended)
-+ ctx->appended--;
-+ }
-+ h->appended = 0; /* when undeleting, also reset the appended flag */
- #ifdef USE_IMAP
- /* see my comment above */
- if (ctx->magic == M_IMAP)
-@@ -87,6 +93,27 @@ void _mutt_set_flag (CONTEXT *ctx, HEADE
- }
- break;
-
-+ case M_APPENDED:
-+ if (bf)
-+ {
-+ if (!h->appended)
-+ {
-+ h->appended = 1;
-+ if (upd_ctx) ctx->appended++;
-+ }
-+ }
-+ break;
-+
-+ case M_PURGED:
-+ if (bf)
-+ {
-+ if (!h->purged)
-+ h->purged = 1;
-+ }
-+ else if (h->purged)
-+ h->purged = 0;
-+ break;
-+
- case M_NEW:
-
- if (!mutt_bit_isset(ctx->rights,M_ACL_SEEN))
-diff -pruN -x'*.orig' mutt-1.5.20/functions.h mutt-1.5.20-trash/functions.h
---- mutt-1.5.20/functions.h 2009-04-30 01:36:17.000000000 -0400
-+++ mutt-1.5.20-trash/functions.h 2009-07-23 09:44:40.000000000 -0400
-@@ -120,6 +120,7 @@ struct binding_t OpMain[] = { /* map: in
- { "toggle-write", OP_TOGGLE_WRITE, "%" },
- { "next-thread", OP_MAIN_NEXT_THREAD, "\016" },
- { "next-subthread", OP_MAIN_NEXT_SUBTHREAD, "\033n" },
-+ { "purge-message", OP_PURGE_MESSAGE, NULL },
- { "query", OP_QUERY, "Q" },
- { "quit", OP_QUIT, "q" },
- { "reply", OP_REPLY, "r" },
-@@ -209,6 +210,7 @@ struct binding_t OpPager[] = { /* map: p
- { "print-message", OP_PRINT, "p" },
- { "previous-thread", OP_MAIN_PREV_THREAD, "\020" },
- { "previous-subthread",OP_MAIN_PREV_SUBTHREAD, "\033p" },
-+ { "purge-message", OP_PURGE_MESSAGE, NULL },
- { "quit", OP_QUIT, "Q" },
- { "exit", OP_EXIT, "q" },
- { "reply", OP_REPLY, "r" },
-diff -pruN -x'*.orig' mutt-1.5.20/globals.h mutt-1.5.20-trash/globals.h
---- mutt-1.5.24/globals.h.orig 2015-08-30 19:06:38.000000000 +0200
-+++ mutt-1.5.20-trash/globals.h 2015-09-10 09:26:21.000000000 +0200
-@@ -141,6 +141,7 @@
- WHERE char *Status;
- WHERE char *Tempdir;
- WHERE char *Tochars;
-+WHERE char *TrashPath;
- WHERE char *TSStatusFormat;
- WHERE char *TSIconFormat;
- WHERE short TSSupported;
-diff -pruN -x'*.orig' mutt-1.5.20/imap/message.c mutt-1.5.20-trash/imap/message.c
---- mutt-1.5.20/imap/message.c 2009-06-07 13:52:57.000000000 -0400
-+++ mutt-1.5.20-trash/imap/message.c 2009-07-23 09:44:40.000000000 -0400
-@@ -867,6 +867,7 @@ int imap_copy_messages (CONTEXT* ctx, HE
- if (ctx->hdrs[n]->tagged)
- {
- mutt_set_flag (ctx, ctx->hdrs[n], M_DELETE, 1);
-+ mutt_set_flag (ctx, ctx->hdrs[n], M_APPENDED, 1);
- if (option (OPTDELETEUNTAG))
- mutt_set_flag (ctx, ctx->hdrs[n], M_TAG, 0);
- }
-@@ -874,6 +875,7 @@ int imap_copy_messages (CONTEXT* ctx, HE
- else
- {
- mutt_set_flag (ctx, h, M_DELETE, 1);
-+ mutt_set_flag (ctx, h, M_APPENDED, 1);
- if (option (OPTDELETEUNTAG))
- mutt_set_flag (ctx, h, M_TAG, 0);
- }
-diff -pruN -x'*.orig' mutt-1.5.20/init.h mutt-1.5.20-trash/init.h
---- mutt-1.5.20/init.h 2009-06-13 17:35:21.000000000 -0400
-+++ mutt-1.5.20-trash/init.h 2009-07-23 09:44:40.000000000 -0400
-@@ -3180,6 +3180,16 @@ struct option_t MuttVars[] = {
- ** by \fIyou\fP. The sixth character is used to indicate when a mail
- ** was sent to a mailing-list you subscribe to.
- */
-+ { "trash", DT_PATH, R_NONE, UL &TrashPath, 0 },
-+ /*
-+ ** .pp
-+ ** If set, this variable specifies the path of the trash folder where the
-+ ** mails marked for deletion will be moved, instead of being irremediably
-+ ** purged.
-+ ** .pp
-+ ** NOTE: When you delete a message in the trash folder, it is really
-+ ** deleted, so that you have a way to clean the trash.
-+ */
- #ifdef USE_SOCKET
- { "tunnel", DT_STR, R_NONE, UL &Tunnel, UL 0 },
- /*
-diff -pruN -x'*.orig' mutt-1.5.20/mutt.h mutt-1.5.20-trash/mutt.h
---- mutt-1.5.20/mutt.h 2009-06-12 18:15:42.000000000 -0400
-+++ mutt-1.5.20-trash/mutt.h 2009-07-23 09:44:40.000000000 -0400
-@@ -187,6 +187,8 @@ enum
- M_DELETE,
- M_UNDELETE,
- M_DELETED,
-+ M_APPENDED,
-+ M_PURGED,
- M_FLAG,
- M_TAG,
- M_UNTAG,
-@@ -701,6 +703,8 @@ typedef struct header
- unsigned int mime : 1; /* has a MIME-Version header? */
- unsigned int flagged : 1; /* marked important? */
- unsigned int tagged : 1;
-+ unsigned int appended : 1; /* has been saved */
-+ unsigned int purged : 1; /* bypassing the trash folder */
- unsigned int deleted : 1;
- unsigned int changed : 1;
- unsigned int attach_del : 1; /* has an attachment marked for deletion */
-@@ -873,6 +877,7 @@ typedef struct _context
- int new; /* how many new messages? */
- int unread; /* how many unread messages? */
- int deleted; /* how many deleted messages */
-+ int appended; /* how many saved messages? */
- int flagged; /* how many flagged messages */
- int msgnotreadyet; /* which msg "new" in pager, -1 if none */
-
-diff -pruN -x'*.orig' mutt-1.5.20/muttlib.c mutt-1.5.20-trash/muttlib.c
---- mutt-1.5.20/muttlib.c 2009-05-18 20:11:35.000000000 -0400
-+++ mutt-1.5.20-trash/muttlib.c 2009-07-23 09:44:40.000000000 -0400
-@@ -1460,7 +1460,9 @@ int mutt_save_confirm (const char *s, st
-
- if (magic > 0 && !mx_access (s, W_OK))
- {
-- if (option (OPTCONFIRMAPPEND))
-+ if (option (OPTCONFIRMAPPEND) &&
-+ (!TrashPath || (mutt_strcmp (s, TrashPath) != 0)))
-+ /* if we're appending to the trash, there's no point in asking */
- {
- snprintf (tmp, sizeof (tmp), _("Append messages to %s?"), s);
- if ((rc = mutt_yesorno (tmp, M_YES)) == M_NO)
-diff -pruN -x'*.orig' mutt-1.5.20/mx.c mutt-1.5.20-trash/mx.c
---- mutt-1.5.20/mx.c 2009-06-11 00:29:41.000000000 -0400
-+++ mutt-1.5.20-trash/mx.c 2009-07-23 09:44:40.000000000 -0400
-@@ -773,6 +773,54 @@ static int sync_mailbox (CONTEXT *ctx, i
- return rc;
- }
-
-+/* move deleted mails to the trash folder */
-+static int trash_append (CONTEXT *ctx)
-+{
-+ CONTEXT *ctx_trash;
-+ int i = 0;
-+ struct stat st, stc;
-+
-+ if (!TrashPath || !ctx->deleted ||
-+ (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH)))
-+ return 0;
-+
-+ for (;i < ctx->msgcount && (!ctx->hdrs[i]->deleted ||
-+ ctx->hdrs[i]->appended); i++);
-+ if (i == ctx->msgcount)
-+ return 0; /* nothing to be done */
-+
-+ if (mutt_save_confirm (TrashPath, &st) != 0)
-+ {
-+ mutt_error _("message(s) not deleted");
-+ return -1;
-+ }
-+
-+ if (lstat (ctx->path, &stc) == 0 && stc.st_ino == st.st_ino
-+ && stc.st_dev == st.st_dev && stc.st_rdev == st.st_rdev)
-+ return 0; /* we are in the trash folder: simple sync */
-+
-+ if ((ctx_trash = mx_open_mailbox (TrashPath, M_APPEND, NULL)) != NULL)
-+ {
-+ for (i = 0 ; i < ctx->msgcount ; i++)
-+ if (ctx->hdrs[i]->deleted && !ctx->hdrs[i]->appended
-+ && !ctx->hdrs[i]->purged
-+ && mutt_append_message (ctx_trash, ctx, ctx->hdrs[i], 0, 0) == -1)
-+ {
-+ mx_close_mailbox (ctx_trash, NULL);
-+ return -1;
-+ }
-+
-+ mx_close_mailbox (ctx_trash, NULL);
-+ }
-+ else
-+ {
-+ mutt_error _("Can't open trash folder");
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
- /* save changes and close mailbox */
- int mx_close_mailbox (CONTEXT *ctx, int *index_hint)
- {
-@@ -909,6 +957,7 @@ int mx_close_mailbox (CONTEXT *ctx, int
- if (mutt_append_message (&f, ctx, ctx->hdrs[i], 0, CH_UPDATE_LEN) == 0)
- {
- mutt_set_flag (ctx, ctx->hdrs[i], M_DELETE, 1);
-+ mutt_set_flag (ctx, ctx->hdrs[i], M_APPENDED, 1);
- }
- else
- {
-@@ -931,6 +980,14 @@ int mx_close_mailbox (CONTEXT *ctx, int
- return 0;
- }
-
-+ /* copy mails to the trash before expunging */
-+ if (purge && ctx->deleted)
-+ if (trash_append (ctx) != 0)
-+ {
-+ ctx->closing = 0;
-+ return -1;
-+ }
-+
- #ifdef USE_IMAP
- /* allow IMAP to preserve the deleted flag across sessions */
- if (ctx->magic == M_IMAP)
-@@ -1130,6 +1187,12 @@ int mx_sync_mailbox (CONTEXT *ctx, int *
- msgcount = ctx->msgcount;
- deleted = ctx->deleted;
-
-+ if (purge && ctx->deleted)
-+ {
-+ if (trash_append (ctx) == -1)
-+ return -1;
-+ }
-+
- #ifdef USE_IMAP
- if (ctx->magic == M_IMAP)
- rc = imap_sync_mailbox (ctx, purge, index_hint);
-diff -pruN -x'*.orig' mutt-1.5.20/pager.c mutt-1.5.20-trash/pager.c
---- mutt-1.5.20/pager.c 2009-06-03 16:48:31.000000000 -0400
-+++ mutt-1.5.20-trash/pager.c 2009-07-23 09:44:40.000000000 -0400
-@@ -2641,6 +2644,7 @@ search_next:
- CHECK_ACL(M_ACL_DELETE, _("undelete message"));
-
- mutt_set_flag (Context, extra->hdr, M_DELETE, 0);
-+ mutt_set_flag (Context, extra->hdr, M_PURGED, 0);
- redraw = REDRAW_STATUS | REDRAW_INDEX;
- if (option (OPTRESOLVE))
- {
-@@ -2656,9 +2660,11 @@ search_next:
- CHECK_ACL(M_ACL_DELETE, _("undelete message(s)"));
-
- r = mutt_thread_set_flag (extra->hdr, M_DELETE, 0,
-+ ch == OP_UNDELETE_THREAD ? 0 : 1)
-+ + mutt_thread_set_flag (extra->hdr, M_PURGED, 0,
- ch == OP_UNDELETE_THREAD ? 0 : 1);
-
-- if (r != -1)
-+ if (r > -1)
- {
- if (option (OPTRESOLVE))
- {
-diff -pruN -x'*.orig' mutt-1.5.20/pattern.c mutt-1.5.20-trash/pattern.c
---- mutt-1.5.20/pattern.c 2009-06-03 16:48:31.000000000 -0400
-+++ mutt-1.5.20-trash/pattern.c 2009-07-23 09:44:40.000000000 -0400
-@@ -1347,8 +1347,10 @@ int mutt_pattern_func (int op, char *pro
- {
- switch (op)
- {
-- case M_DELETE:
- case M_UNDELETE:
-+ mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_PURGED,
-+ 0);
-+ case M_DELETE:
- mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_DELETE,
- (op == M_DELETE));
- break;
-diff -pruN -x'*.orig' mutt-1.5.20/postpone.c mutt-1.5.20-trash/postpone.c
---- mutt-1.5.20/postpone.c 2009-06-13 17:28:37.000000000 -0400
-+++ mutt-1.5.20-trash/postpone.c 2009-07-23 09:44:40.000000000 -0400
-@@ -276,6 +276,9 @@ int mutt_get_postponed (CONTEXT *ctx, HE
- /* finished with this message, so delete it. */
- mutt_set_flag (PostContext, h, M_DELETE, 1);
-
-+ /* and consider it saved, so that it won't be moved to the trash folder */
-+ mutt_set_flag (PostContext, h, M_APPENDED, 1);
-+
- /* update the count for the status display */
- PostCount = PostContext->msgcount - PostContext->deleted;
-
diff --git a/mail/mutt/files/patch-date-conditional b/mail/mutt/files/patch-date-conditional
index 7912815f0bce..56662cf0360b 100644
--- a/mail/mutt/files/patch-date-conditional
+++ b/mail/mutt/files/patch-date-conditional
@@ -46,7 +46,7 @@ Index: muttlib.c
@@ -944,7 +944,16 @@
if (*src == '?')
{
- flags |= M_FORMAT_OPTIONAL;
+ flags |= MUTT_FORMAT_OPTIONAL;
- src++;
+ ch = *(++src); /* save the character to switch on */
+ cp = prefix;
diff --git a/mail/mutt/files/patch-smime-self b/mail/mutt/files/patch-smime-self
index 124abea594fd..3d656129104b 100644
--- a/mail/mutt/files/patch-smime-self
+++ b/mail/mutt/files/patch-smime-self
@@ -9,7 +9,7 @@ Base: http://descolada.dartmouth.edu/mutt/patch-1.5.4+-ow.smime-encrypt-self.2
- keylist)))
+ char *new_keylist = keylist;
+
-+ if (SmimeDefaultKey && query_quadoption(OPT_SMIMEENCRYPTSELF, _("Encrypt message to S/MIME Default Key also?")) == M_YES)
++ if (SmimeDefaultKey && query_quadoption(OPT_SMIMEENCRYPTSELF, _("Encrypt message to S/MIME Default Key also?")) == MUTT_YES)
+ {
+ int size = mutt_strlen(keylist) + mutt_strlen (SmimeDefaultKey) + 2; /* +1 for NULL, +1 for \n */
+ new_keylist = safe_malloc(size);
diff --git a/mail/mutt/files/patch-threadcomplete b/mail/mutt/files/patch-threadcomplete
index d151009ec1d7..20a168d61563 100644
--- a/mail/mutt/files/patch-threadcomplete
+++ b/mail/mutt/files/patch-threadcomplete
@@ -1,10 +1,11 @@
--- mutt.h.orig2 Mon Sep 6 09:24:17 2004
+++ mutt.h Mon Sep 6 09:27:04 2004
@@ -212,6 +212,7 @@
- M_LIMIT,
- M_EXPIRED,
- M_SUPERSEDED,
-+ M_THREADCOMPLETE,
+ MUTT_LIMIT,
+ MUTT_EXPIRED,
+ MUTT_SUPERSEDED,
+ MUTT_TRASH,
++ MUTT_THREADCOMPLETE,
/* actions for mutt_pattern_comp/mutt_pattern_exec */
M_AND,
@@ -14,24 +15,24 @@
}
Flags[] =
{
-+ { 'a', M_THREADCOMPLETE, 0, NULL },
- { 'A', M_ALL, 0, NULL },
- { 'b', M_BODY, M_FULL_MSG, eat_regexp },
- { 'B', M_WHOLE_MSG, M_FULL_MSG, eat_regexp },
++ { 'a', MUTT_THREADCOMPLETE, 0, NULL },
+ { 'A', MUTT_ALL, 0, NULL },
+ { 'b', MUTT_BODY, M_FULL_MSG, eat_regexp },
+ { 'B', MUTT_WHOLE_MSG, M_FULL_MSG, eat_regexp },
@@ -1139,6 +1140,16 @@
2, h->env->to, h->env->cc));
- case M_LIST: /* known list, subscribed or not */
+ case MUTT_LIST: /* known list, subscribed or not */
return (pat->not ^ mutt_is_list_cc (pat->alladdr, h->env->to, h->env->cc));
-+ case M_THREADCOMPLETE:
++ case MUTT_THREADCOMPLETE:
+ { static pattern_t tmp;
+ static short pattern_set = 0;
+ if(! pattern_set) {
+ memset (&tmp, 0, sizeof (tmp));
-+ tmp.op = M_TAG;
++ tmp.op = MUTT_TAG;
+ pattern_set = 1;
+ }
+ return (pat->not ^ (h->env && match_threadcomplete(&tmp, flags, ctx, h->thread, 1, 1, 1, 1)));
+ }
- case M_SUBSCRIBED_LIST:
+ case MUTT_SUBSCRIBED_LIST:
return (pat->not ^ mutt_is_list_recipient (pat->alladdr, h->env->to, h->env->cc));
- case M_PERSONAL_RECIP:
+ case MUTT_PERSONAL_RECIP: