summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-02-01 21:23:10 +0100
committerBram Moolenaar <Bram@vim.org>2017-02-01 21:23:10 +0100
commit04e87b72c5fa88b7034a5b0ec0be6a7ad763e9d2 (patch)
treea56e980d3c9caf9bb5272df26d90eece2ba8f60e
parent21d7c9b601f3048e1293ecd6c09b8325a15503cd (diff)
downloadvim-04e87b72c5fa88b7034a5b0ec0be6a7ad763e9d2.zip
patch 8.0.0290: cursor positioning wrong if wide character wraps
Problem: If a wide character doesn't fit at the end of the screen line, and the line doesn't fit on the screen, then the cursor position may be wrong. (anliting) Solution: Don't skip over wide character. (Christian Brabandt, closes #1408)
-rw-r--r--src/screen.c8
-rw-r--r--src/version.c2
2 files changed, 8 insertions, 2 deletions
diff --git a/src/screen.c b/src/screen.c
index a392a9212..18ae8b902 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -2903,7 +2903,7 @@ win_line(
int endrow,
int nochange UNUSED) /* not updating for changed text */
{
- int col; /* visual column on screen */
+ int col = 0; /* visual column on screen */
unsigned off; /* offset in ScreenLines/ScreenAttrs */
int c = 0; /* init for GCC */
long vcol = 0; /* virtual column (for tabs) */
@@ -3429,7 +3429,11 @@ win_line(
#else
--ptr;
#endif
- n_skip = v - vcol;
+#ifdef FEAT_MBYTE
+ /* character fits on the screen, don't need to skip it */
+ if ((*mb_ptr2cells)(ptr) >= c && col == 0)
+#endif
+ n_skip = v - vcol;
}
/*
diff --git a/src/version.c b/src/version.c
index b49b99523..c1b998bdf 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 290,
+/**/
289,
/**/
288,