0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 9.0.1048: with "screenline" in 'culopt' cursorline highlight is wrong

Problem:    With "screenline" in 'culopt' cursorline highlight is wrong.
Solution:   Apply the priority logic also when "screenline is in 'culopt'.
            (closes #11696)
This commit is contained in:
zeertzjq 2022-12-12 13:20:43 +00:00 committed by Bram Moolenaar
parent 7db29e4b5c
commit b7acea1806
6 changed files with 49 additions and 32 deletions

View File

@ -985,6 +985,36 @@ win_line_continue(winlinevars_T *wlv)
wlv->char_attr = wlv->win_attr;
}
#ifdef FEAT_SYN_HL
static void
apply_cursorline_highlight(
winlinevars_T *wlv,
int sign_present UNUSED)
{
wlv->cul_attr = HL_ATTR(HLF_CUL);
# ifdef FEAT_SIGNS
// Combine the 'cursorline' and sign highlighting, depending on
// the sign priority.
if (sign_present && wlv->sattr.sat_linehl > 0)
{
if (wlv->sattr.sat_priority >= 100)
wlv->line_attr = hl_combine_attr(wlv->cul_attr, wlv->line_attr);
else
wlv->line_attr = hl_combine_attr(wlv->line_attr, wlv->cul_attr);
}
else
# endif
# if defined(FEAT_QUICKFIX)
// let the line attribute overrule 'cursorline', otherwise
// it disappears when both have background set;
// 'cursorline' can use underline or bold to make it show
wlv->line_attr = hl_combine_attr(wlv->cul_attr, wlv->line_attr);
# else
wlv->line_attr = wlv->cul_attr;
# endif
}
#endif
/*
* Display line "lnum" of window 'wp' on the screen.
* Start at row "startrow", stop when "endrow" is reached.
@ -1728,35 +1758,10 @@ win_line(
wlv.cul_screenline = (wp->w_p_wrap
&& (wp->w_p_culopt_flags & CULOPT_SCRLINE));
// Only set wlv.line_attr here when "screenline" is not present in
// 'cursorlineopt'. Otherwise it's done later.
// Only apply CursorLine highlight here when "screenline" is not
// present in 'cursorlineopt'. Otherwise it's done later.
if (!wlv.cul_screenline)
{
wlv.cul_attr = HL_ATTR(HLF_CUL);
# ifdef FEAT_SIGNS
// Combine the 'cursorline' and sign highlighting, depending on
// the sign priority.
if (sign_present && wlv.sattr.sat_linehl > 0)
{
if (wlv.sattr.sat_priority >= 100)
wlv.line_attr = hl_combine_attr(
wlv.cul_attr, wlv.line_attr);
else
wlv.line_attr = hl_combine_attr(
wlv.line_attr, wlv.cul_attr);
}
else
# endif
# if defined(FEAT_QUICKFIX)
// let the line attribute overrule 'cursorline', otherwise
// it disappears when both have background set;
// 'cursorline' can use underline or bold to make it show
wlv.line_attr = hl_combine_attr(
wlv.cul_attr, wlv.line_attr);
# else
wlv.line_attr = wlv.cul_attr;
# endif
}
apply_cursorline_highlight(&wlv, sign_present);
else
{
line_attr_save = wlv.line_attr;
@ -1850,8 +1855,7 @@ win_line(
&& wlv.vcol >= left_curline_col
&& wlv.vcol < right_curline_col)
{
wlv.cul_attr = HL_ATTR(HLF_CUL);
wlv.line_attr = wlv.cul_attr;
apply_cursorline_highlight(&wlv, sign_present);
}
#endif

View File

@ -9,4 +9,4 @@
|X+0#0000e05#ffffff0|C|w|i|n|d|o|w||+0#0000000&|4+0#af5f00255&| |c|o|l| |6|-|7||+0#0000000&| |m|a|t|c|h|e|s| @47
|~+0#4040ff13&| @73
|[+3#0000000&|Q|u|i|c|k|f|i|x| |L|i|s|t|]| |:|v|i|m|g|r|e|p| |e| |X|C|w|i|n|d|o|w| @20|2|,|1| @12|A|l@1
|:+0&&|s|e|t| |c|u|r|s|o|r|l|i|n|e| @59
|:+0&&| @73

View File

@ -9,4 +9,4 @@
>X+8#0000e05#ffffff0|C|w|i|n|d|o|w||+8#0000000&|4+8#af5f00255&| |c|o|l| |6|-|7||+8#0000000&| |m|a|t|c|h|e|s| @47
|~+0#4040ff13&| @73
|[+3#0000000&|Q|u|i|c|k|f|i|x| |L|i|s|t|]| |:|v|i|m|g|r|e|p| |e| |X|C|w|i|n|d|o|w| @20|3|,|1| @12|A|l@1
|:+0&&|s|e|t| |c|u|r|s|o|r|l|i|n|e| @59
|:+0&&| @73

View File

@ -3120,6 +3120,11 @@ func Test_cwindow_highlight()
call VerifyScreenDump(buf, 'Test_quickfix_cwindow_2', {})
call term_sendkeys(buf, "\<C-W>j:set cursorline\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_quickfix_cwindow_3', {})
call term_sendkeys(buf, ":set cursorlineopt=number,screenline\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_quickfix_cwindow_3', {})
call term_sendkeys(buf, "j")

View File

@ -1805,12 +1805,18 @@ func Test_sign_cursor_position()
call term_sendkeys(buf, "2G")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_sign_cursor_5', {})
call term_sendkeys(buf, ":set cursorlineopt=number,screenline\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_sign_cursor_5', {})
" sign highlighting overrules 'cursorline'
call term_sendkeys(buf, ":sign unplace 12\<CR>")
call term_sendkeys(buf, ":sign place 13 line=2 priority=100 name=s2\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_sign_cursor_6', {})
call term_sendkeys(buf, ":set cursorlineopt&\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_sign_cursor_6', {})
" clean up
call StopVimInTerminal(buf)

View File

@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1048,
/**/
1047,
/**/