diff options
author | Bram Moolenaar <Bram@vim.org> | 2006-10-09 20:11:17 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2006-10-09 20:11:17 +0000 |
commit | 9c69732279b0d8a61cdbc564c103622a0891edeb (patch) | |
tree | c377b1d2866d2e85165fa647b942fcd5df23fafb /src/screen.c | |
parent | 8838aeeea98d340a166e30dc2230a513816c0189 (diff) | |
download | vim-git-9c69732279b0d8a61cdbc564c103622a0891edeb.tar.gz |
updated for version 7.0-122v7.0.122
Diffstat (limited to 'src/screen.c')
-rw-r--r-- | src/screen.c | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/screen.c b/src/screen.c index 8c5e20ce2..b861d7805 100644 --- a/src/screen.c +++ b/src/screen.c @@ -5079,15 +5079,38 @@ screen_line(row, coloff, endcol, clear_width * 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, |