diff options
author | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-08 09:19:19 +0530 |
---|---|---|
committer | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-08 09:19:19 +0530 |
commit | 6cbd4866b18de91d3702a55c45650615d67f5f30 (patch) | |
tree | 5a719bd0568bbd57143b8ce5589749751ab54673 | |
parent | 7ad2130bada27098e2d24f06650873a53b159f87 (diff) |
Dehli/India: Make marker selection feel right
-rw-r--r-- | src/interactive/widgets/mark.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/interactive/widgets/mark.rs b/src/interactive/widgets/mark.rs index 61b06f0..47ae798 100644 --- a/src/interactive/widgets/mark.rs +++ b/src/interactive/widgets/mark.rs @@ -86,7 +86,7 @@ impl MarkPane { } pub fn key(mut self, key: Key) -> Option<Self> { match key { - Char('d') | Char(' ') => return self.remove_selected_and_move_down(), + Char('d') | Char(' ') => return self.remove_selected(), Ctrl('u') | PageUp => self.change_selection(CursorDirection::PageUp), Char('k') | Up => self.change_selection(CursorDirection::Up), Char('j') | Down => self.change_selection(CursorDirection::Down), @@ -96,8 +96,8 @@ impl MarkPane { Some(self) } - fn remove_selected_and_move_down(mut self) -> Option<Self> { - if let Some(selected) = self.selected { + fn remove_selected(mut self) -> Option<Self> { + if let Some(mut selected) = self.selected { let (idx, se_len) = { let sorted_entries: Vec<_> = self .marked @@ -111,10 +111,14 @@ impl MarkPane { }; if let Some(idx) = idx { self.marked.remove(&idx); - if se_len.saturating_sub(1) == 0 { + let new_len = se_len.saturating_sub(1); + if new_len == 0 { return None; } - self.selected = Some(selected.saturating_sub(1)); + if new_len == selected { + selected = selected.saturating_sub(1); + } + self.selected = Some(selected); } Some(self) } else { |