summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-07-23 10:33:16 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-07-23 10:33:16 +0200
commit7ef4c57e20153d5082d179645fb550060a6704fc (patch)
tree4b0f388a367ef1e275bf6fac1db08b5bf302afa2 /src
parentde77e0af8e33497dc0a35139eb998c52d74378ce (diff)
Close tab pane on "q"
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src')
-rw-r--r--src/main.rs9
-rw-r--r--src/main_view.rs18
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)) {