From 7098f57f52d0d8c9ca72b5200ec2273ac566bd90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20La=C3=ADn?= Date: Fri, 9 Feb 2024 13:35:19 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(nvim):=20add=20new=20neo-tree?= =?UTF-8?q?=20bindings=20for=20diffing=20files=20and=20opening=20files=20w?= =?UTF-8?q?ith=20xdg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .config/nvim/lua/plugins/neo-tree.lua | 54 +++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/.config/nvim/lua/plugins/neo-tree.lua b/.config/nvim/lua/plugins/neo-tree.lua index 0f33658d..bfebf5e0 100644 --- a/.config/nvim/lua/plugins/neo-tree.lua +++ b/.config/nvim/lua/plugins/neo-tree.lua @@ -2,14 +2,60 @@ return { "nvim-neo-tree/neo-tree.nvim", opts = { close_if_last_window = true, - filesystem = { - hijack_netrw_behavior = "open_default", - }, window = { mappings = { ["l"] = "open", - ["e"] = "open", + ["e"] = function() + vim.api.nvim_exec("Neotree focus filesystem left", true) + end, + ["b"] = function() + vim.api.nvim_exec("Neotree focus buffers left", true) + end, + ["g"] = function() + vim.api.nvim_exec("Neotree focus git_status left", true) + end, ["h"] = "close_node", + [""] = "fuzzy_finder_directory", + ["D"] = function(state) + local node = state.tree:get_node() + local log = require("neo-tree.log") + state.clipboard = state.clipboard or {} + if diff_Node and diff_Node ~= tostring(node.id) then + local current_Diff = node.id + require("neo-tree.utils").open_file(state, diff_Node, open) + vim.cmd("vert diffs " .. current_Diff) + log.info("Diffing " .. diff_Name .. " against " .. node.name) + diff_Node = nil + current_Diff = nil + state.clipboard = {} + require("neo-tree.ui.renderer").redraw(state) + else + local existing = state.clipboard[node.id] + if existing and existing.action == "diff" then + state.clipboard[node.id] = nil + diff_Node = nil + require("neo-tree.ui.renderer").redraw(state) + else + state.clipboard[node.id] = { action = "diff", node = node } + diff_Name = state.clipboard[node.id].node.name + diff_Node = tostring(state.clipboard[node.id].node.id) + log.info("Diff source file " .. diff_Name) + require("neo-tree.ui.renderer").redraw(state) + end + end + end, + }, + }, + filesystem = { + hijack_netrw_behavior = "open_default", + window = { + mappings = { + ["O"] = function(state) + local node = state.tree:get_node() + local path = node:get_id() + vim.fn.jobstart({ "xdg-open", path }, { detach = true }) + end, + }, }, }, },