diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-08-17 04:12:17 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-08-17 04:12:17 -0400 |
commit | f04c18e3cac8b2f99a77cd2d202cd70e3ca9f32e (patch) | |
tree | 7e83f07d785b43a5f93ab885b2d315b64e7ed9c9 /src | |
parent | 712f974bb7470dc03f9515a6beb0ae993c6bc2d7 (diff) | |
download | ynab-reimbursements-f04c18e3cac8b2f99a77cd2d202cd70e3ca9f32e.tar.gz ynab-reimbursements-f04c18e3cac8b2f99a77cd2d202cd70e3ca9f32e.zip |
support g/G in lists
Diffstat (limited to 'src')
-rw-r--r-- | src/views.rs | 16 | ||||
-rw-r--r-- | src/views/txn_table.rs | 44 |
2 files changed, 32 insertions, 28 deletions
diff --git a/src/views.rs b/src/views.rs index 7c00834..984a5e8 100644 --- a/src/views.rs +++ b/src/views.rs @@ -1,18 +1,2 @@ mod txn_table; pub use txn_table::txn_tables; - -pub fn vi_view<V: cursive::view::View>(v: V) -> impl cursive::view::View { - cursive::views::OnEventView::new(v) - .on_event('h', |s| { - s.on_event(cursive::event::Event::Key(cursive::event::Key::Left)) - }) - .on_event('j', |s| { - s.on_event(cursive::event::Event::Key(cursive::event::Key::Down)) - }) - .on_event('k', |s| { - s.on_event(cursive::event::Event::Key(cursive::event::Key::Up)) - }) - .on_event('l', |s| { - s.on_event(cursive::event::Event::Key(cursive::event::Key::Right)) - }) -} diff --git a/src/views/txn_table.rs b/src/views/txn_table.rs index 1a86c1e..5b93829 100644 --- a/src/views/txn_table.rs +++ b/src/views/txn_table.rs @@ -194,8 +194,8 @@ fn txn_table( }) .with_id(id); table.get_mut().set_items(txns); - let view = - cursive::views::OnEventView::new(table).on_event(' ', move |s| { + let view = cursive::views::OnEventView::new(table) + .on_event(' ', move |s| { s.call_on_id(&id, |v: &mut TxnTableView| { if let Some(idx) = v.item() { let txn = v.borrow_item_mut(idx).unwrap(); @@ -231,6 +231,30 @@ fn txn_table( )); }, ); + }) + .on_event('h', |s| { + s.on_event(cursive::event::Event::Key(cursive::event::Key::Left)) + }) + .on_event('j', |s| { + s.on_event(cursive::event::Event::Key(cursive::event::Key::Down)) + }) + .on_event('k', |s| { + s.on_event(cursive::event::Event::Key(cursive::event::Key::Up)) + }) + .on_event('l', |s| { + s.on_event(cursive::event::Event::Key(cursive::event::Key::Right)) + }) + .on_event('g', move |s| { + s.call_on_id(&id, |v: &mut TxnTableView| { + v.set_selected_row(0); + }) + .unwrap(); + }) + .on_event('G', move |s| { + s.call_on_id(&id, |v: &mut TxnTableView| { + v.set_selected_row(v.len() - 1); + }) + .unwrap(); }); TableView { view } } @@ -250,12 +274,10 @@ pub fn txn_tables(budget: &crate::ynab::Budget) -> impl cursive::view::View { crate::ynab::format_amount(inflows_table.amount()), inflows_table.len() ))); - layout.add_child(crate::views::vi_view( - cursive::views::CircularFocus::wrap_arrows( - cursive::views::BoxView::with_min_height( - std::cmp::min(std::cmp::max(inflows_table.len(), 1), 5) + 2, - cursive::views::BoxView::with_full_width(inflows_table), - ), + layout.add_child(cursive::views::CircularFocus::wrap_arrows( + cursive::views::BoxView::with_min_height( + std::cmp::min(std::cmp::max(inflows_table.len(), 1), 5) + 2, + cursive::views::BoxView::with_full_width(inflows_table), ), )); @@ -267,10 +289,8 @@ pub fn txn_tables(budget: &crate::ynab::Budget) -> impl cursive::view::View { crate::ynab::format_amount(outflows_table.amount()), outflows_table.len() ))); - layout.add_child(crate::views::vi_view( - cursive::views::CircularFocus::wrap_arrows( - cursive::views::BoxView::with_full_screen(outflows_table), - ), + layout.add_child(cursive::views::CircularFocus::wrap_arrows( + cursive::views::BoxView::with_full_screen(outflows_table), )); layout |