summaryrefslogtreecommitdiffstats
path: root/src/interactive/widgets
diff options
context:
space:
mode:
authorSebastian Thiel <sthiel@thoughtworks.com>2019-06-08 04:21:42 +0530
committerSebastian Thiel <sthiel@thoughtworks.com>2019-06-08 05:04:47 +0530
commitc0aa567e81b54913df464c9b500fe7a20ada0ea5 (patch)
tree4cad5340903ae152c0540bea87bdfd2ab308b6ad /src/interactive/widgets
parentf9a9cdf9f827a5e08b1bcc6035f908fdb971c9fd (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.rs21
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);
+ }
}
}
}