Mercurial > vim
changeset 31431:552ca9b4218d v9.0.1048
patch 9.0.1048: with "screenline" in 'culopt' cursorline highlight is wrong
Commit: https://github.com/vim/vim/commit/b7acea1806996a9afb9fb8ebfe571b5181063070
Author: zeertzjq <zeertzjq@outlook.com>
Date: Mon Dec 12 13:20:43 2022 +0000
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 12 Dec 2022 14:30:05 +0100 |
parents | e5e95e8c78a7 |
children | 564574ecbe03 |
files | src/drawline.c src/testdir/dumps/Test_quickfix_cwindow_3.dump src/testdir/dumps/Test_quickfix_cwindow_4.dump src/testdir/test_quickfix.vim src/testdir/test_signs.vim src/version.c |
diffstat | 6 files changed, 49 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/src/drawline.c +++ b/src/drawline.c @@ -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
--- a/src/testdir/dumps/Test_quickfix_cwindow_3.dump +++ b/src/testdir/dumps/Test_quickfix_cwindow_3.dump @@ -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
--- a/src/testdir/dumps/Test_quickfix_cwindow_4.dump +++ b/src/testdir/dumps/Test_quickfix_cwindow_4.dump @@ -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
--- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -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")
--- a/src/testdir/test_signs.vim +++ b/src/testdir/test_signs.vim @@ -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)