aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/window.c4
-rw-r--r--test/functional/ui/float_spec.lua14
2 files changed, 16 insertions, 2 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c
index 237338f974..9555c88138 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -4037,7 +4037,7 @@ win_T *win_vert_neighbor(tabpage_T *tp, win_T *wp, bool up, long count)
foundfr = wp->w_frame;
if (wp->w_floating) {
- return prevwin;
+ return win_valid(prevwin) && !prevwin->w_floating ? prevwin : firstwin;
}
while (count--) {
@@ -4118,7 +4118,7 @@ win_T *win_horz_neighbor(tabpage_T *tp, win_T *wp, bool left, long count)
foundfr = wp->w_frame;
if (wp->w_floating) {
- return prevwin;
+ return win_valid(prevwin) && !prevwin->w_floating ? prevwin : firstwin;
}
while (count--) {
diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua
index b248bd8f6f..aa304c11bb 100644
--- a/test/functional/ui/float_spec.lua
+++ b/test/functional/ui/float_spec.lua
@@ -37,6 +37,20 @@ describe('floating windows', function()
[17] = {background = Screen.colors.Yellow},
}
+ it('behavior', function()
+ -- Create three windows and test that ":wincmd <direction>" changes to the
+ -- first window, if the previous window is invalid.
+ command('split')
+ meths.open_win(0, true, {width=10, height=10, relative='editor', row=0, col=0})
+ eq(1002, funcs.win_getid())
+ eq('editor', meths.win_get_config(1002).relative)
+ command([[
+ call nvim_win_close(1001, v:false)
+ wincmd j
+ ]])
+ eq(1000, funcs.win_getid())
+ end)
+
local function with_ext_multigrid(multigrid)
local screen
before_each(function()