From 56f732b7e1f47fc9d3cff7b8c63672163af31ef2 Mon Sep 17 00:00:00 2001 From: wuyangfan <1102042793@qq.com> Date: Sun, 17 May 2026 16:50:00 +0800 Subject: [PATCH] fix: leave diff view with move-left (h in vim keys) Mirror Esc behavior: move-left unfocuses the diff pane instead of only working from the file list. Fixes #2806 Co-authored-by: Cursor --- src/popups/compare_commits.rs | 7 ++++++- src/popups/file_revlog.rs | 6 ++++++ src/popups/inspect_commit.rs | 7 ++++++- src/tabs/status.rs | 10 ++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/popups/compare_commits.rs b/src/popups/compare_commits.rs index 5ff6ef87aa..13a69fe826 100644 --- a/src/popups/compare_commits.rs +++ b/src/popups/compare_commits.rs @@ -133,7 +133,12 @@ impl Component for CompareCommitsPopup { self.diff.focus(true); } else if key_match(e, self.key_config.keys.move_left) { - self.hide_stacked(false); + if self.diff.focused() { + self.details.focus(true); + self.diff.focus(false); + } else { + self.hide_stacked(false); + } } return Ok(EventState::Consumed); diff --git a/src/popups/file_revlog.rs b/src/popups/file_revlog.rs index 771ae857fe..527621f379 100644 --- a/src/popups/file_revlog.rs +++ b/src/popups/file_revlog.rs @@ -513,6 +513,12 @@ impl Component for FileRevlogPopup { ) && self.can_focus_diff() { self.diff.focus(true); + } else if key_match( + key, + self.key_config.keys.move_left, + ) && self.diff.focused() + { + self.diff.focus(false); } else if key_match(key, self.key_config.keys.enter) { if let Some(commit_id) = self.selected_commit() { self.hide_stacked(true); diff --git a/src/popups/inspect_commit.rs b/src/popups/inspect_commit.rs index 4acfe88e90..3bd3375df1 100644 --- a/src/popups/inspect_commit.rs +++ b/src/popups/inspect_commit.rs @@ -170,7 +170,12 @@ impl Component for InspectCommitPopup { self.diff.focus(true); } else if key_match(e, self.key_config.keys.move_left) { - self.hide_stacked(false); + if self.diff.focused() { + self.details.focus(true); + self.diff.focus(false); + } else { + self.hide_stacked(false); + } } else if key_match( e, self.key_config.keys.open_file_tree, diff --git a/src/tabs/status.rs b/src/tabs/status.rs index 135cf18e4e..977c7e2494 100644 --- a/src/tabs/status.rs +++ b/src/tabs/status.rs @@ -845,6 +845,16 @@ impl Component for Status { ) && self.can_focus_diff() { self.switch_focus(Focus::Diff).map(Into::into) + } else if key_match( + k, + self.key_config.keys.move_left, + ) && self.is_focus_on_diff() + { + self.switch_focus(match self.diff_target { + DiffTarget::Stage => Focus::Stage, + DiffTarget::WorkingDir => Focus::WorkDir, + }) + .map(Into::into) } else if key_match( k, self.key_config.keys.exit_popup,