aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/message.c2
-rw-r--r--src/nvim/screen.c4
-rw-r--r--test/functional/ui/messages_spec.lua37
-rw-r--r--test/functional/ui/wildmode_spec.lua85
4 files changed, 125 insertions, 3 deletions
diff --git a/src/nvim/message.c b/src/nvim/message.c
index 7498091ade..882fce504b 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -2053,7 +2053,7 @@ int msg_scrollsize(void)
/*
* Scroll the screen up one line for displaying the next message line.
*/
-static void msg_scroll_up(void)
+void msg_scroll_up(void)
{
if (!msg_did_scroll) {
ui_call_win_scroll_over_start();
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index fe9fba7af6..a20c91845d 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -4765,12 +4765,12 @@ win_redr_status_matches (
row = cmdline_row - 1;
if (row >= 0) {
- if (wild_menu_showing == 0) {
+ if (wild_menu_showing == 0 || wild_menu_showing == WM_LIST) {
if (msg_scrolled > 0) {
/* Put the wildmenu just above the command line. If there is
* no room, scroll the screen one line up. */
if (cmdline_row == Rows - 1) {
- grid_del_lines(&default_grid, 0, 1, (int)Rows, 0, (int)Columns);
+ msg_scroll_up();
msg_scrolled++;
} else {
cmdline_row++;
diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua
index 50e354a7ee..34b9ac8882 100644
--- a/test/functional/ui/messages_spec.lua
+++ b/test/functional/ui/messages_spec.lua
@@ -681,6 +681,43 @@ describe('ui/ext_messages', function()
end)
end)
+describe('ui/ext_messages', function()
+ local screen
+ before_each(function()
+ clear()
+ screen = Screen.new(25, 7)
+ screen:attach({rgb=true, ext_messages=true})
+ screen:set_default_attr_ids({
+ [1] = {bold = true, foreground = Screen.colors.Blue1},
+ [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
+ [3] = {bold = true, reverse = true},
+ [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
+ })
+ end)
+
+ it('wildmode=list', function()
+ command('set wildmenu wildmode=list')
+ feed(':set wildm<tab>')
+ screen:expect{grid=[[
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]], messages={{
+ content = {{'wildmenu wildmode'}},
+ kind = '',
+ }},
+ cmdline={{
+ firstc = ':',
+ content = {{ 'set wildm' }},
+ pos = 9,
+ }}}
+ end)
+end)
+
describe('ui/builtin messages', function()
local screen
before_each(function()
diff --git a/test/functional/ui/wildmode_spec.lua b/test/functional/ui/wildmode_spec.lua
index f4b80fd428..f960b793c9 100644
--- a/test/functional/ui/wildmode_spec.lua
+++ b/test/functional/ui/wildmode_spec.lua
@@ -169,6 +169,91 @@ describe("'wildmenu'", function()
end)
end)
+describe("'wildmenu'", function()
+ local screen
+ before_each(function()
+ clear()
+ -- screen needs to be more than 5 rows
+ -- otherwise the tabline is covered and will be redrawn
+ screen = Screen.new(25, 7)
+ screen:attach()
+ end)
+ after_each(function()
+ screen:detach()
+ end)
+
+ it('wildmode=list,full and display+=msgsep interact correctly #10092', function()
+ command('set display+=msgsep')
+ command('set wildmenu wildmode=list,full')
+ command('set showtabline=2')
+ feed(':set wildm<tab>')
+ screen:expect([[
+ [No Name] |
+ |
+ ~ |
+ |
+ :set wildm |
+ wildmenu wildmode |
+ :set wildm^ |
+ ]])
+ feed('<tab>') -- trigger wildmode full
+ screen:expect([[
+ [No Name] |
+ |
+ |
+ :set wildm |
+ wildmenu wildmode |
+ wildmenu wildmode |
+ :set wildmenu^ |
+ ]])
+ feed('<Esc>')
+ screen:expect([[
+ [No Name] |
+ ^ |
+ ~ |
+ ~ |
+ ~ |
+ ~ |
+ |
+ ]])
+ end)
+
+ it('wildmode=list,full and display-=msgsep interact correctly', function()
+ command('set display-=msgsep')
+ command('set wildmenu wildmode=list,full')
+ feed(':set wildm<tab>')
+ screen:expect([[
+ ~ |
+ ~ |
+ ~ |
+ ~ |
+ :set wildm |
+ wildmenu wildmode |
+ :set wildm^ |
+ ]])
+ feed('<tab>') -- trigger wildmode full
+ screen:expect([[
+ ~ |
+ ~ |
+ ~ |
+ :set wildm |
+ wildmenu wildmode |
+ wildmenu wildmode |
+ :set wildmenu^ |
+ ]])
+ feed('<Esc>')
+ screen:expect([[
+ ^ |
+ ~ |
+ ~ |
+ ~ |
+ ~ |
+ ~ |
+ |
+ ]])
+ end)
+end)
+
describe('command line completion', function()
local screen
before_each(function()