diff --git a/src/nvim/help.c b/src/nvim/help.c index f63aef154c..982538abc7 100644 --- a/src/nvim/help.c +++ b/src/nvim/help.c @@ -141,7 +141,7 @@ void ex_help(exarg_T *eap) } else { wp = NULL; FOR_ALL_WINDOWS_IN_TAB(wp2, curtab) { - if (bt_help(wp2->w_buffer)) { + if (bt_help(wp2->w_buffer) && !wp2->w_config.hide && wp2->w_config.focusable) { wp = wp2; break; } diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index d288cfd837..79a7642a22 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -2671,7 +2671,7 @@ static win_T *qf_find_help_win(void) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT { FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { - if (bt_help(wp->w_buffer)) { + if (bt_help(wp->w_buffer) && !wp->w_config.hide && wp->w_config.focusable) { return wp; } } diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index b533ea7346..32f6b6dccd 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -6225,6 +6225,27 @@ describe('float window', function() test_float_mouse_no_focus() end) + it(':help (focusable=false, hide=true)', function() + n.add_builddir_to_rtp() + local w = curwin() + for _, helpcmd in ipairs({ + 'help', + 'helpgrep api-types', + 'lhelpgrep api-types', + }) do + command(helpcmd) + local badwins = { + api.nvim_open_win(0, false, { focusable = false, relative = 'editor', width = 1, height = 1, row = 0, col = 0 }), + api.nvim_open_win(0, false, { hide = true, relative = 'editor', width = 1, height = 1, row = 0, col = 0 }), + } + command('helpclose') + command(helpcmd) + eq(false, tbl_contains(badwins, curwin())) + command('helpclose') + eq(w, curwin()) + end + end) + it('j', function() feed('ji') -- INSERT to trigger screen change if multigrid then