feat(trash): add synchronized trash support for windows (#2335)

* feat(trash): support 'trash' on Windows

* feat(trash): need sync wait on Windows to avoid switch to other app from nvim process

* doc: remove 'Only available for UNIX'

* doc(trash): highlight 'Trash' on Windows is syncrhonized

* doc(trash): highlight 'trash' on Windows is synchronized

* doc(trash): remove dot

* fix(trash): check for unix and windows

* fix(trash): comment

---------

Co-authored-by: Alexander Courtis <alex@courtis.org>
This commit is contained in:
linrongbin16
2023-07-29 15:34:47 +08:00
committed by GitHub
parent c1466f991a
commit 75c05742bc
2 changed files with 8 additions and 5 deletions

View File

@@ -1148,7 +1148,6 @@ Configuration options for trashing.
*nvim-tree.trash.cmd* *nvim-tree.trash.cmd*
The command used to trash items (must be installed on your system). The command used to trash items (must be installed on your system).
The default is shipped with glib2 which is a common linux package. The default is shipped with glib2 which is a common linux package.
Only available for UNIX.
Type: `string`, Default: `"gio trash"` Type: `string`, Default: `"gio trash"`
*nvim-tree.actions* *nvim-tree.actions*
@@ -2293,7 +2292,7 @@ macOS
system. system.
Windows WSL and PowerShell Windows WSL and PowerShell
- Trash is unavailable - Trash is synchronized
- Executable file detection is disabled as this is non-performant and can - Executable file detection is disabled as this is non-performant and can
freeze nvim freeze nvim
- Some filesystem watcher error related to permissions will not be reported - Some filesystem watcher error related to permissions will not be reported

View File

@@ -30,7 +30,7 @@ function M.fn(node)
end end
-- configs -- configs
if utils.is_unix then if utils.is_unix or utils.is_windows then
if M.config.trash.cmd == nil then if M.config.trash.cmd == nil then
M.config.trash.cmd = "trash" M.config.trash.cmd = "trash"
end end
@@ -55,11 +55,15 @@ function M.fn(node)
-- trashes a path (file or folder) -- trashes a path (file or folder)
local function trash_path(on_exit) local function trash_path(on_exit)
vim.fn.jobstart(M.config.trash.cmd .. ' "' .. node.absolute_path .. '"', { local need_sync_wait = utils.is_windows
detach = true, local job = vim.fn.jobstart(M.config.trash.cmd .. ' "' .. node.absolute_path .. '"', {
detach = not need_sync_wait,
on_exit = on_exit, on_exit = on_exit,
on_stderr = on_stderr, on_stderr = on_stderr,
}) })
if need_sync_wait then
vim.fn.jobwait { job }
end
end end
local function do_trash() local function do_trash()