diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-05-17 12:31:44 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-05-17 12:31:44 +0200 |
commit | 0ebe12be86d9f79bfa833306a0302a68a0f4fc30 (patch) | |
tree | 13e17c2bc9b3e82f8fc751664d63683abdf6f01a | |
parent | 5c65e6a062dfc7d20931fa1f73d03b1714a4d5e1 (diff) |
patch 8.1.1338: hang when concealing the '>' shown for half of wide charv8.1.1338
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)
-rw-r--r-- | src/screen.c | 18 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/screen.c b/src/screen.c index cbb0fa4c7d..cab697fd2a 100644 --- 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 diff --git a/src/version.c b/src/version.c index c34eed04f6..91ea914243 100644 --- a/src/version.c +++ b/src/version.c @@ -768,6 +768,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1338, +/**/ 1337, /**/ 1336, |