From eaa20a6aee7c4df89d80ec8208de63ec2fa4d38a Mon Sep 17 00:00:00 2001 From: Steven Arcangeli Date: Mon, 17 Jul 2023 17:01:36 -0700 Subject: [PATCH] fix: previewed buffers are deleted once hidden (#141) --- lua/oil/init.lua | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/lua/oil/init.lua b/lua/oil/init.lua index 8761b02..e06937d 100644 --- a/lua/oil/init.lua +++ b/lua/oil/init.lua @@ -538,14 +538,26 @@ M.select = function(opts, callback) split = opts.split, keepalt = true, } + local filename = util.escape_filename(normalized_url) + + -- If we're previewing a file that hasn't been opened yet, make sure it gets deleted after we + -- close the window + if opts.preview and not util.parse_url(filename) then + local bufnr = vim.fn.bufadd(filename) + if vim.fn.bufloaded(bufnr) == 0 then + vim.bo[bufnr].bufhidden = "wipe" + vim.b[bufnr].oil_preview_buffer = true + end + end + + local cmd if opts.preview and preview_win then vim.api.nvim_set_current_win(preview_win) - vim.cmd.edit({ args = { util.escape_filename(normalized_url) }, mods = mods }) + cmd = "edit" else if vim.tbl_isempty(mods) then mods = nil end - local cmd if opts.tab then cmd = "tabedit" elseif opts.split then @@ -553,12 +565,12 @@ M.select = function(opts, callback) else cmd = "edit" end - vim.cmd({ - cmd = cmd, - args = { util.escape_filename(normalized_url) }, - mods = mods, - }) end + vim.cmd({ + cmd = cmd, + args = { filename }, + mods = mods, + }) if opts.preview then vim.api.nvim_set_option_value("previewwindow", true, { scope = "local", win = 0 }) vim.w.oil_entry_id = entry.id @@ -908,6 +920,19 @@ M.setup = function(opts) end end, }) + + vim.api.nvim_create_autocmd({ "BufWinEnter", "WinNew", "WinEnter" }, { + desc = "Reset bufhidden when entering a preview buffer", + group = aug, + pattern = "*", + callback = function() + -- If we have entered a "preview" buffer in a non-preview window, reset bufhidden + if vim.b.oil_preview_buffer and not vim.wo.previewwindow then + vim.bo.bufhidden = vim.o.bufhidden + vim.b.oil_preview_buffer = nil + end + end, + }) if not config.silence_scp_warning then vim.api.nvim_create_autocmd("BufNew", { desc = "Warn about scp:// usage",