aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/drawline.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2023-11-28 11:01:21 +0100
committerGitHub <noreply@github.com>2023-11-28 11:01:21 +0100
commitba564442ae5e8793f54d401fc636194df48cad3d (patch)
tree6595afdc29f0f0a1e7057373a14e5b121e41ae41 /src/nvim/drawline.c
parent71e954ad303eec25b67541f3a99392446f6de8b3 (diff)
parentae3685798deaf51f14422c568998998c03f91f2c (diff)
downloadrneovim-ba564442ae5e8793f54d401fc636194df48cad3d.tar.gz
rneovim-ba564442ae5e8793f54d401fc636194df48cad3d.tar.bz2
rneovim-ba564442ae5e8793f54d401fc636194df48cad3d.zip
Merge pull request #26249 from bfredl/concealchar
feat(decoration): allow conceal_char to be a composing char
Diffstat (limited to 'src/nvim/drawline.c')
-rw-r--r--src/nvim/drawline.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c
index 8b3f6fff2f..e4f4e4cbca 100644
--- a/src/nvim/drawline.c
+++ b/src/nvim/drawline.c
@@ -2459,6 +2459,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool number_onl
&& ((syntax_flags & HL_CONCEAL) != 0 || has_match_conc > 0 || decor_conceal > 0)
&& !(lnum_in_visual_area && vim_strchr(wp->w_p_cocu, 'v') == NULL)) {
wlv.char_attr = conceal_attr;
+ bool is_conceal_char = false;
if (((prev_syntax_id != syntax_seqnr && (syntax_flags & HL_CONCEAL) != 0)
|| has_match_conc > 1 || decor_conceal > 1)
&& (syn_get_sub_char() != NUL
@@ -2471,7 +2472,9 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool number_onl
if (has_match_conc && match_conc) {
mb_c = match_conc;
} else if (decor_conceal && decor_state.conceal_char) {
- mb_c = decor_state.conceal_char;
+ mb_schar = decor_state.conceal_char;
+ mb_c = schar_get_first_codepoint(mb_schar);
+ is_conceal_char = true;
if (decor_state.conceal_attr) {
wlv.char_attr = decor_state.conceal_attr;
}
@@ -2499,7 +2502,9 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool number_onl
is_concealing = true;
wlv.skip_cells = 1;
}
- mb_schar = schar_from_char(mb_c);
+ if (!is_conceal_char) {
+ mb_schar = schar_from_char(mb_c);
+ }
} else {
prev_syntax_id = 0;
is_concealing = false;