<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[147581] trunk/dports/mail</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="https://trac.macports.org/changeset/147581">147581</a></dd>
<dt>Author</dt> <dd>cal@macports.org</dd>
<dt>Date</dt> <dd>2016-04-08 11:50:22 -0700 (Fri, 08 Apr 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>mutt: 1.6.0, replaces mutt-devel

Update mutt to 1.6.0, refresh the sidebar patch (fixing the few conflicts it
had) and replace mutt-devel with the now 1.6.0 mutt port. The 1.5.x series had
become a de-facto stable distribution that was packaged by other distributions
as stable for a while.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkdportsmailmuttPortfile">trunk/dports/mail/mutt/Portfile</a></li>
<li><a href="#trunkdportsmailmuttdevelPortfile">trunk/dports/mail/mutt-devel/Portfile</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/dports/mail/mutt/</li>
<li><a href="#trunkdportsmailmuttfilespatch160sidebar20160408macportsdiff">trunk/dports/mail/mutt/files/patch-1.6.0.sidebar.20160408.macports.diff</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li>trunk/dports/mail/mutt/</li>
<li>trunk/dports/mail/mutt-devel/files/</li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkdportsmailmuttPortfile"></a>
<div class="modfile"><h4>Modified: trunk/dports/mail/mutt/Portfile (147491 => 147581)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/mail/mutt-devel/Portfile        2016-04-05 16:34:16 UTC (rev 147491)
+++ trunk/dports/mail/mutt/Portfile        2016-04-08 18:50:22 UTC (rev 147581)
</span><span class="lines">@@ -3,10 +3,8 @@
</span><span class="cx"> 
</span><span class="cx"> PortSystem          1.0
</span><span class="cx"> 
</span><del>-name                mutt-devel
-conflicts           mutt
-version             1.5.24
-revision            1
</del><ins>+name                mutt
+version             1.6.0
</ins><span class="cx"> categories          mail
</span><span class="cx"> platforms           darwin
</span><span class="cx"> license             GPL-2
</span><span class="lines">@@ -20,7 +18,7 @@
</span><span class="cx">                     threading, regular expression searches and \
</span><span class="cx">                     a powerful pattern matching language for selecting \
</span><span class="cx">                     groups of messages.
</span><del>-homepage            http://www.mutt.org/
</del><ins>+homepage            http://www.mutt.org
</ins><span class="cx"> 
</span><span class="cx"> depends_lib         port:gettext \
</span><span class="cx">                     port:libiconv \
</span><span class="lines">@@ -29,17 +27,15 @@
</span><span class="cx"> depends_run         path:share/curl/curl-ca-bundle.crt:curl-ca-bundle
</span><span class="cx"> 
</span><span class="cx"> master_sites        https://bitbucket.org/mutt/mutt/downloads/
</span><del>-distname            mutt-${version}
</del><span class="cx"> checksums           ${distfiles} \
</span><del>-                    rmd160  7fe7e653c27c9b580f958493638c1248d0ad5591 \
-                    sha256  a292ca765ed7b19db4ac495938a3ef808a16193b7d623d65562bb8feb2b42200
</del><ins>+                    rmd160  1ea7153ef05413d0068b5478acad87927e5cecdb \
+                    sha256  29afb6238ab7a540c0e3a78ce25c970f975ab6c0f0bc9f919993aab772136c19
</ins><span class="cx"> 
</span><span class="cx"> patch.pre_args      -p1
</span><span class="cx"> # Fix for handling emails from bad clients w.r.t smime
</span><span class="cx"> # See https://trac.macports.org/ticket/39362 and http://dev.mutt.org/trac/ticket/3285
</span><span class="cx"> patchfiles-append   patch-thunderbird-fix.diff
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> configure.args      --disable-warnings \
</span><span class="cx">                     --mandir=${prefix}/share/man \
</span><span class="cx">                     --with-docdir=${prefix}/share/doc/mutt \
</span><span class="lines">@@ -47,7 +43,7 @@
</span><span class="cx">                     --with-curses=${prefix} \
</span><span class="cx">                     --disable-silent-rules
</span><span class="cx"> 
</span><del>-default_variants    +pop +imap
</del><ins>+default_variants    +pop +imap +idn
</ins><span class="cx"> 
</span><span class="cx"> if {![variant_isset db4] &amp;&amp; ![variant_isset qdbm] &amp;&amp; ![variant_isset tokyocabinet]} {
</span><span class="cx">     variant_set     gdbm
</span><span class="lines">@@ -180,13 +176,13 @@
</span><span class="cx"> 
</span><span class="cx"> variant sidebar conflicts nntp trash description {Add a sidebar with a list of folders} {
</span><span class="cx">     # http://www.lunar-linux.org/mutt-sidebar/
</span><del>-    patch_sites-append      http://lunar-linux.org/~tchan/mutt:sidebar-patch
-    patchfiles-append       patch-1.5.24.sidebar.20151111.txt:sidebar-patch \
</del><ins>+    #patch_sites-append      http://lunar-linux.org/~tchan/mutt:sidebar-patch
+    patchfiles-append       patch-1.6.0.sidebar.20160408.macports.diff \
</ins><span class="cx">                             1-Make_hierarchy_separator_for_folder_indentation_configurable.patch \
</span><span class="cx">                             2-Support_long_er__folder_names_in_sidebar.patch
</span><del>-    checksums-append        patch-1.5.24.sidebar.20151111.txt \
-                            rmd160  521938ab47440e93f73bc5ae358e867ab3d3212c \
-                            sha256  66441edf056032119f854fc5ee86c73eece8b95dc998c0cfae5ed05b0b035070
</del><ins>+    #checksums-append        patch-1.5.24.sidebar.20151111.txt \
+    #                        rmd160  521938ab47440e93f73bc5ae358e867ab3d3212c \
+    #                        sha256  66441edf056032119f854fc5ee86c73eece8b95dc998c0cfae5ed05b0b035070
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> # Trash patch from https://trac.macports.org/ticket/20412 conflicts with sidebar patch on global.h
</span><span class="lines">@@ -202,5 +198,6 @@
</span><span class="cx"> 
</span><span class="cx"> notes &quot;This port no longer installs the pgpring binary. Please install the signing-party port if you need it.&quot;
</span><span class="cx"> 
</span><ins>+livecheck.url       ${homepage}/download.html
</ins><span class="cx"> livecheck.type      regex
</span><del>-livecheck.regex     {Mutt (\d+(?:\.\d+)*) was released}
</del><ins>+livecheck.regex     {The current stable public release version is (\d+(?:\.\d+)*)}
</ins></span></pre></div>
<a id="trunkdportsmailmuttfilespatch160sidebar20160408macportsdiff"></a>
<div class="addfile"><h4>Added: trunk/dports/mail/mutt/files/patch-1.6.0.sidebar.20160408.macports.diff (0 => 147581)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/mail/mutt/files/patch-1.6.0.sidebar.20160408.macports.diff                                (rev 0)
+++ trunk/dports/mail/mutt/files/patch-1.6.0.sidebar.20160408.macports.diff        2016-04-08 18:50:22 UTC (rev 147581)
</span><span class="lines">@@ -0,0 +1,1934 @@
</span><ins>+diff -ruN mutt-1.6.0.orig/Makefile.am mutt-1.6.0/Makefile.am
+--- mutt-1.6.0.orig/Makefile.am        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/Makefile.am        2016-04-08 20:21:12.000000000 +0200
+@@ -36,6 +36,8 @@
+         muttlib.c editmsg.c mbyte.c mutt_idna.c \
+         url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c

++mutt_SOURCES += sidebar.c
++
+ nodist_mutt_SOURCES = $(BUILT_SOURCES)

+ mutt_LDADD = $(MUTT_LIB_OBJECTS) $(LIBOBJS) $(LIBIMAP) $(MUTTLIBS) \
+diff -ruN mutt-1.6.0.orig/Makefile.in mutt-1.6.0/Makefile.in
+--- mutt-1.6.0.orig/Makefile.in        2016-04-02 20:14:47.000000000 +0200
++++ mutt-1.6.0/Makefile.in        2016-04-08 20:26:33.000000000 +0200
+@@ -136,6 +136,7 @@
+         editmsg.$(OBJEXT) mbyte.$(OBJEXT) mutt_idna.$(OBJEXT) \
+         url.$(OBJEXT) ascii.$(OBJEXT) crypt-mod.$(OBJEXT) \
+         safe_asprintf.$(OBJEXT)
++am_mutt_OBJECTS += sidebar.$(OBJEXT)
+ am__objects_1 =
+ am__objects_2 = patchlist.$(OBJEXT) conststrings.$(OBJEXT) \
+         $(am__objects_1)
+@@ -490,6 +491,8 @@
+         muttlib.c editmsg.c mbyte.c mutt_idna.c \
+         url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c

++mutt_SOURCES += sidebar.c
++
+ nodist_mutt_SOURCES = $(BUILT_SOURCES)
+ mutt_LDADD = $(MUTT_LIB_OBJECTS) $(LIBOBJS) $(LIBIMAP) $(MUTTLIBS) \
+         $(INTLLIBS) $(LIBICONV)  $(GPGME_LIBS)
+@@ -816,6 +819,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@
+diff -ruN mutt-1.6.0.orig/OPS mutt-1.6.0/OPS
+--- mutt-1.6.0.orig/OPS        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/OPS        2016-04-08 20:19:20.000000000 +0200
+@@ -179,3 +179,8 @@
+ OP_MAIN_SHOW_LIMIT &quot;show currently active limit pattern&quot;
+ OP_MAIN_COLLAPSE_THREAD &quot;collapse/uncollapse current thread&quot;
+ OP_MAIN_COLLAPSE_ALL &quot;collapse/uncollapse all threads&quot;
++OP_SIDEBAR_SCROLL_UP &quot;scroll the mailbox pane up 1 page&quot;
++OP_SIDEBAR_SCROLL_DOWN &quot;scroll the mailbox pane down 1 page&quot;
++OP_SIDEBAR_NEXT &quot;go down to next mailbox&quot;
++OP_SIDEBAR_PREV &quot;go to previous mailbox&quot;
++OP_SIDEBAR_OPEN &quot;open hilighted mailbox&quot;
+diff -ruN mutt-1.6.0.orig/PATCHES mutt-1.6.0/PATCHES
+--- mutt-1.6.0.orig/PATCHES        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/PATCHES        2016-04-08 20:19:20.000000000 +0200
+@@ -0,0 +1 @@
++patch-1.6.0.sidebar.20160408.macports.diff
+diff -ruN mutt-1.6.0.orig/buffy.c mutt-1.6.0/buffy.c
+--- mutt-1.6.0.orig/buffy.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/buffy.c        2016-04-08 20:19:20.000000000 +0200
+@@ -161,6 +161,49 @@
+   }
+ }

++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-&gt;path, b2-&gt;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-&gt;next)
++    buffycount++;
++
++  ary = (BUFFY **) safe_calloc(buffycount, sizeof (*ary));
++
++  tmp = b;
++  for (i = 0; tmp != NULL; tmp = tmp-&gt;next, i++) {
++    ary[i] = tmp;
++  }
++
++  qsort(ary, buffycount, sizeof(*ary), buffy_compare_name);
++
++  for (i = 0; i &lt; buffycount - 1; i++) {
++    ary[i]-&gt;next = ary[i+1];
++  }
++  ary[buffycount - 1]-&gt;next = NULL;
++  for (i = 1; i &lt; buffycount; i++) {
++    ary[i]-&gt;prev = ary[i-1];
++  }
++  ary[0]-&gt;prev = NULL;
++
++  tmp = ary[0];
++  free(ary);
++  return tmp;
++}
++
+ BUFFY *mutt_find_mailbox (const char *path)
+ {
+   BUFFY *tmp = NULL;
+@@ -196,9 +239,13 @@
+ static BUFFY *buffy_new (const char *path)
+ {
+   BUFFY* buffy;
++  char rp[PATH_MAX];
++  char *r;

+   buffy = (BUFFY *) safe_calloc (1, sizeof (BUFFY));
+   strfcpy (buffy-&gt;path, path, sizeof (buffy-&gt;path));
++  r = realpath(path, rp);
++  strfcpy (buffy-&gt;realpath, r ? rp : path, sizeof (buffy-&gt;realpath));
+   buffy-&gt;next = NULL;
+   buffy-&gt;magic = 0;

+@@ -243,8 +290,8 @@
+     p = realpath (buf, f1);
+     for (tmp = &amp;Incoming; *tmp; tmp = &amp;((*tmp)-&gt;next))
+     {
+-      q = realpath ((*tmp)-&gt;path, f2);
+-      if (mutt_strcmp (p ? p : buf, q ? q : (*tmp)-&gt;path) == 0)
++      q = (*tmp)-&gt;realpath;
++      if (mutt_strcmp (p ? p : buf, q) == 0)
+       {
+         dprint(3,(debugfile,&quot;mailbox '%s' already registered as '%s'\n&quot;, buf, (*tmp)-&gt;path));
+         break;
+@@ -282,6 +329,7 @@
+     else
+       (*tmp)-&gt;size = 0;
+   }
++  Incoming = buffy_sort(Incoming);
+   return 0;
+ }

+@@ -306,6 +354,11 @@
+       return 0;
+   }

++  if (option(OPTSIDEBAR) &amp;&amp; mailbox-&gt;msg_unread &gt; 0) {
++      mailbox-&gt;new = 1;
++      return 1;
++  }
++
+   if ((dirp = opendir (path)) == NULL)
+   {
+     mailbox-&gt;magic = 0;
+@@ -357,6 +410,73 @@

+   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-&gt;msgcount = 0;
++ mailbox-&gt;msg_unread = 0;
++ mailbox-&gt;msg_flagged = 0;
++
++ snprintf (path, sizeof (path), &quot;%s/new&quot;, mailbox-&gt;path);
++       
++ if ((dirp = opendir (path)) == NULL)
++ {   
++   mailbox-&gt;magic = 0;
++   return;
++ } 
++       
++ while ((de = readdir (dirp)) != NULL)
++ {
++   if (*de-&gt;d_name == '.')
++     continue;
++
++   if (!(p = strstr (de-&gt;d_name, &quot;:2,&quot;)) || !strchr (p + 3, 'T')) {
++     mailbox-&gt;new = 1;
++     mailbox-&gt;msgcount++;
++     mailbox-&gt;msg_unread++;
++   }
++ }
++
++ closedir (dirp);
++ snprintf (path, sizeof (path), &quot;%s/cur&quot;, mailbox-&gt;path);
++       
++ if ((dirp = opendir (path)) == NULL)
++ {   
++  mailbox-&gt;magic = 0;
++   return;
++ } 
++       
++ while ((de = readdir (dirp)) != NULL)
++ {
++   if (*de-&gt;d_name == '.')
++     continue;
++
++   if (!(p = strstr (de-&gt;d_name, &quot;:2,&quot;)) || !strchr (p + 3, 'T')) {
++     mailbox-&gt;msgcount++;
++     if ((p = strstr (de-&gt;d_name, &quot;:2,&quot;))) {
++       if (!strchr (p + 3, 'T')) {
++         if (!strchr (p + 3, 'S'))
++           mailbox-&gt;msg_unread++;
++         if (strchr(p + 3, 'F'))
++           mailbox-&gt;msg_flagged++;
++       }
++     }
++   }
++ }
++
++ mailbox-&gt;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,7 +488,7 @@
+   else
+     statcheck = sb-&gt;st_mtime &gt; sb-&gt;st_atime
+       || (mailbox-&gt;newly_created &amp;&amp; sb-&gt;st_ctime == sb-&gt;st_mtime &amp;&amp; sb-&gt;st_ctime == sb-&gt;st_atime);
+-  if (statcheck)
++  if ((!option(OPTSIDEBAR) &amp;&amp; statcheck) || (option(OPTSIDEBAR) &amp;&amp; mailbox-&gt;msg_unread &gt; 0))
+   {
+     if (!option(OPTMAILCHECKRECENT) || sb-&gt;st_mtime &gt; mailbox-&gt;last_visited)
+     {
+@@ -388,6 +508,27 @@
+   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-&gt;sb_last_checked &gt; sb-&gt;st_mtime &amp;&amp; mailbox-&gt;msgcount != 0)
++      return; /* no check necessary */
++
++  ctx = mx_open_mailbox(mailbox-&gt;path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL);
++  if(ctx)
++  {
++    mailbox-&gt;msgcount = ctx-&gt;msgcount;
++    mailbox-&gt;msg_unread = ctx-&gt;unread;
++    mailbox-&gt;msg_flagged = ctx-&gt;flagged;
++    mailbox-&gt;sb_last_checked = time(NULL);
++    mx_close_mailbox(ctx, 0);
++  }
++}
++
+ int mutt_buffy_check (int force)
+ {
+   BUFFY *tmp;
+@@ -461,17 +602,20 @@
+       {
+       case M_MBOX:
+       case M_MMDF:
++        buffy_mbox_update (tmp, &amp;sb);
+         if (buffy_mbox_hasnew (tmp, &amp;sb) &gt; 0)
+           BuffyCount++;
+         break;

+       case M_MAILDIR:
++        buffy_maildir_update (tmp);
+         if (buffy_maildir_hasnew (tmp) &gt; 0)
+           BuffyCount++;
+         break;

+       case M_MH:
+-        mh_buffy(tmp);
++        mh_buffy_update (tmp-&gt;path, &amp;tmp-&gt;msgcount, &amp;tmp-&gt;msg_unread, &amp;tmp-&gt;msg_flagged, &amp;tmp-&gt;sb_last_checked);
++        mh_buffy(tmp);
+         if (tmp-&gt;new)
+           BuffyCount++;
+         break;
+diff -ruN mutt-1.6.0.orig/buffy.h mutt-1.6.0/buffy.h
+--- mutt-1.6.0.orig/buffy.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/buffy.h        2016-04-08 20:19:20.000000000 +0200
+@@ -23,13 +23,19 @@
+ 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;

+diff -ruN mutt-1.6.0.orig/color.c mutt-1.6.0/color.c
+--- mutt-1.6.0.orig/color.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/color.c        2016-04-08 20:19:20.000000000 +0200
+@@ -94,6 +94,8 @@
+   { &quot;underline&quot;,        MT_COLOR_UNDERLINE },
+   { &quot;index&quot;,                MT_COLOR_INDEX },
+   { &quot;prompt&quot;,                MT_COLOR_PROMPT },
++  { &quot;sidebar_new&quot;,        MT_COLOR_NEW },
++  { &quot;sidebar_flagged&quot;,        MT_COLOR_FLAGGED },
+   { NULL,                0 }
+ };

+diff -ruN mutt-1.6.0.orig/compose.c mutt-1.6.0/compose.c
+--- mutt-1.6.0.orig/compose.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/compose.c        2016-04-08 20:19:20.000000000 +0200
+@@ -72,7 +72,7 @@

+ #define HDR_XOFFSET 10
+ #define TITLE_FMT &quot;%10s&quot; /* Used for Prompts, which are ASCII */
+-#define W (COLS - HDR_XOFFSET)
++#define W (COLS - HDR_XOFFSET - SidebarWidth)

+ static const char * const Prompts[] =
+ {
+@@ -110,7 +110,7 @@

+ static void redraw_crypt_lines (HEADER *msg)
+ {
+-  mvaddstr (HDR_CRYPT, 0, &quot;Security: &quot;);
++  mvaddstr (HDR_CRYPT, SidebarWidth, &quot;Security: &quot;);

+   if ((WithCrypto &amp; (APPLICATION_PGP | APPLICATION_SMIME)) == 0)
+   {
+@@ -145,7 +145,7 @@
+       addstr (_(&quot; (OppEnc mode)&quot;));

+   clrtoeol ();
+-  move (HDR_CRYPTINFO, 0);
++  move (HDR_CRYPTINFO, SidebarWidth);
+   clrtoeol ();

+   if ((WithCrypto &amp; APPLICATION_PGP)
+@@ -162,7 +162,7 @@
+       &amp;&amp; (msg-&gt;security &amp; ENCRYPT)
+       &amp;&amp; SmimeCryptAlg
+       &amp;&amp; *SmimeCryptAlg) {
+-      mvprintw (HDR_CRYPTINFO, 40, &quot;%s%s&quot;, _(&quot;Encrypt with: &quot;),
++      mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, &quot;%s%s&quot;, _(&quot;Encrypt with: &quot;),
+                 NONULL(SmimeCryptAlg));
+   }
+ }
+@@ -175,7 +175,7 @@
+   int c;
+   char *t;

+-  mvaddstr (HDR_MIX, 0,     &quot;     Mix: &quot;);
++  mvaddstr (HDR_MIX, SidebarWidth,     &quot;     Mix: &quot;);

+   if (!chain)
+   {
+@@ -190,7 +190,7 @@
+     if (t &amp;&amp; t[0] == '0' &amp;&amp; t[1] == '\0')
+       t = &quot;&lt;random&gt;&quot;;
+     
+-    if (c + mutt_strlen (t) + 2 &gt;= COLS)
++    if (c + mutt_strlen (t) + 2 &gt;= COLS - SidebarWidth)
+       break;

+     addstr (NONULL(t));
+@@ -242,7 +242,7 @@

+   buf[0] = 0;
+   rfc822_write_address (buf, sizeof (buf), addr, 1);
+-  mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]);
++  mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]);
+   mutt_paddstr (W, buf);
+ }

+@@ -252,10 +252,10 @@
+   draw_envelope_addr (HDR_TO, msg-&gt;env-&gt;to);
+   draw_envelope_addr (HDR_CC, msg-&gt;env-&gt;cc);
+   draw_envelope_addr (HDR_BCC, msg-&gt;env-&gt;bcc);
+-  mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]);
++  mvprintw (HDR_SUBJECT, SidebarWidth, TITLE_FMT, Prompts[HDR_SUBJECT - 1]);
+   mutt_paddstr (W, NONULL (msg-&gt;env-&gt;subject));
+   draw_envelope_addr (HDR_REPLYTO, msg-&gt;env-&gt;reply_to);
+-  mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]);
++  mvprintw (HDR_FCC, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]);
+   mutt_paddstr (W, fcc);

+   if (WithCrypto)
+@@ -266,7 +266,7 @@
+ #endif

+   SETCOLOR (MT_COLOR_STATUS);
+-  mvaddstr (HDR_ATTACH - 1, 0, _(&quot;-- Attachments&quot;));
++  mvaddstr (HDR_ATTACH - 1, SidebarWidth, _(&quot;-- Attachments&quot;));
+   clrtoeol ();

+   NORMAL_COLOR;
+@@ -302,7 +302,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;
+@@ -564,7 +564,7 @@
+         if (mutt_get_field (&quot;Subject: &quot;, buf, sizeof (buf), 0) == 0)
+         {
+           mutt_str_replace (&amp;msg-&gt;env-&gt;subject, buf);
+-          move (HDR_SUBJECT, HDR_XOFFSET);
++          move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth);
+           if (msg-&gt;env-&gt;subject)
+             mutt_paddstr (W, msg-&gt;env-&gt;subject);
+           else
+@@ -582,7 +582,7 @@
+         {
+           strfcpy (fcc, buf, fcclen);
+           mutt_pretty_mailbox (fcc, fcclen);
+-          move (HDR_FCC, HDR_XOFFSET);
++          move (HDR_FCC, HDR_XOFFSET + SidebarWidth);
+           mutt_paddstr (W, fcc);
+           fccSet = 1;
+         }
+diff -ruN mutt-1.6.0.orig/configure.ac mutt-1.6.0/configure.ac
+--- mutt-1.6.0.orig/configure.ac        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/configure.ac        2016-04-08 20:19:20.000000000 +0200
+@@ -1301,6 +1301,8 @@
+   AC_DEFINE(HAVE_LANGINFO_YESEXPR,1,[ Define if you have &lt;langinfo.h&gt; and nl_langinfo(YESEXPR). ])
+ fi

++AC_CHECK_FUNCS(fmemopen open_memstream)
++
+ dnl Documentation tools
+ have_openjade=&quot;no&quot;
+ AC_PATH_PROG([OSPCAT], [ospcat], [none])
+diff -ruN mutt-1.6.0.orig/curs_main.c mutt-1.6.0/curs_main.c
+--- mutt-1.6.0.orig/curs_main.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/curs_main.c        2016-04-08 20:19:20.000000000 +0200
+@@ -26,7 +26,9 @@
+ #include &quot;mailbox.h&quot;
+ #include &quot;mapping.h&quot;
+ #include &quot;sort.h&quot;
++#include &quot;buffy.h&quot;
+ #include &quot;mx.h&quot;
++#include &quot;sidebar.h&quot;

+ #ifdef USE_POP
+ #include &quot;pop.h&quot;
+@@ -595,20 +597,31 @@
+        menu-&gt;redraw |= REDRAW_STATUS;
+      if (do_buffy_notify)
+      {
+-       if (mutt_buffy_notify () &amp;&amp; option (OPTBEEPNEW))
+-         beep ();
++       if (mutt_buffy_notify ())
++       {
++         menu-&gt;redraw |= REDRAW_STATUS;
++         if (option (OPTBEEPNEW))
++           beep ();
++       }
+      }
+      else
+        do_buffy_notify = 1;
+     }

++    if(option(OPTSIDEBAR))
++        menu-&gt;redraw |= REDRAW_SIDEBAR;
++
+     if (op != -1)
+       mutt_curs_set (0);

+     if (menu-&gt;redraw &amp; REDRAW_FULL)
+     {
+       menu_redraw_full (menu);
++      draw_sidebar(menu-&gt;menu);
+       mutt_show_error ();
++    } else if(menu-&gt;redraw &amp; REDRAW_SIDEBAR) {
++        draw_sidebar(menu-&gt;menu);
++        menu-&gt;redraw &amp;= ~REDRAW_SIDEBAR;
+     }

+     if (menu-&gt;menu == MENU_MAIN)
+@@ -630,9 +643,12 @@

+       if (menu-&gt;redraw &amp; 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-&gt;redraw &amp;= ~REDRAW_STATUS;
+@@ -652,7 +668,7 @@
+         menu-&gt;oldcurrent = -1;

+       if (option (OPTARROWCURSOR))
+-        move (menu-&gt;current - menu-&gt;top + menu-&gt;offset, 2);
++        move (menu-&gt;current - menu-&gt;top + menu-&gt;offset, SidebarWidth + 2);
+       else if (option (OPTBRAILLEFRIENDLY))
+         move (menu-&gt;current - menu-&gt;top + menu-&gt;offset, 0);
+       else
+@@ -1091,6 +1107,7 @@
+           break;

+         CHECK_MSGCOUNT;
++        CHECK_VISIBLE;
+         CHECK_READONLY;
+         {
+           int oldvcount = Context-&gt;vcount;
+@@ -1150,6 +1167,7 @@
+           menu-&gt;redraw = REDRAW_FULL;
+         break;

++      case OP_SIDEBAR_OPEN:
+       case OP_MAIN_CHANGE_FOLDER:
+       case OP_MAIN_NEXT_UNREAD_MAILBOX:

+@@ -1181,7 +1199,11 @@
+         {
+           mutt_buffy (buf, sizeof (buf));

+-          if (mutt_enter_fname (cp, buf, sizeof (buf), &amp;menu-&gt;redraw, 1) == -1)
++          if ( op == OP_SIDEBAR_OPEN ) {
++              if(!CurBuffy)
++                break;
++            strncpy( buf, CurBuffy-&gt;path, sizeof(buf) );  
++            } else if (mutt_enter_fname (cp, buf, sizeof (buf), &amp;menu-&gt;redraw, 1) == -1)
+           {
+             if (menu-&gt;menu == MENU_PAGER)
+             {
+@@ -1199,6 +1221,7 @@
+         }

+         mutt_expand_path (buf, sizeof (buf));
++        set_curbuffy(buf);
+         if (mx_get_magic (buf) &lt;= 0)
+         {
+           mutt_error (_(&quot;%s is not a mailbox.&quot;), buf);
+@@ -2310,6 +2333,12 @@
+         mutt_what_key();
+         break;

++      case OP_SIDEBAR_SCROLL_UP:
++      case OP_SIDEBAR_SCROLL_DOWN:
++      case OP_SIDEBAR_NEXT:
++      case OP_SIDEBAR_PREV:
++        scroll_sidebar(op, menu-&gt;menu);
++        break;
+       default:
+         if (menu-&gt;menu == MENU_MAIN)
+           km_error_key (MENU_MAIN);
+diff -ruN mutt-1.6.0.orig/doc/Muttrc mutt-1.6.0/doc/Muttrc
+--- mutt-1.6.0.orig/doc/Muttrc        2016-04-02 20:15:01.000000000 +0200
++++ mutt-1.6.0/doc/Muttrc        2016-04-08 20:19:20.000000000 +0200
+@@ -657,6 +657,26 @@
+ # $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
+diff -ruN mutt-1.6.0.orig/flags.c mutt-1.6.0/flags.c
+--- mutt-1.6.0.orig/flags.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/flags.c        2016-04-08 20:19:20.000000000 +0200
+@@ -22,8 +22,10 @@

+ #include &quot;mutt.h&quot;
+ #include &quot;mutt_curses.h&quot;
++#include &quot;mutt_menu.h&quot;
+ #include &quot;sort.h&quot;
+ #include &quot;mx.h&quot;
++#include &quot;sidebar.h&quot;

+ void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx)
+ {
+@@ -263,6 +265,7 @@
+    */
+   if (h-&gt;searched &amp;&amp; (changed != h-&gt;changed || deleted != ctx-&gt;deleted || tagged != ctx-&gt;tagged || flagged != ctx-&gt;flagged))
+     h-&gt;searched = 0;
++        draw_sidebar(0);
+ }

+ void mutt_tag_set_flag (int flag, int bf)
+diff -ruN mutt-1.6.0.orig/functions.h mutt-1.6.0/functions.h
+--- mutt-1.6.0.orig/functions.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/functions.h        2016-04-08 20:19:20.000000000 +0200
+@@ -169,6 +169,11 @@
+   { &quot;decrypt-save&quot;,                OP_DECRYPT_SAVE,                NULL },


++ { &quot;sidebar-scroll-up&quot;,        OP_SIDEBAR_SCROLL_UP, NULL },
++ { &quot;sidebar-scroll-down&quot;,        OP_SIDEBAR_SCROLL_DOWN, NULL },
++ { &quot;sidebar-next&quot;,                OP_SIDEBAR_NEXT, NULL },
++ { &quot;sidebar-prev&quot;,                OP_SIDEBAR_PREV, NULL },
++ { &quot;sidebar-open&quot;,                OP_SIDEBAR_OPEN, NULL },
+   { NULL,                        0,                                NULL }
+ };

+@@ -272,6 +277,11 @@

+   { &quot;what-key&quot;,                OP_WHAT_KEY,                NULL },

++  { &quot;sidebar-scroll-up&quot;,        OP_SIDEBAR_SCROLL_UP, NULL },
++  { &quot;sidebar-scroll-down&quot;,        OP_SIDEBAR_SCROLL_DOWN, NULL },
++  { &quot;sidebar-next&quot;,        OP_SIDEBAR_NEXT, NULL },
++  { &quot;sidebar-prev&quot;,        OP_SIDEBAR_PREV, NULL },
++  { &quot;sidebar-open&quot;, OP_SIDEBAR_OPEN, NULL },
+   { NULL,                0,                                NULL }
+ };

+diff -ruN mutt-1.6.0.orig/globals.h mutt-1.6.0/globals.h
+--- mutt-1.6.0.orig/globals.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/globals.h        2016-04-08 20:19:20.000000000 +0200
+@@ -118,6 +118,9 @@
+ 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
+@@ -214,6 +217,9 @@
+ WHERE short ScoreThresholdRead;
+ WHERE short ScoreThresholdFlag;

++WHERE struct buffy_t *CurBuffy INITVAL(0);
++WHERE short DrawFullLine INITVAL(0);
++WHERE short SidebarWidth;
+ #ifdef USE_IMAP
+ WHERE short ImapKeepalive;
+ WHERE short ImapPipelineDepth;
+diff -ruN mutt-1.6.0.orig/handler.c mutt-1.6.0/handler.c
+--- mutt-1.6.0.orig/handler.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/handler.c        2016-04-08 20:19:20.000000000 +0200
+@@ -1603,6 +1603,11 @@

+   fseeko (s-&gt;fpin, b-&gt;offset, 0);

++#ifdef HAVE_FMEMOPEN
++  char *temp;
++  size_t tempsize;
++#endif
++
+   /* see if we need to decode this part before processing it */
+   if (b-&gt;encoding == ENCBASE64 || b-&gt;encoding == ENCQUOTEDPRINTABLE ||
+       b-&gt;encoding == ENCUUENCODED || plaintext ||
+@@ -1618,6 +1623,14 @@
+     {
+       /* decode to a tempfile, saving the original destination */
+       fp = s-&gt;fpout;
++#ifdef HAVE_FMEMOPEN
++     if ((s-&gt;fpout = open_memstream(&amp;temp, &amp;tempsize)) == NULL)
++     {
++       mutt_error _(&quot;Unable to open memory stream!&quot;);
++       dprint (1, (debugfile, &quot;Can't open memory stream.\n&quot;));
++       return -1;
++     }
++#else
+       mutt_mktemp (tempfile, sizeof (tempfile));
+       if ((s-&gt;fpout = safe_fopen (tempfile, &quot;w&quot;)) == NULL)
+       {
+@@ -1625,6 +1638,7 @@
+         dprint (1, (debugfile, &quot;Can't open %s.\n&quot;, tempfile));
+         return -1;
+       }
++#endif
+       /* decoding the attachment changes the size and offset, so save a copy
+         * of the &quot;real&quot; values now, and restore them after processing
+         */
+@@ -1653,9 +1667,19 @@
+       /* restore final destination and substitute the tempfile for input */
+       s-&gt;fpout = fp;
+       fp = s-&gt;fpin;
++#ifdef HAVE_FMEMOPEN
++      if(tempsize)
++        s-&gt;fpin = fmemopen(temp, tempsize, &quot;r&quot;);
++      else /* fmemopen cannot handle zero-length buffers */
++        s-&gt;fpin = safe_fopen (&quot;/dev/null&quot;, &quot;r&quot;);
++      if(s-&gt;fpin == NULL) {
++       mutt_perror(&quot;failed to re-open memstream!&quot;);
++       return (-1);
++      }
++#else
+       s-&gt;fpin = fopen (tempfile, &quot;r&quot;);
+       unlink (tempfile);
+-
++#endif
+       /* restore the prefix */
+       s-&gt;prefix = savePrefix;
+     }
+@@ -1680,6 +1704,10 @@

+       /* restore the original source stream */
+       safe_fclose (&amp;s-&gt;fpin);
++#ifdef HAVE_FMEMOPEN
++      if(tempsize)
++          FREE(&amp;temp);
++#endif
+       s-&gt;fpin = fp;
+     }
+   }
+diff -ruN mutt-1.6.0.orig/imap/command.c mutt-1.6.0/imap/command.c
+--- mutt-1.6.0.orig/imap/command.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/imap/command.c        2016-04-08 20:19:20.000000000 +0200
+@@ -1016,6 +1016,13 @@
+              opened */
+           status-&gt;uidnext = oldun;

++        /* Added to make the sidebar show the correct numbers */
++        if (status-&gt;messages)
++        {
++          inc-&gt;msgcount = status-&gt;messages;
++          inc-&gt;msg_unread = status-&gt;unseen;
++        }
++
+         FREE (&amp;value);
+         return;
+       }
+diff -ruN mutt-1.6.0.orig/imap/imap.c mutt-1.6.0/imap/imap.c
+--- mutt-1.6.0.orig/imap/imap.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/imap/imap.c        2016-04-08 20:19:20.000000000 +0200
+@@ -1535,7 +1535,7 @@

+     imap_munge_mbox_name (idata, munged, sizeof (munged), name);
+     snprintf (command, sizeof (command),
+-              &quot;STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)&quot;, munged);
++              &quot;STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)&quot;, munged);

+     if (imap_exec (idata, command, IMAP_CMD_QUEUE) &lt; 0)
+     {
+diff -ruN mutt-1.6.0.orig/init.h mutt-1.6.0/init.h
+--- mutt-1.6.0.orig/init.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/init.h        2016-04-08 20:19:20.000000000 +0200
+@@ -2049,6 +2049,54 @@
+   ** not used.
+   ** (PGP only)
+   */
++  {&quot;sidebar_delim&quot;, DT_STR, R_BOTH, UL &amp;SidebarDelim, UL &quot;|&quot;},
++  /*
++  ** .pp
++  ** This specifies the delimiter between the sidebar (if visible) and 
++  ** other screens.
++  */
++  {&quot;sidebar_indentstr&quot;, DT_STR, R_BOTH, UL &amp;SidebarIndentStr, UL &quot; &quot;},
++  /*
++  ** .pp
++  ** This specifies the string that is used to indent items
++  ** with sidebar_folderindent= yes
++  */
++  { &quot;sidebar_visible&quot;, DT_BOOL, R_BOTH, OPTSIDEBAR, 0 },
++  /*
++  ** .pp
++  ** This specifies whether or not to show sidebar (left-side list of folders).
++  */
++  { &quot;sidebar_sort&quot;, DT_BOOL, R_BOTH, OPTSIDEBARSORT, 0 },
++  /*
++  ** .pp
++  ** This specifies whether or not to sort the sidebar alphabetically.
++  */
++  { &quot;sidebar_width&quot;, DT_NUM, R_BOTH, UL &amp;SidebarWidth, 0 },
++  /*
++  ** .pp
++  ** The width of the sidebar.
++  */
++  { &quot;sidebar_shortpath&quot;, DT_BOOL, R_BOTH, OPTSIDEBARSHORTPATH, 0 },
++  /*
++  ** .pp
++  ** Should the sidebar shorten the path showed.
++  */
++  {&quot;sidebar_format&quot;, DT_STR, R_NONE, UL &amp;SidebarFormat, UL &quot;%B%?F? [%F]?%* %?N?%N/?%4S&quot;},
++  /*
++  ** .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&gt;2.
++  */
++  { &quot;sidebar_folderindent&quot;, DT_BOOL, R_BOTH, OPTSIDEBARFOLDERINDENT, 0 },
++  /*
++  ** .pp
++  ** Should folders be indented in the sidebar.
++  */
++
+   { &quot;pgp_use_gpg_agent&quot;, DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0},
+   /*
+   ** .pp
+diff -ruN mutt-1.6.0.orig/mailbox.h mutt-1.6.0/mailbox.h
+--- mutt-1.6.0.orig/mailbox.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/mailbox.h        2016-04-08 20:19:20.000000000 +0200
+@@ -27,6 +27,7 @@
+ #define M_NEWFOLDER        (1&lt;&lt;4) /* create a new folder - same as M_APPEND, but uses
+                                 * safe_fopen() for mbox-style folders.
+                                 */
++#define M_PEEK                (1&lt;&lt;5) /* revert atime back after taking a look (if applicable) */

+ /* mx_open_new_message() */
+ #define M_ADD_FROM        (1&lt;&lt;0)        /* add a From_ line */
+diff -ruN mutt-1.6.0.orig/main.c mutt-1.6.0/main.c
+--- mutt-1.6.0.orig/main.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/main.c        2016-04-08 20:19:20.000000000 +0200
+@@ -50,6 +50,7 @@
+ #include &lt;unistd.h&gt;
+ #include &lt;errno.h&gt;
+ #include &lt;sys/stat.h&gt;
++#include &lt;limits.h&gt;
+ #include &lt;sys/utsname.h&gt;

+ #ifdef HAVE_GETOPT_H
+@@ -557,7 +558,7 @@

+ int main (int argc, char **argv)
+ {
+-  char folder[_POSIX_PATH_MAX] = &quot;&quot;;
++  char folder[PATH_MAX] = &quot;&quot;;
+   char *subject = NULL;
+   char *includeFile = NULL;
+   char *draftFile = NULL;
+@@ -1184,6 +1185,13 @@
+       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 (&amp;CurrentFolder, folder);
+     mutt_str_replace (&amp;LastFolder, folder);

+@@ -1206,6 +1214,7 @@
+     if((Context = mx_open_mailbox (folder, ((flags &amp; M_RO) || option (OPTREADONLY)) ? M_READONLY : 0, NULL))
+        || !explicit_folder)
+     {
++      set_curbuffy(folder);
+       mutt_index_menu ();
+       if (Context)
+         FREE (&amp;Context);
+diff -ruN mutt-1.6.0.orig/mbox.c mutt-1.6.0/mbox.c
+--- mutt-1.6.0.orig/mbox.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/mbox.c        2016-04-08 20:19:20.000000000 +0200
+@@ -100,6 +100,7 @@
+     mutt_perror (ctx-&gt;path);
+     return (-1);
+   }
++  ctx-&gt;atime = sb.st_atime;
+   ctx-&gt;mtime = sb.st_mtime;
+   ctx-&gt;size = sb.st_size;

+@@ -251,6 +252,7 @@

+   ctx-&gt;size = sb.st_size;
+   ctx-&gt;mtime = sb.st_mtime;
++  ctx-&gt;atime = sb.st_atime;

+ #ifdef NFS_ATTRIBUTE_HACK
+   if (sb.st_mtime &gt; sb.st_atime)
+diff -ruN mutt-1.6.0.orig/menu.c mutt-1.6.0/menu.c
+--- mutt-1.6.0.orig/menu.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/menu.c        2016-04-08 20:19:20.000000000 +0200
+@@ -24,6 +24,7 @@
+ #include &quot;mutt_curses.h&quot;
+ #include &quot;mutt_menu.h&quot;
+ #include &quot;mbyte.h&quot;
++#include &quot;sidebar.h&quot;

+ char* SearchBuffers[MENU_MAX];

+@@ -184,7 +185,7 @@
+ {
+   char *scratch = safe_strdup (s);
+   int shift = option (OPTARROWCURSOR) ? 3 : 0;
+-  int cols = COLS - shift;
++  int cols = COLS - shift - SidebarWidth;

+   mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1);
+   s[n - 1] = 0;
+@@ -237,6 +238,7 @@
+   int do_color;
+   int attr;

++  draw_sidebar(1);
+   for (i = menu-&gt;top; i &lt; menu-&gt;top + menu-&gt;pagelen; i++)
+   {
+     if (i &lt; menu-&gt;max)
+@@ -247,7 +249,7 @@
+       menu_pad_string (buf, sizeof (buf));

+       ATTRSET(attr);
+-      move(i - menu-&gt;top + menu-&gt;offset, 0);
++      move(i - menu-&gt;top + menu-&gt;offset, SidebarWidth);
+       do_color = 1;

+       if (i == menu-&gt;current)
+@@ -270,7 +272,7 @@
+     else
+     {
+       NORMAL_COLOR;
+-      CLEARLINE(i - menu-&gt;top + menu-&gt;offset);
++      CLEARLINE_WIN (i - menu-&gt;top + menu-&gt;offset);
+     }
+   }
+   NORMAL_COLOR;
+@@ -287,7 +289,7 @@
+     return;
+   }
+   
+-  move (menu-&gt;oldcurrent + menu-&gt;offset - menu-&gt;top, 0);
++  move (menu-&gt;oldcurrent + menu-&gt;offset - menu-&gt;top, SidebarWidth);
+   ATTRSET(menu-&gt;color (menu-&gt;oldcurrent));

+   if (option (OPTARROWCURSOR))
+@@ -299,13 +301,13 @@
+     {
+       menu_make_entry (buf, sizeof (buf), menu, menu-&gt;oldcurrent);
+       menu_pad_string (buf, sizeof (buf));
+-      move (menu-&gt;oldcurrent + menu-&gt;offset - menu-&gt;top, 3);
++      move (menu-&gt;oldcurrent + menu-&gt;offset - menu-&gt;top, SidebarWidth + 3);
+       print_enriched_string (menu-&gt;color(menu-&gt;oldcurrent), (unsigned char *) buf, 1);
+     }

+     /* now draw it in the new location */
+     SETCOLOR(MT_COLOR_INDICATOR);
+-    mvaddstr(menu-&gt;current + menu-&gt;offset - menu-&gt;top, 0, &quot;-&gt;&quot;);
++    mvaddstr(menu-&gt;current + menu-&gt;offset - menu-&gt;top, SidebarWidth, &quot;-&gt;&quot;);
+   }
+   else
+   {
+@@ -318,7 +320,7 @@
+     menu_make_entry (buf, sizeof (buf), menu, menu-&gt;current);
+     menu_pad_string (buf, sizeof (buf));
+     SETCOLOR(MT_COLOR_INDICATOR);
+-    move(menu-&gt;current - menu-&gt;top + menu-&gt;offset, 0);
++    move(menu-&gt;current - menu-&gt;top + menu-&gt;offset, SidebarWidth);
+     print_enriched_string (menu-&gt;color(menu-&gt;current), (unsigned char *) buf, 0);
+   }
+   menu-&gt;redraw &amp;= REDRAW_STATUS;
+@@ -330,7 +332,7 @@
+   char buf[LONG_STRING];
+   int attr = menu-&gt;color (menu-&gt;current);
+   
+-  move (menu-&gt;current + menu-&gt;offset - menu-&gt;top, 0);
++  move (menu-&gt;current + menu-&gt;offset - menu-&gt;top, SidebarWidth);
+   menu_make_entry (buf, sizeof (buf), menu, menu-&gt;current);
+   menu_pad_string (buf, sizeof (buf));

+@@ -873,7 +875,7 @@
+     
+     
+     if (option (OPTARROWCURSOR))
+-      move (menu-&gt;current - menu-&gt;top + menu-&gt;offset, 2);
++      move (menu-&gt;current - menu-&gt;top + menu-&gt;offset, SidebarWidth + 2);
+     else if (option (OPTBRAILLEFRIENDLY))
+       move (menu-&gt;current - menu-&gt;top + menu-&gt;offset, 0);
+     else
+diff -ruN mutt-1.6.0.orig/mh.c mutt-1.6.0/mh.c
+--- mutt-1.6.0.orig/mh.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/mh.c        2016-04-08 20:19:20.000000000 +0200
+@@ -295,6 +295,32 @@
+   mhs_free_sequences (&amp;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 (&amp;mhs, 0, sizeof (mhs));
++
++  if(!option(OPTSIDEBAR))
++      return;
++
++  if (mh_read_sequences (&amp;mhs, path) &lt; 0)
++    return;
++
++  msgcount = 0;
++  msg_unread = 0;
++  msg_flagged = 0;
++  for (i = 0; i &lt;= mhs.max; i++)
++    msgcount++;
++    if (mhs_check (&amp;mhs, i) &amp; MH_SEQ_UNSEEN) {
++      msg_unread++;
++    }
++    if (mhs_check (&amp;mhs, i) &amp; MH_SEQ_FLAGGED)
++      msg_flagged++;
++  mhs_free_sequences (&amp;mhs);
++  *sb_last_checked = time(NULL);
++}
++
+ static int mh_mkstemp (CONTEXT * dest, FILE ** fp, char **tgt)
+ {
+   int fd;
+diff -ruN mutt-1.6.0.orig/mutt.h mutt-1.6.0/mutt.h
+--- mutt-1.6.0.orig/mutt.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/mutt.h        2016-04-08 20:19:20.000000000 +0200
+@@ -428,6 +428,10 @@
+   OPTSAVEEMPTY,
+   OPTSAVENAME,
+   OPTSCORE,
++  OPTSIDEBAR,
++  OPTSIDEBARSHORTPATH,
++  OPTSIDEBARSORT,
++  OPTSIDEBARFOLDERINDENT,
+   OPTSIGDASHES,
+   OPTSIGONTOP,
+   OPTSORTRE,
+@@ -872,6 +876,7 @@
+ {
+   char *path;
+   FILE *fp;
++  time_t atime;
+   time_t mtime;
+   off_t size;
+   off_t vsize;
+@@ -906,6 +911,7 @@
+   unsigned int quiet : 1;        /* inhibit status messages? */
+   unsigned int collapsed : 1;   /* are all threads collapsed? */
+   unsigned int closing : 1;        /* mailbox is being closed */
++  unsigned int peekonly : 1;        /* just taking a glance, revert atime */

+   /* driver hooks */
+   void *data;                        /* driver specific data */
+diff -ruN mutt-1.6.0.orig/mutt_curses.h mutt-1.6.0/mutt_curses.h
+--- mutt-1.6.0.orig/mutt_curses.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/mutt_curses.h        2016-04-08 20:19:20.000000000 +0200
+@@ -64,6 +64,7 @@
+ #undef lines
+ #endif /* lines */

++#define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol()
+ #define CLEARLINE(x) move(x,0), clrtoeol()
+ #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x)
+ #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0)
+@@ -124,6 +125,8 @@
+   MT_COLOR_UNDERLINE,
+   MT_COLOR_INDEX,
+   MT_COLOR_PROMPT,
++  MT_COLOR_NEW,
++  MT_COLOR_FLAGGED,
+   MT_COLOR_MAX
+ };

+diff -ruN mutt-1.6.0.orig/mutt_menu.h mutt-1.6.0/mutt_menu.h
+--- mutt-1.6.0.orig/mutt_menu.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/mutt_menu.h        2016-04-08 20:19:20.000000000 +0200
+@@ -34,6 +34,7 @@
+ #define REDRAW_FULL                (1&lt;&lt;5)
+ #define REDRAW_BODY                (1&lt;&lt;6)
+ #define REDRAW_SIGWINCH                (1&lt;&lt;7)
++#define REDRAW_SIDEBAR                (1&lt;&lt;8)

+ #define M_MODEFMT &quot;-- Mutt: %s&quot;

+diff -ruN mutt-1.6.0.orig/muttlib.c mutt-1.6.0/muttlib.c
+--- mutt-1.6.0.orig/muttlib.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/muttlib.c        2016-04-08 20:19:20.000000000 +0200
+@@ -1282,6 +1282,8 @@
+           pl = pw = 1;

+         /* see if there's room to add content, else ignore */
++        if ( DrawFullLine )
++        {
+         if ((col &lt; COLS &amp;&amp; wlen &lt; destlen) || soft)
+         {
+           int pad;
+@@ -1325,6 +1327,52 @@
+           col += wid;
+           src += pl;
+         }
++        }
++        else
++        {
++        if ((col &lt; COLS-SidebarWidth &amp;&amp; wlen &lt; 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 &gt; 0 &amp;&amp; wlen + (pad * pl) + len &gt; destlen)
++            pad = ((signed)(destlen - wlen - len)) / pl;
++          if (pad &gt; 0)
++          {
++            while (pad--)
++            {
++              memcpy (wptr, src, pl);
++              wptr += pl;
++              wlen += pl;
++              col += pw;
++            }
++          }
++          else if (soft &amp;&amp; pad &lt; 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, &amp;wid);
++            /* truncate left so that right part fits completely in */
++            wlen = mutt_wstr_trunc (dest, destlen - len, col + pad, &amp;col);
++            wptr = dest + wlen;
++          }
++          if (len + wlen &gt; destlen)
++            len = mutt_wstr_trunc (buf, destlen - wlen, COLS - SidebarWidth - col, NULL);
++          memcpy (wptr, buf, len);
++          wptr += len;
++          wlen += len;
++          col += wid;
++          src += pl;
++        }
++        }
+         break; /* skip rest of input */
+       }
+       else if (ch == '|')
+diff -ruN mutt-1.6.0.orig/mx.c mutt-1.6.0/mx.c
+--- mutt-1.6.0.orig/mx.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/mx.c        2016-04-08 20:19:20.000000000 +0200
+@@ -580,6 +580,7 @@
+  *                M_APPEND        open mailbox for appending
+  *                M_READONLY        open mailbox in read-only mode
+  *                M_QUIET                only print error messages
++ *                M_PEEK                revert atime where applicable
+  *        ctx        if non-null, context struct to use
+  */
+ CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx)
+@@ -602,6 +603,8 @@
+     ctx-&gt;quiet = 1;
+   if (flags &amp; M_READONLY)
+     ctx-&gt;readonly = 1;
++  if (flags &amp; M_PEEK)
++    ctx-&gt;peekonly = 1;

+   if (flags &amp; (M_APPEND|M_NEWFOLDER))
+   {
+@@ -701,13 +704,26 @@
+ 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-&gt;peekonly &amp;&amp; ctx-&gt;path &amp;&amp; ctx-&gt;mtime &gt; ctx-&gt;atime)
++  {
++    ut.actime = ctx-&gt;atime;
++    ut.modtime = ctx-&gt;mtime;
++    utime (ctx-&gt;path, &amp;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 */
+-  mutt_buffy_setnotified(ctx-&gt;path);
++  if(!ctx-&gt;peekonly)
++    mutt_buffy_setnotified(ctx-&gt;path);

+   if (ctx-&gt;mx_close)
+     ctx-&gt;mx_close (ctx);
+@@ -719,6 +735,8 @@
+   mutt_clear_threads (ctx);
+   for (i = 0; i &lt; ctx-&gt;msgcount; i++)
+     mutt_free_header (&amp;ctx-&gt;hdrs[i]);
++  ctx-&gt;msgcount -= ctx-&gt;deleted;
++  set_buffystats(ctx);
+   FREE (&amp;ctx-&gt;hdrs);
+   FREE (&amp;ctx-&gt;v2r);
+   FREE (&amp;ctx-&gt;path);
+@@ -812,6 +830,10 @@
+     if (!ctx-&gt;hdrs[i]-&gt;deleted &amp;&amp; ctx-&gt;hdrs[i]-&gt;read 
+         &amp;&amp; !(ctx-&gt;hdrs[i]-&gt;flagged &amp;&amp; option (OPTKEEPFLAGGED)))
+       read_msgs++;
++    if (ctx-&gt;hdrs[i]-&gt;deleted &amp;&amp; !ctx-&gt;hdrs[i]-&gt;read)
++      ctx-&gt;unread--;
++    if (ctx-&gt;hdrs[i]-&gt;deleted &amp;&amp; ctx-&gt;hdrs[i]-&gt;flagged)
++      ctx-&gt;flagged--;
+   }

+   if (read_msgs &amp;&amp; quadoption (OPT_MOVE) != M_NO)
+diff -ruN mutt-1.6.0.orig/mx.h mutt-1.6.0/mx.h
+--- mutt-1.6.0.orig/mx.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/mx.h        2016-04-08 20:19:20.000000000 +0200
+@@ -57,6 +57,7 @@
+ 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 *);
+diff -ruN mutt-1.6.0.orig/pager.c mutt-1.6.0/pager.c
+--- mutt-1.6.0.orig/pager.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/pager.c        2016-04-08 20:19:20.000000000 +0200
+@@ -29,6 +29,7 @@
+ #include &quot;pager.h&quot;
+ #include &quot;attach.h&quot;
+ #include &quot;mbyte.h&quot;
++#include &quot;sidebar.h&quot;

+ #include &quot;mutt_crypt.h&quot;

+@@ -1096,6 +1097,7 @@
+   wchar_t wc;
+   mbstate_t mbstate;
+   int wrap_cols = mutt_term_width ((flags &amp; M_PAGER_NOWRAP) ? 0 : Wrap);
++  wrap_cols -= SidebarWidth;

+   if (check_attachment_marker ((char *)buf) == 0)
+     wrap_cols = COLS;
+@@ -1573,6 +1575,7 @@

+   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 */

+@@ -1747,7 +1750,7 @@
+     if ((redraw &amp; REDRAW_BODY) || topline != oldtopline)
+     {
+       do {
+-        move (bodyoffset, 0);
++        move (bodyoffset, SidebarWidth);
+         curline = oldtopline = topline;
+         lines = 0;
+         force_redraw = 0;
+@@ -1760,6 +1763,7 @@
+                             &amp;QuoteList, &amp;q_level, &amp;force_redraw, &amp;SearchRE) &gt; 0)
+             lines++;
+           curline++;
++            move(lines + bodyoffset, SidebarWidth);
+         }
+         last_offset = lineInfo[curline].offset;
+       } while (force_redraw);
+@@ -1772,6 +1776,7 @@
+           addch ('~');
+         addch ('\n');
+         lines++;
++          move(lines + bodyoffset, SidebarWidth);
+       }
+       NORMAL_COLOR;

+@@ -1789,29 +1794,39 @@
+       hfi.ctx = Context;
+       hfi.pager_progress = pager_progress_str;

++      statuswidth = COLS - (option(OPTSTATUSONTOP) &amp;&amp; PagerIndexLines &gt; 0 ? SidebarWidth : 0);
++
+       if (last_pos &lt; sb.st_size - 1)
+         snprintf(pager_progress_str, sizeof(pager_progress_str), OFF_T_FMT &quot;%%&quot;, (100 * last_offset / sb.st_size));
+       else
+         strfcpy(pager_progress_str, (topline == 0) ? &quot;all&quot; : &quot;end&quot;, sizeof(pager_progress_str));

+       /* print out the pager status bar */
+-      move (statusoffset, 0);
++      move (statusoffset, SidebarWidth);
+       SETCOLOR (MT_COLOR_STATUS);
++      if(option(OPTSTATUSONTOP) &amp;&amp; PagerIndexLines &gt; 0) {
++          CLEARLINE_WIN (statusoffset);
++      } else {
++          CLEARLINE (statusoffset);
++          DrawFullLine = 1; /* for mutt_make_string_info */
++      }

+       if (IsHeader (extra) || IsMsgAttach (extra))
+       {
+-        size_t l1 = COLS * MB_LEN_MAX;
++        size_t l1 = statuswidth * MB_LEN_MAX;
+         size_t l2 = sizeof (buffer);
+         hfi.hdr = (IsHeader (extra)) ? extra-&gt;hdr : extra-&gt;bdy-&gt;hdr;
+         mutt_make_string_info (buffer, l1 &lt; l2 ? l1 : l2, NONULL (PagerFmt), &amp;hfi, M_FORMAT_MAKEPRINT);
+-        mutt_paddstr (COLS, buffer);
++        mutt_paddstr (statuswidth, buffer);
+       }
+       else
+       {
+         char bn[STRING];
+         snprintf (bn, sizeof (bn), &quot;%s (%s)&quot;, banner, pager_progress_str);
+-        mutt_paddstr (COLS, bn);
++        mutt_paddstr (statuswidth, bn);
+       }
++      if(!option(OPTSTATUSONTOP) || PagerIndexLines == 0)
++          DrawFullLine = 0; /* reset */
+       NORMAL_COLOR;
+       if (option(OPTTSENABLED) &amp;&amp; TSSupported)
+       {
+@@ -1827,16 +1842,22 @@
+       /* redraw the pager_index indicator, because the
+        * flags for this message might have changed. */
+       menu_redraw_current (index);
++      draw_sidebar(MENU_PAGER);

+       /* print out the index status bar */
+       menu_status_line (buffer, sizeof (buffer), index, NONULL(Status));
+  
+-      move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0);
++      move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)),
++          (option(OPTSTATUSONTOP) ? 0: SidebarWidth));
+       SETCOLOR (MT_COLOR_STATUS);
+-      mutt_paddstr (COLS, buffer);
++      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)) {
+@@ -2777,6 +2798,13 @@
+         mutt_what_key ();
+         break;

++      case OP_SIDEBAR_SCROLL_UP:
++      case OP_SIDEBAR_SCROLL_DOWN:
++      case OP_SIDEBAR_NEXT:
++      case OP_SIDEBAR_PREV:
++        scroll_sidebar(ch, MENU_PAGER);
++         break;
++
+       default:
+         ch = -1;
+         break;
+diff -ruN mutt-1.6.0.orig/pattern.c mutt-1.6.0/pattern.c
+--- mutt-1.6.0.orig/pattern.c        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/pattern.c        2016-04-08 20:19:20.000000000 +0200
+@@ -154,6 +154,10 @@
+   HEADER *h = ctx-&gt;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,12 +167,20 @@
+       memset (&amp;s, 0, sizeof (s));
+       s.fpin = msg-&gt;fp;
+       s.flags = M_CHARCONV;
++#ifdef HAVE_FMEMOPEN
++      if((s.fpout = open_memstream(&amp;temp, &amp;tempsize)) == NULL)
++      {
++        mutt_perror (&quot;Error opening memstream&quot;);
++        return (0);
++      }
++#else
+       mutt_mktemp (tempfile, sizeof (tempfile));
+       if ((s.fpout = safe_fopen (tempfile, &quot;w+&quot;)) == NULL)
+       {
+         mutt_perror (tempfile);
+         return (0);
+       }
++#endif

+       if (pat-&gt;op != M_BODY)
+         mutt_copy_header (msg-&gt;fp, h, s.fpout, CH_FROM | CH_DECODE, NULL);
+@@ -184,7 +196,11 @@
+           if (s.fpout)
+           {
+             safe_fclose (&amp;s.fpout);
++#ifdef HAVE_FMEMOPEN
++            FREE(&amp;temp);
++#else
+             unlink (tempfile);
++#endif
+           }
+           return (0);
+         }
+@@ -193,11 +209,28 @@
+         mutt_body_handler (h-&gt;content, &amp;s);
+       }

++#ifdef HAVE_FMEMOPEN
++      fclose(s.fpout);
++      lng = tempsize;
++
++      if(tempsize) {
++          if ((fp = fmemopen(temp, tempsize, &quot;r&quot;)) == NULL) {
++            mutt_perror (&quot;Error re-opening memstream&quot;);
++            return (0);
++          }
++      } else { /* fmemopen cannot handle empty buffers */
++          if ((fp = safe_fopen (&quot;/dev/null&quot;, &quot;r&quot;)) == NULL) {
++            mutt_perror (&quot;Error opening /dev/null&quot;);
++            return (0);
++          }
++      }
++#else
+       fp = s.fpout;
+       fflush (fp);
+       fseek (fp, 0, 0);
+       fstat (fileno (fp), &amp;st);
+       lng = (long) st.st_size;
++#endif
+     }
+     else
+     {
+@@ -244,7 +277,12 @@
+     if (option (OPTTHOROUGHSRC))
+     {
+       safe_fclose (&amp;fp);
++#ifdef HAVE_FMEMOPEN
++      if(tempsize)
++          FREE (&amp;temp);
++#else
+       unlink (tempfile);
++#endif
+     }
+   }

+diff -ruN mutt-1.6.0.orig/protos.h mutt-1.6.0/protos.h
+--- mutt-1.6.0.orig/protos.h        2016-04-02 20:12:22.000000000 +0200
++++ mutt-1.6.0/protos.h        2016-04-08 20:19:20.000000000 +0200
+@@ -36,6 +36,13 @@
+   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);
+diff -ruN mutt-1.6.0.orig/sidebar.c mutt-1.6.0/sidebar.c
+--- mutt-1.6.0.orig/sidebar.c        1970-01-01 01:00:00.000000000 +0100
++++ mutt-1.6.0/sidebar.c        2016-04-08 20:19:20.000000000 +0200
+@@ -0,0 +1,410 @@
++/*
++ * Copyright (C) ????-2004 Justin Hibbits &lt;jrh29@po.cwru.edu&gt;
++ * Copyright (C) 2004 Thomer M. Gil &lt;mutt@thomer.com&gt;
++ * 
++ *     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 &quot;config.h&quot;
++#endif
++
++#include &quot;mutt.h&quot;
++#include &quot;mutt_menu.h&quot;
++#include &quot;mutt_curses.h&quot;
++#include &quot;sidebar.h&quot;
++#include &quot;buffy.h&quot;
++#include &lt;libgen.h&gt;
++#include &quot;keymap.h&quot;
++#include &lt;stdbool.h&gt;
++
++/*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-&gt;next != 0; tmp = tmp-&gt;next )
++                tmp-&gt;next-&gt;prev = tmp;
++
++        if ( TopBuffy == 0 &amp;&amp; BottomBuffy == 0 )
++                TopBuffy = Incoming;
++        if ( BottomBuffy == 0 ) {
++                BottomBuffy = TopBuffy;
++                while ( --count &amp;&amp; BottomBuffy-&gt;next )
++                        BottomBuffy = BottomBuffy-&gt;next;
++        }
++        else if ( TopBuffy == CurBuffy-&gt;next ) {
++                BottomBuffy = CurBuffy;
++                tmp = BottomBuffy;
++                while ( --count &amp;&amp; tmp-&gt;prev)
++                        tmp = tmp-&gt;prev;
++                TopBuffy = tmp;
++        }
++        else if ( BottomBuffy == CurBuffy-&gt;prev ) {
++                TopBuffy = CurBuffy;
++                tmp = TopBuffy;
++                while ( --count &amp;&amp; tmp-&gt;next )
++                        tmp = tmp-&gt;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 &amp; M_FORMAT_OPTIONAL;
++
++switch(op) {
++        case 'F':
++                if(!optional) {
++                        snprintf (fmt, sizeof (fmt), &quot;%%%sd&quot;, prefix);
++                        snprintf (dest, destlen, fmt, sbe-&gt;flagged);
++                } else if(sbe-&gt;flagged == 0) {
++                        optional = 0;
++                }
++                break;
++
++        case '!':
++                if(sbe-&gt;flagged == 0)
++                        mutt_format_s(dest, destlen, prefix, &quot;&quot;);
++                if(sbe-&gt;flagged == 1)
++                        mutt_format_s(dest, destlen, prefix, &quot;!&quot;);
++                if(sbe-&gt;flagged == 2)
++                        mutt_format_s(dest, destlen, prefix, &quot;!!&quot;);
++                if(sbe-&gt;flagged &gt; 2) {
++                        snprintf (buf, sizeof (buf), &quot;%d!&quot;, sbe-&gt;flagged);
++                        mutt_format_s(dest, destlen, prefix, buf);
++                }
++                break;
++
++        case 'S':
++                if(!optional) {
++                    snprintf (fmt, sizeof (fmt), &quot;%%%sd&quot;, prefix);
++                    snprintf (dest, destlen, fmt, sbe-&gt;size);
++                } else if (sbe-&gt;size == 0) {
++                    optional = 0;
++                }
++                break;
++
++        case 'N':
++                if(!optional) {
++                        snprintf (fmt, sizeof (fmt), &quot;%%%sd&quot;, prefix);
++                        snprintf (dest, destlen, fmt, sbe-&gt;new);
++                } else if(sbe-&gt;new == 0) {
++                        optional = 0;
++                }
++                break;
++
++        case 'B':
++                mutt_format_s(dest, destlen, prefix, sbe-&gt;box);
++                break;
++        }
++
++        if(optional)
++                mutt_FormatString (dest, destlen, col, ifstring, sidebar_format_str, (unsigned long) sbe, flags);
++        else if (flags &amp; 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 &lt; 1)
++        return NULL;
++
++    sbe.new = new;
++    sbe.flagged = flagged;
++    sbe.size = size;
++    strncpy(sbe.box, box, 31);
++
++    safe_realloc(&amp;entry, SBvisual + 2);
++    entry[SBvisual + 1] = '\0';
++
++    mutt_FormatString (entry, SBvisual+1, 0, SidebarFormat, sidebar_format_str, (unsigned long) &amp;sbe, 0);
++
++    return entry;
++}
++
++void set_curbuffy(char buf[LONG_STRING])
++{
++  BUFFY* tmp = CurBuffy = Incoming;
++
++  if (!Incoming)
++    return;
++
++  while(1) {
++    if(!strcmp(tmp-&gt;path, buf) || !strcmp(tmp-&gt;realpath, buf)) {
++      CurBuffy = tmp;
++      break;
++    }
++
++    if(tmp-&gt;next)
++      tmp = tmp-&gt;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 &amp;&amp; !option(OPTSIDEBAR)) {
++                        saveSidebarWidth = SidebarWidth;
++                        SidebarWidth = 0;
++                } else if(!prev_show_value &amp;&amp; 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 &gt; 0 &amp;&amp; option (OPTSIDEBAR)
++           &amp;&amp; delim_len &gt;= SidebarWidth) {
++         unset_option (OPTSIDEBAR);
++         /* saveSidebarWidth = SidebarWidth; */
++         if (saveSidebarWidth &gt; delim_len) {
++           SidebarWidth = saveSidebarWidth;
++           mutt_error (_(&quot;Value for sidebar_delim is too long. Disabling sidebar.&quot;));
++           sleep (2);
++         } else {
++           SidebarWidth = 0;
++           mutt_error (_(&quot;Value for sidebar_delim is too long. Disabling sidebar. Please set your sidebar_width to a sane value.&quot;));
++           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 &gt; 0) {
++        saveSidebarWidth = SidebarWidth;
++        SidebarWidth = 0;
++      }
++      unset_option(OPTSIDEBAR);
++      return 0;
++    }
++
++        /* get attributes for divider */
++        SETCOLOR(MT_COLOR_STATUS);
++#ifndef USE_SLANG_CURSES
++        attr_get(&amp;attrs, &amp;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 &lt; 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 &amp;&amp; lines &lt; SidebarHeight; tmp = tmp-&gt;next ) {
++                if ( tmp == CurBuffy )
++                        SETCOLOR(MT_COLOR_INDICATOR);
++                else if ( tmp-&gt;msg_unread &gt; 0 )
++                        SETCOLOR(MT_COLOR_NEW);
++                else if ( tmp-&gt;msg_flagged &gt; 0 )
++                        SETCOLOR(MT_COLOR_FLAGGED);
++                else
++                        SETCOLOR(MT_COLOR_NORMAL);
++
++                move( lines, 0 );
++                if ( Context &amp;&amp; Context-&gt;path &amp;&amp;
++                        (!strcmp(tmp-&gt;path, Context-&gt;path)||
++                         !strcmp(tmp-&gt;realpath, Context-&gt;path)) ) {
++                        tmp-&gt;msg_unread = Context-&gt;unread;
++                        tmp-&gt;msgcount = Context-&gt;msgcount;
++                        tmp-&gt;msg_flagged = Context-&gt;flagged;
++                }
++                /* check whether Maildir is a prefix of the current folder's path */
++                short maildir_is_prefix = 0;
++                if ( (strlen(tmp-&gt;path) &gt; strlen(Maildir)) &amp;&amp;
++                        (strncmp(Maildir, tmp-&gt;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-&gt;path) : tmp-&gt;path + maildir_is_prefix*(strlen(Maildir) + 1);
++                if ( maildir_is_prefix &amp;&amp; option(OPTSIDEBARFOLDERINDENT) ) {
++                        char *tmp_folder_name;
++                        int i;
++                        tmp_folder_name = tmp-&gt;path + strlen(Maildir) + 1;
++                        for (i = 0; i &lt; strlen(tmp-&gt;path) - strlen(Maildir); i++) {
++                                 if (tmp_folder_name[i] == '/'  || tmp_folder_name[i] == '.') sidebar_folder_depth++;
++                        }   
++                        if (sidebar_folder_depth &gt; 0) {
++                                 if (option(OPTSIDEBARSHORTPATH)) {
++                                         tmp_folder_name = strrchr(tmp-&gt;path, '.');
++                                         if (tmp_folder_name == NULL)
++                                                 tmp_folder_name = mutt_basename(tmp-&gt;path);
++                                         else
++                                                tmp_folder_name++;
++                                 }
++                                 else
++                                         tmp_folder_name = tmp-&gt;path + strlen(Maildir) + 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 &lt; 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( &quot;%.*s&quot;, SidebarWidth - delim_len + 1,
++                        make_sidebar_entry(sidebar_folder_name, tmp-&gt;msgcount,
++                        tmp-&gt;msg_unread, tmp-&gt;msg_flagged));
++                if (sidebar_folder_depth &gt; 0)
++                        free(sidebar_folder_name);
++                lines++;
++        }
++        SETCOLOR(MT_COLOR_NORMAL);
++        for ( ; lines &lt; SidebarHeight; lines++ ) {
++                int i = 0;
++                move( lines, 0 );
++                for ( ; i &lt; SidebarWidth - delim_len; i++ )
++                        addch(' ');
++        }
++        return 0;
++}
++
++
++void set_buffystats(CONTEXT* Context)
++{
++        BUFFY *tmp = Incoming;
++        while(tmp) {
++                if(Context &amp;&amp; (!strcmp(tmp-&gt;path, Context-&gt;path) ||
++                               !strcmp(tmp-&gt;realpath, Context-&gt;path))) {
++                        tmp-&gt;msg_unread = Context-&gt;unread;
++                        tmp-&gt;msgcount = Context-&gt;msgcount;
++                        tmp-&gt;msg_flagged = Context-&gt;flagged;
++                        break;
++                }
++                tmp = tmp-&gt;next;
++        }
++}
++
++void scroll_sidebar(int op, int menu)
++{
++        if(!SidebarWidth) return;
++        if(!CurBuffy) return;
++
++        switch (op) {
++                case OP_SIDEBAR_NEXT:
++                        if ( CurBuffy-&gt;next == NULL ) return;
++                        CurBuffy = CurBuffy-&gt;next;
++                        break;
++                case OP_SIDEBAR_PREV:
++                        if ( CurBuffy-&gt;prev == NULL ) return;
++                        CurBuffy = CurBuffy-&gt;prev;
++                        break;
++                case OP_SIDEBAR_SCROLL_UP:
++                        CurBuffy = TopBuffy;
++                        if ( CurBuffy != Incoming ) {
++                                calc_boundaries(menu);
++                                CurBuffy = CurBuffy-&gt;prev;
++                        }
++                        break;
++                case OP_SIDEBAR_SCROLL_DOWN:
++                        CurBuffy = BottomBuffy;
++                        if ( CurBuffy-&gt;next ) {
++                                calc_boundaries(menu);
++                                CurBuffy = CurBuffy-&gt;next;
++                        }
++                        break;
++                default:
++                        return;
++        }
++        calc_boundaries(menu);
++        draw_sidebar(menu);
++}
++
+diff -ruN mutt-1.6.0.orig/sidebar.h mutt-1.6.0/sidebar.h
+--- mutt-1.6.0.orig/sidebar.h        1970-01-01 01:00:00.000000000 +0100
++++ mutt-1.6.0/sidebar.h        2016-04-08 20:19:20.000000000 +0200
+@@ -0,0 +1,36 @@
++/*
++ * Copyright (C) ????-2004 Justin Hibbits &lt;jrh29@po.cwru.edu&gt;
++ * Copyright (C) 2004 Thomer M. Gil &lt;mutt@thomer.com&gt;
++ * 
++ *     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 */
</ins></span></pre></div>
<a id="trunkdportsmailmuttdevelPortfile"></a>
<div class="modfile"><h4>Modified: trunk/dports/mail/mutt-devel/Portfile (147580 => 147581)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/mail/mutt-devel/Portfile        2016-04-08 18:05:17 UTC (rev 147580)
+++ trunk/dports/mail/mutt-devel/Portfile        2016-04-08 18:50:22 UTC (rev 147581)
</span><span class="lines">@@ -4,203 +4,11 @@
</span><span class="cx"> PortSystem          1.0
</span><span class="cx"> 
</span><span class="cx"> name                mutt-devel
</span><del>-conflicts           mutt
</del><span class="cx"> version             1.5.24
</span><del>-revision            1
</del><ins>+revision            2
</ins><span class="cx"> categories          mail
</span><del>-platforms           darwin
-license             GPL-2
-maintainers         nomaintainer
</del><span class="cx"> 
</span><span class="cx"> description         The Mutt E-Mail Client
</span><del>-long_description    Mutt is a small but very powerful text-based MIME \
-                    mail client. Mutt is highly configurable, and is \
-                    well suited to the mail power user with advanced \
-                    features like key bindings, keyboard macros, mail \
-                    threading, regular expression searches and \
-                    a powerful pattern matching language for selecting \
-                    groups of messages.
-homepage            http://www.mutt.org/
</del><span class="cx"> 
</span><del>-depends_lib         port:gettext \
-                    port:libiconv \
-                    port:ncurses
-
-depends_run         path:share/curl/curl-ca-bundle.crt:curl-ca-bundle
-
-master_sites        https://bitbucket.org/mutt/mutt/downloads/
-distname            mutt-${version}
-checksums           ${distfiles} \
-                    rmd160  7fe7e653c27c9b580f958493638c1248d0ad5591 \
-                    sha256  a292ca765ed7b19db4ac495938a3ef808a16193b7d623d65562bb8feb2b42200
-
-patch.pre_args      -p1
-# Fix for handling emails from bad clients w.r.t smime
-# See https://trac.macports.org/ticket/39362 and http://dev.mutt.org/trac/ticket/3285
-patchfiles-append   patch-thunderbird-fix.diff
-
-
-configure.args      --disable-warnings \
-                    --mandir=${prefix}/share/man \
-                    --with-docdir=${prefix}/share/doc/mutt \
-                    --with-libiconv-prefix=${prefix} \
-                    --with-curses=${prefix} \
-                    --disable-silent-rules
-
-default_variants    +pop +imap
-
-if {![variant_isset db4] &amp;&amp; ![variant_isset qdbm] &amp;&amp; ![variant_isset tokyocabinet]} {
-    variant_set     gdbm
-}
-
-# These variants' patches modify Makefile.am
-if {[variant_isset compress] || [variant_isset sidebar]} {
-    use_autoreconf  yes
-}
-
-post-destroot {
-    # delete pgpring to avoid a conflict with signing-party
-    delete ${destroot}${prefix}/bin/pgpring ${destroot}${prefix}/share/man/man1/pgpring.1
-    # delete horribly outdated ca bundle, I hope people weren't using that!
-    delete ${destroot}${prefix}/share/doc/mutt/samples/ca-bundle.crt
-}
-
-variant idn description {Internationalized Domain Name support} {
-    configure.args-append   --with-idn=${prefix}
-    depends_lib-append      port:libidn port:zlib
-}
-
-variant pop description {POP support} {
-    configure.args-append   --enable-pop
-}
-variant imap description {IMAP support} {
-    configure.args-append   --enable-imap
-}
-variant ssl description {Secure Sockets Layer support} {
-    configure.args-append   --with-ssl=${prefix}
-    depends_lib-append      path:lib/libssl.dylib:openssl
-}
-variant sasl description {Simple Authentication and Security Layer support} {
-    configure.args-append   --with-sasl=${prefix}
-    depends_lib-append      port:cyrus-sasl2
-}
-
-variant debug description {Debugging support} {
-    configure.args-append   --enable-debug
-}
-
-variant gnuregex description {Use the GNU regular expression library} {
-    configure.args-append   --with-regex
-}
-
-variant compress description {Compressed folders} {
-    configure.args-append   --enable-compressed
-    patch_sites-append      http://www.mutt.org.ua/download/mutt-1.5.24/
-    patchfiles-append       patch-1.5.24.rr.compressed.gz
-    checksums-append        patch-1.5.24.rr.compressed.gz \
-                            rmd160  2bf71a26de195ce11ed4ffa25403363cab7c9b72 \
-                            sha256  c5eb9b53f7bd3feaa5ee03722575f64e43512b756c099ffe20db6fe5c958e3dc
-}
-
-variant headercache conflicts db4 description {Enable header caching (requires gdbm, qdbm, or tokyocabinet)} {
-    configure.args-append       --enable-hcache
-    configure.ldflags-append    &quot;-L/usr/lib&quot;
-}
-
-variant qdbm conflicts db4 gdbm tokyocabinet description {Use QDBM database} {
-    depends_lib-append      port:qdbm
-    configure.args-append   --with-qdbm \
-                            --without-bdb \
-                            --without-gdbm \
-                            --without-tokyocabinet
-}
-
-variant gdbm conflicts db4 qdbm tokyocabinet description {Use GNU dbm database} {
-    depends_lib-append      port:gdbm
-    configure.args-append   --with-gdbm \
-                            --without-bdb \
-                            --without-qdbm \
-                            --without-tokyocabinet
-}
-
-variant db4 conflicts qdbm gdbm tokyocabinet description {Use Berkeley DB database} {
-    depends_lib-append          port:db44
-    configure.args-append       --with-bdb=${prefix} \
-                                --without-qdbm \
-                                --without-gdbm \
-                                --without-tokyocabinet
-    configure.cppflags-append   &quot;-I${prefix}/include/db44&quot;
-    configure.ldflags-append    &quot;-L${prefix}/lib/db44&quot;
-}
-
-variant tokyocabinet conflicts db4 gdbm qdbm description {Use Tokyo Cabinet database} {
-    depends_lib-append      port:tokyocabinet
-    configure.args-append   --with-tokyocabinet \
-                            --without-bdb \
-                            --without-gdbm \
-                            --without-qdbm
-}
-
-# The patches for nntp and sidebar conflict, see ticket #15135
-variant nntp conflicts sidebar description {NNTP support} {
-    configure.args-append   --enable-nntp
-    patch_sites-append      http://www.mutt.org.ua/download/mutt-1.5.24/
-    patchfiles-append       patch-1.5.24.vvv.nntp.gz
-    checksums-append        patch-1.5.24.vvv.nntp.gz \
-                            rmd160  028b86c3864ec2b8a485b998ce42d55fbb98e205 \
-                            sha256  d34be4542d549aab6de9f7038c88b3eeefe826db643c92b27e1e65ab5f7d573e
-}
-
-variant deepif description {Allow nested if-else sequences in strings} {
-    patch_sites-append      http://home.uchicago.edu/~dgc/sw/mutt/
-    patchfiles-append       patch-1.5.8.dgc.deepif.1
-    checksums-append        patch-1.5.8.dgc.deepif.1 \
-                            rmd160  9372934147e8b832390c45833d0b8ce6c704dd24 \
-                            sha256  570c343a440f5957e8e4639bda598c861cfaeae065a380a2c01ccb17d373ce6b
-}
-
-variant date_conditional requires deepif description \
-    {Allow the format of dates in the index to vary based on how recent the message is} {
-    # original, but now dgc hosts it with -p1
-    #patch_sites-append http://www.schrab.com/aaron/mutt/
-    patch_sites-append      http://home.uchicago.edu/~dgc/sw/mutt/
-    patchfiles-append       patch-1.5.8.ats.date_conditional.1
-    checksums-append        patch-1.5.8.ats.date_conditional.1 \
-                            rmd160  fc3703edc66b5043227a7abcfed10a9c44873fd0 \
-                            sha256  9e81f9f52577eb572e29651402ded3690e470d1628a890af9f3ad25b665d600f
-}
-
-variant xlabel description {Custom message-tagging - X-Label:} {
-    patchfiles-append       patch-1.5.21.mp.xlabel_ext.9
-}
-
-variant smtp description {Include internal SMTP relay support} {
-    configure.args-append   --enable-smtp
-}
-
-variant sidebar conflicts nntp trash description {Add a sidebar with a list of folders} {
-    # http://www.lunar-linux.org/mutt-sidebar/
-    patch_sites-append      http://lunar-linux.org/~tchan/mutt:sidebar-patch
-    patchfiles-append       patch-1.5.24.sidebar.20151111.txt:sidebar-patch \
-                            1-Make_hierarchy_separator_for_folder_indentation_configurable.patch \
-                            2-Support_long_er__folder_names_in_sidebar.patch
-    checksums-append        patch-1.5.24.sidebar.20151111.txt \
-                            rmd160  521938ab47440e93f73bc5ae358e867ab3d3212c \
-                            sha256  66441edf056032119f854fc5ee86c73eece8b95dc998c0cfae5ed05b0b035070
-}
-
-# Trash patch from https://trac.macports.org/ticket/20412 conflicts with sidebar patch on global.h
-variant trash conflicts sidebar description {Add a Trash folder} {
-    patchfiles-append       patch-1.5.24-trash_folder-purge_message.diff
-}
-
-variant gpgme description {Enable GPGME crypto support} {
-    configure.args-append   --enable-gpgme \
-                            --with-gpgme-prefix=${prefix}
-    depends_lib-append      port:gpgme
-}
-
-notes &quot;This port no longer installs the pgpring binary. Please install the signing-party port if you need it.&quot;
-
-livecheck.type      regex
-livecheck.regex     {Mutt (\d+(?:\.\d+)*) was released}
</del><ins>+replaced_by         mutt
+PortGroup           obsolete 1.0
</ins></span></pre>
</div>
</div>

</body>
</html>