@@ -37,6 +37,30 @@ local function find_window_by_filetype(filetype)
3737 return nil
3838end
3939
40+ local function is_opencode_window (win )
41+ if not win or not vim .api .nvim_win_is_valid (win ) then return false end
42+
43+ local buf = vim .api .nvim_win_get_buf (win )
44+ local ft = vim .bo [buf ].filetype
45+ if ft == ' opencode' then return true end
46+
47+ local bt = vim .bo [buf ].buftype
48+ if bt ~= ' terminal' then return false end
49+
50+ if ft ~= ' ' and ft ~= ' snacks_terminal' and ft ~= ' toggleterm' then return false end
51+
52+ local buf_name = string.lower (vim .api .nvim_buf_get_name (buf ))
53+ return buf_name :find (' opencode' , 1 , true ) ~= nil
54+ end
55+
56+ local function find_opencode_window ()
57+ for _ , win in ipairs (vim .api .nvim_tabpage_list_wins (0 )) do
58+ if is_opencode_window (win ) then return win end
59+ end
60+
61+ return nil
62+ end
63+
4064function M .capture_focus ()
4165 local current_win = vim .api .nvim_get_current_win ()
4266 if not M .is_main_window (current_win ) then return nil end
@@ -88,13 +112,13 @@ local function ensure_neotree_window()
88112end
89113
90114local function ensure_opencode_window ()
91- local opencode_win = find_window_by_filetype ' opencode '
115+ local opencode_win = find_opencode_window ()
92116 if opencode_win then return opencode_win end
93117
94118 pcall (function () require (' opencode' ).toggle () end )
95119
96- vim .wait (1000 , function () return find_window_by_filetype ' opencode ' ~= nil end , 50 )
97- return find_window_by_filetype ' opencode '
120+ vim .wait (1000 , function () return find_opencode_window () ~= nil end , 50 )
121+ return find_opencode_window ()
98122end
99123
100124function M .reset_ide_layout (opts )
0 commit comments