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:
parent
fdb88f3a79
commit
ca7911abc0
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user