mirror of
https://github.com/neovim/neovim
synced 2025-07-27 08:52:10 +00:00
fix(ui): exclude unfocusable windows from 'complete' "w" completion
Problem: As inf85bc41
, assume unfocusable windows to be UI windows whose buffer content is unexpectedly included in 'complete' "w" completion. Solution: Exclude unfocusable windows when looping over windows. (cherry picked from commitd01b2611a6
)
This commit is contained in:
committed by
github-actions[bot]
parent
66953b16a2
commit
9909580df2
@ -69,8 +69,9 @@ If a window is focusable, it is part of the "navigation stack", that is,
|
|||||||
editor commands such as :windo, |CTRL-W|, etc., will consider the window as
|
editor commands such as :windo, |CTRL-W|, etc., will consider the window as
|
||||||
one that can be made the "current window". A non-focusable window will be
|
one that can be made the "current window". A non-focusable window will be
|
||||||
skipped by such commands (though it can be explicitly focused by
|
skipped by such commands (though it can be explicitly focused by
|
||||||
|nvim_set_current_win()|). Non-focusable windows are not listed by |:tabs|, and
|
|nvim_set_current_win()|). Non-focusable windows are not listed by |:tabs|,
|
||||||
are not counted by the default 'tabline'.
|
or counted by the default 'tabline'. Their buffer content is not included
|
||||||
|
in 'complete' "w" completion.
|
||||||
|
|
||||||
Windows (especially floating windows) can have many other |api-win_config|
|
Windows (especially floating windows) can have many other |api-win_config|
|
||||||
properties such as "hide" and "fixed" which also affect behavior.
|
properties such as "hide" and "fixed" which also affect behavior.
|
||||||
|
@ -2460,8 +2460,8 @@ static buf_T *ins_compl_next_buf(buf_T *buf, int flag)
|
|||||||
while (true) {
|
while (true) {
|
||||||
// Move to next window (wrap to first window if at the end)
|
// Move to next window (wrap to first window if at the end)
|
||||||
wp = (wp->w_next != NULL) ? wp->w_next : firstwin;
|
wp = (wp->w_next != NULL) ? wp->w_next : firstwin;
|
||||||
// Break if we're back at start or found an unscanned buffer
|
// Break if we're back at start or found an unscanned buffer (in a focusable window)
|
||||||
if (wp == curwin || !wp->w_buffer->b_scanned) {
|
if (wp == curwin || (!wp->w_buffer->b_scanned && wp->w_config.focusable)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1351,4 +1351,26 @@ describe('completion', function()
|
|||||||
eq('completeopt option does not include popup', api.nvim_get_var('err_msg'))
|
eq('completeopt option does not include popup', api.nvim_get_var('err_msg'))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it([[does not include buffer from non-focusable window for 'complete' "w"]], function()
|
||||||
|
local buf = api.nvim_create_buf(false, true)
|
||||||
|
local cfg = { focusable = false, relative = 'win', bufpos = { 1, 0 }, width = 1, height = 1 }
|
||||||
|
local win = api.nvim_open_win(buf, false, cfg)
|
||||||
|
api.nvim_buf_set_lines(buf, 0, -1, false, { 'foo' })
|
||||||
|
feed('i<C-N>')
|
||||||
|
screen:expect([[
|
||||||
|
^ |
|
||||||
|
{4:f}{1: }|
|
||||||
|
{1:~ }|*5
|
||||||
|
{5:-- Keyword completion (^N^P) }{9:Pattern not found} |
|
||||||
|
]])
|
||||||
|
api.nvim_win_set_config(win, { focusable = true })
|
||||||
|
feed('<Esc>i<C-N>')
|
||||||
|
screen:expect([[
|
||||||
|
foo^ |
|
||||||
|
{4:f}{1: }|
|
||||||
|
{1:~ }|*5
|
||||||
|
{5:-- Keyword completion (^N^P) The only match} |
|
||||||
|
]])
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
Reference in New Issue
Block a user