diff options
Diffstat (limited to 'src/nvim/screen.c')
-rw-r--r-- | src/nvim/screen.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 077bad766a..0e9f4cd60a 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -1875,7 +1875,7 @@ static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T // Store multibyte characters in ScreenLines[] et al. correctly. for (p = text; *p != NUL; ) { cells = utf_ptr2cells(p); - c_len = (*mb_ptr2len)(p); + c_len = utfc_ptr2len(p); if (col + cells > wp->w_width - (wp->w_p_rl ? col : 0)) { break; } @@ -2914,7 +2914,7 @@ win_line ( if (draw_state == WL_LINE && area_highlighting) { /* handle Visual or match highlighting in this line */ if (vcol == fromcol - || (has_mbyte && vcol + 1 == fromcol && n_extra == 0 + || (vcol + 1 == fromcol && n_extra == 0 && utf_ptr2cells(ptr) > 1) || ((int)vcol_prev == fromcol_prev && vcol_prev < vcol /* not at margin */ @@ -4879,7 +4879,7 @@ static void win_redr_status(win_T *wp, int ignore_pum) // Find first character that will fit. // Going from start to end is much faster for DBCS. for (i = 0; p[i] != NUL && clen >= this_ru_col - 1; - i += (*mb_ptr2len)(p + i)) { + i += utfc_ptr2len(p + i)) { clen -= utf_ptr2cells(p + i); } len = clen; @@ -6133,8 +6133,7 @@ void setcursor(void) /* With 'rightleft' set and the cursor on a double-wide * character, position it on the leftmost column. */ curwin->w_p_rl ? (curwin->w_width - curwin->w_wcol - ( - (has_mbyte - && utf_ptr2cells(get_cursor_pos_ptr()) == 2 + (utf_ptr2cells(get_cursor_pos_ptr()) == 2 && vim_isprintc(gchar_cursor())) ? 2 : 1)) : curwin->w_wcol)); @@ -6969,17 +6968,14 @@ static void win_redr_ruler(win_T *wp, int always) get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i); } /* Truncate at window boundary. */ - if (has_mbyte) { - o = 0; - for (i = 0; buffer[i] != NUL; i += (*mb_ptr2len)(buffer + i)) { - o += utf_ptr2cells(buffer + i); - if (this_ru_col + o > width) { - buffer[i] = NUL; - break; - } + o = 0; + for (i = 0; buffer[i] != NUL; i += utfc_ptr2len(buffer + i)) { + o += utf_ptr2cells(buffer + i); + if (this_ru_col + o > width) { + buffer[i] = NUL; + break; } - } else if (this_ru_col + (int)STRLEN(buffer) > width) - buffer[width - this_ru_col] = NUL; + } screen_puts(buffer, row, this_ru_col + off, attr); i = redraw_cmdline; |