From 78ab7ca1073731ebdf82efa474202defa028d5a4 Mon Sep 17 00:00:00 2001 From: Gustavo Sampaio Date: Sat, 21 Dec 2024 01:15:47 -0300 Subject: [PATCH] fix: don't take over the preview window until it's opened for oil (#532) --- lua/oil/init.lua | 4 +++- lua/oil/util.lua | 11 +++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lua/oil/init.lua b/lua/oil/init.lua index 72d5538..275c97d 100644 --- a/lua/oil/init.lua +++ b/lua/oil/init.lua @@ -454,7 +454,7 @@ M.open_preview = function(opts, callback) end end - local preview_win = util.get_preview_win() + local preview_win = util.get_preview_win({ include_not_owned = true }) local prev_win = vim.api.nvim_get_current_win() local bufnr = vim.api.nvim_get_current_buf() @@ -501,6 +501,7 @@ M.open_preview = function(opts, callback) preview_win = vim.api.nvim_open_win(bufnr, true, win_opts) vim.api.nvim_set_option_value("previewwindow", true, { scope = "local", win = preview_win }) + vim.api.nvim_win_set_var(preview_win, "oil_preview", true) vim.api.nvim_set_current_win(prev_win) elseif vim.fn.has("nvim-0.9") == 1 then vim.api.nvim_win_set_config(preview_win, { title = entry_title }) @@ -568,6 +569,7 @@ M.open_preview = function(opts, callback) end vim.api.nvim_set_option_value("previewwindow", true, { scope = "local", win = 0 }) + vim.api.nvim_win_set_var(0, "oil_preview", true) for k, v in pairs(config.preview_win.win_options) do vim.api.nvim_set_option_value(k, v, { scope = "local", win = preview_win }) end diff --git a/lua/oil/util.lua b/lua/oil/util.lua index 6dc85a8..a86981a 100644 --- a/lua/oil/util.lua +++ b/lua/oil/util.lua @@ -668,10 +668,17 @@ M.hack_around_termopen_autocmd = function(prev_mode) end, 10) end +---@param opts? {include_not_owned?: boolean} ---@return nil|integer -M.get_preview_win = function() +M.get_preview_win = function(opts) + opts = opts or {} + for _, winid in ipairs(vim.api.nvim_tabpage_list_wins(0)) do - if vim.api.nvim_win_is_valid(winid) and vim.wo[winid].previewwindow then + if + vim.api.nvim_win_is_valid(winid) + and vim.wo[winid].previewwindow + and (opts.include_not_owned or vim.w[winid]["oil_preview"]) + then return winid end end