From aa8a8baeeb06cd94ed6329c535483f30835ec426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20Sj=C3=B6berg?= Date: Sun, 6 Jun 2021 10:41:21 +0200 Subject: [PATCH] Calculate offset when moving picker cursor --- helix-term/src/ui/picker.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/helix-term/src/ui/picker.rs b/helix-term/src/ui/picker.rs index c3592062..494753c5 100644 --- a/helix-term/src/ui/picker.rs +++ b/helix-term/src/ui/picker.rs @@ -246,13 +246,14 @@ impl Component for Picker { let selected = Style::default().fg(Color::Rgb(255, 255, 255)); let rows = inner.height - 2; // -1 for search bar + let offset = self.cursor / (rows as usize) * (rows as usize); - let files = self.matches.iter().map(|(index, _score)| { + let files = self.matches.iter().skip(offset).map(|(index, _score)| { (index, self.options.get(*index).unwrap()) // get_unchecked }); for (i, (_index, option)) in files.take(rows as usize).enumerate() { - if i == self.cursor { + if i == (self.cursor - offset) { surface.set_string(inner.x + 1, inner.y + 2 + i as u16, ">", selected); } @@ -261,7 +262,11 @@ impl Component for Picker { inner.y + 2 + i as u16, (self.format_fn)(option), inner.width as usize - 1, - if i == self.cursor { selected } else { style }, + if i == (self.cursor - offset) { + selected + } else { + style + }, ); } }