summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-05-17 12:31:44 +0200
committerBram Moolenaar <Bram@vim.org>2019-05-17 12:31:44 +0200
commit0ebe12be86d9f79bfa833306a0302a68a0f4fc30 (patch)
tree13e17c2bc9b3e82f8fc751664d63683abdf6f01a
parent5c65e6a062dfc7d20931fa1f73d03b1714a4d5e1 (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.c18
-rw-r--r--src/version.c2
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,