mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #9772 from gelguy/float-inccommand
floating-window.c: fix crash when using inccommand
This commit is contained in:
commit
0920c6ca81
@ -2462,7 +2462,7 @@ int win_close(win_T *win, bool free_buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!was_floating) {
|
if (!was_floating) {
|
||||||
if (p_ea && (*p_ead == 'b' || *p_ead == dir)) {
|
if (!curwin->w_floating && p_ea && (*p_ead == 'b' || *p_ead == dir)) {
|
||||||
// If the frame of the closed window contains the new current window,
|
// If the frame of the closed window contains the new current window,
|
||||||
// only resize that frame. Otherwise resize all windows.
|
// only resize that frame. Otherwise resize all windows.
|
||||||
win_equal(curwin, curwin->w_frame->fr_parent == win_frame, dir);
|
win_equal(curwin, curwin->w_frame->fr_parent == win_frame, dir);
|
||||||
@ -4656,8 +4656,12 @@ void win_size_restore(garray_T *gap)
|
|||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
|
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
|
||||||
frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]);
|
int width = ((int *)gap->ga_data)[i++];
|
||||||
win_setheight_win(((int *)gap->ga_data)[i++], wp);
|
int height = ((int *)gap->ga_data)[i++];
|
||||||
|
if (!wp->w_floating) {
|
||||||
|
frame_setwidth(wp->w_frame, width);
|
||||||
|
win_setheight_win(height, wp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* recompute the window positions */
|
/* recompute the window positions */
|
||||||
|
@ -5,6 +5,7 @@ local clear, feed = helpers.clear, helpers.feed
|
|||||||
local command, feed_command = helpers.command, helpers.feed_command
|
local command, feed_command = helpers.command, helpers.feed_command
|
||||||
local eval = helpers.eval
|
local eval = helpers.eval
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
|
local insert = helpers.insert
|
||||||
local meths = helpers.meths
|
local meths = helpers.meths
|
||||||
local curbufmeths = helpers.curbufmeths
|
local curbufmeths = helpers.curbufmeths
|
||||||
local funcs = helpers.funcs
|
local funcs = helpers.funcs
|
||||||
@ -33,6 +34,7 @@ describe('floating windows', function()
|
|||||||
[14] = {foreground = Screen.colors.Brown},
|
[14] = {foreground = Screen.colors.Brown},
|
||||||
[15] = {background = Screen.colors.Grey20},
|
[15] = {background = Screen.colors.Grey20},
|
||||||
[16] = {background = Screen.colors.Grey20, bold = true, foreground = Screen.colors.Blue1},
|
[16] = {background = Screen.colors.Grey20, bold = true, foreground = Screen.colors.Blue1},
|
||||||
|
[17] = {background = Screen.colors.Yellow},
|
||||||
}
|
}
|
||||||
|
|
||||||
local function with_ext_multigrid(multigrid)
|
local function with_ext_multigrid(multigrid)
|
||||||
@ -1106,6 +1108,122 @@ describe('floating windows', function()
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('does not crash with inccommand #9379', function()
|
||||||
|
local expected_pos = {
|
||||||
|
[3]={{id=1001}, 'NW', 1, 2, 0, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
command("set inccommand=split")
|
||||||
|
command("set laststatus=2")
|
||||||
|
|
||||||
|
local buf = meths.create_buf(false,false)
|
||||||
|
meths.open_win(buf, true, {relative='editor', width=30, height=3, row=2, col=0})
|
||||||
|
|
||||||
|
insert([[
|
||||||
|
foo
|
||||||
|
bar
|
||||||
|
]])
|
||||||
|
|
||||||
|
if multigrid then
|
||||||
|
screen:expect{grid=[[
|
||||||
|
## grid 1
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
{5:[No Name] }|
|
||||||
|
|
|
||||||
|
## grid 2
|
||||||
|
|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
## grid 3
|
||||||
|
{1:foo }|
|
||||||
|
{1:bar }|
|
||||||
|
{1:^ }|
|
||||||
|
]], float_pos=expected_pos}
|
||||||
|
else
|
||||||
|
screen:expect([[
|
||||||
|
|
|
||||||
|
{0:~ }|
|
||||||
|
{1:foo }{0: }|
|
||||||
|
{1:bar }{0: }|
|
||||||
|
{1:^ }{0: }|
|
||||||
|
{5:[No Name] }|
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
end
|
||||||
|
|
||||||
|
feed(':%s/.')
|
||||||
|
|
||||||
|
if multigrid then
|
||||||
|
screen:expect{grid=[[
|
||||||
|
## grid 1
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
{5:[Preview] }|
|
||||||
|
:%s/.^ |
|
||||||
|
## grid 2
|
||||||
|
|
|
||||||
|
## grid 3
|
||||||
|
{17:f}{1:oo }|
|
||||||
|
{17:b}{1:ar }|
|
||||||
|
{1: }|
|
||||||
|
]], float_pos=expected_pos}
|
||||||
|
else
|
||||||
|
screen:expect([[
|
||||||
|
|
|
||||||
|
{5:[No Name] }|
|
||||||
|
{17:f}{1:oo } |
|
||||||
|
{17:b}{1:ar } |
|
||||||
|
{1: }{0: }|
|
||||||
|
{5:[Preview] }|
|
||||||
|
:%s/.^ |
|
||||||
|
]])
|
||||||
|
end
|
||||||
|
|
||||||
|
feed('<Esc>')
|
||||||
|
|
||||||
|
if multigrid then
|
||||||
|
screen:expect{grid=[[
|
||||||
|
## grid 1
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
[2:----------------------------------------]|
|
||||||
|
{5:[No Name] }|
|
||||||
|
|
|
||||||
|
## grid 2
|
||||||
|
|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
{0:~ }|
|
||||||
|
## grid 3
|
||||||
|
{1:foo }|
|
||||||
|
{1:bar }|
|
||||||
|
{1:^ }|
|
||||||
|
]], float_pos=expected_pos}
|
||||||
|
else
|
||||||
|
screen:expect([[
|
||||||
|
|
|
||||||
|
{0:~ }|
|
||||||
|
{1:foo }{0: }|
|
||||||
|
{1:bar }{0: }|
|
||||||
|
{1:^ }{0: }|
|
||||||
|
{5:[No Name] }|
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
it('does not crash when set cmdheight #9680', function()
|
it('does not crash when set cmdheight #9680', function()
|
||||||
local buf = meths.create_buf(false,false)
|
local buf = meths.create_buf(false,false)
|
||||||
meths.open_win(buf, false, {relative='editor', width=20, height=2, row=2, col=5})
|
meths.open_win(buf, false, {relative='editor', width=20, height=2, row=2, col=5})
|
||||||
@ -3456,6 +3574,5 @@ describe('floating windows', function()
|
|||||||
describe('without ext_multigrid', function()
|
describe('without ext_multigrid', function()
|
||||||
with_ext_multigrid(false)
|
with_ext_multigrid(false)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user