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 <cursoragent@cursor.com>
This commit is contained in:
wuyangfan 2026-05-17 16:50:00 +08:00
parent 8619c07f3f
commit 56f732b7e1
4 changed files with 28 additions and 2 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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,

View file

@ -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,