mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
fix(pum): make :popup position correctly with float border
(cherry picked from commit fbaa278773
)
This commit is contained in:
parent
3563f4b623
commit
756b74758d
@ -1169,8 +1169,15 @@ void pum_make_popup(const char *path_name, int use_mouse_pos)
|
||||
if (!use_mouse_pos) {
|
||||
// Hack: set mouse position at the cursor so that the menu pops up
|
||||
// around there.
|
||||
mouse_row = curwin->w_winrow + curwin->w_wrow;
|
||||
mouse_col = curwin->w_wincol + curwin->w_wcol;
|
||||
mouse_row = curwin->w_grid.row_offset + curwin->w_wrow;
|
||||
mouse_col = curwin->w_grid.col_offset + curwin->w_wcol;
|
||||
if (ui_has(kUIMultigrid)) {
|
||||
mouse_grid = curwin->w_grid.target->handle;
|
||||
} else if (curwin->w_grid.target != &default_grid) {
|
||||
mouse_grid = 0;
|
||||
mouse_row += curwin->w_winrow;
|
||||
mouse_col += curwin->w_wincol;
|
||||
}
|
||||
}
|
||||
|
||||
vimmenu_T *menu = menu_find(path_name);
|
||||
|
@ -9,6 +9,7 @@ local eval = helpers.eval
|
||||
local eq = helpers.eq
|
||||
local neq = helpers.neq
|
||||
local expect = helpers.expect
|
||||
local exec = helpers.exec
|
||||
local exec_lua = helpers.exec_lua
|
||||
local insert = helpers.insert
|
||||
local meths = helpers.meths
|
||||
@ -2104,7 +2105,7 @@ describe('float window', function()
|
||||
{5:║}{1:^ }{5:║}|
|
||||
{5:╚═════════╝}|
|
||||
]], float_pos={
|
||||
[5] = { { id = 1002 }, "NW", 1, 0, 5, true }
|
||||
[5] = { { id = 1002 }, "NW", 1, 0, 5, true };
|
||||
}, win_viewport={
|
||||
[2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
|
||||
[5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 2, curcol = 0, linecount = 3, sum_scroll_delta = 0};
|
||||
@ -2162,8 +2163,8 @@ describe('float window', function()
|
||||
{1: abb }|
|
||||
{13: acc }|
|
||||
]], float_pos={
|
||||
[5] = { { id = 1002 }, "NW", 1, 0, 5, true, 50 },
|
||||
[6] = { { id = -1 }, "NW", 5, 4, 0, false, 100 }
|
||||
[5] = { { id = 1002 }, "NW", 1, 0, 5, true, 50 };
|
||||
[6] = { { id = -1 }, "NW", 5, 4, 0, false, 100 };
|
||||
}, win_viewport={
|
||||
[2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount=1, sum_scroll_delta = 0};
|
||||
[5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 2, curcol = 3, linecount=3, sum_scroll_delta = 0};
|
||||
@ -2182,6 +2183,122 @@ describe('float window', function()
|
||||
{3:-- }{8:match 1 of 4} |
|
||||
]]}
|
||||
end
|
||||
|
||||
feed '<esc>'
|
||||
if multigrid then
|
||||
screen:expect{grid=[[
|
||||
## grid 1
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[3:----------------------------------------]|
|
||||
## grid 2
|
||||
|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
## grid 3
|
||||
|
|
||||
## grid 5
|
||||
{5:╔═════════╗}|
|
||||
{5:║}{1:aaa aab }{5:║}|
|
||||
{5:║}{1:abb acc }{5:║}|
|
||||
{5:║}{1:ac^c }{5:║}|
|
||||
{5:╚═════════╝}|
|
||||
]], float_pos={
|
||||
[5] = { { id = 1002 }, "NW", 1, 0, 5, true };
|
||||
}, win_viewport={
|
||||
[2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
|
||||
[5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 2, curcol = 2, linecount = 3, sum_scroll_delta = 0};
|
||||
}}
|
||||
else
|
||||
screen:expect{grid=[[
|
||||
{5:╔═════════╗} |
|
||||
{0:~ }{5:║}{1:aaa aab }{5:║}{0: }|
|
||||
{0:~ }{5:║}{1:abb acc }{5:║}{0: }|
|
||||
{0:~ }{5:║}{1:ac^c }{5:║}{0: }|
|
||||
{0:~ }{5:╚═════════╝}{0: }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
|
|
||||
]]}
|
||||
end
|
||||
|
||||
exec([[
|
||||
nnoremenu Test.foo :
|
||||
nnoremenu Test.bar :
|
||||
nnoremenu Test.baz :
|
||||
]])
|
||||
feed ':popup Test<CR>'
|
||||
if multigrid then
|
||||
screen:expect{grid=[[
|
||||
## grid 1
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[3:----------------------------------------]|
|
||||
## grid 2
|
||||
|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
## grid 3
|
||||
:popup Test |
|
||||
## grid 5
|
||||
{5:╔═════════╗}|
|
||||
{5:║}{1:aaa aab }{5:║}|
|
||||
{5:║}{1:abb acc }{5:║}|
|
||||
{5:║}{1:ac^c }{5:║}|
|
||||
{5:╚═════════╝}|
|
||||
## grid 6
|
||||
{1: foo }|
|
||||
{1: bar }|
|
||||
{1: baz }|
|
||||
]], float_pos={
|
||||
[5] = { { id = 1002 }, "NW", 1, 0, 5, true };
|
||||
[6] = { { id = -1 }, "NW", 5, 4, 2, false, 250 };
|
||||
}, win_viewport={
|
||||
[2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
|
||||
[5] = {win = {id = 1002}, topline = 0, botline = 3, curline = 2, curcol = 2, linecount = 3, sum_scroll_delta = 0};
|
||||
}}
|
||||
else
|
||||
screen:expect{grid=[[
|
||||
{5:╔═════════╗} |
|
||||
{0:~ }{5:║}{1:aaa aab }{5:║}{0: }|
|
||||
{0:~ }{5:║}{1:abb acc }{5:║}{0: }|
|
||||
{0:~ }{5:║}{1:ac^c }{5:║}{0: }|
|
||||
{0:~ }{5:╚═}{1: foo }{5:═══╝}{0: }|
|
||||
{0:~ }{1: bar }{0: }|
|
||||
{0:~ }{1: baz }{0: }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
:popup Test |
|
||||
]]}
|
||||
end
|
||||
end)
|
||||
|
||||
it('show ruler of current floating window', function()
|
||||
|
Loading…
Reference in New Issue
Block a user