#if defined(FEAT_QUICKFIX)
win_T *pvwin;
#endif
+#ifdef FEAT_RIGHTLEFT
+ int right_left = State == CMDLINE ? FALSE : curwin->w_p_rl;
+#endif
do
{
{
// pum above "pum_win_row"
- // Leave two lines of context if possible
- if (curwin->w_wrow - curwin->w_cline_row >= 2)
- context_lines = 2;
+ if (State == CMDLINE)
+ // for cmdline pum, no need for context lines
+ context_lines = 0;
else
- context_lines = curwin->w_wrow - curwin->w_cline_row;
+ {
+ // Leave two lines of context if possible
+ if (curwin->w_wrow - curwin->w_cline_row >= 2)
+ context_lines = 2;
+ else
+ context_lines = curwin->w_wrow - curwin->w_cline_row;
+ }
if (pum_win_row >= size + context_lines)
{
{
// pum below "pum_win_row"
- // Leave two lines of context if possible
- validate_cheight();
- if (curwin->w_cline_row
- + curwin->w_cline_height - curwin->w_wrow >= 3)
- context_lines = 3;
+ if (State == CMDLINE)
+ // for cmdline pum, no need for context lines
+ context_lines = 0;
else
- context_lines = curwin->w_cline_row
- + curwin->w_cline_height - curwin->w_wrow;
+ {
+ // Leave two lines of context if possible
+ validate_cheight();
+ if (curwin->w_cline_row
+ + curwin->w_cline_height - curwin->w_wrow >= 3)
+ context_lines = 3;
+ else
+ context_lines = curwin->w_cline_row
+ + curwin->w_cline_height - curwin->w_wrow;
+ }
pum_row = pum_win_row + context_lines;
if (size > below_row - pum_row)
else
#endif
#ifdef FEAT_RIGHTLEFT
- if (curwin->w_p_rl)
+ if (right_left)
cursor_col = curwin->w_wincol + curwin->w_width
- curwin->w_wcol - 1;
else
if (def_width < max_width)
def_width = max_width;
- if (((cursor_col < Columns - p_pw
- || cursor_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
- && (cursor_col > p_pw || cursor_col > max_width)
+ && !right_left)
+ || (right_left && (cursor_col > p_pw || cursor_col > max_width)
#endif
))
{
// start with the maximum space available
#ifdef FEAT_RIGHTLEFT
- if (curwin->w_p_rl)
+ if (right_left)
pum_width = pum_col - pum_scrollbar + 1;
else
#endif
}
else if (((cursor_col > p_pw || cursor_col > max_width)
#ifdef FEAT_RIGHTLEFT
- && !curwin->w_p_rl)
- || (curwin->w_p_rl && (cursor_col < Columns - p_pw
+ && !right_left)
+ || (right_left && (cursor_col < Columns - p_pw
|| cursor_col < Columns - max_width)
#endif
))
{
// align pum edge with "cursor_col"
#ifdef FEAT_RIGHTLEFT
- if (curwin->w_p_rl
+ if (right_left
&& W_ENDCOL(curwin) < 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)
+ else if (!right_left)
#endif
{
if (curwin->w_wincol > Columns - max_width - pum_scrollbar
}
#ifdef FEAT_RIGHTLEFT
- if (curwin->w_p_rl)
+ if (right_left)
pum_width = pum_col - pum_scrollbar + 1;
else
#endif
{
pum_width = p_pw;
#ifdef FEAT_RIGHTLEFT
- if (curwin->w_p_rl)
+ if (right_left)
{
if (pum_width > pum_col)
pum_width = pum_col;
{
// not enough room, will use what we have
#ifdef FEAT_RIGHTLEFT
- if (curwin->w_p_rl)
+ if (right_left)
pum_col = Columns - 1;
else
#endif
if (max_width > p_pw)
max_width = p_pw; // truncate
#ifdef FEAT_RIGHTLEFT
- if (curwin->w_p_rl)
+ if (right_left)
pum_col = max_width - 1;
else
#endif
--- /dev/null
+| +0&#ffffff0@74
+@75
+@75
+@5| +0#0000001#e0e0e08|d|e|f|i|n|e| @8| +0#0000000#ffffff0@53
+|<+2#ffffff16#00e0003|o|r|t| | +0#0000001#ffd7ff255|j|u|m|p| @10|w+2#ffffff16#00e0003|r|i|t|e|(|s|y|s|.|s|t|d|i|n|.|r|e|a|d|(|)@1|"| |[|r|u|n@1|i|n|g|]| @1|0|,|0|-|1| @9|A|l@1
+| +0#0000000#ffffff0@4| +0#0000001#ffd7ff255|l|i|s|t| @10| +0#0000000#ffffff0@53
+|~+0#4040ff13&| @3| +0#0000001#ffd7ff255|p|l|a|c|e| @9| +0#4040ff13#ffffff0@53
+|~| @3| +0#0000001#ffd7ff255|u|n|d|e|f|i|n|e| @6| +0#4040ff13#ffffff0@53
+|[+1#0000000&|N|o| |N| +0#0000001#ffd7ff255|u|n|p|l|a|c|e| @7| +1#0000000#ffffff0@35|0|,|0|-|1| @9|A|l@1
+|:+0&&|s|i|g|n| |d|e|f|i|n|e> @62
cunmap <F2>
endfunc
+" Test for opening the cmdline completion popup menu from the terminal window.
+" The popup menu should be positioned correctly over the status line of the
+" bottom-most window.
+func Test_wildmenu_pum_from_terminal()
+ CheckRunVimInTerminal
+ let python = PythonProg()
+ call CheckPython(python)
+
+ %bw!
+ let cmds = ['set wildmenu wildoptions=pum']
+ let pcmd = python .. ' -c "import sys; sys.stdout.write(sys.stdin.read())"'
+ call add(cmds, "call term_start('" .. pcmd .. "')")
+ call writefile(cmds, 'Xtest')
+ let buf = RunVimInTerminal('-S Xtest', #{rows: 10})
+ call term_sendkeys(buf, "\r\r\r")
+ call term_wait(buf)
+ call term_sendkeys(buf, "\<C-W>:sign \<Tab>")
+ call term_wait(buf)
+ call VerifyScreenDump(buf, 'Test_wildmenu_pum_term_01', {})
+ call term_wait(buf)
+ call StopVimInTerminal(buf)
+ call delete('Xtest')
+endfunc
+
" Test for completion after a :substitute command followed by a pipe (|)
" character
func Test_cmdline_complete_substitute()