diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-09-22 15:36:24 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-22 15:36:24 +0800 |
commit | 64e8a3c4d19eab40888fbac36b96e97bd9d68c42 (patch) | |
tree | d8292fcfe24ce5779a0f27ac1e006e251e3a3ea2 /src/nvim/decoration.c | |
parent | 34a786bc49598eeafef3fffcb0836d4557e51638 (diff) | |
download | rneovim-64e8a3c4d19eab40888fbac36b96e97bd9d68c42.tar.gz rneovim-64e8a3c4d19eab40888fbac36b96e97bd9d68c42.tar.bz2 rneovim-64e8a3c4d19eab40888fbac36b96e97bd9d68c42.zip |
fix(ui): handle virtual text with multiple hl in more cases (#25304)
Diffstat (limited to 'src/nvim/decoration.c')
-rw-r--r-- | src/nvim/decoration.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/nvim/decoration.c b/src/nvim/decoration.c index b70f070a51..9d391cde8c 100644 --- a/src/nvim/decoration.c +++ b/src/nvim/decoration.c @@ -153,6 +153,24 @@ void clear_virttext(VirtText *text) *text = (VirtText)KV_INITIAL_VALUE; } +/// Get the next chunk of a virtual text item. +/// +/// @param[in] vt The virtual text item +/// @param[in,out] pos Position in the virtual text item +/// @param[in,out] attr Highlight attribute +/// +/// @return The text of the chunk, or NULL if there are no more chunks +char *next_virt_text_chunk(VirtText vt, size_t *pos, int *attr) +{ + char *text = NULL; + for (; text == NULL && *pos < kv_size(vt); (*pos)++) { + text = kv_A(vt, *pos).text; + int hl_id = kv_A(vt, *pos).hl_id; + *attr = hl_combine_attr(*attr, hl_id > 0 ? syn_id2attr(hl_id) : 0); + } + return text; +} + Decoration *decor_find_virttext(buf_T *buf, int row, uint64_t ns_id) { MarkTreeIter itr[1] = { 0 }; |