diff --git a/lua/fzf-lua/libuv.lua b/lua/fzf-lua/libuv.lua index bdc9b61..e6cdedd 100644 --- a/lua/fzf-lua/libuv.lua +++ b/lua/fzf-lua/libuv.lua @@ -17,6 +17,17 @@ if not vim.g.fzf_lua_directory then -- since all files are going to be loaded locally local _require = require require = function(s) return _require(s:gsub("^fzf%-lua%.", "")) end + + -- due to 'os.exit' neovim doesn't delete the temporary + -- directory, save it so we can delete prior to exit (#329) + -- NOTE: opted to delete the temp dir at the start due to: + -- (1) spawn_stdio doesn't need a temp directory + -- (2) avoid dangling temp dirs on process kill (i.e. live_grep) + local tmpdir = vim.fn.fnamemodify(vim.fn.tempname(), ':h') + if tmpdir and #tmpdir>0 then + vim.fn.delete(tmpdir, "rf") + -- io.stdout:write("[DEBUG]: "..tmpdir.."\n") + end end -- save to upvalue for performance reasons @@ -306,13 +317,7 @@ M.spawn_stdio = function(opts, fn_transform, fn_preprocess) local stderr, stdout = nil, nil - -- due to 'os.exit' neovim doesn't delete the temporary - -- directory, save it so we can delete prior to exit (#329) - local tmpdir = vim.fn.fnamemodify(vim.fn.tempname(), ':h') - local exiting = nil - local function stderr_write(msg) - if exiting then return end -- prioritize writing errors to stderr if stderr then stderr:write(msg) else io.stderr:write(msg) end @@ -320,21 +325,7 @@ M.spawn_stdio = function(opts, fn_transform, fn_preprocess) local function exit(exit_code, msg) if msg then stderr_write(msg) end - -- signal we're exiting so we stop displaying errors - -- otherwise we get multiple errors when we ctrl-c - -- due to the exit being deffered by 'vim.defer_fn' - exiting = true - -- we can't call delete directly, it will fail with error: - -- E5560: vimL function must not be called in a lua loop callback - -- so we defer both 'delete' and 'os.exit' so delete happens first - if tmpdir then - vim.defer_fn(function() - vim.fn.delete(tmpdir, "rf") - end, 0) - end - vim.defer_fn(function() - os.exit(exit_code) - end, 0) + os.exit(exit_code) end local function pipe_open(pipename)