diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-26 14:48:57 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-26 14:50:13 +0300 |
| commit | 57c880f0ebaa5011abc90f4e2fd4f84fc072ce35 (patch) | |
| tree | 9f662b19cec2e9c9e50e87eb5e96def9e8ae9822 /src/app/agents.rs | |
| parent | 9eec3029e13b791b8a4954e38d5bb7db6e2ff68f (diff) | |
feat: add global last-pane navigation
refs #287
Diffstat (limited to 'src/app/agents.rs')
| -rw-r--r-- | src/app/agents.rs | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/app/agents.rs b/src/app/agents.rs index f36ba1ca..b1276a06 100644 --- a/src/app/agents.rs +++ b/src/app/agents.rs @@ -36,16 +36,8 @@ impl App { target: &str, ) -> Result<crate::api::schema::AgentInfo, TerminalTargetError> { let resolved = self.resolve_terminal_target(target)?; - self.state.switch_workspace(resolved.ws_idx); - self.state.switch_tab(resolved.tab_idx); - if let Some(tab) = self - .state - .workspaces - .get_mut(resolved.ws_idx) - .and_then(|ws| ws.tabs.get_mut(resolved.tab_idx)) - { - tab.layout.focus_pane(resolved.pane_id); - } + self.state + .focus_pane_in_workspace(resolved.ws_idx, resolved.pane_id); self.state.mode = Mode::Terminal; self.agent_info(resolved.ws_idx, resolved.pane_id) .ok_or_else(|| TerminalTargetError::NotFound { @@ -359,6 +351,7 @@ impl App { focus: bool, ) -> Result<(usize, usize, crate::layout::PaneId), AgentStartError> { let (rows, cols) = self.state.estimate_pane_size(); + let previous_focus = self.state.current_pane_focus_target(); let direction = match split { SplitDirection::Right => ratatui::layout::Direction::Horizontal, SplitDirection::Down => ratatui::layout::Direction::Vertical, @@ -390,8 +383,9 @@ impl App { .terminals .insert(result.1.terminal.id.clone(), result.1.terminal); if focus { - self.state.switch_workspace(ws_idx); - self.state.switch_tab(result.0); + self.state.switch_workspace_tab(ws_idx, result.0); + self.state + .record_pane_focus_change(previous_focus, ws_idx, result.1.pane_id); self.state.mode = Mode::Terminal; } self.schedule_session_save(); |
