From 13dd39b4e43611f430f90eaf0965a2a652791e2f Mon Sep 17 00:00:00 2001 From: Eugene Date: Mon, 22 Jun 2026 03:23:22 +0300 Subject: [PATCH] Git status list fix (#59155) Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #ISSUE Issue: - Create and/or modify several files. - Go to GitPanel. - Stage files you want to commit. - Select last entry. You may select not last but make sure after list of entries shrinks, your selection would be "out of visible list" after. - Commit. - Entries will be committed and disappear. - But it seems like `selected_entry` is not updated (or updated incorrectly) and Zed still have "hidden" selected entry of the last selected entry. So you need to `Shift-g` (in vim mode) or some other keybinding to select last entry manually. I used `k` multiple times before I realized I can use `Shift-g` or `g g` -,- Release Notes: - Fixed: stale index (`selected_entry`) of git panel after . Notes: - I basically copied logic of function 1 line above but instead of `first_entry` I used `last_etnry`. So... It should be harmless. - I didn't find where selection logic is tested. I tried to do something using `test_amend` as template, but... I'm afraid I won't be able to understand if I'm using testing framework correctly. - I couldn't make tests, but I tried to "test" by hand using something like this: image Flat View seems like working fine, but Tree View has some "bugs" (if we can call it like that) inherited. For example, if I stage selected file and commit it, selection jumps to the `asdjfl` instead of the file right under - `outer_file`. The same behavior in the current release. --------- Co-authored-by: Christopher Biscardi --- crates/git_ui/src/git_panel.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/git_ui/src/git_panel.rs b/crates/git_ui/src/git_panel.rs index cbe40e24b6..79a42c8ae3 100644 --- a/crates/git_ui/src/git_panel.rs +++ b/crates/git_ui/src/git_panel.rs @@ -1383,6 +1383,14 @@ impl GitPanel { } } + fn select_last_entry_if_out_of_bounds(&mut self, window: &mut Window, cx: &mut Context) { + if let Some(idx) = self.selected_entry + && idx >= self.entries.len() + { + self.select_last(&menu::SelectLast, window, cx); + } + } + fn focus_changes_list( &mut self, _: &FocusChanges, @@ -4076,6 +4084,7 @@ impl GitPanel { } self.select_first_entry_if_none(window, cx); + self.select_last_entry_if_out_of_bounds(window, cx); let suggested_commit_message = self.suggest_commit_message(cx); let placeholder_text = suggested_commit_message.unwrap_or("Enter commit message".into());