diff/highlight: Show underline for low-priority CursorLine

This commit is contained in:
Justin M. Keyes 2018-10-31 20:24:24 +01:00
parent 3283db4ecb
commit 60f845ca55
3 changed files with 57 additions and 3 deletions

View File

@ -177,6 +177,24 @@ void update_window_hl(win_T *wp, bool invalid)
}
}
/// Gets HL_UNDERLINE highlight.
int hl_get_underline(void)
{
return get_attr_entry((HlEntry){
.attr = (HlAttrs){
.cterm_ae_attr = (int16_t)HL_UNDERLINE,
.cterm_fg_color = 0,
.cterm_bg_color = 0,
.rgb_ae_attr = (int16_t)HL_UNDERLINE,
.rgb_fg_color = 0,
.rgb_bg_color = 0,
},
.kind = kHlUI,
.id1 = 0,
.id2 = 0,
});
}
/// Get attribute code for forwarded :terminal highlights.
int hl_get_term_attr(HlAttrs *aep)
{

View File

@ -3052,9 +3052,13 @@ win_line (
diff_hlf = HLF_CHD; // changed line
}
line_attr = win_hl_attr(wp, diff_hlf);
// Overlay CursorLine onto diff highlight, unless it's low-priority.
if (!line_attr_lowprio && wp->w_p_cul && lnum == wp->w_cursor.lnum) {
line_attr = hl_combine_attr(line_attr, win_hl_attr(wp, HLF_CUL));
// Overlay CursorLine onto diff-mode highlight.
if (wp->w_p_cul && lnum == wp->w_cursor.lnum) {
line_attr = 0 != line_attr_lowprio // Low-priority CursorLine
? hl_combine_attr(hl_combine_attr(win_hl_attr(wp, HLF_CUL),
line_attr),
hl_get_underline())
: hl_combine_attr(line_attr, win_hl_attr(wp, HLF_CUL));
}
}

View File

@ -768,6 +768,38 @@ describe('CursorLine highlight', function()
{4:[No Name] [+] }{9:[No Name] [+] }|
|
]])
-- CursorLine with fg=NONE is "low-priority".
-- Rendered as underline in a diff-line. #9028
command('hi CursorLine ctermbg=red ctermfg=NONE guibg=red guifg=NONE')
feed('kkkk')
screen:expect([[
{1: }line 1 some text {4:}{1: }line 1 some text |
{1: }{11:line 2 mo}{12:Re text!}{11: }{4:}{1: }{11:^line 2 mo}{12:re text}{11: }|
{1: }{5:extra line! }{4:}{1: }{6:----------------------}|
{1: }extra line! {4:}{1: }extra line! |
{1: }extra line! {4:}{1: }extra line! |
{1: }last line ... {4:}{1: }last line ... |
{1: } {4:}{1: } |
{1: }{8:~ }{4:}{1: }{8:~ }|
{1: }{8:~ }{4:}{1: }{8:~ }|
{1: }{8:~ }{4:}{1: }{8:~ }|
{4:[No Name] [+] }{9:[No Name] [+] }|
|
]], {
[1] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.WebGray},
[2] = {bold = true, background = Screen.colors.Red},
[3] = {background = Screen.colors.LightMagenta},
[4] = {reverse = true},
[5] = {background = Screen.colors.LightBlue},
[6] = {background = Screen.colors.LightCyan1, bold = true, foreground = Screen.colors.Blue1},
[7] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
[8] = {bold = true, foreground = Screen.colors.Blue1},
[9] = {bold = true, reverse = true},
[10] = {bold = true},
[11] = {special = Screen.colors.Grey0, underline = true, foreground = Screen.colors.Grey0, background = Screen.colors.Grey0},
[12] = {bold = true, special = Screen.colors.Grey0, background = Screen.colors.Grey0, foreground = Screen.colors.Grey0, underline = true},
})
end)
end)