summaryrefslogtreecommitdiffstats
path: root/src/config/keymap
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2021-10-15 17:28:01 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2021-10-15 17:28:01 -0400
commit1ead7cd5ecd891598d9b61c0e9e01a2c1c0f27af (patch)
treede3b4d8c179ed0a2d102165aafa40a31cbfb195c /src/config/keymap
parentc0a071f81b2a7a9776dfca313b19ade350c677b2 (diff)
remove keymapping default code
- just use a big string and parse it at runtime
Diffstat (limited to 'src/config/keymap')
-rw-r--r--src/config/keymap/default_keymap.rs97
-rw-r--r--src/config/keymap/keymapping.rs176
-rw-r--r--src/config/keymap/mod.rs1
3 files changed, 106 insertions, 168 deletions
diff --git a/src/config/keymap/default_keymap.rs b/src/config/keymap/default_keymap.rs
new file mode 100644
index 0000000..a8ede07
--- /dev/null
+++ b/src/config/keymap/default_keymap.rs
@@ -0,0 +1,97 @@
+pub const DEFAULT_KEYMAP: &str = "
+mapcommand = [
+ { keys = [ \"T\" ], command = \"new_tab\" },
+ { keys = [ \"ctrl+t\" ], command = \"new_tab\" },
+ { keys = [ \"W\" ], command = \"close_tab\" },
+ { keys = [ \"ctrl+w\" ], command = \"close_tab\" },
+ { keys = [ \"q\" ], command = \"close_tab\" },
+ { keys = [ \"Q\" ], command = \"quit_to_cwd\" },
+
+ { keys = [ \"R\" ], command = \"reload_dirlist\" },
+ { keys = [ \"z\", \"h\" ], command = \"toggle_hidden\" },
+ { keys = [ \"\t\" ], command = \"tab_switch 1\" },
+ { keys = [ \"backtab\" ], command = \"tab_switch -1\" },
+
+ { keys = [ \"alt+1\" ], command = \"tab_switch_index 1\" },
+ { keys = [ \"alt+2\" ], command = \"tab_switch_index 2\" },
+ { keys = [ \"alt+3\" ], command = \"tab_switch_index 3\" },
+ { keys = [ \"alt+4\" ], command = \"tab_switch_index 4\" },
+ { keys = [ \"alt+5\" ], command = \"tab_switch_index 5\" },
+
+ # arrow keys
+ { keys = [ \"arrow_up\" ], command = \"cursor_move_up\" },
+ { keys = [ \"arrow_down\" ], command = \"cursor_move_down\" },
+ { keys = [ \"arrow_left\" ], command = \"cd ..\" },
+ { keys = [ \"arrow_right\" ], command = \"open\" },
+ { keys = [ \"\n\" ], command = \"open\" },
+ { keys = [ \"end\" ], command = \"cursor_move_end\" },
+ { keys = [ \"home\" ], command = \"cursor_move_home\" },
+ { keys = [ \"page_up\" ], command = \"cursor_move_page_up\" },
+ { keys = [ \"page_down\" ], command = \"cursor_move_page_down\" },
+
+ # vim-like keybindings
+ { keys = [ \"j\" ], command = \"cursor_move_down\" },
+ { keys = [ \"k\" ], command = \"cursor_move_up\" },
+ { keys = [ \"h\" ], command = \"cd ..\" },
+ { keys = [ \"l\" ], command = \"open\" },
+ { keys = [ \"g\", \"g\" ], command = \"cursor_move_home\" },
+ { keys = [ \"G\" ], command = \"cursor_move_end\" },
+ { keys = [ \"r\" ], command = \"open_with\" },
+
+ { keys = [ \"[\" ], command = \"parent_cursor_move_up\" },
+ { keys = [ \"]\" ], command = \"parent_cursor_move_down\" },
+
+ { keys = [ \"c\", \"d\" ], command = \":cd \" },
+ { keys = [ \"d\", \"d\" ], command = \"cut_files\" },
+ { keys = [ \"y\", \"y\" ], command = \"copy_files\" },
+ { keys = [ \"p\", \"p\" ], command = \"paste_files\" },
+ { keys = [ \"p\", \"o\" ], command = \"paste_files --overwrite=true\" },
+
+ { keys = [ \"y\", \"n\" ], command = \"copy_filename\" },
+ { keys = [ \"y\", \".\" ], command = \"copy_filename_without_extension\" },
+ { keys = [ \"y\", \"p\" ], command = \"copy_filepath\" },
+ { keys = [ \"y\", \"d\" ], command = \"copy_dirpath\" },
+
+ { keys = [ \"delete\" ], command = \"delete_files\" },
+ { keys = [ \"d\", \"D\" ], command = \"delete_files\" },
+
+ { keys = [ \"a\" ], command = \"rename_append\" },
+ { keys = [ \"A\" ], command = \"rename_prepend\" },
+
+ { keys = [ \"f\", \"t\" ], command = \":touch \" },
+
+ { keys = [ \" \" ], command = \"select --toggle=true\" },
+ { keys = [ \"t\" ], command = \"select --all=true --toggle=true\" },
+
+ { keys = [ \"w\" ], command = \"show_workers --exit-key=w\" },
+ { keys = [ \"b\", \"b\" ], command = \"bulk_rename\" },
+ { keys = [ \"=\" ], command = \"set_mode\" },
+
+ { keys = [ \":\" ], command = \":\" },
+ { keys = [ \";\" ], command = \":\" },
+
+ { keys = [ \"'\" ], command = \":shell \" },
+ { keys = [ \"m\", \"k\" ], command = \":mkdir \" },
+ { keys = [ \"c\", \"w\" ], command = \":rename \" },
+
+ { keys = [ \"/\" ], command = \":search \" },
+ { keys = [ \"\\\" ], command = \":search_glob \" },
+ { keys = [ \"S\" ], command = \"search_fzf\" },
+
+ { keys = [ \"n\" ], command = \"search_next\" },
+ { keys = [ \"N\" ], command = \"search_prev\" },
+
+ { keys = [ \"s\", \"r\" ], command = \"sort reverse\" },
+ { keys = [ \"s\", \"l\" ], command = \"sort lexical\" },
+ { keys = [ \"s\", \"m\" ], command = \"sort mtime\" },
+ { keys = [ \"s\", \"n\" ], command = \"sort natural\" },
+ { keys = [ \"s\", \"s\" ], command = \"sort size\" },
+ { keys = [ \"s\", \"e\" ], command = \"sort ext\" },
+
+ { keys = [ \"g\", \"r\" ], command = \"cd /\" },
+ { keys = [ \"g\", \"c\" ], command = \"cd ~/.config\" },
+ { keys = [ \"g\", \"d\" ], command = \"cd ~/Downloads\" },
+ { keys = [ \"g\", \"e\" ], command = \"cd /etc\" },
+ { keys = [ \"g\", \"h\" ], command = \"cd ~/\" },
+ { keys = [ \"?\" ], command = \"help\" }
+]";
diff --git a/src/config/keymap/keymapping.rs b/src/config/keymap/keymapping.rs
index 9250c28..0f42e94 100644
--- a/src/config/keymap/keymapping.rs
+++ b/src/config/keymap/keymapping.rs
@@ -8,10 +8,13 @@ use termion::event::MouseEvent;
use termion::event::{Event, Key};
use crate::config::{parse_to_config_file, ConfigStructure, Flattenable};
+use crate::error::JoshutoResult;
use crate::io::IoWorkerOptions;
use crate::key_command::{Command, CommandKeybind};
use crate::util::keyparse::str_to_event;
+use super::default_keymap::DEFAULT_KEYMAP;
+
#[derive(Debug, Deserialize)]
struct CommandKeymap {
pub command: String,
@@ -78,179 +81,16 @@ impl AppKeyMapping {
}
}
- pub fn default_res(&mut self) -> Result<(), String> {
- let mut m = self;
-
- let cmd = Command::CursorMoveUp(1);
- let keys = [Event::Key(Key::Up)];
- insert_keycommand(&mut m, cmd, &keys)?;
- let cmd = Command::CursorMoveDown(1);
- let keys = [Event::Key(Key::Down)];
- insert_keycommand(&mut m, cmd, &keys)?;
- let cmd = Command::ParentDirectory;
- let keys = [Event::Key(Key::Left)];
- insert_keycommand(&mut m, cmd, &keys)?;
- let cmd = Command::OpenFile;
- let keys = [Event::Key(Key::Right)];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::OpenFile;
- let keys = [Event::Key(Key::Char('\n'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CursorMoveHome;
- let keys = [Event::Key(Key::Home)];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CursorMoveEnd;
- let keys = [Event::Key(Key::End)];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CursorMovePageUp;
- let keys = [Event::Key(Key::PageUp)];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CursorMovePageDown;
- let keys = [Event::Key(Key::PageDown)];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- // vim keys
- let cmd = Command::CursorMoveUp(1);
- let keys = [Event::Key(Key::Char('k'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CursorMoveDown(1);
- let keys = [Event::Key(Key::Char('j'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::ParentDirectory;
- let keys = [Event::Key(Key::Char('h'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::OpenFile;
- let keys = [Event::Key(Key::Char('l'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::NewTab;
- let keys = [Event::Key(Key::Char('T'))];
- insert_keycommand(&mut m, cmd, &keys)?;
- let cmd = Command::NewTab;
- let keys = [Event::Key(Key::Ctrl('t'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CloseTab;
- let keys = [Event::Key(Key::Char('W'))];
- insert_keycommand(&mut m, cmd, &keys)?;
- let cmd = Command::CloseTab;
- let keys = [Event::Key(Key::Ctrl('w'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CloseTab;
- let keys = [Event::Key(Key::Char('q'))];
- insert_keycommand(&mut m, cmd, &keys)?;
- let cmd = Command::ForceQuit;
- let keys = [Event::Key(Key::Char('Q'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::ReloadDirList;
- let keys = [Event::Key(Key::Char('R'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::ToggleHiddenFiles;
- let keys = [Event::Key(Key::Char('z')), Event::Key(Key::Char('h'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::TabSwitch(1);
- let keys = [Event::Key(Key::Char('\t'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::TabSwitch(-1);
- let keys = [Event::Key(Key::BackTab)];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::OpenFileWith(None);
- let keys = [Event::Key(Key::Char('r'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CutFiles;
- let keys = [Event::Key(Key::Char('d')), Event::Key(Key::Char('d'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CopyFiles;
- let keys = [Event::Key(Key::Char('y')), Event::Key(Key::Char('y'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::PasteFiles(IoWorkerOptions::default());
- let keys = [Event::Key(Key::Char('p')), Event::Key(Key::Char('p'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::DeleteFiles;
- let keys = [Event::Key(Key::Delete)];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::DeleteFiles;
- let keys = [Event::Key(Key::Char('D')), Event::Key(Key::Char('d'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::RenameFileAppend;
- let keys = [Event::Key(Key::Char('a'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::RenameFilePrepend;
- let keys = [Event::Key(Key::Char('A'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CommandLine("search ".to_string(), "".to_string());
- let keys = [Event::Key(Key::Char('/'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::SearchNext;
- let keys = [Event::Key(Key::Char('n'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::SearchPrev;
- let keys = [Event::Key(Key::Char('N'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::BulkRename;
- let keys = [Event::Key(Key::Char('b')), Event::Key(Key::Char('b'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::SetMode;
- let keys = [Event::Key(Key::Char('='))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CommandLine("".to_string(), "".to_string());
- let keys = [Event::Key(Key::Char(';'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CommandLine("".to_string(), "".to_string());
- let keys = [Event::Key(Key::Char(':'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CommandLine("mkdir ".to_string(), "".to_string());
- let keys = [Event::Key(Key::Char('m')), Event::Key(Key::Char('k'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::CommandLine("rename ".to_string(), "".to_string());
- let keys = [Event::Key(Key::Char('c')), Event::Key(Key::Char('w'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- let cmd = Command::Help;
- let keys = [Event::Key(Key::Char('?'))];
- insert_keycommand(&mut m, cmd, &keys)?;
-
- Ok(())
+ pub fn default_res() -> JoshutoResult<Self> {
+ let raw: RawAppKeyMapping = toml::from_str(DEFAULT_KEYMAP)?;
+ let keymapping: Self = raw.flatten();
+ Ok(keymapping)
}
}
impl std::default::Default for AppKeyMapping {
fn default() -> Self {
- let mut m = Self {
- map: HashMap::new(),
- };
- let _ = m.default_res();
- m
+ AppKeyMapping::default_res().unwrap()
}
}
diff --git a/src/config/keymap/mod.rs b/src/config/keymap/mod.rs
index 14ad630..3ffde21 100644
--- a/src/config/keymap/mod.rs
+++ b/src/config/keymap/mod.rs
@@ -1,3 +1,4 @@
mod keymapping;
+mod default_keymap;
pub use self::keymapping::AppKeyMapping;