diff --git a/src/popupmnu.c b/src/popupmnu.c index 5808ae19ed..bef9dd5ef8 100644 --- a/src/popupmnu.c +++ b/src/popupmnu.c @@ -345,21 +345,36 @@ pum_redraw() if (st != NULL) { char_u *rt = reverse_text(st); - char_u *rt_saved = rt; - int len, j; if (rt != NULL) { - len = (int)STRLEN(rt); - if (len > pum_width) + char_u *rt_start = rt; + int size; + + size = vim_strsize(rt); + if (size > pum_width) { - for (j = pum_width; j < len; ++j) + do + { + size -= has_mbyte + ? (*mb_ptr2cells)(rt) : 1; mb_ptr_adv(rt); - len = pum_width; + } while (size > pum_width); + + if (size < pum_width) + { + /* Most left character requires + * 2-cells but only 1 cell is + * available on screen. Put a + * '<' on the left of the pum + * item */ + *(--rt) = '<'; + size++; + } } - screen_puts_len(rt, len, row, - col - len + 1, attr); - vim_free(rt_saved); + screen_puts_len(rt, (int)STRLEN(rt), + row, col - size + 1, attr); + vim_free(rt_start); } vim_free(st); } diff --git a/src/version.c b/src/version.c index 7f35caadb0..ab5046501d 100644 --- a/src/version.c +++ b/src/version.c @@ -681,6 +681,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 342, /**/ 341, /**/