aboutsummaryrefslogtreecommitdiff
path: root/src/app/input/navigate.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-31 21:18:40 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-31 21:18:40 +0300
commit8cf0e9b35b00f9dd91270fcd3931015d61ffd8a0 (patch)
tree2b76b158344fdbe0de17c6abe98564a262266d2f /src/app/input/navigate.rs
parent859185b491c5a80e888ba8f9dd213d2c35baa034 (diff)
fix: confirm implicit worktree group close
refs #369
Diffstat (limited to 'src/app/input/navigate.rs')
-rw-r--r--src/app/input/navigate.rs26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/app/input/navigate.rs b/src/app/input/navigate.rs
index 8d09c00a..b6edefaf 100644
--- a/src/app/input/navigate.rs
+++ b/src/app/input/navigate.rs
@@ -761,8 +761,9 @@ pub(super) fn execute_navigate_action_in_context(
leave_navigate_mode(state);
}
NavigateAction::CloseTab => {
- state.close_tab();
- leave_navigate_mode(state);
+ if !state.close_tab() {
+ leave_navigate_mode(state);
+ }
}
NavigateAction::RenamePane => {
if let Some(pane_id) = state
@@ -786,8 +787,9 @@ pub(super) fn execute_navigate_action_in_context(
leave_navigate_mode(state);
}
NavigateAction::ClosePane => {
- state.close_pane();
- leave_navigate_mode(state);
+ if !state.close_pane() {
+ leave_navigate_mode(state);
+ }
}
NavigateAction::EditScrollback => {}
NavigateAction::CopyMode => state.enter_copy_mode(terminal_runtimes),
@@ -1756,6 +1758,22 @@ last_pane = "prefix+tab"
assert_eq!(state.mode, Mode::Terminal);
}
+ #[test]
+ fn prefix_close_pane_last_parent_group_pane_opens_confirmation() {
+ let mut state = state_with_workspaces(&["main", "issue"]);
+ mark_worktree_space_member(&mut state, 0, "repo-key");
+ mark_worktree_space_member(&mut state, 1, "repo-key");
+ state.selected = 1;
+ state.active = Some(0);
+ state.mode = Mode::Navigate;
+
+ execute_navigate_action(&mut state, NavigateAction::ClosePane);
+
+ assert_eq!(state.selected, 0);
+ assert_eq!(state.mode, Mode::ConfirmClose);
+ assert_eq!(state.workspaces.len(), 2);
+ }
+
#[tokio::test]
async fn custom_command_runs_from_prefix_key_in_navigate_mode() {
let (_api_tx, api_rx) = tokio::sync::mpsc::unbounded_channel();