diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index fae1f4fd197..09ff827a350 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -374,7 +374,6 @@ Subsequent calls to setup will replace the previous configuration. }, trash = { cmd = "gio trash", - require_confirm = true, }, live_filter = { prefix = "[FILTER]: ", @@ -390,6 +389,12 @@ Subsequent calls to setup will replace the previous configuration. notify = { threshold = vim.log.levels.INFO, }, + ui = { + confirm = { + remove = true, + trash = true, + }, + }, log = { enable = false, truncate = false, @@ -993,10 +998,6 @@ Configuration options for trashing. The default is shipped with glib2 which is a common linux package. Type: `string`, Default: `"gio trash"` - *nvim-tree.trash.require_confirm* - Show a prompt before trashing takes place. - Type: `boolean`, Default: `true` - *nvim-tree.actions* Configuration for various actions. @@ -1146,6 +1147,20 @@ Configuration for notification. `INFO:` information only e.g. file copy path confirmation. `DEBUG:` not used. +*nvim-tree.ui* +General UI configuration. + + *nvim-tree.ui.confirm* + Confirmation prompts. + + *nvim-tree.ui.confirm.remove* + Prompt before removing. + Type: `boolean`, Default: `true` + + *nvim-tree.ui.confirm.trash* (previously `trash.require_confirm`) + Prompt before trashing. + Type: `boolean`, Default: `true` + *nvim-tree.log* Configuration for diagnostic logging. diff --git a/lua/nvim-tree.lua b/lua/nvim-tree.lua index 8c11ee33221..883bc5cc511 100644 --- a/lua/nvim-tree.lua +++ b/lua/nvim-tree.lua @@ -698,7 +698,6 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS }, trash = { cmd = "gio trash", - require_confirm = true, }, live_filter = { prefix = "[FILTER]: ", @@ -714,6 +713,12 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS notify = { threshold = vim.log.levels.INFO, }, + ui = { + confirm = { + remove = true, + trash = true, + }, + }, log = { enable = false, truncate = false, diff --git a/lua/nvim-tree/actions/fs/remove-file.lua b/lua/nvim-tree/actions/fs/remove-file.lua index ff2d4630041..9acf6c516b0 100644 --- a/lua/nvim-tree/actions/fs/remove-file.lua +++ b/lua/nvim-tree/actions/fs/remove-file.lua @@ -73,34 +73,45 @@ function M.fn(node) if node.name == ".." then return end - local prompt_select = "Remove " .. node.name .. " ?" - local prompt_input = prompt_select .. " y/n: " - lib.prompt(prompt_input, prompt_select, { "y", "n" }, { "Yes", "No" }, function(item_short) - utils.clear_prompt() - if item_short == "y" then - if node.nodes ~= nil and not node.link_to then - local success = remove_dir(node.absolute_path) - if not success then - return notify.error("Could not remove " .. node.name) - end - events._dispatch_folder_removed(node.absolute_path) - else - local success = vim.loop.fs_unlink(node.absolute_path) - if not success then - return notify.error("Could not remove " .. node.name) - end - events._dispatch_file_removed(node.absolute_path) - clear_buffer(node.absolute_path) + + local function do_remove() + if node.nodes ~= nil and not node.link_to then + local success = remove_dir(node.absolute_path) + if not success then + return notify.error("Could not remove " .. node.name) end - notify.info(node.absolute_path .. " was properly removed.") - if M.enable_reload then - require("nvim-tree.actions.reloaders.reloaders").reload_explorer() + events._dispatch_folder_removed(node.absolute_path) + else + local success = vim.loop.fs_unlink(node.absolute_path) + if not success then + return notify.error("Could not remove " .. node.name) end + events._dispatch_file_removed(node.absolute_path) + clear_buffer(node.absolute_path) end - end) + notify.info(node.absolute_path .. " was properly removed.") + if M.enable_reload then + require("nvim-tree.actions.reloaders.reloaders").reload_explorer() + end + end + + if M.config.ui.confirm.remove then + local prompt_select = "Remove " .. node.name .. " ?" + local prompt_input = prompt_select .. " y/n: " + lib.prompt(prompt_input, prompt_select, { "y", "n" }, { "Yes", "No" }, function(item_short) + utils.clear_prompt() + if item_short == "y" then + do_remove() + end + end) + else + do_remove() + end end function M.setup(opts) + M.config = {} + M.config.ui = opts.ui or {} M.enable_reload = not opts.filesystem_watchers.enable M.close_window = opts.actions.remove_file.close_window end diff --git a/lua/nvim-tree/actions/fs/trash.lua b/lua/nvim-tree/actions/fs/trash.lua index 76ea2aa4aa7..ea38511a843 100644 --- a/lua/nvim-tree/actions/fs/trash.lua +++ b/lua/nvim-tree/actions/fs/trash.lua @@ -32,8 +32,8 @@ function M.fn(node) if M.config.trash.cmd == nil then M.config.trash.cmd = "trash" end - if M.config.trash.require_confirm == nil then - M.config.trash.require_confirm = true + if M.config.ui.confirm.trash == nil then + M.config.ui.confirm.trash = true end else notify.warn "Trash is currently a UNIX only feature!" @@ -87,7 +87,7 @@ function M.fn(node) end end - if M.config.trash.require_confirm then + if M.config.ui.confirm.trash then local prompt_select = "Trash " .. node.name .. " ?" local prompt_input = prompt_select .. " y/n: " lib.prompt(prompt_input, prompt_select, { "y", "n" }, { "Yes", "No" }, function(item_short) @@ -103,6 +103,7 @@ end function M.setup(opts) M.config = {} + M.config.ui = opts.ui or {} M.config.trash = opts.trash or {} M.enable_reload = not opts.filesystem_watchers.enable end diff --git a/lua/nvim-tree/legacy.lua b/lua/nvim-tree/legacy.lua index 0bddb6a2f0c..2b0eee06178 100644 --- a/lua/nvim-tree/legacy.lua +++ b/lua/nvim-tree/legacy.lua @@ -27,6 +27,9 @@ local function refactored(opts) -- 2023/01/01 utils.move_missing_val(opts, "update_focused_file", "debounce_delay", opts, "view", "debounce_delay", true) + + -- 2023/01/08 + utils.move_missing_val(opts, "trash", "require_confirm", opts, "ui.confirm", "trash", true) end local function removed(opts)