From 805e1594edf34782b4b7c55bc6705d52cfc0b969 Mon Sep 17 00:00:00 2001 From: Arijit Basu Date: Sun, 5 May 2024 23:31:38 +0530 Subject: [PATCH] Fix vim scrolling --- src/ui.rs | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 18ffcb3..5ff5d99 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -778,27 +778,15 @@ impl UI<'_> { self.scrolltop = height * (dir.focus / height.max(1)) } else { // Vim-like-scrolling - self.scrolltop = match dir.focus.cmp(&self.scrolltop) { - Ordering::Greater => { - // Scrolling down - if dir.focus >= self.scrolltop + height { - dir.focus.saturating_sub(height + 1) - } else { - self.scrolltop - } - } - Ordering::Less => dir.focus, - Ordering::Equal => self.scrolltop, - }; - - // Add padding if possible let padding = app.config.general.scroll_padding; - if padding != 0 { - if dir.focus < self.scrolltop + padding { - self.scrolltop = dir.focus.saturating_sub(padding); - } else if dir.focus >= self.scrolltop + height - padding { - self.scrolltop = dir.focus + padding - height + 1; - }; + if dir.focus >= (self.scrolltop + height).saturating_sub(padding) { + // Scrolling down + self.scrolltop = (dir.focus + padding + 1) + .saturating_sub(height) + .min(dir.total.saturating_sub(height)); + } else if dir.focus < self.scrolltop + padding { + // Scrolling up + self.scrolltop = dir.focus.saturating_sub(padding); } };