aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2025-03-31 11:23:25 +0200
committerGitHub <noreply@github.com>2025-03-31 11:23:25 +0200
commit2e5958186aa36e90199e36de5dd9831ec6aefba3 (patch)
tree7e2fd31ee7e04ef01e0f1470e8c3c1a431b9c834
parent28eaec5e1526b2a004eadeadf6246df75cfa08e8 (diff)
parent424d30fe97a856426bbaffbf413ec158572cbfb9 (diff)
downloadrneovim-2e5958186aa36e90199e36de5dd9831ec6aefba3.tar.gz
rneovim-2e5958186aa36e90199e36de5dd9831ec6aefba3.tar.bz2
rneovim-2e5958186aa36e90199e36de5dd9831ec6aefba3.zip
Merge pull request #32440 from fredizzimo/message-attach
fix(ui): send multigrid message position and size when the UI is refreshed
-rw-r--r--src/nvim/message.c8
-rw-r--r--src/nvim/ui.c1
-rw-r--r--test/functional/ui/multigrid_spec.lua67
-rw-r--r--test/functional/ui/screen.lua4
4 files changed, 80 insertions, 0 deletions
diff --git a/src/nvim/message.c b/src/nvim/message.c
index c210d64845..d373b92b21 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -2521,6 +2521,14 @@ void msg_reset_scroll(void)
msg_grid_scroll_discount = 0;
}
+void msg_ui_refresh(void)
+{
+ if (ui_has(kUIMultigrid) && msg_grid.chars) {
+ ui_call_grid_resize(msg_grid.handle, msg_grid.cols, msg_grid.rows);
+ ui_ext_msg_set_pos(msg_grid_pos, msg_scrolled);
+ }
+}
+
/// Increment "msg_scrolled".
static void inc_msg_scrolled(void)
{
diff --git a/src/nvim/ui.c b/src/nvim/ui.c
index e203e66ad1..283994dc4c 100644
--- a/src/nvim/ui.c
+++ b/src/nvim/ui.c
@@ -229,6 +229,7 @@ void ui_refresh(void)
}
msg_scroll_flush();
}
+ msg_ui_refresh();
if (!ui_active()) {
return;
diff --git a/test/functional/ui/multigrid_spec.lua b/test/functional/ui/multigrid_spec.lua
index 9cd252264f..46342fab5b 100644
--- a/test/functional/ui/multigrid_spec.lua
+++ b/test/functional/ui/multigrid_spec.lua
@@ -2857,4 +2857,71 @@ describe('ext_multigrid', function()
}})
end)
end)
+
+ it('message grid is shown at the correct position remote re-attach', function()
+ feed(':test')
+ local expected = {
+ grid = [[
+ ## grid 1
+ [2:-----------------------------------------------------]|*12
+ {11:[No Name] }|
+ [3:-----------------------------------------------------]|
+ ## grid 2
+ |
+ {1:~ }|*11
+ ## grid 3
+ :test^ |
+ ]],
+ win_pos = {
+ [2] = {
+ height = 12,
+ startcol = 0,
+ startrow = 0,
+ width = 53,
+ win = 1000
+ }
+ },
+ win_viewport = {
+ [2] = {win = 1000, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
+ },
+ win_viewport_margins = {
+ [2] = {
+ bottom = 0,
+ left = 0,
+ right = 0,
+ top = 0,
+ win = 1000
+ }
+ },
+ reset = true
+ }
+ screen:expect(expected)
+ feed('<cr>')
+ screen:detach()
+ screen:attach()
+ feed(':test')
+ screen:expect(expected)
+ end)
+end)
+
+it('headless attach with showcmd', function()
+ clear{args={'--headless'}}
+ local screen = Screen.new(80, 24, {ext_multigrid=true})
+ command('set showcmd')
+ feed('1234')
+ screen:expect({
+ grid = [[
+ ## grid 1
+ [2:--------------------------------------------------------------------------------]|*23
+ [3:--------------------------------------------------------------------------------]|
+ ## grid 2
+ ^ |
+ {1:~ }|*22
+ ## grid 3
+ 1234 |
+ ]],
+ win_viewport = {
+ [2] = {win = 1000, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
+ },
+ })
end)
diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua
index adc3080586..7d862c2602 100644
--- a/test/functional/ui/screen.lua
+++ b/test/functional/ui/screen.lua
@@ -973,6 +973,10 @@ function Screen:_reset()
self.wildmenu_items = nil
self.wildmenu_pos = nil
self._grid_win_extmarks = {}
+ self.msg_grid = nil
+ self.msg_grid_pos = nil
+ self.msg_scrolled = false
+ self.msg_sep_char = nil
end
--- @param cursor_style_enabled boolean