diff --git a/lua/sidekick/cli/session/init.lua b/lua/sidekick/cli/session/init.lua index 1c59892..0cf5446 100644 --- a/lua/sidekick/cli/session/init.lua +++ b/lua/sidekick/cli/session/init.lua @@ -52,6 +52,9 @@ function B:attach() end --- Detach from an existing session function B:detach() end +--- Focus an external session (tmux/zellij pane) +function B:focus() end + --- Start a new session --- If the backend returns a Cmd, a new terminal session will be spawned ---@return sidekick.cli.terminal.Cmd? diff --git a/lua/sidekick/cli/session/tmux.lua b/lua/sidekick/cli/session/tmux.lua index 942ed7d..8129939 100644 --- a/lua/sidekick/cli/session/tmux.lua +++ b/lua/sidekick/cli/session/tmux.lua @@ -195,4 +195,14 @@ function M:dump() return ret end +---Focus the tmux pane +function M:focus() + local pane_id = self:pane_id() + if not pane_id then + return self + end + Util.exec({ "tmux", "select-pane", "-t", pane_id }) + return self +end + return M diff --git a/lua/sidekick/cli/state.lua b/lua/sidekick/cli/state.lua index 01f1f3e..1b9de8c 100644 --- a/lua/sidekick/cli/state.lua +++ b/lua/sidekick/cli/state.lua @@ -194,8 +194,14 @@ function M.attach(state, opts) terminal:focus() end end - elseif attached then - Util.info("Attached to `" .. state.tool.name .. "`") + else + -- External session (tmux/zellij pane) + if opts.focus and state.external and session.focus then + session:focus() + end + if attached then + Util.info("Attached to `" .. state.tool.name .. "`") + end end return state, attached end