Use color for $fish_color_valid_path if it exists

This otherwise threw away the color. Since that's just information
that is thrown away, let's just use it.

Fixes #9159.
This commit is contained in:
Fabian Boehm 2022-08-25 17:41:21 +02:00
parent 106e030096
commit a42a651d0a
2 changed files with 13 additions and 2 deletions

View file

@ -142,6 +142,8 @@ If a variable isn't set or is empty, fish usually tries ``$fish_color_normal``,
- ``$fish_color_keyword``, where it tries ``$fish_color_command`` first.
- ``$fish_color_option``, where it tries ``$fish_color_param`` first.
- For ``$fish_color_valid_path``, if that doesn't have a color, but only modifiers, it adds those to the color that would otherwise be used,
like ``$fish_color_param``. But if valid paths have a color, it uses that and adds in modifiers from the other color.
.. _variables-color-pager:

View file

@ -348,9 +348,18 @@ rgb_color_t highlight_color_resolver_t::resolve_spec_uncached(const highlight_sp
auto var2 = vars.get(L"fish_color_valid_path");
if (var2) {
rgb_color_t result2 = parse_color(*var2, is_background);
if (result.is_normal())
if (result.is_normal()) {
result = result2;
else {
} else if (!result2.is_normal()) {
// Valid path has an actual color, use it and merge the modifiers.
auto rescol = result2;
rescol.set_bold(result.is_bold() || result2.is_bold());
rescol.set_underline(result.is_underline() || result2.is_underline());
rescol.set_italics(result.is_italics() || result2.is_italics());
rescol.set_dim(result.is_dim() || result2.is_dim());
rescol.set_reverse(result.is_reverse() || result2.is_reverse());
result = rescol;
} else {
if (result2.is_bold()) result.set_bold(true);
if (result2.is_underline()) result.set_underline(true);
if (result2.is_italics()) result.set_italics(true);