aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/decoration.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-03-19 13:48:03 +0100
committerbfredl <bjorn.linse@gmail.com>2022-03-20 18:02:41 +0100
commit6eca9b69c4a1f40f27a6b41961af787327259de8 (patch)
tree5991bdfd77a3ad463edb54e39e4ee2a7b4841d37 /src/nvim/decoration.c
parent463738938d2f3ec4cff6f016937c3c02daae1184 (diff)
downloadrneovim-6eca9b69c4a1f40f27a6b41961af787327259de8.tar.gz
rneovim-6eca9b69c4a1f40f27a6b41961af787327259de8.tar.bz2
rneovim-6eca9b69c4a1f40f27a6b41961af787327259de8.zip
feat(ui): allow conceal to be defined in decorations
Unlike syntax conceal, change highlight of concealed char Can be used in tree-sitter using "conceal" metadata.
Diffstat (limited to 'src/nvim/decoration.c')
-rw-r--r--src/nvim/decoration.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/nvim/decoration.c b/src/nvim/decoration.c
index fb709d12ff..a0f189ca38 100644
--- a/src/nvim/decoration.c
+++ b/src/nvim/decoration.c
@@ -312,6 +312,10 @@ next_mark:
int attr = 0;
size_t j = 0;
+ bool conceal = 0;
+ int conceal_char = 0;
+ int conceal_attr = 0;
+
for (size_t i = 0; i < kv_size(state->active); i++) {
DecorRange item = kv_A(state->active, i);
bool active = false, keep = true;
@@ -336,6 +340,14 @@ next_mark:
if (active && item.attr_id > 0) {
attr = hl_combine_attr(attr, item.attr_id);
}
+ if (active && item.decor.conceal) {
+ conceal = true;
+ if (item.start_row == state->row && item.start_col == col && item.decor.conceal_char) {
+ conceal_char = item.decor.conceal_char;
+ state->col_until = MIN(state->col_until, item.start_col);
+ conceal_attr = item.attr_id;
+ }
+ }
if ((item.start_row == state->row && item.start_col <= col)
&& kv_size(item.decor.virt_text)
&& item.decor.virt_text_pos == kVTOverlay && item.win_col == -1) {
@@ -349,6 +361,9 @@ next_mark:
}
kv_size(state->active) = j;
state->current = attr;
+ state->conceal = conceal;
+ state->conceal_char = conceal_char;
+ state->conceal_attr = conceal_attr;
return attr;
}