From 228fad11393322537d9662c0347f75549a3d6c0a Mon Sep 17 00:00:00 2001 From: Steven Arcangeli Date: Tue, 7 May 2024 16:55:13 -0700 Subject: [PATCH] fix: attach_mode="global" never allows multiple windows to open (#369) There was an edge case with "ignored" window types that would cause `:AerialOpen` in an ignored window to potentially open a second aerial win. --- lua/aerial/util.lua | 11 ++++++++++- lua/aerial/window.lua | 15 +++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/lua/aerial/util.lua b/lua/aerial/util.lua index 14af9e2..e117850 100644 --- a/lua/aerial/util.lua +++ b/lua/aerial/util.lua @@ -115,7 +115,16 @@ end ---@param winid? integer ---@return integer? M.get_aerial_win = function(winid) - return M.get_winid_from_var(winid or 0, "aerial_win") + local aerial_win = M.get_winid_from_var(winid or 0, "aerial_win") + if not aerial_win and config.attach_mode == "global" then + for _, tab_win in ipairs(vim.api.nvim_tabpage_list_wins(0)) do + if M.is_aerial_win(tab_win) then + aerial_win = tab_win + break + end + end + end + return aerial_win end ---@param winid? integer diff --git a/lua/aerial/window.lua b/lua/aerial/window.lua index 8708f11..dc5ddb5 100644 --- a/lua/aerial/window.lua +++ b/lua/aerial/window.lua @@ -230,15 +230,6 @@ M.open_aerial_in_win = function(src_bufnr, src_winid, aer_winid) end end ----@param bufnr? integer ----@return integer|nil -local function get_aerial_win_for_buf(bufnr) - local aer_bufnr = util.get_aerial_buffer(bufnr) - if aer_bufnr then - return util.buf_first_win_in_tabpage(aer_bufnr) - end -end - ---@param opts? {bufnr?: integer, winid?: integer} ---@return boolean M.is_open = function(opts) @@ -248,7 +239,11 @@ M.is_open = function(opts) if opts.winid then return util.get_aerial_win(opts.winid) ~= nil else - return get_aerial_win_for_buf(opts.bufnr) ~= nil + local aer_bufnr = util.get_aerial_buffer(opts.bufnr) + if aer_bufnr then + return util.buf_first_win_in_tabpage(aer_bufnr) ~= nil + end + return false end end