Add 'N' command to go back to prev search result

This commit is contained in:
itsjunetime
2024-05-26 15:18:10 -06:00
parent d40483d3b1
commit a3ad304d2d
+25 -9
View File
@@ -11,6 +11,8 @@ pub struct Tui {
page: usize, page: usize,
last_render: LastRender, last_render: LastRender,
bottom_msg: BottomMessage, bottom_msg: BottomMessage,
// we use `prev_msg` to, for example, restore the 'search results' message on the bottom after
// jumping to a specific page
prev_msg: Option<BottomMessage>, prev_msg: Option<BottomMessage>,
rendered: Vec<RenderedInfo>, rendered: Vec<RenderedInfo>,
} }
@@ -320,6 +322,15 @@ impl Tui {
} }
pub fn handle_event(&mut self, ev: Event) -> Option<InputAction> { pub fn handle_event(&mut self, ev: Event) -> Option<InputAction> {
fn jump_to_page(page: &mut usize, rect: &mut Rect, new_page: Option<usize>) -> Option<InputAction> {
new_page.map(|new_page| {
*page = new_page;
// Make sure we re-render
*rect = Rect::default();
InputAction::JumpingToPage(new_page)
})
}
match ev { match ev {
Event::Key(key) => { Event::Key(key) => {
match key.code { match key.code {
@@ -357,16 +368,21 @@ impl Tui {
.is_some_and(|num| num > 0) .is_some_and(|num| num > 0)
.then_some(self.page + 1 + idx) .then_some(self.page + 1 + idx)
); );
if let Some(page) = next_page {
self.page = page; jump_to_page(&mut self.page, &mut self.last_render.rect, next_page)
// Make sure we re-render },
self.last_render.rect = Rect::default(); KeyCode::Char('N') if self.page > 0 => {
Some(InputAction::JumpingToPage(page)) let prev_page = self.rendered[..(self.page)]
} else { .iter()
None .rev()
} .enumerate()
.find_map(|(idx, p)| p.num_results
.is_some_and(|num| num > 0)
.then_some(self.page - (idx + 1))
);
jump_to_page(&mut self.page, &mut self.last_render.rect, prev_page)
}, },
// TODO: Add 'N' key to go back a search page
KeyCode::Enter => { KeyCode::Enter => {
let BottomMessage::Input(_) = self.bottom_msg else { let BottomMessage::Input(_) = self.bottom_msg else {
return None; return None;