From 541a9a55b5c6984b191eea29853ec30725c7defd Mon Sep 17 00:00:00 2001 From: veeso Date: Thu, 10 Jun 2021 20:55:12 +0200 Subject: [PATCH] Handle shift enter (file list) --- src/ui/components/file_list.rs | 27 ++++++++++++++++++++++----- src/ui/keymap.rs | 4 ++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/ui/components/file_list.rs b/src/ui/components/file_list.rs index ec21799..c0ca43a 100644 --- a/src/ui/components/file_list.rs +++ b/src/ui/components/file_list.rs @@ -393,10 +393,10 @@ impl Component for FileList { self.states.toggle_file(self.states.list_index()); Msg::None } - KeyCode::Enter => { - // Report event - Msg::OnSubmit(self.get_state()) - } + KeyCode::Enter => match key.modifiers.intersects(KeyModifiers::SHIFT) { + false => Msg::OnSubmit(self.get_state()), + true => Msg::OnKey(key), + }, _ => { // Return key event to activity Msg::OnKey(key) @@ -449,7 +449,7 @@ mod tests { use super::*; use pretty_assertions::assert_eq; - use tuirealm::event::KeyEvent; + use tuirealm::event::{KeyEvent, KeyModifiers}; #[test] fn test_ui_components_file_list_states() { @@ -616,6 +616,14 @@ mod tests { component.on(Event::Key(KeyEvent::from(KeyCode::Enter))), Msg::OnSubmit(Payload::One(Value::Usize(0))) ); + // Enter shift + assert_eq!( + component.on(Event::Key(KeyEvent::new( + KeyCode::Enter, + KeyModifiers::SHIFT + ))), + Msg::OnKey(KeyEvent::new(KeyCode::Enter, KeyModifiers::SHIFT)) + ); // On key assert_eq!( component.on(Event::Key(KeyEvent::from(KeyCode::Backspace))), @@ -626,6 +634,15 @@ mod tests { component.on(Event::Key(KeyEvent::from(KeyCode::Char('a')))), Msg::OnKey(KeyEvent::from(KeyCode::Char('a'))) ); + // Ctrl + a + assert_eq!( + component.on(Event::Key(KeyEvent::new( + KeyCode::Char('a'), + KeyModifiers::CONTROL + ))), + Msg::None + ); + assert_eq!(component.states.selected.len(), component.states.list_len()); } #[test] diff --git a/src/ui/keymap.rs b/src/ui/keymap.rs index 8a6fee4..8ea32e7 100644 --- a/src/ui/keymap.rs +++ b/src/ui/keymap.rs @@ -34,6 +34,10 @@ pub const MSG_KEY_ENTER: Msg = Msg::OnKey(KeyEvent { code: KeyCode::Enter, modifiers: KeyModifiers::NONE, }); +pub const MSG_KEY_SHIFT_ENTER: Msg = Msg::OnKey(KeyEvent { + code: KeyCode::Enter, + modifiers: KeyModifiers::SHIFT, +}); pub const MSG_KEY_ESC: Msg = Msg::OnKey(KeyEvent { code: KeyCode::Esc, modifiers: KeyModifiers::NONE,