From ebb4aef84fc738645c161f47c09508c9d1d067fe Mon Sep 17 00:00:00 2001 From: Lipman Date: Thu, 15 Aug 2024 16:37:04 +0800 Subject: [PATCH] fix: adjust `offset` value after resizing window (#1458) --- yazi-fs/src/folder.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/yazi-fs/src/folder.rs b/yazi-fs/src/folder.rs index d6be6652..38f8ba5a 100644 --- a/yazi-fs/src/folder.rs +++ b/yazi-fs/src/folder.rs @@ -73,6 +73,7 @@ impl Folder { }; self.sync_page(false); + self.adjust_offset(); self.tracing |= b; b } @@ -103,6 +104,18 @@ impl Folder { } } + pub fn adjust_offset(&mut self) { + let len = self.files.len(); + let limit = LAYOUT.load().current.height as usize; + let scrolloff = (limit / 2).min(MANAGER.scrolloff as usize); + let max_offset = (self.offset + limit).saturating_sub(scrolloff).min(len); + + let new_offset = + if self.cursor >= max_offset { self.cursor - limit + scrolloff } else { self.offset }; + + self.offset = new_offset.min(len.saturating_sub(limit)); + } + fn next(&mut self, step: Step) -> bool { let old = (self.cursor, self.offset); let len = self.files.len();