summaryrefslogtreecommitdiffstats
path: root/src/config
diff options
context:
space:
mode:
Diffstat (limited to 'src/config')
-rw-r--r--src/config/keymap.rs124
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);