From 4900d66370988108dbe0f57cb8a2fc090878f73d Mon Sep 17 00:00:00 2001 From: kiyan Date: Sat, 16 Jul 2022 15:38:50 +0200 Subject: [PATCH] fix(open-file): focus file if already opened --- lua/nvim-tree/actions/node/open-file.lua | 8 +++++--- lua/nvim-tree/marks/navigation.lua | 2 +- lua/nvim-tree/utils.lua | 6 +++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lua/nvim-tree/actions/node/open-file.lua b/lua/nvim-tree/actions/node/open-file.lua index e259bb89..8ae2431f 100644 --- a/lua/nvim-tree/actions/node/open-file.lua +++ b/lua/nvim-tree/actions/node/open-file.lua @@ -247,13 +247,15 @@ function M.fn(mode, filename) local win_ids = api.nvim_tabpage_list_wins(tabpage) local buf_loaded = is_already_loaded(filename) - local found = utils.is_in_displayed_buffer(filename) - if found and mode == "preview" then + local found_win = utils.get_win_buf_from_path(filename) + if found_win and mode == "preview" then return end - if not found then + if not found_win then open_in_new_window(filename, mode, win_ids) + else + api.nvim_set_current_win(found_win) end if M.resize_window then diff --git a/lua/nvim-tree/marks/navigation.lua b/lua/nvim-tree/marks/navigation.lua index a9b6a669..8a20b211 100644 --- a/lua/nvim-tree/marks/navigation.lua +++ b/lua/nvim-tree/marks/navigation.lua @@ -54,7 +54,7 @@ local function get(where, node) end local function open_or_focus(node) - if node and not node.nodes and not utils.is_in_displayed_buffer(node.absolute_path) then + if node and not node.nodes and not utils.get_win_buf_from_path(node.absolute_path) then open_file.fn("edit", node.absolute_path) elseif node then utils.focus_file(node.absolute_path) diff --git a/lua/nvim-tree/utils.lua b/lua/nvim-tree/utils.lua index d33ba2b6..7ed406c5 100644 --- a/lua/nvim-tree/utils.lua +++ b/lua/nvim-tree/utils.lua @@ -335,14 +335,14 @@ function M.focus_file(path) require("nvim-tree.view").set_cursor { i + 1, 1 } end -function M.is_in_displayed_buffer(path) +function M.get_win_buf_from_path(path) for _, w in pairs(vim.api.nvim_tabpage_list_wins(0)) do local b = vim.api.nvim_win_get_buf(w) if vim.api.nvim_buf_get_name(b) == path then - return true + return w, b end end - return false + return nil, nil end return M