diff -urNp -x '*.orig' mutt-2.0.6.org/PATCHES mutt-2.0.6/PATCHES --- mutt-2.0.6.org/PATCHES 2020-06-24 23:41:42.000000000 +0200 +++ mutt-2.0.6/PATCHES 2021-04-18 19:23:37.740004690 +0200 @@ -0,0 +1 @@ +vvv.quote diff -urNp -x '*.orig' mutt-2.0.6.org/handler.c mutt-2.0.6/handler.c --- mutt-2.0.6.org/handler.c 2021-03-06 20:06:37.000000000 +0100 +++ mutt-2.0.6/handler.c 2021-04-18 19:23:37.740004690 +0200 @@ -1603,7 +1603,31 @@ static int text_plain_handler (BODY *b, buf[--l] = 0; } if (s->prefix) - state_puts (s->prefix, s); + { + int i; + char qbuf[2 * LONG_STRING]; + int j = 0, offset = 0; + regmatch_t pmatch[1]; + + while (regexec ((regex_t *) QuoteRegexp.rx, &buf[offset], 1, pmatch, 0) == 0) + offset += pmatch->rm_eo; + + if (!option (OPTQUOTEEMPTY) && !*buf) + strcpy (qbuf, buf); + else if (option (OPTQUOTEQUOTED) && offset) + { + for (i = 0; i < offset; i++) + if (buf[i] != ' ') + j = i; + strncpy (qbuf, buf, j + 1); + strcpy (qbuf + j + 1, buf + j); + } + else + snprintf (qbuf, sizeof (qbuf), "%s%s", NONULL(s->prefix), buf); + + state_puts (qbuf, s); + } + else state_puts (buf, s); state_putc ('\n', s); } @@ -1806,7 +1830,7 @@ int mutt_body_handler (BODY *b, STATE *s */ if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp (b)) encrypted_handler = handler = crypt_pgp_application_pgp_handler; - else if (option(OPTREFLOWTEXT) && ascii_strcasecmp ("flowed", mutt_get_parameter ("format", b->parameter)) == 0) + else if (option(OPTREFLOWTEXT) && ascii_strcasecmp ("flowed", mutt_get_parameter ("format", b->parameter)) == 0 && !s->prefix) handler = rfc3676_handler; else handler = text_plain_handler; diff -urNp -x '*.orig' mutt-2.0.6.org/init.h mutt-2.0.6/init.h --- mutt-2.0.6.org/init.h 2021-04-18 19:23:37.610002974 +0200 +++ mutt-2.0.6/init.h 2021-04-18 19:23:37.740004690 +0200 @@ -2966,6 +2966,19 @@ struct option_t MuttVars[] = { ** have no effect, and if it is set to \fIask-yes\fP or \fIask-no\fP, you are ** prompted for confirmation when you try to quit. */ + { "quote_empty", DT_BOOL, R_NONE, OPTQUOTEEMPTY, 1 }, + /* + ** .pp + ** Controls whether or not empty lines will be quoted using + ** ``$indent_string''. + */ + { "quote_quoted", DT_BOOL, R_NONE, OPTQUOTEQUOTED, 0 }, + /* + ** .pp + ** Controls how quoted lines will be quoted. If set, one quote + ** character will be added to the end of existing prefix. Otherwise, + ** quoted lines will be prepended by ``$indent_string''. + */ { "quote_regexp", DT_RX, R_PAGER, {.p=&QuoteRegexp}, {.p="^([ \t]*[|>:}#])+"} }, /* ** .pp diff -urNp -x '*.orig' mutt-2.0.6.org/mutt.h mutt-2.0.6/mutt.h --- mutt-2.0.6.org/mutt.h 2021-03-06 20:06:37.000000000 +0100 +++ mutt-2.0.6/mutt.h 2021-04-18 19:23:37.740004690 +0200 @@ -510,6 +510,8 @@ enum OPTPRINTDECODEWEED, OPTPRINTSPLIT, OPTPROMPTAFTER, + OPTQUOTEEMPTY, + OPTQUOTEQUOTED, OPTREADONLY, OPTREFLOWSPACEQUOTES, OPTREFLOWTEXT,