From 5e7e5f2949ec026459b9fa0b6c34eabcef7e1e3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sindre=20T=2E=20Str=C3=B8m?= Date: Tue, 25 May 2021 19:53:43 +0200 Subject: [PATCH] feat(lib): Improved tabnew behavior. (#395) --- doc/nvim-tree-lua.txt | 2 +- lua/nvim-tree/lib.lua | 43 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index b83723a0..0968802e 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -177,7 +177,7 @@ Default is {} |g:nvim_tree_quit_on_open| *g:nvim_tree_quit_on_open* Can be `0` or `1`. When `1`, will close the tree when a file is opened. -Applies to: `preview`, `edit`, `edit_vsplit`, `edit_split`, `edit_tab`. +Applies to: `edit`, `vsplit`, `split`, `tabnew`. Default is 0 |g:nvim_tree_disable_keybindings| *g:nvim_tree_disable_keybindings* diff --git a/lua/nvim-tree/lib.lua b/lua/nvim-tree/lib.lua index e1804537..6b3228fe 100644 --- a/lua/nvim-tree/lib.lua +++ b/lua/nvim-tree/lib.lua @@ -283,14 +283,7 @@ end function M.open_file(mode, filename) if mode == "tabnew" then - -- Switch window first to ensure new window doesn't inherit settings from - -- NvimTree - if M.Tree.target_winid > 0 and api.nvim_win_is_valid(M.Tree.target_winid) then - api.nvim_set_current_win(M.Tree.target_winid) - else - vim.cmd("wincmd p") - end - vim.cmd("tabe " .. vim.fn.fnameescape(filename)) + M.open_file_in_tab(filename) return end @@ -368,6 +361,40 @@ function M.open_file(mode, filename) renderer.draw(M.Tree, true) end +function M.open_file_in_tab(filename) + local close = vim.g.nvim_tree_quit_on_open == 1 + if close then + view.close() + else + -- Switch window first to ensure new window doesn't inherit settings from + -- NvimTree + if M.Tree.target_winid > 0 and api.nvim_win_is_valid(M.Tree.target_winid) then + api.nvim_set_current_win(M.Tree.target_winid) + else + vim.cmd("wincmd p") + end + end + + -- This sequence of commands are here to ensure a number of things: the new + -- buffer must be opened in the current tabpage first so that focus can be + -- brought back to the tree if it wasn't quit_on_open. It also ensures that + -- when we open the new tabpage with the file, its window doesn't inherit + -- settings from NvimTree, as it was already loaded. + + vim.cmd("edit " .. vim.fn.fnameescape(filename)) + + local alt_bufid = vim.fn.bufnr("#") + if alt_bufid ~= -1 then + api.nvim_set_current_buf(alt_bufid) + end + + if not close then + vim.cmd("wincmd p") + end + + vim.cmd("tabe " .. vim.fn.fnameescape(filename)) +end + function M.change_dir(foldername) if vim.fn.expand(foldername) == M.Tree.cwd then return