summaryrefslogtreecommitdiff
path: root/mail/neomutt
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2020-03-17 10:55:28 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2020-03-17 10:55:28 +0000
commitbbc0a006eb811b7a8e7fc91a0149a9f2c1c58262 (patch)
tree6a2e6062fa9483507c4fc72a679f47d489850b1f /mail/neomutt
parente5b25769be641a1310526e8735c0d6500b3d11df (diff)
downloadfreebsd-ports-bbc0a006eb811b7a8e7fc91a0149a9f2c1c58262.zip
Incorporate an patch (in review upstream) which fixes indentation in the sidebar
Reported by: gahr
Diffstat (limited to 'mail/neomutt')
-rw-r--r--mail/neomutt/Makefile3
-rw-r--r--mail/neomutt/files/indent-sidebar.patch104
2 files changed, 107 insertions, 0 deletions
diff --git a/mail/neomutt/Makefile b/mail/neomutt/Makefile
index b558f4f0e4bf..e17e29e521fc 100644
--- a/mail/neomutt/Makefile
+++ b/mail/neomutt/Makefile
@@ -2,6 +2,7 @@
PORTNAME= neomutt
PORTVERSION= 20200313
+PORTREVISION= 1
CATEGORIES= mail
MAINTAINER= bapt@FreeBSD.org
@@ -24,6 +25,8 @@ HAS_CONFIGURE= yes
OPTIONS_SUB= yes
SHEBANG_FILES= contrib/smime_keys
+EXTRA_PATCHES= ${FILESDIR}/indent-sidebar.patch:-p1
+
OPTIONS_DEFINE= NLS DOCS SASL IDN FLOCK GPGME NOTMUCH
OPTIONS_DEFAULT=SASL TOKYOCABINET NOTMUCH GPGME LMDB NCURSES GSSAPI_BASE
OPTIONS_MULTI= HCACHE
diff --git a/mail/neomutt/files/indent-sidebar.patch b/mail/neomutt/files/indent-sidebar.patch
new file mode 100644
index 000000000000..d5a530a7d216
--- /dev/null
+++ b/mail/neomutt/files/indent-sidebar.patch
@@ -0,0 +1,104 @@
+From a7f602f120788bb8501cba46e9de6cf9de35a742 Mon Sep 17 00:00:00 2001
+From: Richard Russon <rich@flatcap.org>
+Date: Sun, 15 Mar 2020 17:12:58 +0000
+Subject: [PATCH] fix sidebar indent
+
+Take care when comparing "$folder" against an IMAP Mailbox path
+(the `user@` may not be present on both sides).
+
+Fixes: #2173
+Fixes: #2175
+---
+ sidebar.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 56 insertions(+), 4 deletions(-)
+
+diff --git a/sidebar.c b/sidebar.c
+index 199fa7df0b..1f0943371a 100644
+--- a/sidebar.c
++++ b/sidebar.c
+@@ -36,6 +36,7 @@
+ #include <string.h>
+ #include "mutt/lib.h"
+ #include "config/lib.h"
++#include "email/lib.h"
+ #include "core/lib.h"
+ #include "gui/lib.h"
+ #include "sidebar.h"
+@@ -833,6 +834,48 @@ static void fill_empty_space(struct MuttWindow *win, int first_row,
+ }
+ }
+
++/**
++ * imap_is_prefix - Check if folder matches the beginning of mbox
++ * @param folder Folder
++ * @param mbox Mailbox path
++ * @param plen Prefix length
++ * @retval true If folder is the prefix of mbox
++ */
++static bool imap_is_prefix(const char *folder, const char *mbox, size_t *plen)
++{
++ struct Url *url_m = url_parse(mbox);
++ struct Url *url_f = url_parse(folder);
++
++ if (!url_m || !url_f)
++ return false;
++
++ bool rc = false;
++
++ if (mutt_str_strcasecmp(url_m->host, url_f->host) != 0)
++ goto done;
++
++ if (url_m->user && url_f->user && (mutt_str_strcasecmp(url_m->user, url_f->user) != 0))
++ goto done;
++
++ size_t mlen = mutt_str_strlen(url_m->path);
++ size_t flen = mutt_str_strlen(url_f->path);
++ if (flen > mlen)
++ goto done;
++
++ if (mutt_str_strncmp(url_m->path, url_f->path, flen) != 0)
++ goto done;
++
++ if (url_m->user && !url_f->user)
++ *plen += mutt_str_strlen(url_m->user) + 1;
++ rc = true;
++
++done:
++ url_free(&url_m);
++ url_free(&url_f);
++
++ return rc;
++}
++
+ /**
+ * draw_sidebar - Write out a list of mailboxes, in a panel
+ * @param win Window to draw on
+@@ -915,15 +958,24 @@ static void draw_sidebar(struct MuttWindow *win, int num_rows, int num_cols, int
+ size_t maildirlen = mutt_str_strlen(C_Folder);
+ if (maildirlen && C_SidebarDelimChars &&
+ strchr(C_SidebarDelimChars, C_Folder[maildirlen - 1]))
++ {
+ maildirlen--;
++ }
+
+ /* check whether C_Folder is a prefix of the current folder's path */
+ bool maildir_is_prefix = false;
+- if ((mutt_buffer_len(&m->pathbuf) > maildirlen) &&
+- (mutt_str_strncmp(C_Folder, mailbox_path(m), maildirlen) == 0) &&
+- C_SidebarDelimChars && strchr(C_SidebarDelimChars, mailbox_path(m)[maildirlen]))
++ if (m->magic == MUTT_IMAP)
+ {
+- maildir_is_prefix = true;
++ maildir_is_prefix = imap_is_prefix(C_Folder, mailbox_path(m), &maildirlen);
++ }
++ else
++ {
++ if ((mutt_buffer_len(&m->pathbuf) > maildirlen) &&
++ (mutt_str_strncmp(C_Folder, mailbox_path(m), maildirlen) == 0) &&
++ C_SidebarDelimChars && strchr(C_SidebarDelimChars, mailbox_path(m)[maildirlen]))
++ {
++ maildir_is_prefix = true;
++ }
+ }
+
+ /* calculate depth of current folder and generate its display name with indented spaces */