diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-12-12 13:20:43 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-12-12 13:20:43 +0000 |
commit | b7acea1806996a9afb9fb8ebfe571b5181063070 (patch) | |
tree | 5fe7f3f28b0167ef6072abd6280f2ce7bf9b67b9 | |
parent | 7db29e4b5c3a347d24ca5062ddaa5cf4c4d54b9c (diff) | |
download | vim-git-b7acea1806996a9afb9fb8ebfe571b5181063070.tar.gz |
patch 9.0.1048: with "screenline" in 'culopt' cursorline highlight is wrongv9.0.1048
Problem: With "screenline" in 'culopt' cursorline highlight is wrong.
Solution: Apply the priority logic also when "screenline is in 'culopt'.
(closes #11696)
-rw-r--r-- | src/drawline.c | 64 | ||||
-rw-r--r-- | src/testdir/dumps/Test_quickfix_cwindow_3.dump | 2 | ||||
-rw-r--r-- | src/testdir/dumps/Test_quickfix_cwindow_4.dump | 2 | ||||
-rw-r--r-- | src/testdir/test_quickfix.vim | 5 | ||||
-rw-r--r-- | src/testdir/test_signs.vim | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 49 insertions, 32 deletions
diff --git a/src/drawline.c b/src/drawline.c index 804b1005a..0e090f42d 100644 --- 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 diff --git a/src/testdir/dumps/Test_quickfix_cwindow_3.dump b/src/testdir/dumps/Test_quickfix_cwindow_3.dump index 3fafbebeb..d4a2e1692 100644 --- 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 diff --git a/src/testdir/dumps/Test_quickfix_cwindow_4.dump b/src/testdir/dumps/Test_quickfix_cwindow_4.dump index 9baaf5122..bb92ffc0d 100644 --- 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 diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index 1620db528..68170f888 100644 --- 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") diff --git a/src/testdir/test_signs.vim b/src/testdir/test_signs.vim index abf70cd52..76cefa21c 100644 --- 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) diff --git a/src/version.c b/src/version.c index f4e8d9f85..ad9e52b2e 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1048, +/**/ 1047, /**/ 1046, |