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 5808ae1..bef9dd5 100644
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -345,21 +345,36 @@
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);
}