From f535c1057c8d7ce2865bfff1881cc99aa726a044 Mon Sep 17 00:00:00 2001 From: Steven Arcangeli Date: Tue, 23 May 2023 22:32:14 -0700 Subject: [PATCH] feat: support custom trash commands (#110) --- README.md | 4 +++- doc/oil.txt | 4 +++- lua/oil/adapters/files/trash.lua | 8 +++++--- lua/oil/config.lua | 22 +++++++++++++++------- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index fe98969..45e196e 100644 --- a/README.md +++ b/README.md @@ -153,8 +153,10 @@ require("oil").setup({ restore_win_options = true, -- Skip the confirmation popup for simple operations skip_confirm_for_simple_edits = false, - -- Deleted files will be removed with the `trash-put` command. + -- Deleted files will be removed with the trash_command (below). delete_to_trash = false, + -- Change this to customize the command used when deleting to trash + trash_command = "trash-put", -- Selecting a new/moved/renamed file or directory will prompt you to save changes first prompt_save_on_select_new_entry = true, -- Keymaps in oil buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap diff --git a/doc/oil.txt b/doc/oil.txt index 80de2a5..67ac793 100644 --- a/doc/oil.txt +++ b/doc/oil.txt @@ -44,8 +44,10 @@ OPTIONS *oil-option restore_win_options = true, -- Skip the confirmation popup for simple operations skip_confirm_for_simple_edits = false, - -- Deleted files will be removed with the `trash-put` command. + -- Deleted files will be removed with the trash_command (below). delete_to_trash = false, + -- Change this to customize the command used when deleting to trash + trash_command = "trash-put", -- Selecting a new/moved/renamed file or directory will prompt you to save changes first prompt_save_on_select_new_entry = true, -- Keymaps in oil buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap diff --git a/lua/oil/adapters/files/trash.lua b/lua/oil/adapters/files/trash.lua index 6051832..37769f7 100644 --- a/lua/oil/adapters/files/trash.lua +++ b/lua/oil/adapters/files/trash.lua @@ -1,9 +1,11 @@ +local config = require("oil.config") local M = {} M.recursive_delete = function(path, cb) local stdout = {} local stderr = {} - local jid = vim.fn.jobstart({ "trash-put", path }, { + local cmd = vim.list_extend(vim.split(config.trash_command, "%s+"), { path }) + local jid = vim.fn.jobstart(cmd, { stdout_buffered = true, stderr_buffered = true, on_stdout = function(j, output) @@ -28,9 +30,9 @@ M.recursive_delete = function(path, cb) end, }) if jid == 0 then - cb(string.format("Passed invalid argument '%s' to 'trash-put'", path)) + cb(string.format("Passed invalid argument '%s' to '%s'", path, config.trash_command)) elseif jid == -1 then - cb("'trash-put' is not executable") + cb(string.format("'%s' is not executable", config.trash_command)) end end diff --git a/lua/oil/config.lua b/lua/oil/config.lua index f119152..1b03875 100644 --- a/lua/oil/config.lua +++ b/lua/oil/config.lua @@ -29,8 +29,10 @@ local default_config = { restore_win_options = true, -- Skip the confirmation popup for simple operations skip_confirm_for_simple_edits = false, - -- Deleted files will be removed with the `trash-put` command. + -- Deleted files will be removed with the trash_command (below). delete_to_trash = false, + -- Change this to customize the command used when deleting to trash + trash_command = "trash-put", -- Selecting a new/moved/renamed file or directory will prompt you to save changes first prompt_save_on_select_new_entry = true, -- Keymaps in oil buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap @@ -135,12 +137,18 @@ M.setup = function(opts) new_conf.keymaps = opts.keymaps or {} end - if new_conf.delete_to_trash and vim.fn.executable("trash-put") == 0 then - vim.notify( - "oil.nvim: delete_to_trash is true, but trash-put executable not found.\nDeleted files will be permanently removed.", - vim.log.levels.WARN - ) - new_conf.delete_to_trash = false + if new_conf.delete_to_trash then + local trash_bin = vim.split(new_conf.trash_command, " ")[1] + if vim.fn.executable(trash_bin) == 0 then + vim.notify( + string.format( + "oil.nvim: delete_to_trash is true, but '%s' executable not found.\nDeleted files will be permanently removed.", + new_conf.trash_command + ), + vim.log.levels.WARN + ) + new_conf.delete_to_trash = false + end end for k, v in pairs(new_conf) do