From 0ebe12be86d9f79bfa833306a0302a68a0f4fc30 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 17 May 2019 12:31:44 +0200 Subject: [PATCH] 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) --- src/screen.c | 18 +++++++++++++----- src/version.c | 2 ++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/screen.c b/src/screen.c index cbb0fa4c7..cab697fd2 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 c34eed04f..91ea91424 100644 --- a/src/version.c +++ b/src/version.c @@ -767,6 +767,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1338, /**/ 1337, /**/ -- 2.40.0