From a7696f34cc9359e54ef708348fa5df5fe4d4c3ed Mon Sep 17 00:00:00 2001 From: FichteFoll Date: Mon, 6 Dec 2021 18:53:49 +0100 Subject: [PATCH] Add key bindings to go to top or bottom of the list --- src/listview.rs | 8 ++++++++ src/tracc.rs | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/listview.rs b/src/listview.rs index 46b39ab..897903e 100644 --- a/src/listview.rs +++ b/src/listview.rs @@ -12,6 +12,10 @@ pub trait ListView { fn normal_mode(&mut self); // selection manipulation + fn selection_first(&mut self) { + *self.selection_pointer() = 0; + } + fn selection_up(&mut self) { *self.selection_pointer() = self.selection_pointer().saturating_sub(1); } @@ -21,6 +25,10 @@ pub trait ListView { (*self.selection_pointer() + 1).min(self.list().len().saturating_sub(1)); } + fn selection_last(&mut self) { + *self.selection_pointer() = self.list().len().saturating_sub(1); + } + // adding/removing elements fn insert(&mut self, item: T, position: Option) { let pos = position.unwrap_or(*self.selection_pointer()); diff --git a/src/tracc.rs b/src/tracc.rs index 83501a5..43e83ea 100644 --- a/src/tracc.rs +++ b/src/tracc.rs @@ -51,7 +51,7 @@ impl Tracc { Focus::Bottom => $action(&mut self.times, $($arg,)*), } }; - }; + } let mut inputs = io::stdin().keys(); loop { @@ -63,6 +63,13 @@ impl Tracc { Key::Char('q') => break, Key::Char('j') => with_focused!(ListView::selection_down), Key::Char('k') => with_focused!(ListView::selection_up), + Key::Char('G') => with_focused!(ListView::selection_first), + // gg + Key::Char('g') => { + if let Some(Ok(Key::Char('g'))) = inputs.next() { + with_focused!(ListView::selection_last); + } + } Key::Char('o') => { with_focused!(ListView::insert, Default::default(), None); self.set_mode(Mode::Insert)?;