diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-11-11 16:46:45 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-11 16:46:45 +0800 |
commit | fc7ac688c397b5f748920597fcc70fe46e907944 (patch) | |
tree | 2fffc40da4a056a5ecde04f7a655d735d9b8ea1b | |
parent | ae67706535b23233d2d6f5a81b7c7284c3cc16f9 (diff) | |
download | rneovim-fc7ac688c397b5f748920597fcc70fe46e907944.tar.gz rneovim-fc7ac688c397b5f748920597fcc70fe46e907944.tar.bz2 rneovim-fc7ac688c397b5f748920597fcc70fe46e907944.zip |
fix(messages): don't set cmdline_row when messages have scrolled (#21015)
When 'cmdheight' is changed while messages have scrolled, the position
of msg_grid is not moved up, so cmdline_row should not be set based on
the position of msg_grid.
-rw-r--r-- | src/nvim/message.c | 2 | ||||
-rw-r--r-- | test/functional/ui/messages_spec.lua | 28 |
2 files changed, 29 insertions, 1 deletions
diff --git a/src/nvim/message.c b/src/nvim/message.c index 314232d4be..d703f9f260 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -196,7 +196,7 @@ void msg_grid_validate(void) msg_grid_set_pos(max_rows, false); } - if (msg_grid.chars && cmdline_row < msg_grid_pos) { + if (msg_grid.chars && !msg_scrolled && cmdline_row < msg_grid_pos) { // TODO(bfredl): this should already be the case, but fails in some // "batched" executions where compute_cmdrow() use stale positions or // something. diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua index 8ca29e79d9..60b538eee5 100644 --- a/test/functional/ui/messages_spec.lua +++ b/test/functional/ui/messages_spec.lua @@ -1236,6 +1236,34 @@ vimComment xxx match /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 excludenl contains=@vim bar^ | ]]) end) + + it('consecutive calls to win_move_statusline() work after multiline message #21014',function() + async_meths.exec([[ + echo "\n" + call win_move_statusline(0, -4) + call win_move_statusline(0, 4) + ]], false) + screen:expect([[ + | + {1:~ }| + {1:~ }| + {1:~ }| + {3: }| + | + {4:Press ENTER or type command to continue}^ | + ]]) + feed('<CR>') + screen:expect([[ + ^ | + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + | + ]]) + eq(1, meths.get_option('cmdheight')) + end) end) it('calling screenstring() after redrawing between messages without UI #20999', function() |