summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2007-08-08 20:49:37 +0000
committerBram Moolenaar <Bram@vim.org>2007-08-08 20:49:37 +0000
commitabc9773580f74a0767da91af5f342de4ee12936f (patch)
treef7a5707f236c6af7fd0c738a6621e3ad5808ce2a /src
parentc2f5abcf152b0bf25cc25c364ec6d0d0bfe58066 (diff)
downloadvim-git-abc9773580f74a0767da91af5f342de4ee12936f.tar.gz
updated for version 7.1-058v7.1.058
Diffstat (limited to 'src')
-rw-r--r--src/popupmnu.c146
-rw-r--r--src/proto/search.pro1
-rw-r--r--src/search.c7
-rw-r--r--src/version.c2
4 files changed, 132 insertions, 24 deletions
diff --git a/src/popupmnu.c b/src/popupmnu.c
index eb4631a4c..4dd3a9488 100644
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -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;
}
diff --git a/src/proto/search.pro b/src/proto/search.pro
index ceaca2266..b103f4332 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -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));
diff --git a/src/search.c b/src/search.c
index ee1aef597..58a763114 100644
--- a/src/search.c
+++ b/src/search.c
@@ -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;
diff --git a/src/version.c b/src/version.c
index 0627fb5cc..128ded47f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 58,
+/**/
57,
/**/
56,