diff options
author | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2018-12-23 21:37:27 -0500 |
---|---|---|
committer | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2018-12-23 21:37:27 -0500 |
commit | 2fd5508cf2e4fd2addcc13f2d77eafb571004271 (patch) | |
tree | 1b8f293a73cdc93425acbc92ba2ab869f4659c1f | |
parent | 04b7cf5ba6aec5d491de98178522040c6a73bc03 (diff) |
add support for multiple keybindings mapping to same command
-rw-r--r-- | config/keymap.toml | 65 | ||||
-rw-r--r-- | src/joshuto/keymap.rs | 28 | ||||
-rw-r--r-- | src/joshuto/keymapll.rs | 42 |
3 files changed, 98 insertions, 37 deletions
diff --git a/config/keymap.toml b/config/keymap.toml index f62108a..bb17e79 100644 --- a/config/keymap.toml +++ b/config/keymap.toml @@ -1,19 +1,54 @@ [keymaps] -Quit = [ "q" ] +Quit = [ ["q"] ] -MoveUp = [ "UP" ] -MoveDown = [ "DOWN" ] -MoveHome = [ "HOME" ] -MoveEnd = [ "END" ] -Open = [ "RIGHT" ] -ParentDirectory = [ "LEFT" ] -MovePageUp = [ "PPAGE" ] -MovePageDown = [ "NPAGE" ] +MoveUp = [ + ["UP"], + ["j"] +] +MoveDown = [ + ["DOWN"], + ["h"] +] +ParentDirectory = [ + ["LEFT"], + ["h"] +] +Open = [ + ["RIGHT"], + ["ENTER"] +] -DeleteFile = [ "d", "D" ] -CutFile = [ "d", "d" ] -RenameFile = [ "a" ] -CopyFile = [ "y", "y" ] +MoveHome = [ + ["HOME"] +] +MoveEnd = [ + ["END"] +] +MovePageUp = [ + ["PPAGE"] +] +MovePageDown = [ + ["NPAGE"] +] -OpenWith = [ "r" ] -ToggleHiddenFiles = [ "z", "h" ] +DeleteFile = [ + ["d", "D"], + [ "DELETE" ] +] +CutFile = [ + [ "d", "d" ] +] +RenameFile = [ + [ "a" ] +] +CopyFile = [ + ["y", "y"] +] + +OpenWith = [ + [ "r" ] +] +ToggleHiddenFiles = [ + [ "z", "h" ], + ["H"] +] diff --git a/src/joshuto/keymap.rs b/src/joshuto/keymap.rs index 97f8440..7c71d6b 100644 --- a/src/joshuto/keymap.rs +++ b/src/joshuto/keymap.rs @@ -8,7 +8,7 @@ use joshuto::keymapll::Keycode; #[derive(Debug, Deserialize)] pub struct JoshutoRawKeymaps { - keymaps: Option<HashMap<String, Vec<String>>>, + keymaps: Option<HashMap<String, Vec<Vec<String>>>>, } impl JoshutoRawKeymaps { @@ -36,24 +36,26 @@ impl JoshutoRawKeymaps { } } - fn unflatten_hashmap(map: HashMap<String, Vec<String>>) -> HashMap<i32, JoshutoCommand> + fn unflatten_hashmap(map: HashMap<String, Vec<Vec<String>>>) -> HashMap<i32, JoshutoCommand> { let mut new_map: HashMap<i32, JoshutoCommand> = HashMap::new(); for (keycommand, keycomb) in &map { match JoshutoCommand::from_str(&keycommand) { Some(keybind) => { - let mut keys = keycomb.iter(); - if let Some(key) = keys.next() { - let key = match Keycode::from_str(&key) { - Some(s) => s, - None => { - eprintln!("Error: Unknown keycode for: {:?}", &keycommand); - process::exit(1); - } - }; - JoshutoRawKeymaps::insert_keycommand(&mut new_map, &mut keys, - key, keybind); + for comb in keycomb { + let mut keys = comb.iter(); + if let Some(key) = keys.next() { + let key = match Keycode::from_str(&key) { + Some(s) => s, + None => { + eprintln!("Error: Unknown keycode for: {:?}", &keycommand); + process::exit(1); + } + }; + JoshutoRawKeymaps::insert_keycommand(&mut new_map, &mut keys, + key, keybind.clone()); + } } } None => { diff --git a/src/joshuto/keymapll.rs b/src/joshuto/keymapll.rs index aaaba4a..cd5f58f 100644 --- a/src/joshuto/keymapll.rs +++ b/src/joshuto/keymapll.rs @@ -2,6 +2,7 @@ extern crate ncurses; use std::collections::HashMap; +#[allow(non_camel_case_types)] #[derive(Debug,Clone)] pub enum Keycode { CTRL = ncurses::BUTTON_CTRL as isize, @@ -34,23 +35,23 @@ pub enum Keycode { F13 = ncurses::KEY_F13 as isize, F14 = ncurses::KEY_F14 as isize, F15 = ncurses::KEY_F15 as isize, - DL = ncurses::KEY_DL as isize, - IL = ncurses::KEY_IL as isize, - DC = ncurses::KEY_DC as isize, - IC = ncurses::KEY_IC as isize, + DL = ncurses::KEY_DL as isize, /* delete-line key */ + IL = ncurses::KEY_IL as isize, /* insert-line key */ + DC = ncurses::KEY_DC as isize, /* delete-character key */ + IC = ncurses::KEY_IC as isize, /* insert-character key */ EIC = ncurses::KEY_EIC as isize, CLEAR = ncurses::KEY_CLEAR as isize, EOS = ncurses::KEY_EOS as isize, EOL = ncurses::KEY_EOL as isize, SF = ncurses::KEY_SF as isize, SR = ncurses::KEY_SR as isize, - NPAGE = ncurses::KEY_NPAGE as isize, - PPAGE = ncurses::KEY_PPAGE as isize, + NPAGE = ncurses::KEY_NPAGE as isize, /* next-page key */ + PPAGE = ncurses::KEY_PPAGE as isize, /* previous-page key */ STAB = ncurses::KEY_STAB as isize, CTAB = ncurses::KEY_CTAB as isize, CATAB = ncurses::KEY_CATAB as isize, ENTER = ncurses::KEY_ENTER as isize, - PRINT = ncurses::KEY_PRINT as isize, + PRINT = ncurses::KEY_PRINT as isize, /* print key */ LL = ncurses::KEY_LL as isize, A1 = ncurses::KEY_A1 as isize, A3 = ncurses::KEY_A3 as isize, @@ -284,8 +285,8 @@ impl Keycode { "F15" => Some(Keycode::F15), "DL" => Some(Keycode::DL), "IL" => Some(Keycode::IL), - "DC" => Some(Keycode::DC), - "IC" => Some(Keycode::IC), + "DELETE" => Some(Keycode::DC), + "INSERT" => Some(Keycode::IC), "EIC" => Some(Keycode::EIC), "CLEAR" => Some(Keycode::CLEAR), "EOS" => Some(Keycode::EOS), @@ -418,6 +419,29 @@ impl JoshutoCommand { "ToggleHiddenFiles" => Some(JoshutoCommand::ToggleHiddenFiles), _ => None, } + } + + pub fn clone(&self) -> Self + { + match self { + JoshutoCommand::Quit => JoshutoCommand::Quit, + JoshutoCommand::MoveUp => JoshutoCommand::MoveUp, + JoshutoCommand::MoveDown => JoshutoCommand::MoveDown, + JoshutoCommand::MovePageUp => JoshutoCommand::MovePageUp, + JoshutoCommand::MovePageDown => JoshutoCommand::MovePageDown, + JoshutoCommand::MoveHome => JoshutoCommand::MoveHome, + JoshutoCommand::MoveEnd => JoshutoCommand::MoveEnd, + JoshutoCommand::ParentDirectory => JoshutoCommand::ParentDirectory, + JoshutoCommand::DeleteFile => JoshutoCommand::DeleteFile, + JoshutoCommand::RenameFile => JoshutoCommand::RenameFile, + JoshutoCommand::CutFile => JoshutoCommand::CutFile, + JoshutoCommand::CopyFile => JoshutoCommand::CopyFile, + JoshutoCommand::Open => JoshutoCommand::Open, + JoshutoCommand::OpenWith => JoshutoCommand::OpenWith, + JoshutoCommand::ToggleHiddenFiles => JoshutoCommand::ToggleHiddenFiles, + + JoshutoCommand::CompositeKeybind(_) => JoshutoCommand::Quit, + } } } |