From: Bram Moolenaar Date: Tue, 19 Jan 2010 17:06:03 +0000 (+0100) Subject: updated for version 7.2.342 X-Git-Tag: v7.2.342 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d836bb90ab25a8f78473460ca91d6c13ae7ad2bc;p=vim updated for version 7.2.342 Problem: Popup menu displayed wrong in 'rightleft' mode when there are multi-byte characters. Solution: Adjust the column computations. (Dominique Pelle) --- diff --git a/src/popupmnu.c b/src/popupmnu.c index 5808ae19e..bef9dd5ef 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 7f35caadb..ab5046501 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, /**/