Skip to content

Commit a5c308f

Browse files
committed
fix(ui): disable winfixbuf in 'current' mode and auto-close on buffer switch
When 'ui.position' is set to 'current', disabling 'winfixbuf' prevents E1513 errors when external pickers (like Snacks) try to switch buffers. Added a BufEnter autocmd to automatically close the Opencode UI when a non-Opencode buffer enters an Opencode window in this mode.
1 parent 3f81e8b commit a5c308f

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

lua/opencode/ui/autocmds.lua

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,32 @@ function M.setup_autocmds(windows)
4242
require('opencode.state').is_opencode_focused = require('opencode.ui.ui').is_opencode_focused()
4343
end,
4444
})
45+
46+
if require('opencode.config').ui.position == 'current' then
47+
vim.api.nvim_create_autocmd('BufEnter', {
48+
group = group,
49+
callback = function()
50+
local current_win = vim.api.nvim_get_current_win()
51+
local current_buf = vim.api.nvim_get_current_buf()
52+
53+
if current_win ~= windows.output_win and current_win ~= windows.input_win then
54+
return
55+
end
56+
57+
local is_opencode_buf = (
58+
current_buf == windows.output_buf
59+
or current_buf == windows.input_buf
60+
or (windows.footer_buf and current_buf == windows.footer_buf)
61+
)
62+
63+
if not is_opencode_buf then
64+
vim.schedule(function()
65+
require('opencode.ui.ui').close_windows(windows)
66+
end)
67+
end
68+
end,
69+
})
70+
end
4571
end
4672

4773
function M.setup_resize_handler(windows)

lua/opencode/ui/input_window.lua

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,9 @@ function M.setup(windows)
107107
vim.api.nvim_set_option_value('buftype', 'nofile', { buf = windows.input_buf })
108108
vim.api.nvim_set_option_value('swapfile', false, { buf = windows.input_buf })
109109
-- vim.b[windows.input_buf].completion = false
110-
vim.api.nvim_set_option_value('winfixbuf', true, { win = windows.input_win })
110+
if config.ui.position ~= 'current' then
111+
vim.api.nvim_set_option_value('winfixbuf', true, { win = windows.input_win })
112+
end
111113
vim.api.nvim_set_option_value('winfixheight', true, { win = windows.input_win })
112114
vim.api.nvim_set_option_value('winfixwidth', true, { win = windows.input_win })
113115

lua/opencode/ui/output_window.lua

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ function M.setup(windows)
6666
vim.api.nvim_set_option_value('modifiable', false, { buf = windows.output_buf })
6767
vim.api.nvim_set_option_value('buftype', 'nofile', { buf = windows.output_buf })
6868
vim.api.nvim_set_option_value('swapfile', false, { buf = windows.output_buf })
69-
vim.api.nvim_set_option_value('winfixbuf', true, { win = windows.output_win })
69+
if config.ui.position ~= 'current' then
70+
vim.api.nvim_set_option_value('winfixbuf', true, { win = windows.output_win })
71+
end
7072
vim.api.nvim_set_option_value('winfixheight', true, { win = windows.output_win })
7173
vim.api.nvim_set_option_value('winfixwidth', true, { win = windows.output_win })
7274
vim.api.nvim_set_option_value('signcolumn', 'yes', { scope = 'local', win = windows.output_win })

0 commit comments

Comments
 (0)