]> granicus.if.org Git - vim/commitdiff
updated for version 7.1-058 v7.1.058
authorBram Moolenaar <Bram@vim.org>
Wed, 8 Aug 2007 20:49:37 +0000 (20:49 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 8 Aug 2007 20:49:37 +0000 (20:49 +0000)
src/popupmnu.c
src/proto/search.pro
src/search.c
src/version.c

index eb4631a4ce312685c3c8bffa15e35acd1a07683e..4dd3a94882dbf8da0b60caa1fad776e44669d243 100644 (file)
@@ -75,7 +75,6 @@ redo:
 
     row = curwin->w_cline_row + W_WINROW(curwin);
     height = curwin->w_cline_height;
-    col = curwin->w_wcol + W_WINCOL(curwin) - curwin->w_leftcol;
 
     if (firstwin->w_p_pvw)
        top_clear = firstwin->w_height;
@@ -167,6 +166,15 @@ redo:
     pum_base_width = max_width;
     pum_kind_width = kind_width;
 
+    /* Calculate column */
+#ifdef FEAT_RIGHTLEFT
+    if (curwin->w_p_rl)
+       col = W_WINCOL(curwin) + W_WIDTH(curwin) - curwin->w_wcol -
+                                                       curwin->w_leftcol - 1;
+    else
+#endif
+       col = W_WINCOL(curwin) + curwin->w_wcol - curwin->w_leftcol;
+
     /* if there are more items than room we need a scrollbar */
     if (pum_height < size)
     {
@@ -179,11 +187,23 @@ redo:
     if (def_width < max_width)
        def_width = max_width;
 
-    if (col < Columns - PUM_DEF_WIDTH || col < Columns - max_width)
+    if (((col < Columns - PUM_DEF_WIDTH || col < Columns - max_width)
+#ifdef FEAT_RIGHTLEFT
+               && !curwin->w_p_rl)
+           || (curwin->w_p_rl && (col > PUM_DEF_WIDTH || col > max_width)
+#endif
+       ))
     {
        /* align pum column with "col" */
        pum_col = col;
-       pum_width = Columns - pum_col - pum_scrollbar;
+
+#ifdef FEAT_RIGHTLEFT
+       if (curwin->w_p_rl)
+           pum_width = pum_col - pum_scrollbar + 1;
+       else
+#endif
+           pum_width = Columns - pum_col - pum_scrollbar;
+
        if (pum_width > max_width + kind_width + extra_width + 1
                                                 && pum_width > PUM_DEF_WIDTH)
        {
@@ -195,14 +215,24 @@ redo:
     else if (Columns < def_width)
     {
        /* not enough room, will use what we have */
-       pum_col = 0;
+#ifdef FEAT_RIGHTLEFT
+       if (curwin->w_p_rl)
+           pum_col = Columns - 1;
+       else
+#endif
+           pum_col = 0;
        pum_width = Columns - 1;
     }
     else
     {
        if (max_width > PUM_DEF_WIDTH)
            max_width = PUM_DEF_WIDTH;  /* truncate */
-       pum_col = Columns - max_width;
+#ifdef FEAT_RIGHTLEFT
+       if (curwin->w_p_rl)
+           pum_col = max_width - 1;
+       else
+#endif
+           pum_col = Columns - max_width;
        pum_width = max_width - pum_scrollbar;
     }
 
@@ -255,8 +285,16 @@ pum_redraw()
        attr = (idx == pum_selected) ? attr_select : attr_norm;
 
        /* prepend a space if there is room */
-       if (pum_col > 0)
-           screen_putchar(' ', row, pum_col - 1, attr);
+#ifdef FEAT_RIGHTLEFT
+       if (curwin->w_p_rl)
+       {
+           if (pum_col < W_WINCOL(curwin) + W_WIDTH(curwin) - 1)
+               screen_putchar(' ', row, pum_col + 1, attr);
+       }
+       else
+#endif
+           if (pum_col > 0)
+               screen_putchar(' ', row, pum_col - 1, attr);
 
        /* Display each entry, use two spaces for a Tab.
         * Do this 3 times: For the main text, kind and extra info */
@@ -282,26 +320,67 @@ pum_redraw()
                    {
                        /* Display the text that fits or comes before a Tab.
                         * First convert it to printable characters. */
-                       char_u *st;
-                       int  saved = *p;
+                       char_u  *st;
+                       int     saved = *p;
 
                        *p = NUL;
                        st = transstr(s);
                        *p = saved;
-                       if (st != NULL)
+#ifdef FEAT_RIGHTLEFT
+                       if (curwin->w_p_rl)
                        {
-                           screen_puts_len(st, (int)STRLEN(st), row, col,
+                           if (st != NULL)
+                           {
+                               char_u  *rt = reverse_text(st);
+                               char_u  *rt_saved = rt;
+                               int     len, j;
+
+                               if (rt != NULL)
+                               {
+                                   len = STRLEN(rt);
+                                   if (len > pum_width)
+                                   {
+                                       for (j = pum_width; j < len; ++j)
+                                           mb_ptr_adv(rt);
+                                       len = pum_width;
+                                   }
+                                   screen_puts_len(rt, len, row,
+                                                       col - len + 1, attr);
+                                   vim_free(rt_saved);
+                               }
+                               vim_free(st);
+                           }
+                           col -= width;
+                       }
+                       else
+#endif
+                       {
+                           if (st != NULL)
+                           {
+                               screen_puts_len(st, (int)STRLEN(st), row, col,
                                                                        attr);
-                           vim_free(st);
+                               vim_free(st);
+                           }
+                           col += width;
                        }
-                       col += width;
 
                        if (*p != TAB)
                            break;
 
                        /* Display two spaces for a Tab. */
-                       screen_puts_len((char_u *)"  ", 2, row, col, attr);
-                       col += 2;
+#ifdef FEAT_RIGHTLEFT
+                       if (curwin->w_p_rl)
+                       {
+                           screen_puts_len((char_u *)"  ", 2, row, col - 1,
+                                                                       attr);
+                           col -= 2;
+                       }
+                       else
+#endif
+                       {
+                           screen_puts_len((char_u *)"  ", 2, row, col, attr);
+                           col += 2;
+                       }
                        totwidth += 2;
                        s = NULL;           /* start text at next char */
                        width = 0;
@@ -322,17 +401,44 @@ pum_redraw()
                                          && pum_array[idx].pum_extra == NULL)
                    || pum_base_width + n >= pum_width)
                break;
-           screen_fill(row, row + 1, col, pum_col + pum_base_width + n,
+#ifdef FEAT_RIGHTLEFT
+           if (curwin->w_p_rl)
+           {
+               screen_fill(row, row + 1, pum_col - pum_base_width - n + 1,
+                                                   col + 1, ' ', ' ', attr);
+               col = pum_col - pum_base_width - n + 1;
+           }
+           else
+#endif
+           {
+               screen_fill(row, row + 1, col, pum_col + pum_base_width + n,
                                                              ' ', ' ', attr);
-           col = pum_col + pum_base_width + n;
+               col = pum_col + pum_base_width + n;
+           }
            totwidth = pum_base_width + n;
        }
 
-       screen_fill(row, row + 1, col, pum_col + pum_width, ' ', ' ', attr);
+#ifdef FEAT_RIGHTLEFT
+       if (curwin->w_p_rl)
+           screen_fill(row, row + 1, pum_col - pum_width + 1, col + 1, ' ',
+                                                                   ' ', attr);
+       else
+#endif
+           screen_fill(row, row + 1, col, pum_col + pum_width, ' ', ' ',
+                                                                       attr);
        if (pum_scrollbar > 0)
-           screen_putchar(' ', row, pum_col + pum_width,
-                   i >= thumb_pos && i < thumb_pos + thumb_heigth
+       {
+#ifdef FEAT_RIGHTLEFT
+           if (curwin->w_p_rl)
+               screen_putchar(' ', row, pum_col - pum_width,
+                       i >= thumb_pos && i < thumb_pos + thumb_heigth
                                                  ? attr_thumb : attr_scroll);
+           else
+#endif
+               screen_putchar(' ', row, pum_col + pum_width,
+                       i >= thumb_pos && i < thumb_pos + thumb_heigth
+                                                 ? attr_thumb : attr_scroll);
+       }
 
        ++row;
     }
index ceaca2266df3d08eb39754290232e22bd41ae0fb..b103f43329b195e04058888f82dfc61418f73197 100644 (file)
@@ -1,6 +1,7 @@
 /* search.c */
 int search_regcomp __ARGS((char_u *pat, int pat_save, int pat_use, int options, regmmatch_T *regmatch));
 char_u *get_search_pat __ARGS((void));
+char_u *reverse_text __ARGS((char_u *s));
 void save_search_patterns __ARGS((void));
 void restore_search_patterns __ARGS((void));
 void free_search_patterns __ARGS((void));
index ee1aef597a5648d78f2912883dee5cfb56e16a6b..58a7631140431c653554196e4855503cf54f2369 100644 (file)
@@ -101,7 +101,6 @@ static int      saved_no_hlsearch = 0;
 static char_u      *mr_pattern = NULL; /* pattern used by search_regcomp() */
 #ifdef FEAT_RIGHTLEFT
 static int         mr_pattern_alloced = FALSE; /* mr_pattern was allocated */
-static char_u      *reverse_text __ARGS((char_u *s));
 #endif
 
 #ifdef FEAT_FIND_ID
@@ -228,12 +227,12 @@ get_search_pat()
     return mr_pattern;
 }
 
-#ifdef FEAT_RIGHTLEFT
+#if defined(FEAT_RIGHTLEFT) || defined(PROTO)
 /*
  * Reverse text into allocated memory.
  * Returns the allocated string, NULL when out of memory.
  */
-    static char_u *
+    char_u *
 reverse_text(s)
     char_u *s;
 {
@@ -1898,7 +1897,7 @@ findmatchlimit(oap, initc, flags, maxtravel)
     }
 
 #ifdef FEAT_RIGHTLEFT
-    /* This is just guessing: when 'rightleft' is set, search for a maching
+    /* This is just guessing: when 'rightleft' is set, search for a matching
      * paren/brace in the other direction. */
     if (curwin->w_p_rl && vim_strchr((char_u *)"()[]{}<>", initc) != NULL)
        backwards = !backwards;
index 0627fb5cca3e7d54628c4672b233f46e4e73c4c8..128ded47fd285450576ef2e17cc3b7ab6c5f41ab 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    58,
 /**/
     57,
 /**/