mirror of
https://github.com/itsjunetime/tdf.git
synced 2026-06-02 08:01:47 -04:00
Add 'N' command to go back to prev search result
This commit is contained in:
+25
-9
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user