nvim-config/lua/plugins/neotree.lua
2024-05-19 11:57:25 +01:00

70 lines
2.1 KiB
Lua

local is_neotree_focused = function()
-- Get our current buffer number
local bufnr = vim.api.nvim_get_current_buf and vim.api.nvim_get_current_buf() or vim.fn.bufnr()
-- Get all the available sources in neo-tree
for _, source in ipairs(require("neo-tree").config.sources) do
-- Get each sources state
local state = require("neo-tree.sources.manager").get_state(source)
-- Check if the source has a state, if the state has a buffer and if the buffer is our current buffer
if state and state.bufnr and state.bufnr == bufnr then
return true
end
end
return false
end
local function is_neotree_open()
local manager = require("neo-tree.sources.manager")
local renderer = require("neo-tree.ui.renderer")
local success, state = pcall(manager.get_state, "filesystem")
if not success then
return false
end
local window_exists = renderer.window_exists(state)
return window_exists
end
-- If the tree is currently open and focused, then close it. If it's not open, or it's open
-- but not currently focused, it is made focused.
-- Effectively prevents the need to close and re-open it to gain focus of the tree.
local function toggle()
local cmd = require("neo-tree.command")
if is_neotree_open() and is_neotree_focused() then
cmd.execute({
action = "close",
})
else
cmd.execute({
action = "focus",
source = "filesystem",
position = "left",
})
end
end
return {
"nvim-neo-tree/neo-tree.nvim",
branch = "v3.x",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim",
},
config = function()
--vim.keymap.set("n", "<C-h>", ":Neotree filesystem toggle left<CR>")
vim.keymap.set("n", "<C-h>", toggle, {})
require("neo-tree").setup({
filesystem = {
filtered_items = {
visible = true,
hide_dotfiles = false,
hide_gitignored = true,
},
},
})
end,
}