]> granicus.if.org Git - vim/commitdiff
updated for version 7.2.342 v7.2.342
authorBram Moolenaar <Bram@vim.org>
Tue, 19 Jan 2010 17:06:03 +0000 (18:06 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 19 Jan 2010 17:06:03 +0000 (18:06 +0100)
Problem:    Popup menu displayed wrong in 'rightleft' mode when there are
            multi-byte characters.
Solution:   Adjust the column computations. (Dominique Pelle)

src/popupmnu.c
src/version.c

index 5808ae19ed7e30063d443d8b34cbf07735e1767b..bef9dd5ef8a30a6adb38947daab6e51a096c0938 100644 (file)
@@ -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);
                            }
index 7f35caadb0a1f75438416de46239519bbfb5bb92..ab5046501d39a837ed1db3a7698fddbefa998b39 100644 (file)
@@ -681,6 +681,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    342,
 /**/
     341,
 /**/