changeset: 7039:92d9db08a35e user: Kevin McCarthy <ke...@8t8.us> date: Mon May 08 18:48:25 2017 -0700 link: http://dev.mutt.org/hg/mutt/rev/92d9db08a35e
Add $header_color_partial to allow partial coloring of headers. When set, a regexp match will color only the matched text in the header. When unset (the default), the entire header will have color applied. With appropriate regexps, this allows coloring of just the header field name. Of course, it can also be used to highlight arbitrary phrases in the headers too. diffs (153 lines): diff -r 5006a0a36405 -r 92d9db08a35e doc/manual.xml.head --- a/doc/manual.xml.head Sun May 07 15:11:43 2017 -0700 +++ b/doc/manual.xml.head Mon May 08 18:48:25 2017 -0700 @@ -2718,6 +2718,14 @@ </para> <para> +When <link linkend="header-color-partial">$header_color_partial</link> +is unset (the default), a <emphasis>header</emphasis> matched by +<emphasis>regexp</emphasis> will have color applied to the entire header. +When set, color is applied only to the exact text matched by +<emphasis>regexp</emphasis>. +</para> + +<para> <emphasis>object</emphasis> can be one of: </para> diff -r 5006a0a36405 -r 92d9db08a35e init.h --- a/init.h Sun May 07 15:11:43 2017 -0700 +++ b/init.h Mon May 08 18:48:25 2017 -0700 @@ -1007,6 +1007,17 @@ */ #endif /* HAVE_GDBM || HAVE_DB4 */ #endif /* USE_HCACHE */ + { "header_color_partial", DT_BOOL, R_PAGER|R_REFLOW, OPTHEADERCOLORPARTIAL, 0 }, + /* + ** .pp + ** When \fIset\fP, color header regexps behave like color body regexps: + ** color is applied to the exact text matched by the regexp. When + ** \fIunset\fP, color is applied to the entire header. + ** .pp + ** One use of this option might be to apply color to just the header labels. + ** .pp + ** See ``$color'' for more details. + */ { "help", DT_BOOL, R_REFLOW, OPTHELP, 1 }, /* ** .pp diff -r 5006a0a36405 -r 92d9db08a35e mutt.h --- a/mutt.h Sun May 07 15:11:43 2017 -0700 +++ b/mutt.h Mon May 08 18:48:25 2017 -0700 @@ -366,6 +366,7 @@ #endif OPTHDRS, OPTHEADER, + OPTHEADERCOLORPARTIAL, OPTHELP, OPTHIDDENHOST, OPTHIDELIMITED, diff -r 5006a0a36405 -r 92d9db08a35e pager.c --- a/pager.c Sun May 07 15:11:43 2017 -0700 +++ b/pager.c Mon May 08 18:48:25 2017 -0700 @@ -730,39 +730,49 @@ if (n > 0 && (buf[0] == ' ' || buf[0] == '\t')) { lineInfo[n].type = lineInfo[n-1].type; /* wrapped line */ - (lineInfo[n].syntax)[0].color = (lineInfo[n-1].syntax)[0].color; - lineInfo[n].is_cont_hdr = 1; + if (!option (OPTHEADERCOLORPARTIAL)) + { + (lineInfo[n].syntax)[0].color = (lineInfo[n-1].syntax)[0].color; + lineInfo[n].is_cont_hdr = 1; + } } else { lineInfo[n].type = MT_COLOR_HDEFAULT; } - for (color_line = ColorHdrList; color_line; color_line = color_line->next) + /* When this option is unset, we color the entire header the + * same color. Otherwise, we handle the header patterns just + * like body patterns (further below). + */ + if (!option (OPTHEADERCOLORPARTIAL)) { - if (REGEXEC (color_line->rx, buf) == 0) - { - lineInfo[n].type = MT_COLOR_HEADER; - lineInfo[n].syntax[0].color = color_line->pair; - if (lineInfo[n].is_cont_hdr) - { - /* adjust the previous continuation lines to reflect the color of this continuation line */ - int j; - for (j = n - 1; j >= 0 && lineInfo[j].is_cont_hdr; --j) - { - lineInfo[j].type = lineInfo[n].type; - lineInfo[j].syntax[0].color = lineInfo[n].syntax[0].color; - } - /* now adjust the first line of this header field */ - if (j >= 0) - { - lineInfo[j].type = lineInfo[n].type; - lineInfo[j].syntax[0].color = lineInfo[n].syntax[0].color; - } - *force_redraw = 1; /* the previous lines have already been drawn on the screen */ - } - break; - } + for (color_line = ColorHdrList; color_line; color_line = color_line->next) + { + if (REGEXEC (color_line->rx, buf) == 0) + { + lineInfo[n].type = MT_COLOR_HEADER; + lineInfo[n].syntax[0].color = color_line->pair; + if (lineInfo[n].is_cont_hdr) + { + /* adjust the previous continuation lines to reflect the color of this continuation line */ + int j; + for (j = n - 1; j >= 0 && lineInfo[j].is_cont_hdr; --j) + { + lineInfo[j].type = lineInfo[n].type; + lineInfo[j].syntax[0].color = lineInfo[n].syntax[0].color; + } + /* now adjust the first line of this header field */ + if (j >= 0) + { + lineInfo[j].type = lineInfo[n].type; + lineInfo[j].syntax[0].color = lineInfo[n].syntax[0].color; + } + *force_redraw = 1; /* the previous lines have already been drawn on the screen */ + } + break; + } + } } } } @@ -839,8 +849,9 @@ lineInfo[n].type = MT_COLOR_NORMAL; /* body patterns */ - if (lineInfo[n].type == MT_COLOR_NORMAL || - lineInfo[n].type == MT_COLOR_QUOTED) + if (lineInfo[n].type == MT_COLOR_NORMAL || + lineInfo[n].type == MT_COLOR_QUOTED || + (lineInfo[n].type == MT_COLOR_HDEFAULT && option (OPTHEADERCOLORPARTIAL))) { size_t nl; @@ -859,7 +870,10 @@ found = 0; null_rx = 0; - color_line = ColorBodyList; + if (lineInfo[n].type == MT_COLOR_HDEFAULT) + color_line = ColorHdrList; + else + color_line = ColorBodyList; while (color_line) { if (regexec (&color_line->rx, buf + offset, 1, pmatch,