summaryrefslogtreecommitdiff
path: root/sway/commands.c
diff options
context:
space:
mode:
authorMikkel Oscar Lyderik <[email protected]>2016-01-07 21:43:00 +0100
committerMikkel Oscar Lyderik <[email protected]>2016-01-07 21:43:00 +0100
commit55f63935ab9319da8e145b49edc1a7ae3e6782c6 (patch)
treea854f1068b7360952835b38bc38a1138bf1de7f0 /sway/commands.c
parent8f5de70c93b2afaab0dd7d384c58ff3d3007193c (diff)
Implement bindsym --release
This is a "simple" version of --release (same as i3) that only supports a binding that contain one normal key. e.g.: bindsym --release $mod+x exec somthing-fun I didn't bother implementing it for a combination like `$mod+x+z` since it is a bit tricky to get right and also a bit weird to actually do on a keyboard.
Diffstat (limited to 'sway/commands.c')
-rw-r--r--sway/commands.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/sway/commands.c b/sway/commands.c
index 4e5bc712..6a316596 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -163,9 +163,25 @@ static struct cmd_results *cmd_bindsym(int argc, char **argv) {
return cmd_results_new(CMD_FAILURE, "bindsym", "Can only be used in config file.");
}
+
struct sway_binding *binding = malloc(sizeof(struct sway_binding));
binding->keys = create_list();
binding->modifiers = 0;
+ binding->release = false;
+
+ // Handle --release
+ if (strcmp("--release", argv[0]) == 0) {
+ if (argc >= 3) {
+ binding->release = true;
+ argv++;
+ argc--;
+ } else {
+ return cmd_results_new(CMD_FAILURE, "bindsym",
+ "Invalid bindsym command"
+ "(expected more than 2 arguments, got %d)", argc);
+ }
+ }
+
binding->command = join_args(argv + 1, argc - 1);
list_t *split = split_string(argv[0], "+");