Skip to content

Commit e70dbf4

Browse files
authored
feat(oma-console): support navigating with Home/End keys (#338)
This adds support for navigating to the last page with End key and to the first page with Home key.
1 parent 12ac865 commit e70dbf4

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

oma-console/src/pager.rs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -327,20 +327,15 @@ impl<'a> OmaPager<'a> {
327327
self.tips = self.ui_text.searct_tips_with_query(&query);
328328
continue;
329329
}
330-
self.vertical_scroll = 0;
331-
self.vertical_scroll_state =
332-
self.vertical_scroll_state.position(self.vertical_scroll);
330+
self.goto_begin();
333331
}
334332
KeyCode::Char('G') => {
335333
if self.mode == TuiMode::SearchInputText {
336334
query.push('G');
337335
self.tips = self.ui_text.searct_tips_with_query(&query);
338336
continue;
339337
}
340-
self.vertical_scroll =
341-
self.inner_len.saturating_sub(self.area_height.into());
342-
self.vertical_scroll_state =
343-
self.vertical_scroll_state.position(self.vertical_scroll);
338+
self.goto_end();
344339
}
345340
KeyCode::Enter => {
346341
if self.mode != TuiMode::SearchInputText {
@@ -457,6 +452,12 @@ impl<'a> OmaPager<'a> {
457452
KeyCode::PageDown => {
458453
self.page_down();
459454
}
455+
KeyCode::End => {
456+
self.goto_end();
457+
}
458+
KeyCode::Home => {
459+
self.goto_begin();
460+
}
460461
_ => {}
461462
}
462463
}
@@ -473,7 +474,7 @@ impl<'a> OmaPager<'a> {
473474
let pos = self
474475
.vertical_scroll
475476
.saturating_add(self.area_height as usize);
476-
if pos <= self.inner_len {
477+
if pos < self.inner_len {
477478
self.vertical_scroll = pos;
478479
} else {
479480
return;
@@ -488,6 +489,16 @@ impl<'a> OmaPager<'a> {
488489
self.vertical_scroll_state = self.vertical_scroll_state.position(self.vertical_scroll);
489490
}
490491

492+
fn goto_end(&mut self) {
493+
self.vertical_scroll = self.inner_len.saturating_sub(self.area_height.into());
494+
self.vertical_scroll_state = self.vertical_scroll_state.position(self.vertical_scroll);
495+
}
496+
497+
fn goto_begin(&mut self) {
498+
self.vertical_scroll = 0;
499+
self.vertical_scroll_state = self.vertical_scroll_state.position(0);
500+
}
501+
491502
fn right(&mut self) {
492503
let width = self.writer.get_length();
493504

0 commit comments

Comments
 (0)