use cursive::{Cursive, event::Event};
pub use cursive_tabs::{self, TabPanel};
pub fn add_global_key_shortcuts(siv: &mut Cursive, tabs_name: &'static str) {
use cursive::event::Key::*;
for ((i, c), fkey) in ('0'..='9')
.enumerate()
.zip([F10, F1, F2, F3, F4, F5, F6, F7, F8, F9])
{
for event in [Event::AltChar(c), Event::CtrlShift(fkey)] {
siv.add_global_callback(event, move |s| {
s.call_on_name(tabs_name, |t: &mut TabPanel| {
let order = t.tab_order();
let len = order.len();
let name = match i {
n if n > len || n == 0 => {
log::warn!("alt+{c}, tabs.len: {len} => get(len - 1)");
order.get(len - 1).unwrap()
}
_ => order
.get(i - 1)
.expect("Failed to get tab"),
};
t.set_active_tab(name)
});
})
}
}
}
pub fn add_global_tab_switch_key_shortcuts(
siv: &mut Cursive,
tabs_name: &'static str,
) {
use cursive::event::Key::*;
siv.add_global_callback(Event::CtrlAlt(PageDown), |s| {
s.call_on_name(tabs_name, |t: &mut TabPanel| t.next());
});
siv.add_global_callback(Event::Alt(PageDown), |s| {
s.call_on_name(tabs_name, |t: &mut TabPanel| t.next());
});
siv.add_global_callback(Event::CtrlAlt(PageUp), |s| {
s.call_on_name(tabs_name, |t: &mut TabPanel| t.prev());
});
siv.add_global_callback(Event::Alt(PageUp), |s| {
s.call_on_name(tabs_name, |t: &mut TabPanel| t.prev());
});
}