From 5c6400c5635362ccbb39e0324a4681d4029d3f74 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 10 Dec 2021 23:01:49 -0500 Subject: fix some scrolling edge cases --- src/state.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'src/state.rs') diff --git a/src/state.rs b/src/state.rs index 5cc18f3..12317f4 100644 --- a/src/state.rs +++ b/src/state.rs @@ -36,7 +36,9 @@ impl State { } else { match self.focus { crate::action::Focus::Readline => { - self.readline.handle_key(key).await + self.readline + .handle_key(key, self.history.entry_count()) + .await } crate::action::Focus::History(idx) => { self.history.handle_key(key, idx).await; @@ -226,17 +228,7 @@ impl State { self.focus = crate::action::Focus::History(idx); self.hide_readline = true; } - crate::action::Action::UpdateFocus(mut new_focus) => { - match new_focus { - crate::action::Focus::Readline - | crate::action::Focus::Scrolling(None) => {} - crate::action::Focus::History(ref mut idx) - | crate::action::Focus::Scrolling(Some(ref mut idx)) => { - if *idx >= self.history.entry_count() { - *idx = self.history.entry_count() - 1; - } - } - } + crate::action::Action::UpdateFocus(new_focus) => { self.focus = new_focus; self.hide_readline = false; self.scene = self.default_scene(new_focus).await; @@ -290,7 +282,14 @@ impl State { fn scroll_up(&self, idx: Option) -> Option { idx.map_or_else( - || Some(self.history.entry_count() - 1), + || { + let count = self.history.entry_count(); + if count == 0 { + None + } else { + Some(count - 1) + } + }, |idx| Some(idx.saturating_sub(1)), ) } -- cgit v1.2.3-54-g00ecf