Use temporary file + source, instead of new line splitting

This commit is contained in:
diniamo 2024-11-09 15:05:43 +01:00
parent 3e38d855c7
commit 76aa825d0d

View file

@ -128,16 +128,36 @@ M._init = function(path)
end)
local cwd = vim.fs.dirname(path)
local temppath = vim.fn.tempname()
local tempfile = io.open(temppath, "w")
if not tempfile then
vim.notify("Couldn't create temporary file", vim.log.levels.ERROR)
return
end
local write_output = function(err, data)
if data then
tempfile:write(data)
end
end
local on_exit = function(obj)
vim.schedule(function()
vim.fn.execute(vim.fn.split(obj.stdout, "\n"))
if obj.code ~= 0 then
vim.notify("Direnv exited with an error", vim.log.levels.ERROR)
else
vim.cmd.source(temppath)
end
tempfile:close()
os.remove(temppath)
end)
end
vim.system(
{ "direnv", "export", "vim" },
{ text = true, cwd = cwd },
{ cwd = cwd, stdout = write_output },
on_exit
)
end
@ -148,17 +168,17 @@ M.check_direnv = function()
return
end
-- Allowed
if status == 0 then
return M._init(path)
end
-- Blocked
if status == 2 then
return
end
vim.schedule(function()
-- Allowed
if status == 0 then
return M._init(path)
end
-- Blocked
if status == 2 then
return
end
local choice =
vim.fn.confirm(path .. " is blocked.", "&Allow\n&Block\n&Ignore", 3)