feat: api.marks.bulk.trash (#2391)
* Feature: Bulk trash api * Update docs * Follow documentation syntax * Remove unnecessary refresh * doc spacing --------- Co-authored-by: Alexander Courtis <alex@courtis.org>
This commit is contained in:
parent
94c7c810af
commit
7f7665a17b
@ -156,6 +156,7 @@ Show the mappings: `g?`
|
|||||||
`-` Up |nvim-tree-api.tree.change_root_to_parent()|
|
`-` Up |nvim-tree-api.tree.change_root_to_parent()|
|
||||||
`a` Create |nvim-tree-api.fs.create()|
|
`a` Create |nvim-tree-api.fs.create()|
|
||||||
`bd` Delete Bookmarked |nvim-tree-api.marks.bulk.delete()|
|
`bd` Delete Bookmarked |nvim-tree-api.marks.bulk.delete()|
|
||||||
|
`bt` Trash Bookmarked |nvim-tree-api.marks.bulk.trash()|
|
||||||
`bmv` Move Bookmarked |nvim-tree-api.marks.bulk.move()|
|
`bmv` Move Bookmarked |nvim-tree-api.marks.bulk.move()|
|
||||||
`B` Toggle Filter: No Buffer |nvim-tree-api.tree.toggle_no_buffer_filter()|
|
`B` Toggle Filter: No Buffer |nvim-tree-api.tree.toggle_no_buffer_filter()|
|
||||||
`c` Copy |nvim-tree-api.fs.copy.node()|
|
`c` Copy |nvim-tree-api.fs.copy.node()|
|
||||||
@ -1899,6 +1900,9 @@ marks.clear() *nvim-tree-api.marks.clear()*
|
|||||||
marks.bulk.delete() *nvim-tree-api.marks.bulk.delete()*
|
marks.bulk.delete() *nvim-tree-api.marks.bulk.delete()*
|
||||||
Delete all marked. Optionally prompts.
|
Delete all marked. Optionally prompts.
|
||||||
|
|
||||||
|
marks.bulk.trash() *nvim-tree-api.marks.bulk.trash()*
|
||||||
|
Trash all marked. Optionally prompts.
|
||||||
|
|
||||||
marks.bulk.move() *nvim-tree-api.marks.bulk.move()*
|
marks.bulk.move() *nvim-tree-api.marks.bulk.move()*
|
||||||
Prompts for a directory to move all marked nodes into.
|
Prompts for a directory to move all marked nodes into.
|
||||||
|
|
||||||
@ -2047,6 +2051,7 @@ You are encouraged to copy these to your own |nvim-tree.on_attach| function.
|
|||||||
vim.keymap.set('n', '-', api.tree.change_root_to_parent, opts('Up'))
|
vim.keymap.set('n', '-', api.tree.change_root_to_parent, opts('Up'))
|
||||||
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
|
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
|
||||||
vim.keymap.set('n', 'bd', api.marks.bulk.delete, opts('Delete Bookmarked'))
|
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', 'bmv', api.marks.bulk.move, opts('Move Bookmarked'))
|
||||||
vim.keymap.set('n', 'B', api.tree.toggle_no_buffer_filter, opts('Toggle Filter: No Buffer'))
|
vim.keymap.set('n', 'B', api.tree.toggle_no_buffer_filter, opts('Toggle Filter: No Buffer'))
|
||||||
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
|
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
|
||||||
|
|||||||
@ -24,11 +24,7 @@ local function clear_buffer(absolute_path)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.fn(node)
|
function M.remove(node)
|
||||||
if node.name == ".." then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local binary = M.config.trash.cmd:gsub(" .*$", "")
|
local binary = M.config.trash.cmd:gsub(" .*$", "")
|
||||||
if vim.fn.executable(binary) == 0 then
|
if vim.fn.executable(binary) == 0 then
|
||||||
notify.warn(string.format("trash.cmd '%s' is not an executable.", M.config.trash.cmd))
|
notify.warn(string.format("trash.cmd '%s' is not an executable.", M.config.trash.cmd))
|
||||||
@ -53,32 +49,40 @@ function M.fn(node)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if node.nodes ~= nil and not node.link_to then
|
||||||
|
trash_path(function(_, rc)
|
||||||
|
if rc ~= 0 then
|
||||||
|
notify.warn("trash failed: " .. err_msg .. "; please see :help nvim-tree.trash")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
events._dispatch_folder_removed(node.absolute_path)
|
||||||
|
if not M.config.filesystem_watchers.enable then
|
||||||
|
require("nvim-tree.actions.reloaders.reloaders").reload_explorer()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
events._dispatch_will_remove_file(node.absolute_path)
|
||||||
|
trash_path(function(_, rc)
|
||||||
|
if rc ~= 0 then
|
||||||
|
notify.warn("trash failed: " .. err_msg .. "; please see :help nvim-tree.trash")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
events._dispatch_file_removed(node.absolute_path)
|
||||||
|
clear_buffer(node.absolute_path)
|
||||||
|
if not M.config.filesystem_watchers.enable then
|
||||||
|
require("nvim-tree.actions.reloaders.reloaders").reload_explorer()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.fn(node)
|
||||||
|
if node.name == ".." then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local function do_trash()
|
local function do_trash()
|
||||||
if node.nodes ~= nil and not node.link_to then
|
M.remove(node)
|
||||||
trash_path(function(_, rc)
|
|
||||||
if rc ~= 0 then
|
|
||||||
notify.warn("trash failed: " .. err_msg .. "; please see :help nvim-tree.trash")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
events._dispatch_folder_removed(node.absolute_path)
|
|
||||||
if not M.config.filesystem_watchers.enable then
|
|
||||||
require("nvim-tree.actions.reloaders.reloaders").reload_explorer()
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
else
|
|
||||||
events._dispatch_will_remove_file(node.absolute_path)
|
|
||||||
trash_path(function(_, rc)
|
|
||||||
if rc ~= 0 then
|
|
||||||
notify.warn("trash failed: " .. err_msg .. "; please see :help nvim-tree.trash")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
events._dispatch_file_removed(node.absolute_path)
|
|
||||||
clear_buffer(node.absolute_path)
|
|
||||||
if not M.config.filesystem_watchers.enable then
|
|
||||||
require("nvim-tree.actions.reloaders.reloaders").reload_explorer()
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if M.config.ui.confirm.trash then
|
if M.config.ui.confirm.trash then
|
||||||
|
|||||||
@ -203,6 +203,7 @@ Api.marks.list = wrap(require("nvim-tree.marks").get_marks)
|
|||||||
Api.marks.toggle = wrap_node(require("nvim-tree.marks").toggle_mark)
|
Api.marks.toggle = wrap_node(require("nvim-tree.marks").toggle_mark)
|
||||||
Api.marks.clear = wrap(require("nvim-tree.marks").clear_marks)
|
Api.marks.clear = wrap(require("nvim-tree.marks").clear_marks)
|
||||||
Api.marks.bulk.delete = wrap(require("nvim-tree.marks.bulk-delete").bulk_delete)
|
Api.marks.bulk.delete = wrap(require("nvim-tree.marks.bulk-delete").bulk_delete)
|
||||||
|
Api.marks.bulk.trash = wrap(require("nvim-tree.marks.bulk-trash").bulk_trash)
|
||||||
Api.marks.bulk.move = wrap(require("nvim-tree.marks.bulk-move").bulk_move)
|
Api.marks.bulk.move = wrap(require("nvim-tree.marks.bulk-move").bulk_move)
|
||||||
Api.marks.navigate.next = wrap(require("nvim-tree.marks.navigation").next)
|
Api.marks.navigate.next = wrap(require("nvim-tree.marks.navigation").next)
|
||||||
Api.marks.navigate.prev = wrap(require("nvim-tree.marks.navigation").prev)
|
Api.marks.navigate.prev = wrap(require("nvim-tree.marks.navigation").prev)
|
||||||
|
|||||||
@ -44,6 +44,7 @@ function M.default_on_attach(bufnr)
|
|||||||
vim.keymap.set('n', '-', api.tree.change_root_to_parent, opts('Up'))
|
vim.keymap.set('n', '-', api.tree.change_root_to_parent, opts('Up'))
|
||||||
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
|
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
|
||||||
vim.keymap.set('n', 'bd', api.marks.bulk.delete, opts('Delete Bookmarked'))
|
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', 'bmv', api.marks.bulk.move, opts('Move Bookmarked'))
|
||||||
vim.keymap.set('n', 'B', api.tree.toggle_no_buffer_filter, opts('Toggle Filter: No Buffer'))
|
vim.keymap.set('n', 'B', api.tree.toggle_no_buffer_filter, opts('Toggle Filter: No Buffer'))
|
||||||
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
|
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
|
||||||
|
|||||||
47
lua/nvim-tree/marks/bulk-trash.lua
Normal file
47
lua/nvim-tree/marks/bulk-trash.lua
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
local marks = require "nvim-tree.marks"
|
||||||
|
local utils = require "nvim-tree.utils"
|
||||||
|
local remove_file = require "nvim-tree.actions.fs.trash"
|
||||||
|
local notify = require "nvim-tree.notify"
|
||||||
|
local lib = require "nvim-tree.lib"
|
||||||
|
|
||||||
|
local M = {
|
||||||
|
config = {},
|
||||||
|
}
|
||||||
|
|
||||||
|
--- Delete nodes; each removal will be optionally notified
|
||||||
|
--- @param nodes table
|
||||||
|
local function do_trash(nodes)
|
||||||
|
for _, node in pairs(nodes) do
|
||||||
|
remove_file.remove(node)
|
||||||
|
end
|
||||||
|
|
||||||
|
marks.clear_marks()
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.bulk_trash()
|
||||||
|
local nodes = marks.get_marks()
|
||||||
|
if not nodes or #nodes == 0 then
|
||||||
|
notify.warn "No bookmarks to trash."
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if M.config.ui.confirm.trash then
|
||||||
|
local prompt_select = "Trash bookmarked ?"
|
||||||
|
local prompt_input = prompt_select .. " y/N: "
|
||||||
|
lib.prompt(prompt_input, prompt_select, { "", "y" }, { "No", "Yes" }, function(item_short)
|
||||||
|
utils.clear_prompt()
|
||||||
|
if item_short == "y" then
|
||||||
|
do_trash(nodes)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
do_trash(nodes)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.setup(opts)
|
||||||
|
M.config.ui = opts.ui
|
||||||
|
M.config.filesystem_watchers = opts.filesystem_watchers
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
@ -76,6 +76,7 @@ end
|
|||||||
function M.setup(opts)
|
function M.setup(opts)
|
||||||
vim.fn.sign_define(SIGN_NAME, { text = opts.renderer.icons.glyphs.bookmark, texthl = "NvimTreeBookmark" })
|
vim.fn.sign_define(SIGN_NAME, { text = opts.renderer.icons.glyphs.bookmark, texthl = "NvimTreeBookmark" })
|
||||||
require("nvim-tree.marks.bulk-delete").setup(opts)
|
require("nvim-tree.marks.bulk-delete").setup(opts)
|
||||||
|
require("nvim-tree.marks.bulk-trash").setup(opts)
|
||||||
require("nvim-tree.marks.bulk-move").setup(opts)
|
require("nvim-tree.marks.bulk-move").setup(opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user