diff options
author | Jit <jityao+github@gmail.com> | 2019-06-02 21:38:34 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2019-06-02 21:38:34 +0200 |
commit | b65a7b7f6692da9c9b18a1fb68817644a119fbed (patch) | |
tree | 3ea7c873f8a2fd72153f3e41dbfd8a7fc7e2e6c4 | |
parent | cbe45a303e289ae5a09446a0eac3313b08e20b99 (diff) | |
download | rneovim-b65a7b7f6692da9c9b18a1fb68817644a119fbed.tar.gz rneovim-b65a7b7f6692da9c9b18a1fb68817644a119fbed.tar.bz2 rneovim-b65a7b7f6692da9c9b18a1fb68817644a119fbed.zip |
[RDY] Fix wildmode=list,full and display+=msgsep interaction (#10103)
* Fix wildmode=list and display+=msgsep interaction
* Add test to check ext_messages behaviour is unchanged
-rw-r--r-- | src/nvim/message.c | 2 | ||||
-rw-r--r-- | src/nvim/screen.c | 4 | ||||
-rw-r--r-- | test/functional/ui/messages_spec.lua | 37 | ||||
-rw-r--r-- | test/functional/ui/wildmode_spec.lua | 85 |
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() |