Patch 9.0.1048
Problem: With "screenline" in 'culopt' cursorline highlight is wrong.
Solution: Apply the priority logic also when "screenline is in 'culopt'.
(closes #11696)
Files: src/drawline.c, src/testdir/test_quickfix.vim,
src/testdir/test_signs.vim,
src/testdir/dumps/Test_quickfix_cwindow_3.dump,
src/testdir/dumps/Test_quickfix_cwindow_4.dump
*** ../vim-9.0.1047/src/drawline.c 2022-12-06 14:17:32.178527467 +0000
--- src/drawline.c 2022-12-12 13:16:08.474222084 +0000
***************
*** 985,990 ****
--- 985,1020 ----
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,1762 ****
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.
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
! }
else
{
line_attr_save = wlv.line_attr;
--- 1758,1767 ----
wlv.cul_screenline = (wp->w_p_wrap
&& (wp->w_p_culopt_flags & CULOPT_SCRLINE));
! // Only apply CursorLine highlight here when "screenline" is not
! // present in 'cursorlineopt'. Otherwise it's done later.
if (!wlv.cul_screenline)
! apply_cursorline_highlight(&wlv, sign_present);
else
{
line_attr_save = wlv.line_attr;
***************
*** 1850,1857 ****
&& wlv.vcol >= left_curline_col
&& wlv.vcol < right_curline_col)
{
! wlv.cul_attr = HL_ATTR(HLF_CUL);
! wlv.line_attr = wlv.cul_attr;
}
#endif
--- 1855,1861 ----
&& wlv.vcol >= left_curline_col
&& wlv.vcol < right_curline_col)
{
! apply_cursorline_highlight(&wlv, sign_present);
}
#endif
*** ../vim-9.0.1047/src/testdir/test_quickfix.vim 2022-12-02
15:58:34.614705476 +0000
--- src/testdir/test_quickfix.vim 2022-12-12 13:16:08.474222084 +0000
***************
*** 3120,3125 ****
--- 3120,3130 ----
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")
*** ../vim-9.0.1047/src/testdir/test_signs.vim 2022-10-10 22:39:38.203545897
+0100
--- src/testdir/test_signs.vim 2022-12-12 13:16:08.474222084 +0000
***************
*** 1805,1816 ****
--- 1805,1822 ----
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)
*** ../vim-9.0.1047/src/testdir/dumps/Test_quickfix_cwindow_3.dump
2022-07-03 14:20:44.788010407 +0100
--- src/testdir/dumps/Test_quickfix_cwindow_3.dump 2022-12-12
13:16:08.474222084 +0000
***************
*** 9,12 ****
|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
--- 9,12 ----
|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&&| @73
*** ../vim-9.0.1047/src/testdir/dumps/Test_quickfix_cwindow_4.dump
2022-07-03 14:20:44.788010407 +0100
--- src/testdir/dumps/Test_quickfix_cwindow_4.dump 2022-12-12
13:16:08.474222084 +0000
***************
*** 9,12 ****
>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
--- 9,12 ----
>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&&| @73
*** ../vim-9.0.1047/src/version.c 2022-12-11 14:18:25.954350156 +0000
--- src/version.c 2022-12-12 13:18:41.094538268 +0000
***************
*** 697,698 ****
--- 697,700 ----
{ /* Add new patch number below this line */
+ /**/
+ 1048,
/**/
--
>From "know your smileys":
(\___/)
(+'.'+) Bunny
(")_(")
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20221212132208.8B4611C0D32%40moolenaar.net.