neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit b47b0b3f757d58a76242ac325a35cac6fbeffc07
parent beec377e905baca73e772080c4f276c800ad2a40
Author: luukvbaal <luukvbaal@gmail.com>
Date:   Mon, 25 Nov 2024 14:54:43 +0100

fix(grid): double grid_line_start() with ext_messages #31292

Problem:  Hit double grid_line_start() assert when redrawing from
          ext_messages msg_ruler event.
Solution: Do not start() batched grid calls when win_redr_ruler() will not
          puts() anything.
Diffstat:
Msrc/nvim/drawscreen.c | 8++++++--
Mtest/functional/ui/messages_spec.lua | 15+++++++++++++++
2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c @@ -1092,9 +1092,13 @@ int showmode(void) win_T *ruler_win = curwin->w_status_height == 0 ? curwin : lastwin_nofloating(); if (redrawing() && ruler_win->w_status_height == 0 && global_stl_height() == 0 && !(p_ch == 0 && !ui_has(kUIMessages))) { - grid_line_start(&msg_grid_adj, Rows - 1); + if (!ui_has(kUIMessages)) { + grid_line_start(&msg_grid_adj, Rows - 1); + } win_redr_ruler(ruler_win); - grid_line_flush(); + if (!ui_has(kUIMessages)) { + grid_line_flush(); + } } redraw_cmdline = false; diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua @@ -1159,6 +1159,21 @@ stack traceback: exec_lua([[vim.print({ foo = "bar" })]]) screen:expect_unchanged() end) + + it('ruler redraw does not crash due to double grid_line_start()', function() + exec_lua([[ + local ns = vim.api.nvim_create_namespace('') + vim.ui_attach(ns, { ext_messages = true }, function(event, ...) + if event == 'msg_ruler' then + vim.api.nvim__redraw({ flush = true }) + end + end) + vim.o.ruler = true + vim.o.laststatus = 0 + ]]) + feed('i') + n.assert_alive() + end) end) describe('ui/builtin messages', function()