diff options
author | luukvbaal <luukvbaal@gmail.com> | 2024-12-14 19:21:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-14 10:21:50 -0800 |
commit | 433b342baa04b35fb1ab24d4ef38f126d12ea714 (patch) | |
tree | 8200471944a5219b299f540b4766b827bac7fe8d /src/nvim/drawline.c | |
parent | f9dd6826210335d8b37455002d767d1b37c09ce4 (diff) | |
download | rneovim-433b342baa04b35fb1ab24d4ef38f126d12ea714.tar.gz rneovim-433b342baa04b35fb1ab24d4ef38f126d12ea714.tar.bz2 rneovim-433b342baa04b35fb1ab24d4ef38f126d12ea714.zip |
feat(ui): sign/statuscolumn can combine highlight attrs #31575
Problem:
Since e049c6e4c08a, most statusline-like UI elements can combine
highlight attrs, except for sign/statuscolumn.
Solution:
Implement for sign/statuscolumn.
Diffstat (limited to 'src/nvim/drawline.c')
-rw-r--r-- | src/nvim/drawline.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c index bf14ce1d4a..b8f21d7454 100644 --- a/src/nvim/drawline.c +++ b/src/nvim/drawline.c @@ -462,10 +462,12 @@ void fill_foldcolumn(win_T *wp, foldinfo_T foldinfo, linenr_T lnum, int attr, in static void draw_sign(bool nrcol, win_T *wp, winlinevars_T *wlv, int sign_idx, int sign_cul_attr) { SignTextAttrs sattr = wlv->sattrs[sign_idx]; + int scl_attr = win_hl_attr(wp, use_cursor_line_highlight(wp, wlv->lnum) ? HLF_CLS : HLF_SC); if (sattr.text[0] && wlv->row == wlv->startrow + wlv->filler_lines && wlv->filler_todo <= 0) { int attr = (use_cursor_line_highlight(wp, wlv->lnum) && sign_cul_attr) ? sign_cul_attr : sattr.hl_id ? syn_id2attr(sattr.hl_id) : 0; + attr = hl_combine_attr(scl_attr, attr); int fill = nrcol ? number_width(wp) + 1 : SIGN_WIDTH; draw_col_fill(wlv, schar_from_ascii(' '), fill, attr); int sign_pos = wlv->off - SIGN_WIDTH - (int)nrcol; @@ -474,8 +476,7 @@ static void draw_sign(bool nrcol, win_T *wp, winlinevars_T *wlv, int sign_idx, i linebuf_char[sign_pos + 1] = sattr.text[1]; } else { assert(!nrcol); // handled in draw_lnum_col() - int attr = win_hl_attr(wp, use_cursor_line_highlight(wp, wlv->lnum) ? HLF_CLS : HLF_SC); - draw_col_fill(wlv, schar_from_ascii(' '), SIGN_WIDTH, attr); + draw_col_fill(wlv, schar_from_ascii(' '), SIGN_WIDTH, scl_attr); } } @@ -559,8 +560,8 @@ static void draw_lnum_col(win_T *wp, winlinevars_T *wlv, int sign_num_attr, int } else { // Draw the line number (empty space after wrapping). int width = number_width(wp) + 1; - int attr = (sign_num_attr > 0 && wlv->filler_todo <= 0) - ? sign_num_attr : get_line_number_attr(wp, wlv); + int attr = hl_combine_attr(get_line_number_attr(wp, wlv), + wlv->filler_todo <= 0 ? sign_num_attr : 0); if (wlv->row == wlv->startrow + wlv->filler_lines && (wp->w_skipcol == 0 || wlv->row > 0 || (wp->w_p_nu && wp->w_p_rnu))) { char buf[32]; @@ -640,7 +641,7 @@ static void draw_statuscol(win_T *wp, winlinevars_T *wlv, linenr_T lnum, int vir draw_col_buf(wp, wlv, transbuf, translen, attr, false); p = sp->start; int hl = sp->userhl; - attr = hl < 0 ? syn_id2attr(-hl) : stcp->num_attr; + attr = hl < 0 ? hl_combine_attr(stcp->num_attr, syn_id2attr(-hl)) : stcp->num_attr; } size_t translen = transstr_buf(p, buf + len - p, transbuf, MAXPATHL, true); draw_col_buf(wp, wlv, transbuf, translen, attr, false); |