mirror of
				https://github.com/NotAShelf/direnv.nvim.git
				synced 2025-10-30 02:57:05 +00:00 
			
		
		
		
	Use temporary file + source, instead of new line splitting
This commit is contained in:
		
					parent
					
						
							
								3e38d855c7
							
						
					
				
			
			
				commit
				
					
						76aa825d0d
					
				
			
		
					 1 changed files with 32 additions and 12 deletions
				
			
		|  | @ -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) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 diniamo
				diniamo