diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2021-07-23 18:00:42 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2021-07-29 20:34:20 +0200 |
commit | 1495d36d63305862da3c4106455667d51b578707 (patch) | |
tree | bf2cabbdb905eff3d3c03be6c67c883fba90a7f2 /src/nvim/screen.c | |
parent | 98c4b2cf627bf5156a0d83fe0bf60f3c23af6f1b (diff) | |
download | rneovim-1495d36d63305862da3c4106455667d51b578707.tar.gz rneovim-1495d36d63305862da3c4106455667d51b578707.tar.bz2 rneovim-1495d36d63305862da3c4106455667d51b578707.zip |
feat(decorations): allow more than one stacked highlight in a virt_text
Diffstat (limited to 'src/nvim/screen.c')
-rw-r--r-- | src/nvim/screen.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index ae785132bb..586aeff1e2 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -4021,6 +4021,7 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, while (wp->w_p_rl ? col >= 0 : col < grid->Columns) { int cells = -1; + // TODO: integrate this whith the other virt_text impl already if (do_virttext && !delay_virttext) { if (*s.p == NUL) { if (virt_pos < virt_text.size) { @@ -4424,14 +4425,21 @@ void draw_virt_text(buf_T *buf, int col_off, int *end_col, int max_col) while (col < max_col) { if (!*s.p) { - if (virt_pos == kv_size(vt)) { + if (virt_pos >= kv_size(vt)) { + break; + } + virt_attr = 0; + do { + s.p = kv_A(vt, virt_pos).text; + int hl_id = kv_A(vt, virt_pos).hl_id; + virt_attr = hl_combine_attr(virt_attr, + hl_id > 0 ? syn_id2attr(hl_id) : 0); + virt_pos++; + } while (!s.p && virt_pos < kv_size(vt)); + // TODO: y w0t m8 + if (!s.p) { break; } - s.p = kv_A(vt, virt_pos).text; - int hl_id = kv_A(vt, virt_pos).hl_id; - virt_attr = hl_id > 0 ? syn_id2attr(hl_id) : 0; - virt_pos++; - continue; } int attr; bool through = false; |