feat: preserve the file tree buffer (#249)
This commit is contained in:
@@ -248,6 +248,10 @@ function M.open_file(mode, filename)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function M.change_dir(foldername)
|
function M.change_dir(foldername)
|
||||||
|
if vim.fn.expand(foldername) == M.Tree.cwd then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
api.nvim_command('cd '..foldername)
|
api.nvim_command('cd '..foldername)
|
||||||
M.Tree.entries = {}
|
M.Tree.entries = {}
|
||||||
M.init(false, M.Tree.bufnr ~= nil)
|
M.init(false, M.Tree.bufnr ~= nil)
|
||||||
@@ -274,13 +278,13 @@ end
|
|||||||
|
|
||||||
local function create_buf()
|
local function create_buf()
|
||||||
local options = {
|
local options = {
|
||||||
bufhidden = 'wipe';
|
|
||||||
buftype = 'nofile';
|
buftype = 'nofile';
|
||||||
modifiable = false;
|
modifiable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
M.Tree.bufnr = api.nvim_create_buf(false, true)
|
M.Tree.bufnr = api.nvim_create_buf(false, true)
|
||||||
api.nvim_buf_set_name(M.Tree.bufnr, M.Tree.buf_name)
|
api.nvim_buf_set_name(M.Tree.bufnr, M.Tree.buf_name)
|
||||||
|
api.nvim_buf_set_var(M.Tree.bufnr, "nvim_tree_buffer_ready", 1)
|
||||||
|
|
||||||
for opt, val in pairs(options) do
|
for opt, val in pairs(options) do
|
||||||
api.nvim_buf_set_option(M.Tree.bufnr, opt, val)
|
api.nvim_buf_set_option(M.Tree.bufnr, opt, val)
|
||||||
@@ -300,7 +304,6 @@ function M.close()
|
|||||||
return vim.cmd ':q!'
|
return vim.cmd ':q!'
|
||||||
end
|
end
|
||||||
api.nvim_win_close(M.Tree.winnr(), true)
|
api.nvim_win_close(M.Tree.winnr(), true)
|
||||||
M.Tree.bufnr = nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.set_target_win()
|
function M.set_target_win()
|
||||||
@@ -309,7 +312,11 @@ end
|
|||||||
|
|
||||||
function M.open()
|
function M.open()
|
||||||
M.set_target_win()
|
M.set_target_win()
|
||||||
|
|
||||||
|
if not M.buf_exists() then
|
||||||
create_buf()
|
create_buf()
|
||||||
|
end
|
||||||
|
|
||||||
create_win()
|
create_win()
|
||||||
api.nvim_win_set_buf(M.Tree.winnr(), M.Tree.bufnr)
|
api.nvim_win_set_buf(M.Tree.winnr(), M.Tree.bufnr)
|
||||||
|
|
||||||
@@ -380,6 +387,23 @@ function M.win_focus(winnr, open_if_closed)
|
|||||||
api.nvim_set_current_win(wnr)
|
api.nvim_set_current_win(wnr)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.buf_exists()
|
||||||
|
local status, exists = pcall(function ()
|
||||||
|
return (
|
||||||
|
M.Tree.bufnr ~= nil
|
||||||
|
and vim.api.nvim_buf_is_valid(M.Tree.bufnr)
|
||||||
|
and vim.api.nvim_buf_get_var(M.Tree.bufnr, "nvim_tree_buffer_ready") == 1
|
||||||
|
and vim.fn.bufname(M.Tree.bufnr) == M.Tree.buf_name
|
||||||
|
)
|
||||||
|
end)
|
||||||
|
|
||||||
|
if not status then
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
return exists
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function M.toggle_ignored()
|
function M.toggle_ignored()
|
||||||
pops.show_ignored = not pops.show_ignored
|
pops.show_ignored = not pops.show_ignored
|
||||||
return M.refresh_tree()
|
return M.refresh_tree()
|
||||||
|
|||||||
Reference in New Issue
Block a user