refacto: create actions folder and move some code to it

- move trash.lua into actions
- move system-open from root file to actions
- move copypasta code from fs to actions
- add file_exists in utils
- add rename_loaded_buffers in utils (might need to move that in the
  future).
This commit is contained in:
kiyan
2022-01-21 11:25:49 +01:00
parent 691a1c9699
commit 1248bcec86
7 changed files with 313 additions and 269 deletions

View File

@@ -0,0 +1,68 @@
local uv = vim.loop
local M = {
config = {
is_windows = vim.fn.has('win32') == 1 or vim.fn.has('win32unix') == 1,
is_macos = vim.fn.has('mac') == 1 or vim.fn.has('macunix') == 1,
is_unix = vim.fn.has('unix') == 1,
}
}
function M.fn(node)
if not M.config.system_open.cmd then
require'nvim-tree.utils'.warn("Cannot open file with system application. Unrecognized platform.")
return
end
local process = {
cmd = M.config.system_open.cmd,
args = M.config.system_open.args,
errors = '\n',
stderr = uv.new_pipe(false)
}
table.insert(process.args, node.link_to or node.absolute_path)
process.handle, process.pid = uv.spawn(process.cmd,
{ args = process.args, stdio = { nil, nil, process.stderr }, detached = true },
function(code)
process.stderr:read_stop()
process.stderr:close()
process.handle:close()
if code ~= 0 then
process.errors = process.errors .. string.format('NvimTree system_open: return code %d.', code)
error(process.errors)
end
end
)
table.remove(process.args)
if not process.handle then
error("\n" .. process.pid .. "\nNvimTree system_open: failed to spawn process using '" .. process.cmd .. "'.")
return
end
uv.read_start(process.stderr,
function(err, data)
if err then return end
if data then process.errors = process.errors .. data end
end
)
uv.unref(process.handle)
end
function M.setup(opts)
M.config.system_open = opts or {}
if not M.config.system_open.cmd then
if M.config.is_windows then
M.config.system_open = {
cmd = "cmd",
args = {'/c', 'start', '""'}
}
elseif M.config.is_macos then
M.config.system_open.cmd = 'open'
elseif M.config.is_unix then
M.config.system_open.cmd = 'xdg-open'
end
end
end
return M