feat: config option for trashing deleted files (#99)

This commit is contained in:
Steven Arcangeli 2023-05-06 21:07:01 -07:00
parent 339ade9dc3
commit 496d60fcff
3 changed files with 53 additions and 1 deletions

View file

@ -3,6 +3,7 @@ local columns = require("oil.columns")
local config = require("oil.config")
local fs = require("oil.fs")
local permissions = require("oil.adapters.files.permissions")
local trash = require("oil.adapters.files.trash")
local util = require("oil.util")
local FIELD = require("oil.constants").FIELD
local M = {}
@ -384,7 +385,11 @@ M.perform_action = function(action, cb)
elseif action.type == "delete" then
local _, path = util.parse_url(action.url)
path = fs.posix_to_os_path(path)
fs.recursive_delete(action.entry_type, path, cb)
if config.delete_to_trash then
trash.recursive_delete(path, cb)
else
fs.recursive_delete(action.entry_type, path, cb)
end
elseif action.type == "move" then
local dest_adapter = config.get_adapter_by_scheme(action.dest_url)
if dest_adapter == M then

View file

@ -0,0 +1,37 @@
local M = {}
M.recursive_delete = function(path, cb)
local stdout = {}
local stderr = {}
local jid = vim.fn.jobstart({ "trash-put", path }, {
stdout_buffered = true,
stderr_buffered = true,
on_stdout = function(j, output)
stdout = output
end,
on_stderr = function(j, output)
stderr = output
end,
on_exit = function(j, exit_code)
if exit_code == 0 then
cb()
else
cb(
string.format(
"Error moving '%s' to trash:\n stdout: %s\n stderr: %s",
path,
table.concat(stdout, "\n "),
table.concat(stderr, "\n ")
)
)
end
end,
})
if jid == 0 then
cb(string.format("Passed invalid argument '%s' to 'trash-put'", path))
elseif jid == -1 then
cb("'trash-put' is not executable")
end
end
return M