diff options
author | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-08 04:21:42 +0530 |
---|---|---|
committer | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-08 05:04:47 +0530 |
commit | c0aa567e81b54913df464c9b500fe7a20ada0ea5 (patch) | |
tree | 4cad5340903ae152c0540bea87bdfd2ab308b6ad /src/interactive/widgets | |
parent | f9a9cdf9f827a5e08b1bcc6035f908fdb971c9fd (diff) |
Pune/India: Better handling of what is selected after removing a marked entry
Diffstat (limited to 'src/interactive/widgets')
-rw-r--r-- | src/interactive/widgets/mark.rs | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/interactive/widgets/mark.rs b/src/interactive/widgets/mark.rs index a25465c..af737e3 100644 --- a/src/interactive/widgets/mark.rs +++ b/src/interactive/widgets/mark.rs @@ -95,13 +95,22 @@ impl MarkPane { fn remove_selected_and_move_down(&mut self) { if let Some(selected) = self.selected { - let sorted_entries: Vec<_> = self - .marked - .iter() - .sorted_by_key(|(_, v)| &v.index) - .collect(); - if let Some(idx) = sorted_entries.get(selected).map(|(k, _)| *k.to_owned()) { + let (idx, se_len) = { + let sorted_entries: Vec<_> = self + .marked + .iter() + .sorted_by_key(|(_, v)| &v.index) + .collect(); + ( + sorted_entries.get(selected).map(|(k, _)| *k.to_owned()), + sorted_entries.len(), + ) + }; + if let Some(idx) = idx { self.marked.remove(&idx); + if selected == se_len.saturating_sub(1) { + self.selected = selected.checked_sub(1); + } } } } |