git.lucas.co / cce-ui
GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git

commit691c7e357f8eaca3bae9edc25da59f07466945f7
parent1c742a3fe7
authorLucas Galante <[email protected]>
date2026-07-01 12:10
Map built-in keybindings to cce control spawn commands in UI

 src/widget/input/keybinds_control.rs | 40 +++++++++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 7 deletions(-)

diff --git a/src/widget/input/keybinds_control.rs b/src/widget/input/keybinds_control.rs
index 77c94c9..b5952a2 100644
--- a/src/widget/input/keybinds_control.rs
+++ b/src/widget/input/keybinds_control.rs
@@ -69,11 +69,28 @@ impl KeybindsControl {
                 } else {
                     format!("{}+{}", mods, key)
                 };
-                let cmd_val = if action == "spawn" {
-                    command
+                
+                let mut cmd_val = if action == "spawn" {
+                    command.clone()
+                } else if action == "toggle" {
+                    command.clone()
                 } else {
-                    action
+                    action.clone()
                 };
+
+                if cmd_val.starts_with("cce control ") {
+                    let sub = &cmd_val["cce control ".len()..];
+                    if sub.starts_with("view ") {
+                        let num = &sub["view ".len()..];
+                        cmd_val = format!("view-{}", num);
+                    } else if sub.starts_with("set-tag ") {
+                        let num = &sub["set-tag ".len()..];
+                        cmd_val = format!("set-tag-{}", num);
+                    } else {
+                        cmd_val = sub.to_string();
+                    }
+                }
+                
                 loaded.push((binding, cmd_val));
             }
         }
@@ -100,10 +117,10 @@ impl KeybindsControl {
             };
 
             let built_in_actions = [
-                "expose", "close", "focus-next", "focus-prev", "mode-next",
+                "expose", "close", "minimize", "focus-next", "focus-prev", "mode-next",
                 "mode-next-shared", "fullscreen", "exit", "reload",
-                "view-1", "view-2", "view-3", "view-4",
-                "set-tag-1", "set-tag-2", "set-tag-3", "set-tag-4"
+                "zoom-in", "zoom-out", "zoom-reset", "pan-left", "pan-right", "pan-up", "pan-down",
+                "overlay-left", "overlay-right"
             ];
             
             let mut obj = serde_json::Map::new();
@@ -111,7 +128,16 @@ impl KeybindsControl {
             obj.insert("key".to_string(), serde_json::Value::String(key));
             
             if built_in_actions.contains(&cmd_val.as_str()) {
-                obj.insert("action".to_string(), serde_json::Value::String(cmd_val));
+                obj.insert("action".to_string(), serde_json::Value::String("spawn".to_string()));
+                obj.insert("command".to_string(), serde_json::Value::String(format!("cce control {}", cmd_val)));
+            } else if cmd_val.starts_with("view-") {
+                let num = &cmd_val["view-".len()..];
+                obj.insert("action".to_string(), serde_json::Value::String("spawn".to_string()));
+                obj.insert("command".to_string(), serde_json::Value::String(format!("cce control view {}", num)));
+            } else if cmd_val.starts_with("set-tag-") {
+                let num = &cmd_val["set-tag-".len()..];
+                obj.insert("action".to_string(), serde_json::Value::String("spawn".to_string()));
+                obj.insert("command".to_string(), serde_json::Value::String(format!("cce control set-tag {}", num)));
             } else {
                 obj.insert("action".to_string(), serde_json::Value::String("spawn".to_string()));
                 obj.insert("command".to_string(), serde_json::Value::String(cmd_val));