This option, when unset, modifies the display of email headers when
$weed is enabled.

The default behavior is to unfold headers when $weed is set, and to
leave them folded when $weed is unset (in effect, displaying them as
they appear in the original email, subject to screen width wrapping).

When $weed_unfold is unset and $weed is set, the headers will be
weeded, but will not be unfolded: displaying as they appear in the
original email.

The option could be useful for those who 'unignore' long headers, such
as from Spam Assassin, that are formatted to be more readable in the
original email, but become unreadable when unfolded/refolded to screen
width.
---
This is in response to ticket #511.

I originally started on a version of this that made unfolding and
weeding orthogonal.  However there were two problems with that approach:

1. The implementation was much more invasive, requiring more state flags
and commands and modifications all over the place.

2. It ended up being confusing to control.  The current default behavior
   of mutt is to unfold when $weed is toggled, but display as original
   when $weed is toggled off.  When the options are orthogonal, keeping the
   current behavior required toggling two flags: weed and unfold when
   switching between those states.  It would have been confusing to
   existing users and likely generated a lot of complaints.

Since this option is probably only interesting to a small number of
users, I decided to instead just have a modifier state when $weed is
set.

 init.h    | 11 +++++++++++
 mutt.h    |  1 +
 sendlib.c |  2 +-
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/init.h b/init.h
index 84e62fb4..eb331a37 100644
--- a/init.h
+++ b/init.h
@@ -4911,6 +4911,17 @@ struct option_t MuttVars[] = {
   ** .pp
   ** Also see $$copy_decode_weed, $$pipe_decode_weed, $$print_decode_weed.
   */
+  { "weed_unfold",   DT_BOOL, R_NONE, {.l=OPTWEEDUNFOLD}, {.l=1} },
+  /*
+  ** .pp
+  ** When \fIset\fP, mutt will unfold (and then refold) headers when
+  ** displaying messages with $$weed set.  When \fIunset\fP, headers
+  ** will be displayed as they appear in the original email, but still
+  ** subject to display width wrapping.
+  ** .pp
+  ** Note that when $$weed is unset, mutt always displays the headers
+  ** as they appear in the original email.
+  */
   { "wrap",             DT_NUM,  R_PAGER_FLOW, {.p=&Wrap}, {.l=0} },
   /*
   ** .pp
diff --git a/mutt.h b/mutt.h
index 75a45999..36f92a31 100644
--- a/mutt.h
+++ b/mutt.h
@@ -582,6 +582,7 @@ enum
 #endif
   OPTWAITKEY,
   OPTWEED,
+  OPTWEEDUNFOLD,
   OPTWRAP,
   OPTWRAPSEARCH,
   OPTWRITEBCC,          /* write out a bcc header? */
diff --git a/sendlib.c b/sendlib.c
index a700d500..476865ac 100644
--- a/sendlib.c
+++ b/sendlib.c
@@ -2183,7 +2183,7 @@ int mutt_write_one_header (FILE *fp, const char *tag, 
const char *value,
   int pfxw = mutt_strwidth (pfx);
   char *v = safe_strdup (value);
 
-  if (!(flags & CH_DISPLAY) || option (OPTWEED))
+  if (!(flags & CH_DISPLAY) || (option (OPTWEED) && option (OPTWEEDUNFOLD)))
     v = unfold_header (v);
 
   /* when not displaying, use sane wrap value */
-- 
2.53.0

Reply via email to