/*
* Show the popup menu with items "array[size]".
* "array" must remain valid until pum_undisplay() is called!
- * When possible the leftmost character is aligned with screen column "col".
+ * When possible the leftmost character is aligned with cursor column.
* The menu appears above the screen line "row" or at "row" + "height" - 1.
*/
void
int max_width;
int row;
int context_lines;
- int col;
+ int cursor_col;
int above_row;
int below_row;
int redo_count = 0;
/* Calculate column */
#ifdef FEAT_RIGHTLEFT
if (curwin->w_p_rl)
- col = curwin->w_wincol + curwin->w_width - curwin->w_wcol - 1;
+ cursor_col = curwin->w_wincol + curwin->w_width
+ - curwin->w_wcol - 1;
else
#endif
- col = curwin->w_wincol + curwin->w_wcol;
+ cursor_col = curwin->w_wincol + curwin->w_wcol;
/* if there are more items than room we need a scrollbar */
if (pum_height < size)
if (def_width < max_width)
def_width = max_width;
- if (((col < Columns - p_pw || col < Columns - max_width)
+ if (((cursor_col < Columns - p_pw
+ || cursor_col < Columns - max_width)
#ifdef FEAT_RIGHTLEFT
&& !curwin->w_p_rl)
- || (curwin->w_p_rl && (col > p_pw || col > max_width)
+ || (curwin->w_p_rl
+ && (cursor_col > p_pw || cursor_col > max_width)
#endif
))
{
- /* align pum column with "col" */
- pum_col = col;
+ /* align pum with "cursor_col" */
+ pum_col = cursor_col;
/* start with the maximum space available */
#ifdef FEAT_RIGHTLEFT
if (pum_width > max_width + pum_kind_width + pum_extra_width + 1
&& pum_width > p_pw)
{
- /* the width is too much, make it narrower */
+ /* the width is more than needed for the items, make it
+ * narrower */
pum_width = max_width + pum_kind_width + pum_extra_width + 1;
if (pum_width < p_pw)
pum_width = p_pw;
}
- else if (((col > p_pw || col > max_width)
+ else if (((cursor_col > p_pw || cursor_col > max_width)
#ifdef FEAT_RIGHTLEFT
&& !curwin->w_p_rl)
- || (curwin->w_p_rl && (col < Columns - p_pw
- || col < Columns - max_width)
+ || (curwin->w_p_rl && (cursor_col < Columns - p_pw
+ || cursor_col < Columns - max_width)
#endif
))
{
- /* align right pum edge with "col" */
+ /* align pum edge with "cursor_col" */
#ifdef FEAT_RIGHTLEFT
if (curwin->w_p_rl
&& W_ENDCOL(curwin) < max_width + pum_scrollbar + 1)
{
- pum_col = col + max_width + pum_scrollbar + 1;
+ pum_col = cursor_col + max_width + pum_scrollbar + 1;
if (pum_col >= Columns)
pum_col = Columns - 1;
}
else if (!curwin->w_p_rl)
#endif
{
- if (curwin->w_wincol > Columns - max_width - pum_scrollbar)
+ if (curwin->w_wincol > Columns - max_width - pum_scrollbar
+ && max_width <= p_pw)
{
+ /* use full width to end of the screen */
pum_col = Columns - max_width - pum_scrollbar;
if (pum_col < 0)
pum_col = 0;
--- /dev/null
+|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7||+1&&|1+0&&|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7
+|8|9|_|a| @32||+1&&|8+0&&|9|_|a| @32
+|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7||+1&&|1+0&&|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7
+|8|9|_|b| @32||+1&&|8+0&&|9|_|b| @32
+@12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5||+1&&| +0&&@11|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5
+|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @20||+1&&|6+0&&|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @20
+|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5
+|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @9| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5
+|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
+|~| @35||+1#0000000&|~+0#4040ff13&| @35
call term_sendkeys(buf, "GA\<C-N>")
call VerifyScreenDump(buf, 'Test_popup_position_03', {'rows': 8})
+ " completed text wider than the window and 'pumwidth' smaller than available
+ " space
+ call term_sendkeys(buf, "\<Esc>u")
+ call term_sendkeys(buf, ":set pumwidth=20\<CR>")
+ call term_sendkeys(buf, "ggI123456789_\<Esc>")
+ call term_sendkeys(buf, "jI123456789_\<Esc>")
+ call term_sendkeys(buf, "GA\<C-N>")
+ call VerifyScreenDump(buf, 'Test_popup_position_04', {'rows': 10})
+
call term_sendkeys(buf, "\<Esc>u")
call StopVimInTerminal(buf)
call delete('Xtest')