diff options
-rw-r--r-- | src/nvim/popupmnu.c | 2 | ||||
-rw-r--r-- | test/functional/ui/float_spec.lua | 47 |
2 files changed, 48 insertions, 1 deletions
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<tab>') + 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 ') |