mirror of
https://github.com/nvim-tree/nvim-tree.lua.git
synced 2026-07-28 15:59:44 +05:30
* feat: add copy absolute path with protocol into public api * feat: add helper get_basename into node * feat: add gby keymap, and allow visual mode for copy.basename|absolute_path * feat(clipboard): add opts for adding protocol in reg operations * feat(api): allow visual operation in absolute_path* * feat: add paste with protocol to keymap+api * feat: add paste with protocol to clipboard * feat: add configurable clipboard protocol * fix: filter descendant nodes on copy_absolute_path_with_protocol * refactor: change clip protocol keymaps to bgy and bgp * wip * fix(clipboad): correctly show the number of copied nodes on bgy * chore: remove bgy, bgp and add gp + gx * chore: update api/fs.lua and api impl.lua to match new keymaps * fix: correctly pass the function to new keymaps * chore: remove use_protocol and use use_register + cut options * chore: update docs * chore: move node:get_basename to cliboard_ * chore(clipboard): remove vim.cmd workaround in favor of vim.fn.setreg * chore: use newline as separator instead of comma * refactor(clipboard): simplify copying node attribute and allow all to work in visual mode * refactor(keymap): remove gx, use gp to move * feat(clipboard): always copy/cut to register and make `p` pick local data or register data * refactor(docs): update api docs and rename paste_while_cutting to move * fix: correctly format keymaps * chore: regenerate docs * fix: remove unused apis * chore: copy clipboard.data to register on copy/cut * chore: revert copy_node_attribute * refactor: remove visual mode from copy.basename|filename|path * chore: update docs * chore: add fs.move api and update docs * chore: destroy dummy nodes and prevent empty paths nodes parsing * fix: _meta/api/fs.lua and docs * fix(clipboard): destroy dummy nodes from register on paste * fix(clipboard): correctly check for local paste operation
124 lines
7.7 KiB
Lua
124 lines
7.7 KiB
Lua
local M = {}
|
|
|
|
local config = require("nvim-tree.config")
|
|
|
|
---Execute the user or default on attach
|
|
---@see nvim_tree.config.on_attach
|
|
---@param bufnr integer
|
|
function M.on_attach(bufnr)
|
|
if type(config.g.on_attach) == "function" then
|
|
config.g.on_attach(bufnr)
|
|
else
|
|
M.on_attach_default(bufnr)
|
|
end
|
|
end
|
|
|
|
--- Apply mappings to a scratch buffer and return buffer local mappings
|
|
---@param fn fun(bufnr: integer) on_attach or on_attach_default
|
|
---@return table as per vim.api.nvim_buf_get_keymap
|
|
local function generate_keymap(fn)
|
|
-- create an unlisted scratch buffer
|
|
local scratch_bufnr = vim.api.nvim_create_buf(false, true)
|
|
|
|
-- apply mappings
|
|
fn(scratch_bufnr)
|
|
|
|
-- retrieve all
|
|
local keymap = vim.api.nvim_buf_get_keymap(scratch_bufnr, "")
|
|
|
|
-- delete the scratch buffer
|
|
vim.api.nvim_buf_delete(scratch_bufnr, { force = true })
|
|
|
|
return keymap
|
|
end
|
|
|
|
---@return table
|
|
function M.get_keymap()
|
|
return generate_keymap(M.on_attach)
|
|
end
|
|
|
|
---@return table
|
|
function M.get_keymap_default()
|
|
return generate_keymap(M.on_attach_default)
|
|
end
|
|
|
|
---@param bufnr integer
|
|
function M.on_attach_default(bufnr)
|
|
local api = require("nvim-tree.api")
|
|
|
|
local function opts(desc)
|
|
return {
|
|
desc = "nvim-tree: " .. desc,
|
|
buffer = bufnr,
|
|
noremap = true,
|
|
silent = true,
|
|
nowait = true,
|
|
}
|
|
end
|
|
|
|
-- BEGIN_ON_ATTACH_DEFAULT
|
|
vim.keymap.set("n", "<C-]>", api.tree.change_root_to_node, opts("CD"))
|
|
vim.keymap.set("n", "<C-e>", api.node.open.replace_tree_buffer, opts("Open: In Place"))
|
|
vim.keymap.set("n", "<C-k>", api.node.show_info_popup, opts("Info"))
|
|
vim.keymap.set("n", "<C-r>", api.fs.rename_sub, opts("Rename: Omit Filename"))
|
|
vim.keymap.set("n", "<C-t>", api.node.open.tab, opts("Open: New Tab"))
|
|
vim.keymap.set("n", "<C-v>", api.node.open.vertical, opts("Open: Vertical Split"))
|
|
vim.keymap.set("n", "<C-x>", api.node.open.horizontal, opts("Open: Horizontal Split"))
|
|
vim.keymap.set("n", "<BS>", api.node.navigate.parent_close, opts("Close Directory"))
|
|
vim.keymap.set("n", "<CR>", api.node.open.edit, opts("Open"))
|
|
vim.keymap.set({ "n", "x" }, "<Del>", api.fs.remove, opts("Delete"))
|
|
vim.keymap.set("n", "<Tab>", api.node.open.preview, opts("Open Preview"))
|
|
vim.keymap.set("n", ">", api.node.navigate.sibling.next, opts("Next Sibling"))
|
|
vim.keymap.set("n", "<", api.node.navigate.sibling.prev, opts("Previous Sibling"))
|
|
vim.keymap.set("n", ".", api.node.run.cmd, opts("Run Command"))
|
|
vim.keymap.set("n", "-", api.tree.change_root_to_parent, opts("Up"))
|
|
vim.keymap.set("n", "a", api.fs.create, opts("Create File Or Directory"))
|
|
vim.keymap.set("n", "bd", api.marks.bulk.delete, opts("Delete Bookmarked"))
|
|
vim.keymap.set("n", "bt", api.marks.bulk.trash, opts("Trash Bookmarked"))
|
|
vim.keymap.set("n", "bmv", api.marks.bulk.move, opts("Move Bookmarked"))
|
|
vim.keymap.set("n", "B", api.filter.no_buffer.toggle, opts("Toggle Filter: No Buffer"))
|
|
vim.keymap.set({ "n", "x" }, "c", api.fs.copy.node, opts("Copy"))
|
|
vim.keymap.set("n", "C", api.filter.git.clean.toggle, opts("Toggle Filter: Git Clean"))
|
|
vim.keymap.set("n", "[c", api.node.navigate.git.prev, opts("Prev Git"))
|
|
vim.keymap.set("n", "]c", api.node.navigate.git.next, opts("Next Git"))
|
|
vim.keymap.set({ "n", "x" }, "d", api.fs.remove, opts("Delete"))
|
|
vim.keymap.set({ "n", "x" }, "D", api.fs.trash, opts("Trash"))
|
|
vim.keymap.set("n", "E", api.tree.expand_all, opts("Expand All"))
|
|
vim.keymap.set("n", "e", api.fs.rename_basename, opts("Rename: Basename"))
|
|
vim.keymap.set("n", "]e", api.node.navigate.diagnostics.next, opts("Next Diagnostic"))
|
|
vim.keymap.set("n", "[e", api.node.navigate.diagnostics.prev, opts("Prev Diagnostic"))
|
|
vim.keymap.set("n", "F", api.filter.live.clear, opts("Live Filter: Clear"))
|
|
vim.keymap.set("n", "f", api.filter.live.start, opts("Live Filter: Start"))
|
|
vim.keymap.set("n", "g?", api.tree.toggle_help, opts("Help"))
|
|
vim.keymap.set({ "n", "x" }, "gy", api.fs.copy.absolute_path, opts("Copy Absolute Path"))
|
|
vim.keymap.set("n", "ge", api.fs.copy.basename, opts("Copy Basename"))
|
|
vim.keymap.set("n", "H", api.filter.dotfiles.toggle, opts("Toggle Filter: Dotfiles"))
|
|
vim.keymap.set("n", "I", api.filter.git.ignored.toggle, opts("Toggle Filter: Git Ignored"))
|
|
vim.keymap.set("n", "J", api.node.navigate.sibling.last, opts("Last Sibling"))
|
|
vim.keymap.set("n", "K", api.node.navigate.sibling.first, opts("First Sibling"))
|
|
vim.keymap.set("n", "L", api.node.open.toggle_group_empty, opts("Toggle Group Empty"))
|
|
vim.keymap.set("n", "M", api.filter.no_bookmark.toggle, opts("Toggle Filter: No Bookmark"))
|
|
vim.keymap.set({ "n", "x" }, "m", api.marks.toggle, opts("Toggle Bookmark"))
|
|
vim.keymap.set("n", "o", api.node.open.edit, opts("Open"))
|
|
vim.keymap.set("n", "O", api.node.open.no_window_picker, opts("Open: No Window Picker"))
|
|
vim.keymap.set("n", "p", api.fs.paste, opts("Paste"))
|
|
vim.keymap.set("n", "gp", api.fs.move, opts("Move"))
|
|
vim.keymap.set("n", "P", api.node.navigate.parent, opts("Parent Directory"))
|
|
vim.keymap.set("n", "q", api.tree.close, opts("Close"))
|
|
vim.keymap.set("n", "r", api.fs.rename, opts("Rename"))
|
|
vim.keymap.set("n", "R", api.tree.reload, opts("Refresh"))
|
|
vim.keymap.set("n", "s", api.node.run.system, opts("Run System"))
|
|
vim.keymap.set("n", "S", api.tree.search_node, opts("Search"))
|
|
vim.keymap.set("n", "u", api.fs.rename_full, opts("Rename: Full Path"))
|
|
vim.keymap.set("n", "U", api.filter.custom.toggle, opts("Toggle Filter: Custom"))
|
|
vim.keymap.set("n", "W", api.tree.collapse_all, opts("Collapse All"))
|
|
vim.keymap.set({ "n", "x" }, "x", api.fs.cut, opts("Cut"))
|
|
vim.keymap.set("n", "y", api.fs.copy.filename, opts("Copy Name"))
|
|
vim.keymap.set("n", "Y", api.fs.copy.relative_path, opts("Copy Relative Path"))
|
|
vim.keymap.set("n", "<2-LeftMouse>", api.node.open.edit, opts("Open"))
|
|
vim.keymap.set("n", "<2-RightMouse>", api.tree.change_root_to_node, opts("CD"))
|
|
-- END_ON_ATTACH_DEFAULT
|
|
end
|
|
|
|
return M
|