aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-08-17 04:12:17 -0400
committerJesse Luehrs <doy@tozt.net>2019-08-17 04:12:17 -0400
commitf04c18e3cac8b2f99a77cd2d202cd70e3ca9f32e (patch)
tree7e83f07d785b43a5f93ab885b2d315b64e7ed9c9
parent712f974bb7470dc03f9515a6beb0ae993c6bc2d7 (diff)
downloadynab-reimbursements-f04c18e3cac8b2f99a77cd2d202cd70e3ca9f32e.tar.gz
ynab-reimbursements-f04c18e3cac8b2f99a77cd2d202cd70e3ca9f32e.zip
support g/G in lists
-rw-r--r--src/views.rs16
-rw-r--r--src/views/txn_table.rs44
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