diff options
-rw-r--r-- | src/nvim/window.c | 4 | ||||
-rw-r--r-- | test/functional/ui/float_spec.lua | 14 |
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() |