From 4d10f583e466ca46d9f2a4724307b8287478e4b2 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Mon, 8 Jun 2020 11:55:31 +0200 Subject: [PATCH] rcfile: accept prefix "light" to make a color brighter without bolding it The prefix "bright" will continue to make the color brighter AND/OR make the typeface bold (depending on how the terminal is configured and on its capabilities), but the prefix "light" will just make the color brighter (if the terminal can do that). The prefix "bright" continues to do the same as what it did before, to not change the appearance of user-defined syntaxes. And having an option to change the meaning of "bright"... would be confusing. This partially fulfills https://savannah.gnu.org/bugs/?58503. --- src/rcfile.c | 32 ++++++++++++++++++++------------ syntax/nanorc.nanorc | 4 ++-- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/rcfile.c b/src/rcfile.c index 248c5763..ed6dd78f 100644 --- a/src/rcfile.c +++ b/src/rcfile.c @@ -980,15 +980,22 @@ void parse_includes(char *ptr) free(expanded); } -/* Return the short value corresponding to the color named in colorname, - * and set bright to TRUE if that color is bright. */ -short color_to_short(const char *colorname, bool *bright) +/* Return the short value corresponding to the given color name, and set + * vivid to TRUE for a lighter color, and thick for a heavier typeface. */ +short color_to_short(const char *colorname, bool *vivid, bool *thick) { if (strncmp(colorname, "bright", 6) == 0) { - *bright = TRUE; + *vivid = TRUE; + *thick = TRUE; colorname += 6; - } else - *bright = FALSE; + } else if (strncmp(colorname, "light", 5) == 0) { + *vivid = TRUE; + *thick = FALSE; + colorname += 5; + } else { + *vivid = FALSE; + *thick = FALSE; + } if (strcmp(colorname, "green") == 0) return COLOR_GREEN; @@ -1018,13 +1025,13 @@ short color_to_short(const char *colorname, bool *bright) bool parse_combination(char *combostr, short *fg, short *bg, int *attributes) { char *comma = strchr(combostr, ','); - bool bright; + bool vivid, thick; *attributes = A_NORMAL; if (comma != NULL) { - *bg = color_to_short(comma + 1, &bright); - if (bright) { + *bg = color_to_short(comma + 1, &vivid, &thick); + if (vivid) { jot_error(N_("A background color cannot be bright")); return FALSE; } @@ -1035,11 +1042,12 @@ bool parse_combination(char *combostr, short *fg, short *bg, int *attributes) *bg = USE_THE_DEFAULT; if (comma != combostr) { - *fg = color_to_short(combostr, &bright); + *fg = color_to_short(combostr, &vivid, &thick); if (*fg == BAD_COLOR) return FALSE; - - if (bright) + if (vivid && !thick && COLORS > 8) + *fg += 8; + else if (vivid) *attributes = A_BOLD; } else *fg = USE_THE_DEFAULT; diff --git a/syntax/nanorc.nanorc b/syntax/nanorc.nanorc index b6482540..903470fe 100644 --- a/syntax/nanorc.nanorc +++ b/syntax/nanorc.nanorc @@ -8,7 +8,7 @@ color brightred ".*" # Keywords color brightgreen "^[[:space:]]*(set|unset)[[:space:]]+(afterends|allow_insecure_backup|atblanks|autoindent|backup|backwards|boldtext|breaklonglines|casesensitive|constantshow|cutfromcursor|emptyline|finalnewline|historylog|indicator|jumpyscrolling|linenumbers|locking|morespace|mouse|multibuffer|noconvert|nohelp|nopauses|nonewlines|nowrap|positionlog|preserve|quickblank|quiet|rawsequences|rebinddelete|regexp|saveonexit|showcursor|smarthome|smooth|softwrap|suspendable|tabstospaces|trimblanks|unix|view|wordbounds|zap)\>" -color yellow "^[[:space:]]*set[[:space:]]+((error|function|key|number|selected|status|stripe|title)color)[[:space:]]+(bright)?(white|black|red|blue|green|yellow|magenta|cyan|normal)?(,(white|black|red|blue|green|yellow|magenta|cyan|normal))?\>" +color yellow "^[[:space:]]*set[[:space:]]+((error|function|key|number|selected|status|stripe|title)color)[[:space:]]+(bright|light)?(white|black|red|blue|green|yellow|magenta|cyan|normal)?(,(white|black|red|blue|green|yellow|magenta|cyan|normal))?\>" color brightgreen "^[[:space:]]*set[[:space:]]+(backupdir|brackets|errorcolor|functioncolor|keycolor|matchbrackets|numbercolor|operatingdir|punct|quotestr|selectedcolor|speller|statuscolor|stripecolor|titlecolor|whitespace|wordchars)[[:space:]]+" color brightgreen "^[[:space:]]*set[[:space:]]+(fill[[:space:]]+-?[[:digit:]]+|(guidestripe|tabsize)[[:space:]]+[1-9][0-9]*)\>" color brightgreen "^[[:space:]]*bind[[:space:]]+((\^([A-Za-z]|[]/@\^_`]|Space)|([Ss][Hh]-)?[Mm]-[A-Za-z]|[Mm]-([]!"#$%&'()*+,./0-9:;<=>?@\^_`{|}~-]|Space))|F([1-9]|1[0-9]|2[0-4])|Ins|Del)[[:space:]]+([a-z]+|".*")[[:space:]]+(main|help|search|replace(with)?|yesno|gotoline|writeout|insert|browser|whereisfile|gotodir|execute|spell|linter|all)([[:space:]]+#|[[:space:]]*$)" @@ -21,7 +21,7 @@ color green "^[[:space:]]*((un)?(bind|set)|include|syntax|header|magic|comment|f color brightmagenta "([[:space:]]|(start|end)=)".+"([[:space:]]|$)" # Colors -color yellow "^[[:space:]]*i?color[[:space:]]*(bright)?(white|black|red|blue|green|yellow|magenta|cyan|normal)?(,(white|black|red|blue|green|yellow|magenta|cyan|normal))?\>" +color yellow "^[[:space:]]*i?color[[:space:]]*(bright|light)?(white|black|red|blue|green|yellow|magenta|cyan|normal)?(,(white|black|red|blue|green|yellow|magenta|cyan|normal))?\>" color magenta "^[[:space:]]*i?color\>" "\<(start|end)=" # Comments