diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-02-01 21:23:10 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-02-01 21:23:10 +0100 |
commit | 04e87b72c5fa88b7034a5b0ec0be6a7ad763e9d2 (patch) | |
tree | a56e980d3c9caf9bb5272df26d90eece2ba8f60e | |
parent | 21d7c9b601f3048e1293ecd6c09b8325a15503cd (diff) | |
download | vim-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.c | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |