Manager rerenders

- reuse existing buffer when possible and do not redraw
- save winid by tabpage
  > caveat: the table for the window will not be updated on `:q`
- add tab follow logic
This commit is contained in:
kiyan42 2020-10-26 20:53:33 +01:00
parent fdb88f3a79
commit ca7911abc0
5 changed files with 46 additions and 20 deletions

View File

@ -56,12 +56,12 @@ local function get_links()
CursorLine = 'CursorLine',
VertSplit = 'VertSplit',
CursorColumn = 'CursorColumn',
FileDirty = 'GitDirty',
FileNew = 'GitNew',
FileRenamed = 'GitRenamed',
FileMerge = 'GitMerge',
FileStaged = 'GitStaged',
FileDeleted = 'GitDeleted',
FileDirty = 'LuaTreeGitDirty',
FileNew = 'LuaTreeGitNew',
FileRenamed = 'LuaTreeGitRenamed',
FileMerge = 'LuaTreeGitMerge',
FileStaged = 'LuaTreeGitStaged',
FileDeleted = 'LuaTreeGitDeleted',
}
end

View File

@ -2,13 +2,24 @@ local explorer = nil
return {
setup = require'nvim-tree.config'.setup,
close = require'nvim-tree.buffers.tree'.close,
redraw = function()
local buffers_tree = require'nvim-tree.buffers.tree'
vim.defer_fn(
function()
local should_redraw = #vim.tbl_keys(buffers_tree.windows) > 0
if should_redraw then
buffers_tree.open()
end
end, 1)
end,
open = function()
explorer = require'nvim-tree.explorer'.Explorer:new()
local lines, highlights = require'nvim-tree.format'.format_nodes(explorer.node_tree)
require'nvim-tree.buffers.tree'.open()
require'nvim-tree.buffers.tree'.render(lines, highlights)
if require'nvim-tree.buffers.tree'.open() == 'norestore' then
require'nvim-tree.buffers.tree'.render(lines, highlights)
end
end,
close = require'nvim-tree.buffers.tree'.close,
open_file = function()
local node, idx = explorer:get_node_under_cursor()
if node.entries ~= nil then

View File

@ -6,8 +6,11 @@ M.config = {
name = "NvimTree",
}
M.windows = {}
local function is_open()
return vim.fn.bufwinnr(M.config.name) ~= -1
local tabpage = a.nvim_get_current_tabpage()
return M.windows[tabpage] ~= nil
end
local function bind(buf, left, right, opts)
@ -25,6 +28,7 @@ function M.open()
vim.wo[win].relativenumber = false
local bufnr
local ret = ''
if vim.fn.bufexists(M.config.name) ~= 0 then
bufnr = vim.fn.bufnr(M.config.name)
else
@ -33,13 +37,17 @@ function M.open()
vim.bo[bufnr].filetype = M.config.name
vim.bo[bufnr].modifiable = false
vim.bo[bufnr].swapfile = false
end
for left, right in pairs(M.config.keybindings) do
bind(bufnr, left, right)
for left, right in pairs(M.config.keybindings) do
bind(bufnr, left, right)
end
ret = 'norestore'
end
a.nvim_win_set_buf(win, bufnr)
M.windows[a.nvim_get_current_tabpage()] = win
return ret
end
function M.close()
@ -47,7 +55,9 @@ function M.close()
if #a.nvim_list_wins() == 1 then
vim.cmd "q!"
else
a.nvim_win_close(vim.fn.bufwinid(M.config.name), true)
local tabpage = a.nvim_get_current_tabpage()
a.nvim_win_close(M.windows[tabpage], true)
M.windows[tabpage] = nil
end
end
@ -82,4 +92,5 @@ function M.configure(opts)
end
end
M.is_open = is_open
return M

View File

@ -53,12 +53,12 @@ local function get_links()
CursorLine = 'CursorLine',
VertSplit = 'VertSplit',
CursorColumn = 'CursorColumn',
FileDirty = 'GitDirty',
FileNew = 'GitNew',
FileRenamed = 'GitRenamed',
FileMerge = 'GitMerge',
FileStaged = 'GitStaged',
FileDeleted = 'GitDeleted',
FileDirty = 'NvimTreeGitDirty',
FileNew = 'NvimTreeGitNew',
FileRenamed = 'NvimTreeGitRenamed',
FileMerge = 'NvimTreeGitMerge',
FileStaged = 'NvimTreeGitStaged',
FileDeleted = 'NvimTreeGitDeleted',
}
end

View File

@ -71,6 +71,10 @@ function M.setup(opts)
if M.config.auto_open then
require'nvim-tree'.open()
end
if M.config.tab_open then
vim.cmd "au TabEnter * lua require'nvim-tree'.redraw()"
end
end
return M