diff options
Diffstat (limited to 'src/config')
-rw-r--r-- | src/config/keymap.rs | 124 |
1 files changed, 60 insertions, 64 deletions
diff --git a/src/config/keymap.rs b/src/config/keymap.rs index e21efff..80f0a6f 100644 --- a/src/config/keymap.rs +++ b/src/config/keymap.rs @@ -2,27 +2,27 @@ use std::collections::{hash_map::Entry, HashMap}; use serde_derive::Deserialize; -use termion::event::Key; +use termion::event::{Event, Key, MouseEvent}; use super::{parse_to_config_file, ConfigStructure, Flattenable}; use crate::commands::{CommandKeybind, KeyCommand}; use crate::io::IOWorkerOptions; -use crate::util::key_mapping::str_to_key; +use crate::util::key_mapping::str_to_event; use crate::KEYMAP_FILE; #[derive(Debug)] pub struct JoshutoCommandMapping { - map: HashMap<Key, CommandKeybind>, + map: HashMap<Event, CommandKeybind>, } -impl std::convert::AsRef<HashMap<Key, CommandKeybind>> for JoshutoCommandMapping { - fn as_ref(&self) -> &HashMap<Key, CommandKeybind> { +impl std::convert::AsRef<HashMap<Event, CommandKeybind>> for JoshutoCommandMapping { + fn as_ref(&self) -> &HashMap<Event, CommandKeybind> { &self.map } } -impl std::convert::AsMut<HashMap<Key, CommandKeybind>> for JoshutoCommandMapping { - fn as_mut(&mut self) -> &mut HashMap<Key, CommandKeybind> { +impl std::convert::AsMut<HashMap<Event, CommandKeybind>> for JoshutoCommandMapping { + fn as_mut(&mut self) -> &mut HashMap<Event, CommandKeybind> { &mut self.map } } @@ -38,154 +38,154 @@ impl JoshutoCommandMapping { let mut m = self; let cmd = KeyCommand::CursorMoveUp(1); - let keys = [Key::Up]; + let keys = [Event::Key(Key::Up)]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CursorMoveDown(1); - let keys = [Key::Down]; + let keys = [Event::Key(Key::Down)]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::ParentDirectory; - let keys = [Key::Left]; + let keys = [Event::Key(Key::Left)]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::OpenFile; - let keys = [Key::Right]; + let keys = [Event::Key(Key::Right)]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::OpenFile; - let keys = [Key::Char('\n')]; + let keys = [Event::Key(Key::Char('\n'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CursorMoveHome; - let keys = [Key::Home]; + let keys = [Event::Key(Key::Home)]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CursorMoveEnd; - let keys = [Key::End]; + let keys = [Event::Key(Key::End)]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CursorMovePageUp; - let keys = [Key::PageUp]; + let keys = [Event::Key(Key::PageUp)]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CursorMovePageDown; - let keys = [Key::PageDown]; + let keys = [Event::Key(Key::PageDown)]; insert_keycommand(&mut m, cmd, &keys)?; // vim keys let cmd = KeyCommand::CursorMoveUp(1); - let keys = [Key::Char('k')]; + let keys = [Event::Key(Key::Char('k'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CursorMoveDown(1); - let keys = [Key::Char('j')]; + let keys = [Event::Key(Key::Char('j'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::ParentDirectory; - let keys = [Key::Char('h')]; + let keys = [Event::Key(Key::Char('h'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::OpenFile; - let keys = [Key::Char('l')]; + let keys = [Event::Key(Key::Char('l'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::NewTab; - let keys = [Key::Char('T')]; + let keys = [Event::Key(Key::Char('T'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::NewTab; - let keys = [Key::Ctrl('t')]; + let keys = [Event::Key(Key::Ctrl('t'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CloseTab; - let keys = [Key::Char('W')]; + let keys = [Event::Key(Key::Char('W'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CloseTab; - let keys = [Key::Ctrl('w')]; + let keys = [Event::Key(Key::Ctrl('w'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CloseTab; - let keys = [Key::Char('q')]; + let keys = [Event::Key(Key::Char('q'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::ForceQuit; - let keys = [Key::Char('Q')]; + let keys = [Event::Key(Key::Char('Q'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::ReloadDirList; - let keys = [Key::Char('R')]; + let keys = [Event::Key(Key::Char('R'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::ToggleHiddenFiles; - let keys = [Key::Char('z'), Key::Char('h')]; + let keys = [Event::Key(Key::Char('z')), Event::Key(Key::Char('h'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::TabSwitch(1); - let keys = [Key::Char('\t')]; + let keys = [Event::Key(Key::Char('\t'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::TabSwitch(-1); - let keys = [Key::BackTab]; + let keys = [Event::Key(Key::BackTab)]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::OpenFileWith; - let keys = [Key::Char('r')]; + let keys = [Event::Key(Key::Char('r'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CutFiles; - let keys = [Key::Char('d'), Key::Char('d')]; + let keys = [Event::Key(Key::Char('d')), Event::Key(Key::Char('d'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CopyFiles; - let keys = [Key::Char('y'), Key::Char('y')]; + let keys = [Event::Key(Key::Char('y')), Event::Key(Key::Char('y'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::PasteFiles(IOWorkerOptions::default()); - let keys = [Key::Char('p'), Key::Char('p')]; + let keys = [Event::Key(Key::Char('p')), Event::Key(Key::Char('p'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::DeleteFiles; - let keys = [Key::Delete]; + let keys = [Event::Key(Key::Delete)]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::DeleteFiles; - let keys = [Key::Char('D'), Key::Char('d')]; + let keys = [Event::Key(Key::Char('D')), Event::Key(Key::Char('d'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::RenameFileAppend; - let keys = [Key::Char('a')]; + let keys = [Event::Key(Key::Char('a'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::RenameFilePrepend; - let keys = [Key::Char('A')]; + let keys = [Event::Key(Key::Char('A'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CommandLine("search ".to_string(), "".to_string()); - let keys = [Key::Char('/')]; + let keys = [Event::Key(Key::Char('/'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::SearchNext; - let keys = [Key::Char('n')]; + let keys = [Event::Key(Key::Char('n'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::SearchPrev; - let keys = [Key::Char('N')]; + let keys = [Event::Key(Key::Char('N'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::BulkRename; - let keys = [Key::Char('b'), Key::Char('b')]; + let keys = [Event::Key(Key::Char('b')), Event::Key(Key::Char('b'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::SetMode; - let keys = [Key::Char('=')]; + let keys = [Event::Key(Key::Char('='))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CommandLine("".to_string(), "".to_string()); - let keys = [Key::Char(';')]; + let keys = [Event::Key(Key::Char(';'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CommandLine("mkdir ".to_string(), "".to_string()); - let keys = [Key::Char('m'), Key::Char('k')]; + let keys = [Event::Key(Key::Char('m')), Event::Key(Key::Char('k'))]; insert_keycommand(&mut m, cmd, &keys)?; let cmd = KeyCommand::CommandLine("rename ".to_string(), "".to_string()); - let keys = [Key::Char('c'), Key::Char('w')]; + let keys = [Event::Key(Key::Char('c')), Event::Key(Key::Char('w'))]; insert_keycommand(&mut m, cmd, &keys)?; Ok(()) @@ -197,9 +197,7 @@ impl std::default::Default for JoshutoCommandMapping { let mut m = Self { map: HashMap::new(), }; - let _ = m.default_res(); - m } } @@ -229,18 +227,18 @@ impl Flattenable<JoshutoCommandMapping> for JoshutoRawCommandMapping { for m in self.mapcommand { match KeyCommand::parse_command(m.command.as_str()) { Ok(command) => { - let keycodes: Vec<Key> = m + let events: Vec<Event> = m .keys .iter() - .filter_map(|s| str_to_key(s.as_str())) + .filter_map(|s| str_to_event(s.as_str())) .collect(); - if keycodes.len() != m.keys.len() { - eprintln!("Failed to parse keycodes: {:?}", m.keys); + if events.len() != m.keys.len() { + eprintln!("Failed to parse events: {:?}", m.keys); continue; } - let result = insert_keycommand(&mut keymaps, command, &keycodes); + let result = insert_keycommand(&mut keymaps, command, &events); match result { Ok(_) => {} Err(e) => eprintln!("{}", e), @@ -256,18 +254,16 @@ impl Flattenable<JoshutoCommandMapping> for JoshutoRawCommandMapping { fn insert_keycommand( keymap: &mut JoshutoCommandMapping, keycommand: KeyCommand, - keycodes: &[Key], + events: &[Event], ) -> Result<(), String> { - let keycode_len = keycodes.len(); - - if keycode_len == 0 { + let num_events = events.len(); + if num_events == 0 { return Ok(()); } - let key = keycodes[0]; - - if keycode_len == 1 { - match keymap.as_mut().entry(key) { + let event = events[0].clone(); + if num_events == 1 { + match keymap.as_mut().entry(event) { Entry::Occupied(_) => { return Err(format!("Error: Keybindings ambiguous for {}", keycommand)) } @@ -276,16 +272,16 @@ fn insert_keycommand( return Ok(()); } - match keymap.as_mut().entry(key) { + match keymap.as_mut().entry(event) { Entry::Occupied(mut entry) => match entry.get_mut() { CommandKeybind::CompositeKeybind(ref mut m) => { - insert_keycommand(m, keycommand, &keycodes[1..]) + insert_keycommand(m, keycommand, &events[1..]) } _ => Err(format!("Error: Keybindings ambiguous for {}", keycommand)), }, Entry::Vacant(entry) => { let mut new_map = JoshutoCommandMapping::new(); - let result = insert_keycommand(&mut new_map, keycommand, &keycodes[1..]); + let result = insert_keycommand(&mut new_map, keycommand, &events[1..]); if result.is_ok() { let composite_command = CommandKeybind::CompositeKeybind(new_map); entry.insert(composite_command); |