diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-07-23 10:33:16 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-07-23 10:33:16 +0200 |
commit | 7ef4c57e20153d5082d179645fb550060a6704fc (patch) | |
tree | 4b0f388a367ef1e275bf6fac1db08b5bf302afa2 /src | |
parent | de77e0af8e33497dc0a35139eb998c52d74378ce (diff) |
Close tab pane on "q"
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 9 | ||||
-rw-r--r-- | src/main_view.rs | 18 |
2 files changed, 24 insertions, 3 deletions
diff --git a/src/main.rs b/src/main.rs index c5f23bd..d11f394 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ use std::path::PathBuf; use anyhow::Result; use cursive::CursiveExt; +use cursive::event::{Event, EventTrigger}; mod main_view; mod mail; @@ -21,8 +22,12 @@ fn main() -> Result<()> { let config = config.try_into::<Configuration>()?; let mut siv = cursive::Cursive::default(); - siv.add_layer(main_view::MainView::new(config)?); - siv.add_global_callback('q', |s| s.quit()); + + let event = Event::Char('q'); + let trigger: EventTrigger = event.clone().into(); + siv.set_on_post_event(trigger, |s| s.quit()); + + siv.add_fullscreen_layer(main_view::MainView::new(config)?); siv.add_global_callback('~', cursive::Cursive::toggle_debug_console); debug!("Starting cursive"); diff --git a/src/main_view.rs b/src/main_view.rs index c443854..b4e0bd0 100644 --- a/src/main_view.rs +++ b/src/main_view.rs @@ -47,7 +47,23 @@ impl View for MainView { } fn on_event(&mut self, e: Event) -> EventResult { - self.tabs.on_event(e) + match e { + Event::Char('q') => { + if self.tabs.tab_order().len() == 1 { + EventResult::Ignored + } else { + if let Some(key) = self.tabs.active_tab().cloned() { + self.tabs.remove_tab(&key); + debug!("Remove tab"); + EventResult::Consumed(None) + } else { + debug!("No tab to remove found."); + EventResult::Ignored + } + } + }, + other => self.tabs.on_event(other), + } } fn call_on_any<'a>(&mut self, s: &Selector, tpl: &'a mut (dyn FnMut(&mut (dyn View + 'static)) + 'a)) { |