* refactor(#2826): singleton View class, WIP * refactor(#2826): singleton View class, WIP * refactor(#2826): singleton View class, WIP * refactor(#2826): singleton View class, WIP * refactor(#2826): singleton View class, WIP * refactor(#2826): singleton View class, WIP * refactor(#2826): singleton View class, WIP * refactor(#2826): singleton View class * refactor(#2826): View is an Explorer member * refactor(#2826): move autocmds to Explorer * refactor(#2826): API uses Explorer's View * refactor(#2826): move View into Explorer package * refactor(#2826): retain necessary view globals * refactor(#2826): move all winhl to appearance constants * refactor(#2826): add lifecycle logging to all Explorer members * refactor(#2826): fix bad cherry-pick * refactor(#2826): better enumerate_options function * refactor(#2826): add View.tab_line for debugging * refactor(#2826): default lifecycle log off * refactor(#2826): add experimental.multi_instance_debug, split globals out of view, move diagnostics to its own module * refactor(#2826): instrument View:get_winnr * refactor(#2826): instrument View:setup_tabpage * refactor(#2826): instrument View:set_current_win, View:prevent_buffer_override * refactor(#2826): instrument View:get_bufnr * refactor(#2826): track member bufnr -> winid with global * refactor(#2826): tidy experiment names and logs * vim: nvim-tree: track bufnr via buffer-update channel * vim: nvim-tree: more logging * vim: nvim-tree: revert: track bufnr via buffer-update channel * refactor(#2826): notify error on view winid and bufnr mismatches * refactor(#2826): notify error on view winid and bufnr mismatches * refactor(#2826): explorer init logging
58 lines
1.2 KiB
Lua
58 lines
1.2 KiB
Lua
local core = require("nvim-tree.core")
|
|
local lib = require("nvim-tree.lib")
|
|
local finders_find_file = require("nvim-tree.actions.finders.find-file")
|
|
|
|
local M = {}
|
|
|
|
---Open the tree, focusing if already open.
|
|
---@param opts ApiTreeOpenOpts|nil|string legacy -> opts.path
|
|
function M.fn(opts)
|
|
-- legacy arguments
|
|
if type(opts) == "string" then
|
|
opts = {
|
|
path = opts,
|
|
}
|
|
end
|
|
opts = opts or {}
|
|
|
|
local previous_buf = vim.api.nvim_get_current_buf()
|
|
local previous_path = vim.api.nvim_buf_get_name(previous_buf)
|
|
|
|
-- sanitise path
|
|
if type(opts.path) ~= "string" or vim.fn.isdirectory(opts.path) == 0 then
|
|
opts.path = nil
|
|
end
|
|
|
|
local explorer = core.get_explorer()
|
|
|
|
if explorer and explorer.view:is_visible() then
|
|
-- focus
|
|
lib.set_target_win()
|
|
explorer.view:focus()
|
|
else
|
|
-- open
|
|
lib.open({
|
|
path = opts.path,
|
|
current_window = opts.current_window,
|
|
winid = opts.winid,
|
|
})
|
|
end
|
|
|
|
-- find file
|
|
if M.config.update_focused_file.enable or opts.find_file then
|
|
-- update root
|
|
if opts.update_root then
|
|
require("nvim-tree").change_root(previous_path, previous_buf)
|
|
end
|
|
|
|
-- find
|
|
finders_find_file.fn(previous_path)
|
|
end
|
|
end
|
|
|
|
function M.setup(opts)
|
|
M.config = opts or {}
|
|
end
|
|
|
|
return M
|