Mercurial > vim
diff src/drawline.c @ 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 | 1c43d8bad31d |
children | c097c18dcedb |
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