mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 05:58:33 +00:00
fix: screenchar()/screenstring() with multigrid #32494
Problem: - When multigrid is enabled, screenchar()/screenstring() functions return wrong results. See https://github.com/neovide/neovide/issues/2569 - `screenstring()` executed via RPC in child Nvim process, doesn't recognize floating windows. Solution: In ui_comp_get_grid_at_coord(), also iterate window grids.
This commit is contained in:
@@ -333,6 +333,14 @@ ScreenGrid *ui_comp_get_grid_at_coord(int row, int col)
|
||||
return grid;
|
||||
}
|
||||
}
|
||||
|
||||
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
|
||||
ScreenGrid *grid = &wp->w_grid_alloc;
|
||||
if (row >= grid->comp_row && row < grid->comp_row + grid->rows
|
||||
&& col >= grid->comp_col && col < grid->comp_col + grid->cols) {
|
||||
return grid;
|
||||
}
|
||||
}
|
||||
return &default_grid;
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
local t = require('test.testutil')
|
||||
local n = require('test.functional.testnvim')()
|
||||
local Screen = require('test.functional.ui.screen')
|
||||
|
||||
local clear, eq, neq = n.clear, t.eq, t.neq
|
||||
local command, api, fn = n.command, n.api, n.fn
|
||||
@@ -30,8 +31,10 @@ local setup_floating_windows = function()
|
||||
end
|
||||
|
||||
describe('screenchar() and family respect floating windows', function()
|
||||
local function with_ext_multigrid(multigrid)
|
||||
before_each(function()
|
||||
clear()
|
||||
Screen.new(40, 7, { ext_multigrid = multigrid })
|
||||
-- These commands result into visible text `aabc`.
|
||||
-- `aab` - from floating windows, `c` - from text in regular window.
|
||||
api.nvim_buf_set_lines(0, 0, -1, true, { 'cccc' })
|
||||
@@ -68,4 +71,12 @@ describe('screenchar() and family respect floating windows', function()
|
||||
eq('b', fn.screenstring(1, 3))
|
||||
eq('c', fn.screenstring(1, 4))
|
||||
end)
|
||||
end
|
||||
|
||||
describe('with ext_multigrid', function()
|
||||
with_ext_multigrid(true)
|
||||
end)
|
||||
describe('without ext_multigrid', function()
|
||||
with_ext_multigrid(false)
|
||||
end)
|
||||
end)
|
||||
|
Reference in New Issue
Block a user