# HG changeset patch # User vimboss # Date 1160424677 0 # Node ID 5858c00d0f2c47b395e3c63cc809ee667f8c02a4 # Parent 9aec644c45dcc33b3f3571ba0035e7f85430eef6 updated for version 7.0-122 diff --git a/src/screen.c b/src/screen.c --- a/src/screen.c +++ b/src/screen.c @@ -5079,15 +5079,38 @@ screen_line(row, coloff, endcol, clear_w * character too. If we didn't skip any blanks above, then we * only redraw if the character wasn't already redrawn anyway. */ - if (gui.in_use && (col > startCol || !redraw_this) -# ifdef FEAT_MBYTE - && enc_dbcs == 0 -# endif - ) + if (gui.in_use && (col > startCol || !redraw_this)) { hl = ScreenAttrs[off_to]; if (hl > HL_ALL || (hl & HL_BOLD)) - screen_char(off_to - 1, row, col + coloff - 1); + { + int prev_cells = 1; +# ifdef FEAT_MBYTE + if (enc_utf8) + /* for utf-8, ScreenLines[char_offset + 1] == 0 means + * that its width is 2. */ + prev_cells = ScreenLines[off_to - 1] == 0 ? 2 : 1; + else if (enc_dbcs != 0) + { + /* find previous character by counting from first + * column and get its width. */ + unsigned off = LineOffset[row]; + + while (off < off_to) + { + prev_cells = (*mb_off2cells)(off); + off += prev_cells; + } + } + + if (enc_dbcs != 0 && prev_cells > 1) + screen_char_2(off_to - prev_cells, row, + col + coloff - prev_cells); + else +# endif + screen_char(off_to - prev_cells, row, + col + coloff - prev_cells); + } } #endif screen_fill(row, row + 1, col + coloff, clear_width + coloff, diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -667,6 +667,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 122, +/**/ 121, /**/ 120,