From fccb2adb1ff65b2dbc907bcf39dedaebaf19e819 Mon Sep 17 00:00:00 2001 From: "RingOfStorms (Joshua Bell)" Date: Sat, 12 Oct 2024 15:21:47 -0500 Subject: [PATCH] make faster shortcut for copying marked files --- lua/plugins/files_nvim_tree.lua | 306 +++++++++++++++++--------------- 1 file changed, 160 insertions(+), 146 deletions(-) diff --git a/lua/plugins/files_nvim_tree.lua b/lua/plugins/files_nvim_tree.lua index 12865c4..ffd91fb 100644 --- a/lua/plugins/files_nvim_tree.lua +++ b/lua/plugins/files_nvim_tree.lua @@ -1,159 +1,173 @@ return { - "nvim-tree/nvim-tree.lua", - lazy = false, - dependencies = { - "nvim-tree/nvim-web-devicons", - }, - opts = function() - return { - sort = { - sorter = "case_sensitive", - }, - view = { - -- width = getWidth(), - float = { - enable = true, - open_win_config = function() - local cols = vim.api.nvim_get_option("columns") - local rows = vim.api.nvim_get_option("lines") - local width = math.floor(cols / 2) - local height = math.floor(rows / 1.2) - return { - relative = "editor", - row = math.floor(rows / 10), - col = math.floor(cols / 4), - width = width, - height = height, - border = "rounded", - } - end, - }, - }, - renderer = { - group_empty = true, - indent_width = 3, - icons = { - glyphs = { - git = { - unstaged = "", - }, - }, - }, - }, - filters = { - dotfiles = false, - git_ignored = false, - exclude = { ".DS_Store" }, - }, - actions = { - open_file = { - quit_on_open = true, - window_picker = { - enable = false, - }, - }, - }, - on_attach = function(bufnr) - -- https://github.com/nvim-tree/nvim-tree.lua/wiki/Recipes#modify-you-on_attach-function-to-have-ability-to-operate-multiple-files-at-once - local api = require("nvim-tree.api") - local opts = function(desc) - return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } - end - -- mark operation - local mark_move_j = function() - api.marks.toggle() - vim.cmd("norm j") - end - local mark_move_k = function() - api.marks.toggle() - vim.cmd("norm k") - end + "nvim-tree/nvim-tree.lua", + lazy = false, + dependencies = { + "nvim-tree/nvim-web-devicons", + }, + opts = function() + return { + sort = { + sorter = "case_sensitive", + }, + view = { + -- width = getWidth(), + float = { + enable = true, + open_win_config = function() + local cols = vim.api.nvim_get_option("columns") + local rows = vim.api.nvim_get_option("lines") + local width = math.floor(cols / 2) + local height = math.floor(rows / 1.2) + return { + relative = "editor", + row = math.floor(rows / 10), + col = math.floor(cols / 4), + width = width, + height = height, + border = "rounded", + } + end, + }, + }, + renderer = { + group_empty = true, + indent_width = 3, + icons = { + glyphs = { + git = { + unstaged = "", + }, + }, + }, + }, + filters = { + dotfiles = false, + git_ignored = false, + exclude = { ".DS_Store" }, + }, + actions = { + open_file = { + quit_on_open = true, + window_picker = { + enable = false, + }, + }, + }, + on_attach = function(bufnr) + -- https://github.com/nvim-tree/nvim-tree.lua/wiki/Recipes#modify-you-on_attach-function-to-have-ability-to-operate-multiple-files-at-once + local api = require("nvim-tree.api") + local opts = function(desc) + return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } + end + -- mark operation + local mark_move_j = function() + api.marks.toggle() + vim.cmd("norm j") + end + local mark_move_k = function() + api.marks.toggle() + vim.cmd("norm k") + end - -- marked files operation - local mark_remove = function() - local marks = api.marks.list() - if #marks == 0 then - table.insert(marks, api.tree.get_node_under_cursor()) - end - for _, node in ipairs(marks) do - api.fs.remove(node) - end - api.marks.clear() - api.tree.reload() - end + -- marked files operation + local mark_remove = function() + local marks = api.marks.list() + if #marks == 0 then + table.insert(marks, api.tree.get_node_under_cursor()) + end + for _, node in ipairs(marks) do + api.fs.remove(node) + end + api.marks.clear() + api.tree.reload() + end - local mark_copy = function() - local marks = api.marks.list() - if #marks == 0 then - table.insert(marks, api.tree.get_node_under_cursor()) - end - for _, node in pairs(marks) do - api.fs.copy.node(node) - end - api.marks.clear() - api.tree.reload() - end + local mark_copy = function() + local marks = api.marks.list() + if #marks == 0 then + table.insert(marks, api.tree.get_node_under_cursor()) + end + for _, node in pairs(marks) do + api.fs.copy.node(node) + end + api.marks.clear() + api.tree.reload() + end - local mark_cut = function() - local marks = api.marks.list() - if #marks == 0 then - table.insert(marks, api.tree.get_node_under_cursor()) - end - for _, node in pairs(marks) do - api.fs.cut(node) - end - api.marks.clear() - api.tree.reload() - end + local mark_cut = function() + local marks = api.marks.list() + if #marks == 0 then + table.insert(marks, api.tree.get_node_under_cursor()) + end + for _, node in pairs(marks) do + api.fs.cut(node) + end + api.marks.clear() + api.tree.reload() + end - local mark_move_to_cursor = function() - local marks = api.marks.list() - if #marks == 0 then - table.insert(marks, api.tree.get_node_under_cursor()) - end - for _, node in pairs(marks) do - api.fs.cut(node) - end - api.marks.clear() - api.fs.paste() - api.tree.reload() - end + local mark_move_to_cursor = function() + local marks = api.marks.list() + if #marks == 0 then + table.insert(marks, api.tree.get_node_under_cursor()) + end + for _, node in pairs(marks) do + api.fs.cut(node) + end + api.marks.clear() + api.fs.paste() + api.tree.reload() + end - vim.keymap.set("n", "J", mark_move_j, opts("Toggle Bookmark Down")) - vim.keymap.set("n", "K", mark_move_k, opts("Toggle Bookmark Up")) + local mark_copy_to_cursor = function() + local marks = api.marks.list() + if #marks == 0 then + table.insert(marks, api.tree.get_node_under_cursor()) + end + for _, node in pairs(marks) do + api.fs.copy.node(node) + end + api.marks.clear() + api.fs.paste() + api.tree.reload() + end - vim.keymap.set("n", "x", mark_cut, opts("Cut File(s)")) - vim.keymap.set("n", "d", mark_remove, opts("Remove File(s)")) - vim.keymap.set("n", "y", mark_copy, opts("Copy File(s)")) + vim.keymap.set("n", "J", mark_move_j, opts("Toggle Bookmark Down")) + vim.keymap.set("n", "K", mark_move_k, opts("Toggle Bookmark Up")) - vim.keymap.set("n", "mv", mark_move_to_cursor, opts("Move Bookmarked")) - vim.keymap.set("n", "M", api.marks.clear, opts("Clear Bookmarks")) + vim.keymap.set("n", "x", mark_cut, opts("Cut File(s)")) + vim.keymap.set("n", "d", mark_remove, opts("Remove File(s)")) + vim.keymap.set("n", "y", mark_copy, opts("Copy File(s)")) - -- https://github.com/nvim-tree/nvim-tree.lua/wiki/Recipes#refactoring-of-on_attach-generated-code - vim.keymap.set("n", "q", api.tree.close, opts("Close")) - vim.keymap.set("n", "", api.tree.close, opts("Close")) - vim.keymap.set("n", "o", api.tree.close, opts("Close")) - vim.keymap.set("n", "", api.node.open.edit, opts("Open")) - vim.keymap.set("n", "l", api.node.open.edit, opts("Open")) - vim.keymap.set("n", "", api.node.open.vertical, opts("Open in vertical split")) - vim.keymap.set("n", "", api.node.open.horizontal, opts("Open in horizontal split")) - vim.keymap.set("n", "h", api.node.navigate.parent_close, opts("Close Directory")) - vim.keymap.set("n", "r", api.fs.rename, opts("Rename")) - vim.keymap.set("n", "a", api.fs.create, opts("Create")) - vim.keymap.set("n", "p", api.fs.paste, opts("Paste")) - vim.keymap.set("n", "R", api.tree.reload, opts("Refresh")) - vim.keymap.set("n", "m", api.marks.toggle, opts("Toggle Bookmark")) + vim.keymap.set("n", "mv", mark_move_to_cursor, opts("Move Bookmarked")) + vim.keymap.set("n", "mc", mark_copy_to_cursor, opts("Copy Bookmarked")) + vim.keymap.set("n", "M", api.marks.clear, opts("Clear Bookmarks")) - vim.keymap.set("n", "c", api.fs.copy.absolute_path, opts("Copy Path to Clipboard")) + -- https://github.com/nvim-tree/nvim-tree.lua/wiki/Recipes#refactoring-of-on_attach-generated-code + vim.keymap.set("n", "q", api.tree.close, opts("Close")) + vim.keymap.set("n", "", api.tree.close, opts("Close")) + vim.keymap.set("n", "o", api.tree.close, opts("Close")) + vim.keymap.set("n", "", api.node.open.edit, opts("Open")) + vim.keymap.set("n", "l", api.node.open.edit, opts("Open")) + vim.keymap.set("n", "", api.node.open.vertical, opts("Open in vertical split")) + vim.keymap.set("n", "", api.node.open.horizontal, opts("Open in horizontal split")) + vim.keymap.set("n", "h", api.node.navigate.parent_close, opts("Close Directory")) + vim.keymap.set("n", "r", api.fs.rename, opts("Rename")) + vim.keymap.set("n", "a", api.fs.create, opts("Create")) + vim.keymap.set("n", "p", api.fs.paste, opts("Paste")) + vim.keymap.set("n", "R", api.tree.reload, opts("Refresh")) + vim.keymap.set("n", "m", api.marks.toggle, opts("Toggle Bookmark")) - vim.keymap.set("n", "h", api.node.navigate.parent_close, opts("Close Directory")) + vim.keymap.set("n", "c", api.fs.copy.absolute_path, opts("Copy Path to Clipboard")) - vim.keymap.set("n", "?", api.tree.toggle_help, opts("Help")) - end, - } - end, - keys = { - { "e", "NvimTreeToggle", desc = "Open file browser" }, - { "o", "NvimTreeFindFile", desc = "Open file browser at current buffer" }, - }, + vim.keymap.set("n", "h", api.node.navigate.parent_close, opts("Close Directory")) + + vim.keymap.set("n", "?", api.tree.toggle_help, opts("Help")) + end, + } + end, + keys = { + { "e", "NvimTreeToggle", desc = "Open file browser" }, + { "o", "NvimTreeFindFile", desc = "Open file browser at current buffer" }, + }, }