Skip to content

Commit 8f392fa

Browse files
authored
fix(#2126): custom window pickers may create windows (#2140)
call nvim_list_wins again after the picker is run
1 parent a8a4834 commit 8f392fa

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

doc/nvim-tree-lua.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,6 +1121,7 @@ Configuration for various actions.
11211121
Change the default window picker, can be a string `"default"` or a function.
11221122
The function should return the window id that will open the node,
11231123
or `nil` if an invalid window is picked or user cancelled the action.
1124+
The picker may create a new window.
11241125
Type: `string` | `function`, Default: `"default"`
11251126
e.g. s1n7ax/nvim-window-picker plugin: >
11261127
window_picker = {

lua/nvim-tree/actions/node/open-file.lua

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,13 @@ local function on_preview(buf_loaded)
164164
view.focus()
165165
end
166166

167-
local function get_target_winid(mode, win_ids)
167+
local function get_target_winid(mode)
168168
local target_winid
169169
if not M.window_picker.enable or mode == "edit_no_picker" then
170170
target_winid = lib.target_winid
171171

172172
-- first available window
173-
if not vim.tbl_contains(win_ids, target_winid) then
173+
if not vim.tbl_contains(vim.api.nvim_tabpage_list_wins(0), target_winid) then
174174
target_winid = first_win_id()
175175
end
176176
else
@@ -201,20 +201,21 @@ local function set_current_win_no_autocmd(winid, autocmd)
201201
vim.opt.eventignore = eventignore
202202
end
203203

204-
local function open_in_new_window(filename, mode, win_ids)
204+
local function open_in_new_window(filename, mode)
205205
if type(mode) ~= "string" then
206206
mode = ""
207207
end
208208

209-
local target_winid = get_target_winid(mode, win_ids)
209+
local target_winid = get_target_winid(mode)
210210
if not target_winid then
211211
return
212212
end
213213

214-
local create_new_window = #vim.api.nvim_list_wins() == 1
214+
local win_ids = vim.api.nvim_list_wins()
215+
local create_new_window = #win_ids == 1 -- This implies that the nvim-tree window is the only one
215216
local new_window_side = (view.View.side == "right") and "aboveleft" or "belowright"
216217

217-
-- Target is invalid or window does not exist in current tabpage: create new window
218+
-- Target is invalid: create new window
218219
if not vim.tbl_contains(win_ids, target_winid) then
219220
vim.cmd(new_window_side .. " vsplit")
220221
target_winid = vim.api.nvim_get_current_win()
@@ -287,8 +288,6 @@ function M.fn(mode, filename)
287288
return edit_in_current_buf(filename)
288289
end
289290

290-
local tabpage = vim.api.nvim_get_current_tabpage()
291-
local win_ids = vim.api.nvim_tabpage_list_wins(tabpage)
292291
local buf_loaded = is_already_loaded(filename)
293292

294293
local found_win = utils.get_win_buf_from_path(filename)
@@ -297,7 +296,7 @@ function M.fn(mode, filename)
297296
end
298297

299298
if not found_win then
300-
open_in_new_window(filename, mode, win_ids)
299+
open_in_new_window(filename, mode)
301300
else
302301
vim.api.nvim_set_current_win(found_win)
303302
vim.bo.bufhidden = ""

0 commit comments

Comments
 (0)