From 8d23941af879536d0aa174a6a6b83c19b1174b6d Mon Sep 17 00:00:00 2001 From: Serg Tereshchenko Date: Sat, 12 Jun 2021 11:09:15 +0300 Subject: [PATCH] fix(ui): Fix pum incorrect position in multigrid mode Refs #12985 --- src/nvim/popupmnu.c | 2 +- test/functional/ui/float_spec.lua | 47 +++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/nvim/popupmnu.c b/src/nvim/popupmnu.c index 7d452d6797..f620517aff 100644 --- a/src/nvim/popupmnu.c +++ b/src/nvim/popupmnu.c @@ -440,7 +440,7 @@ void pum_redraw(void) } if (ui_has(kUIMultigrid)) { const char *anchor = pum_above ? "SW" : "NW"; - int row_off = pum_above ? pum_height : 0; + int row_off = pum_above ? -pum_height : 0; ui_call_win_float_pos(pum_grid.handle, -1, cstr_to_string(anchor), pum_anchor_grid, pum_row-row_off, pum_col-col_off, false, pum_grid.zindex); diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index f3b840da21..3a9dcb8b01 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -2901,6 +2901,53 @@ describe('float window', function() end end) + it('command menu rendered above cursor (pum_above)', function() + command('set wildmenu wildmode=longest:full wildoptions=pum') + feed(':sign u') + if multigrid then + screen:expect{grid=[[ + ## grid 1 + [2:----------------------------------------]| + [2:----------------------------------------]| + [2:----------------------------------------]| + [2:----------------------------------------]| + [2:----------------------------------------]| + [2:----------------------------------------]| + [3:----------------------------------------]| + ## grid 2 + | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + ## grid 3 + :sign un^ | + ## grid 4 + {7: }| + {12:~ }| + {12:~ }| + {12:~ }| + ## grid 5 + {1: undefine }| + {1: unplace }| + ]], float_pos={ + [5] = {{id = -1}, "SW", 1, 6, 5, false, 250}; + [4] = {{id = 1001}, "NW", 1, 2, 5, true, 50}; + }} + else + screen:expect{grid=[[ + | + {0:~ }| + {0:~ }{7: }{0: }| + {0:~ }{12:~ }{0: }| + {0:~ }{1: undefine }{0: }| + {0:~ }{1: unplace }{0: }| + :sign un^ | + ]]} + end + end) + it('with ext_popupmenu', function() screen:set_option('ext_popupmenu', true) feed('ix ')