mirror of
https://github.com/Ajetski/dotfiles.git
synced 2025-09-30 14:03:18 -09:00
108 lines
3.1 KiB
Lua
108 lines
3.1 KiB
Lua
local lib = require("nvim-tree.lib")
|
|
local view = require("nvim-tree.view")
|
|
|
|
local git_add = function()
|
|
local node = lib.get_node_at_cursor()
|
|
local gs = node.git_status
|
|
|
|
-- If the file is untracked, unstaged or partially staged, we stage it
|
|
if gs == "??" or gs == "MM" or gs == "AM" or gs == " M" then
|
|
vim.cmd("silent !git add " .. node.absolute_path)
|
|
|
|
-- If the file is staged, we unstage
|
|
elseif gs == "M " or gs == "A " then
|
|
vim.cmd("silent !git restore --staged " .. node.absolute_path)
|
|
end
|
|
|
|
lib.refresh_tree()
|
|
end
|
|
local function collapse_all()
|
|
require("nvim-tree.actions.tree-modifiers.collapse-all").fn()
|
|
end
|
|
|
|
local function edit_or_open()
|
|
-- open as vsplit on current node
|
|
local action = "edit"
|
|
local node = lib.get_node_at_cursor()
|
|
|
|
-- Just copy what's done normally with vsplit
|
|
if node.link_to and not node.nodes then
|
|
require('nvim-tree.actions.node.open-file').fn(action, node.link_to)
|
|
view.close() -- Close the tree if file was opened
|
|
|
|
elseif node.nodes ~= nil then
|
|
lib.expand_or_collapse(node)
|
|
|
|
else
|
|
require('nvim-tree.actions.node.open-file').fn(action, node.absolute_path)
|
|
view.close() -- Close the tree if file was opened
|
|
end
|
|
|
|
end
|
|
|
|
local function vsplit_preview()
|
|
-- open as vsplit on current node
|
|
local action = "vsplit"
|
|
local node = lib.get_node_at_cursor()
|
|
|
|
-- Just copy what's done normally with vsplit
|
|
if node.link_to and not node.nodes then
|
|
require('nvim-tree.actions.node.open-file').fn(action, node.link_to)
|
|
|
|
elseif node.nodes ~= nil then
|
|
lib.expand_or_collapse(node)
|
|
|
|
else
|
|
require('nvim-tree.actions.node.open-file').fn(action, node.absolute_path)
|
|
|
|
end
|
|
|
|
-- Finally refocus on tree if it was lost
|
|
view.focus()
|
|
end
|
|
|
|
local function hsplit_preview()
|
|
-- open as hsplit on current node
|
|
local action = "hsplit"
|
|
local node = lib.get_node_at_cursor()
|
|
|
|
-- Just copy what's done normally with vsplit
|
|
if node.link_to and not node.nodes then
|
|
require('nvim-tree.actions.node.open-file').fn(action, node.link_to)
|
|
|
|
elseif node.nodes ~= nil then
|
|
lib.expand_or_collapse(node)
|
|
|
|
else
|
|
require('nvim-tree.actions.node.open-file').fn(action, node.absolute_path)
|
|
|
|
end
|
|
|
|
-- Finally refocus on tree if it was lost
|
|
view.focus()
|
|
end
|
|
|
|
require("nvim-tree").setup({
|
|
view = {
|
|
width = 50,
|
|
mappings = {
|
|
custom_only = false,
|
|
list = {
|
|
{ key = "l", action = "edit", action_cb = edit_or_open },
|
|
{ key = "L", action = "vsplit_preview", action_cb = vsplit_preview },
|
|
{ key = "S", action = "hsplit_preview", action_cb = hsplit_preview },
|
|
{ key = "h", action = "close_node" },
|
|
{ key = "H", action = "collapse_all", action_cb = collapse_all },
|
|
{ key = "ga", action = "git_add", action_cb = git_add },
|
|
}
|
|
},
|
|
},
|
|
actions = {
|
|
open_file = {
|
|
quit_on_open = false
|
|
}
|
|
}
|
|
})
|
|
|
|
vim.api.nvim_set_keymap("n", "<C-h>", ":NvimTreeToggle<cr>", { silent = true, noremap = true })
|