local state = require "state" local function natural_cmp(_left, _right) local left = _left.name:lower() local right = _right.name:lower() if left == right then return false end local is_l_dir = _left.type ~= "directory" local is_r_dir = _right.type ~= "directory" if ((is_l_dir or is_r_dir) and not (is_l_dir and is_r_dir)) then return is_r_dir end for i = 1, math.max(string.len(left), string.len(right)), 1 do local l = string.sub(left, i, -1) local r = string.sub(right, i, -1) if type(tonumber(string.sub(l, 1, 1))) == "number" and type(tonumber(string.sub(r, 1, 1))) == "number" then local l_number = tonumber(string.match(l, "^[0-9]+")) local r_number = tonumber(string.match(r, "^[0-9]+")) if l_number ~= r_number then return l_number < r_number end elseif string.sub(l, 1, 1) ~= string.sub(r, 1, 1) then return l < r end end end return { "nvim-tree/nvim-tree.lua", opts = { sort_by = function (nodes) table.sort(nodes, natural_cmp) end, view = { width = 30, }, renderer = { root_folder_label = function() return ".." end, indent_markers = { enable = true, }, icons = { show = { folder_arrow = false, }, glyphs = { git = { unstaged = "-", staged = "+", unmerged = "", renamed = "󰏪", untracked = "", deleted = "󰆴", ignored = "", }, }, }, }, filters = { git_ignored = false, }, }, config = function(_, opts) local api = require "nvim-tree.api" local Event = api.events.Event api.events.subscribe(Event.Ready, function() state.nvim_tree_root = api.tree.get_nodes().absolute_path end) api.events.subscribe(Event.TreeRendered, function() state.nvim_tree_root = api.tree.get_nodes().absolute_path end) require("nvim-tree").setup(vim.tbl_extend("force", opts, { -- on_attach = function () -- local function opts(desc) -- return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } -- end -- -- local function edit_or_open() -- local node = api.tree.get_node_under_cursor() -- -- if node.nodes ~= nil then -- -- expand or collapse folder -- api.node.open.edit() -- else -- -- open file -- api.node.open.edit() -- -- Close the tree if file was opened -- api.tree.close() -- end -- end -- -- -- open as vsplit on current node -- local function vsplit_preview() -- local node = api.tree.get_node_under_cursor() -- -- if node.nodes ~= nil then -- -- expand or collapse folder -- api.node.open.edit() -- else -- -- open file as vsplit -- api.node.open.vertical() -- end -- -- -- Finally refocus on tree if it was lost -- api.tree.focus() -- end -- -- vim.keymap.set("n", "l", edit_or_open, opts("Edit Or Open")) -- vim.keymap.set("n", "h", api.tree.close, opts("Close")) -- end -- })) end, dependencies = { "nvim-tree/nvim-web-devicons", }, keys = { { "e", "NvimTreeToggle", desc = "Toggle nvim-tree" }, }, }