diff --git a/lua/opencode/ui/autocmds.lua b/lua/opencode/ui/autocmds.lua index bcc7ae35..9c32bdb7 100644 --- a/lua/opencode/ui/autocmds.lua +++ b/lua/opencode/ui/autocmds.lua @@ -97,31 +97,29 @@ function M.setup_autocmds(windows) end, }) - if require('opencode.config').ui.position == 'current' then - vim.api.nvim_create_autocmd('BufEnter', { - group = group, - callback = function() - local current_win = vim.api.nvim_get_current_win() - local current_buf = vim.api.nvim_get_current_buf() - - if current_win ~= windows.output_win and current_win ~= windows.input_win then - return - end + vim.api.nvim_create_autocmd('BufEnter', { + group = group, + callback = function() + local current_win = vim.api.nvim_get_current_win() + local current_buf = vim.api.nvim_get_current_buf() - local is_opencode_buf = ( - current_buf == windows.output_buf - or current_buf == windows.input_buf - or (windows.footer_buf and current_buf == windows.footer_buf) - ) + if current_win ~= windows.output_win and current_win ~= windows.input_win then + return + end - if not is_opencode_buf then - vim.schedule(function() - require('opencode.ui.ui').teardown_visible_windows(windows) - end) - end - end, - }) - end + local is_opencode_buf = ( + current_buf == windows.output_buf + or current_buf == windows.input_buf + or (windows.footer_buf and current_buf == windows.footer_buf) + ) + + if not is_opencode_buf then + vim.schedule(function() + require('opencode.ui.ui').teardown_visible_windows(windows) + end) + end + end, + }) end ---@param windows OpencodeWindowState? diff --git a/lua/opencode/ui/input_window.lua b/lua/opencode/ui/input_window.lua index fc159663..cec511a4 100644 --- a/lua/opencode/ui/input_window.lua +++ b/lua/opencode/ui/input_window.lua @@ -273,9 +273,6 @@ function M.setup(windows) window_options.set_buffer_option('buflisted', false, windows.input_buf) window_options.set_buffer_option('swapfile', false, windows.input_buf) - if windows.position ~= 'current' then - window_options.set_window_option('winfixbuf', true, windows.input_win) - end window_options.set_window_option('winfixwidth', true, windows.input_win) M.update_dimensions(windows) diff --git a/lua/opencode/ui/output_window.lua b/lua/opencode/ui/output_window.lua index 8833584d..16ba4f4e 100644 --- a/lua/opencode/ui/output_window.lua +++ b/lua/opencode/ui/output_window.lua @@ -287,9 +287,6 @@ function M.setup(windows) end) window_options.set_window_option('foldtext', 'v:lua.opencode_fold_text()', windows.output_win) - if windows.position ~= 'current' then - window_options.set_window_option('winfixbuf', true, windows.output_win, { save_original = true }) - end window_options.set_window_option('winfixheight', true, windows.output_win, { save_original = true }) window_options.set_window_option('winfixwidth', true, windows.output_win, { save_original = true }) window_options.set_window_option('signcolumn', 'yes', windows.output_win, { save_original = true }) diff --git a/lua/opencode/ui/ui.lua b/lua/opencode/ui/ui.lua index d969aadb..7cf0f303 100644 --- a/lua/opencode/ui/ui.lua +++ b/lua/opencode/ui/ui.lua @@ -113,10 +113,13 @@ local function close_or_restore_output_window(windows) return end + local current_buf = vim.api.nvim_win_get_buf(windows.output_win) + local buffer_was_replaced = current_buf ~= windows.output_buf + output_window.restore_winfix_options(windows.output_win) if windows.position == 'current' then - if state.current_code_buf and vim.api.nvim_buf_is_valid(state.current_code_buf) then + if not buffer_was_replaced and state.current_code_buf and vim.api.nvim_buf_is_valid(state.current_code_buf) then pcall(vim.api.nvim_win_set_buf, windows.output_win, state.current_code_buf) end if state.saved_window_options then @@ -128,6 +131,10 @@ local function close_or_restore_output_window(windows) return end + if buffer_was_replaced then + return + end + pcall(vim.api.nvim_win_close, windows.output_win, true) end