Mercurial > vim
changeset 16672:8abd2cb8441c v8.1.1338
patch 8.1.1338: hang when concealing the '>' shown for half of wide char
commit https://github.com/vim/vim/commit/0ebe12be86d9f79bfa833306a0302a68a0f4fc30
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri May 17 12:31:44 2019 +0200
patch 8.1.1338: hang when concealing the '>' shown for half of wide char
Problem: Hang when concealing the '>' shown for a wide char that doesn't
fit in the last cell.
Solution: Put back the pointer when the '>' is not going to be displayed.
(closes #4377)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 17 May 2019 12:45:06 +0200 |
parents | 10cee1b8fcb3 |
children | a49b12c730e7 |
files | src/screen.c src/version.c |
diffstat | 2 files changed, 15 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -3176,7 +3176,6 @@ win_line( int vcol_off = 0; /* offset for concealed characters */ int did_wcol = FALSE; int match_conc = 0; /* cchar for match functions */ - int has_match_conc = 0; /* match wants to conceal */ int old_boguscols = 0; # define VCOL_HLC (vcol - vcol_off) # define FIX_FOR_BOGUSCOLS \ @@ -3747,7 +3746,8 @@ win_line( for (;;) { #ifdef FEAT_CONCEAL - has_match_conc = 0; + int has_match_conc = 0; // match wants to conceal + int did_decrement_ptr = FALSE; #endif /* Skip this quickly when working on the text. */ if (draw_state != WL_LINE) @@ -4596,9 +4596,12 @@ win_line( mb_utf8 = FALSE; mb_l = 1; multi_attr = HL_ATTR(HLF_AT); - /* Put pointer back so that the character will be - * displayed at the start of the next line. */ + // Put pointer back so that the character will be + // displayed at the start of the next line. --ptr; +#ifdef FEAT_CONCEAL + did_decrement_ptr = TRUE; +#endif } else if (*ptr != NUL) ptr += mb_l - 1; @@ -5261,7 +5264,12 @@ win_line( prev_syntax_id = 0; is_concealing = FALSE; } -#endif /* FEAT_CONCEAL */ + + if (n_skip > 0 && did_decrement_ptr) + // not showing the '>', put pointer back to avoid getting stuck + ++ptr; + +#endif // FEAT_CONCEAL } #ifdef FEAT_CONCEAL