aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-kenji <aks.kenji@protonmail.com>2021-04-17 09:53:13 +0200
committera-kenji <aks.kenji@protonmail.com>2021-04-17 15:05:34 +0200
commite5fc158503996366b82d6f089bc6e017b08492b0 (patch)
tree48f61f1329a5990b8ca021789e58fd16a981ba40
parentMerge branch 'main' of https://github.com/zellij-org/zellij into unbind-defau... (diff)
downloadsl0ppij-e5fc158503996366b82d6f089bc6e017b08492b0.tar.gz
sl0ppij-e5fc158503996366b82d6f089bc6e017b08492b0.tar.xz
sl0ppij-e5fc158503996366b82d6f089bc6e017b08492b0.zip
Add Unbind for Keybindings (#241)
* will unbind all default keybindings for now * add test for toplevel unbind * add example/default.yaml * add example/README.md
-rw-r--r--README.md14
-rw-r--r--example/README.md5
-rw-r--r--example/config.yaml1
-rw-r--r--example/default.yaml211
-rw-r--r--src/common/input/keybinds.rs9
-rw-r--r--src/common/input/unit/keybinds_test.rs31
6 files changed, 258 insertions, 13 deletions
diff --git a/README.md b/README.md
index af7e1bc4..e54e0eee 100644
--- a/README.md
+++ b/README.md
@@ -45,8 +45,11 @@ An example file can be found under `example/config.yaml`.
Zellij will look for a file `/zellij/config.yaml` in the default configuration location of your os.
-To pass a config file directly to zellij run it either with:
-`cargo run -- config [FILE]` or `zellij config [FILE]`.
+* To ignore the default config file location:
+`zellij config --clean` or `cargo make run -- config --clean`
+
+* To pass a config file directly to zellij run it either with:
+`zellij config [FILE]` or `cargo make run -- config [FILE]` .
The structure is as follows:
```
@@ -77,6 +80,13 @@ keybinds:
```
Will create a new tab on pressing either the `c` or the `d` key.
+* It is possible to unbind the default Keybindings:
+```
+keybinds:
+ unbind: true
+```
+
+
# What is the current status of the project?
Zellij is in the last stages of being VT compatible. As much as modern terminals are.
diff --git a/example/README.md b/example/README.md
new file mode 100644
index 00000000..abeb847a
--- /dev/null
+++ b/example/README.md
@@ -0,0 +1,5 @@
+# Special considerations when using the configuration:
+
+While trying to bind the newline character in the Config, use double quotes:
+
+`Ctrl: "\n"` instead of `Ctrl: '\n'`
diff --git a/example/config.yaml b/example/config.yaml
index 644d4e4f..3bb4fbfa 100644
--- a/example/config.yaml
+++ b/example/config.yaml
@@ -1,6 +1,5 @@
---
keybinds:
- unbind: true
normal:
- action: [GoToTab: 1,]
key: [F: 1,]
diff --git a/example/default.yaml b/example/default.yaml
new file mode 100644
index 00000000..4950b864
--- /dev/null
+++ b/example/default.yaml
@@ -0,0 +1,211 @@
+---
+keybinds:
+ unbind: true
+ normal:
+ - action: [SwitchToMode: Locked,]
+ key: [Ctrl: 'g',]
+ - action: [SwitchToMode: Pane,]
+ key: [Ctrl: 'p',]
+ - action: [SwitchToMode: Resize,]
+ key: [Ctrl: 'r',]
+ - action: [SwitchToMode: Tab,]
+ key: [Ctrl: 't',]
+ - action: [SwitchToMode: Scroll,]
+ key: [Ctrl: 's',]
+ - action: [Quit,]
+ key: [Ctrl: 'q',]
+ - action: [NewPane: ]
+ key: [ Alt: 'n',]
+ - action: [MoveFocus: Left,]
+ key: [ Alt: 'h',]
+ - action: [MoveFocus: Right,]
+ key: [ Alt: 'l',]
+ - action: [MoveFocus: Down,]
+ key: [ Alt: 'j',]
+ - action: [MoveFocus: Up,]
+ key: [ Alt: 'k',]
+ - action: [FocusPreviousPane,]
+ key: [ Alt: '[',]
+ - action: [FocusNextPane,]
+ key: [ Alt: ']',]
+ locked:
+ - action: [SwitchToMode: Normal,]
+ key: [Ctrl: 'g',]
+ resize:
+ - action: [SwitchToMode: Locked,]
+ key: [Ctrl: 'g']
+ - action: [SwitchToMode: Pane,]
+ key: [Ctrl: 'p', ]
+ - action: [SwitchToMode: Tab,]
+ key: [Ctrl: 't', ]
+ - action: [SwitchToMode: Normal,]
+ key: [Ctrl: 'r', Char: "\n", Char: ' ',]
+ - action: [SwitchToMode: Scroll,]
+ key: [Ctrl: 's']
+ - action: [Quit]
+ key: [Ctrl: 'q']
+ - action: [Resize: Left,]
+ key: [Char: 'h', Left, ]
+ - action: [Resize: Down,]
+ key: [Char: 'h', Down, ]
+ - action: [Resize: Up,]
+ key: [Char: 'h', Up, ]
+ - action: [Resize: Right,]
+ key: [Char: 'h', Right, ]
+ - action: [NewPane: ,]
+ key: [ Alt: 'n',]
+ - action: [MoveFocus: Left,]
+ key: [ Alt: 'h', Left,]
+ - action: [MoveFocus: Right,]
+ key: [ Alt: 'l', Right,]
+ - action: [MoveFocus: Down,]
+ key: [ Alt: 'j', Down,]
+ - action: [MoveFocus: Up,]
+ key: [ Alt: 'k', Up,]
+ - action: [FocusPreviousPane,]
+ key: [ Alt: '[',]
+ - action: [FocusNextPane,]
+ key: [ Alt: ']',]
+ pane:
+ - action: [SwitchToMode: Locked,]
+ key: [Ctrl: 'g']
+ - action: [SwitchToMode: Pane,]
+ key: [Ctrl: 'p', ]
+ - action: [SwitchToMode: Tab,]
+ key: [Ctrl: 't', ]
+ - action: [SwitchToMode: Normal,]
+ key: [Ctrl: 'r', Char: "\n", Char: ' ',]
+ - action: [SwitchToMode: Scroll,]
+ key: [Ctrl: 's']
+ - action: [Quit,]
+ key: [Ctrl: 'q',]
+ - action: [MoveFocus: Left,]
+ key: [ Alt: 'h', Left,]
+ - action: [MoveFocus: Right,]
+ key: [ Alt: 'l', Right,]
+ - action: [MoveFocus: Down,]
+ key: [ Alt: 'j', Down,]
+ - action: [MoveFocus: Up,]
+ key: [ Alt: 'k', Up,]
+ - action: [SwitchFocus,]
+ key: [Char: 'p']
+ - action: [NewPane: ,]
+ key: [Char: 'n', Alt: 'n',]
+ - action: [NewPane: Down,]
+ key: [Char: 'd', ]
+ - action: [NewPane: Right,]
+ key: [Char: 'r', ]
+ - action: [CloseFocus,]
+ key: [Char: 'x', ]
+ - action: [ToggleFocusFullscreen,]
+ key: [Char: 'f', ]
+ - action: [FocusPreviousPane,]
+ key: [ Alt: '[',]
+ - action: [FocusNextPane,]
+ key: [ Alt: ']',]
+ tab:
+ - action: [SwitchToMode: Locked,]
+ key: [Ctrl: 'g']
+ - action: [SwitchToMode: Pane,]
+ key: [Ctrl: 'p', ]
+ - action: [SwitchToMode: Normal,]
+ key: [Ctrl: 'r', Ctrl: 't', Char: "\n", Char: ' ',]
+ - action: [SwitchToMode: Scroll,]
+ key: [Ctrl: 's']
+ - action: [SwitchToMode: RenameTab, TabNameInput: [0],]
+ key: [Char: 'r']
+ - action: [Quit,]
+ key: [Ctrl: 'q',]
+ - action: [FocusPreviousPane,]
+ key: [ Alt: '[',]
+ - action: [FocusNextPane,]
+ key: [ Alt: ']',]
+ - action: [GoToPreviousTab,]
+ key: [ Char: 'h',]
+ - action: [GoToNextTab,]
+ key: [ Char: 'l', ]
+ - action: [GoToNextTab,]
+ key: [ Char: 'j', ]
+ - action: [GoToPreviousTab,]
+ key: [ Char: 'k', ]
+ - action: [NewTab,]
+ key: [ Char: 'n', ]
+ - action: [CloseTab,]
+ key: [ Char: 'x', ]
+ - action: [MoveFocus: Left,]
+ key: [ Alt: 'h',]
+ - action: [MoveFocus: Right,]
+ key: [ Alt: 'l', ]
+ - action: [MoveFocus: Down,]
+ key: [ Alt: 'j', ]
+ - action: [MoveFocus: Up,]
+ key: [ Alt: 'k', ]
+ - action: [GoToTab: 1,]
+ key: [ Char: '1', ]
+ - action: [GoToTab: 2,]
+ key: [ Char: '2', ]
+ - action: [GoToTab: 3,]
+ key: [ Char: '3', ]
+ - action: [GoToTab: 4,]
+ key: [ Char: '4', ]
+ - action: [GoToTab: 5,]
+ key: [ Char: '5', ]
+ - action: [GoToTab: 6,]
+ key: [ Char: '6', ]
+ - action: [GoToTab: 7,]
+ key: [ Char: '7', ]
+ - action: [GoToTab: 8,]
+ key: [ Char: '8', ]
+ - action: [GoToTab: 9,]
+ key: [ Char: '9', ]
+ scroll:
+ - action: [SwitchToMode: Normal,]
+ key: [Ctrl: 'r', Ctrl: 's', Char: ' ',
+ Char: "\n",]
+ - action: [SwitchToMode: Tab,]
+ key: [Ctrl: 't', ]
+ - action: [SwitchToMode: Locked,]
+ key: [Ctrl: 'g', ]
+ - action: [SwitchToMode: Pane,]
+ key: [Ctrl: 'p', ]
+ - action: [Quit,]
+ key: [Ctrl: 'q',]
+ - action: [ScrollDown,]
+ key: [Char: 'j', Down,]
+ - action: [ScrollUp,]
+ key: [Char: 'k', Up,]
+ - action: [NewPane: ,]
+ key: [ Alt: 'n',]
+ - action: [MoveFocus: Left,]
+ key: [ Alt: 'h',]
+ - action: [MoveFocus: Right,]
+ key: [ Alt: 'l',]
+ - action: [MoveFocus: Down,]
+ key: [ Alt: 'j',]
+ - action: [MoveFocus: Up,]
+ key: [ Alt: 'k',]
+ - action: [FocusPreviousPane,]
+ key: [ Alt: '[',]
+ - action: [FocusNextPane,]
+ key: [ Alt: ']',]
+ renametab:
+ - action: [SwitchToMode: Normal,]
+ key: [Ctrl: 'r', Ctrl: 's', Char: ' ', Char: 'g',]
+ - action: [SwitchToMode: Tab,]
+ key: [Char: "\n",]
+ - action: [TabNameInput: [27] , SwitchToMode: Tab,]
+ key: [Esc,]
+ - action: [NewPane: ,]
+ key: [ Alt: 'n',]
+ - action: [MoveFocus: Left,]
+ key: [ Alt: 'h',]
+ - action: [MoveFocus: Right,]
+ key: [ Alt: 'l',]
+ - action: [MoveFocus: Down,]
+ key: [ Alt: 'j',]
+ - action: [MoveFocus: Up,]
+ key: [ Alt: 'k',]
+ - action: [FocusPreviousPane,]
+ key: [ Alt: '[',]
+ - action: [FocusNextPane,]
+ key: [ Alt: ']',]
diff --git a/src/common/input/keybinds.rs b/src/common/input/keybinds.rs
index 3b57dc02..6239475e 100644
--- a/src/common/input/keybinds.rs
+++ b/src/common/input/keybinds.rs
@@ -19,6 +19,7 @@ pub struct ModeKeybinds(HashMap<Key, Vec<Action>>);
pub struct KeybindsFromYaml {
#[serde(flatten)]
keybinds: HashMap<InputMode, Vec<KeyActionUnbind>>,
+ #[serde(default)]
unbind: Unbind,
}
@@ -50,7 +51,7 @@ struct UnbindFromYaml {
#[serde(untagged)]
enum Unbind {
All(bool),
- // TODO: use the enum
+ // TODO@a-kenji: use the enum
//Keys(Vec<Key>),
}
@@ -456,6 +457,12 @@ impl From<KeyActionUnbind> for ModeKeybinds {
}
}
+impl Default for Unbind {
+ fn default() -> Unbind {
+ Unbind::All(false)
+ }
+}
+
// The unit test location.
#[cfg(test)]
#[path = "./unit/keybinds_test.rs"]
diff --git a/src/common/input/unit/keybinds_test.rs b/src/common/input/unit/keybinds_test.rs
index 6411d017..e0d78b62 100644
--- a/src/common/input/unit/keybinds_test.rs
+++ b/src/common/input/unit/keybinds_test.rs
@@ -124,12 +124,25 @@ fn from_keyaction_from_yaml_to_mode_keybindings() {
assert_eq!(expected, ModeKeybinds::from(keyaction));
}
-//#[test]
-//fn from_keybinds_from_yaml_to_keybinds(){
-//let mut keybinds_from_yaml = KeybindsFromYaml(HashMap<InputMode, Vec<KeyActionFromYaml>>);
-//let actions = vec![Action::NoOp, Action::GoToTab(1), ];
-//let keyaction = KeyActionFromYaml {
-//action : actions.clone(),
-//key : vec![ Key::F(1), Key::Backspace , Key::Char('t'), ],
-//};
-//}
+#[test]
+fn toplevel_unbind_unbinds_all() {
+ let from_yaml = KeybindsFromYaml {
+ unbind: Unbind::All(true),
+ keybinds: HashMap::new(),
+ };
+
+ let keybinds_from_yaml = Keybinds::get_default_keybinds_with_config(Some(from_yaml));
+
+ assert_eq!(keybinds_from_yaml, Keybinds::new());
+}
+
+fn no_unbind_unbinds_none() {
+ let from_yaml = KeybindsFromYaml {
+ unbind: Unbind::All(false),
+ keybinds: HashMap::new(),
+ };
+
+ let keybinds_from_yaml = Keybinds::get_default_keybinds_with_config(Some(from_yaml));
+
+ assert_eq!(keybinds_from_yaml, Keybinds::new());
+}