diff options
-rw-r--r-- | include/commands.h | 1 | ||||
-rw-r--r-- | sway/commands.c | 9 | ||||
-rw-r--r-- | sway/stringop.c | 11 |
3 files changed, 11 insertions, 10 deletions
diff --git a/include/commands.h b/include/commands.h index e521306c..0a38ce43 100644 --- a/include/commands.h +++ b/include/commands.h | |||
@@ -13,7 +13,6 @@ struct cmd_handler { | |||
13 | } config_type; | 13 | } config_type; |
14 | }; | 14 | }; |
15 | 15 | ||
16 | struct cmd_handler *find_handler(char *line); | ||
17 | bool handle_command(char *command); | 16 | bool handle_command(char *command); |
18 | // Handles commands during config | 17 | // Handles commands during config |
19 | bool config_command(char *command); | 18 | bool config_command(char *command); |
diff --git a/sway/commands.c b/sway/commands.c index 423b576f..09ee91e8 100644 --- a/sway/commands.c +++ b/sway/commands.c | |||
@@ -368,26 +368,27 @@ static bool cmd_mode(int argc, char **argv) { | |||
368 | if (!checkarg(argc, "move", EXPECTED_AT_LEAST, 1)) { | 368 | if (!checkarg(argc, "move", EXPECTED_AT_LEAST, 1)) { |
369 | return false; | 369 | return false; |
370 | } | 370 | } |
371 | const char *mode_name = argv[0]; | 371 | bool mode_make = strcmp(argv[argc-1], "{") == 0; |
372 | const char *mode_name = join_args(argv, argc - mode_make); | ||
372 | struct sway_mode *mode = NULL; | 373 | struct sway_mode *mode = NULL; |
373 | // Find mode | 374 | // Find mode |
374 | int i, len = config->modes->length; | 375 | int i, len = config->modes->length; |
375 | for (i = 0; i < len; ++i) { | 376 | for (i = 0; i < len; ++i) { |
376 | struct sway_mode *find = config->modes->items[i]; | 377 | struct sway_mode *find = config->modes->items[i]; |
377 | if (strcasecmp(find->name, mode_name)==0) { | 378 | if (strcasecmp(find->name, mode_name) == 0) { |
378 | mode = find; | 379 | mode = find; |
379 | break; | 380 | break; |
380 | } | 381 | } |
381 | } | 382 | } |
382 | // Create mode if it doesnt exist | 383 | // Create mode if it doesnt exist |
383 | if (!mode && argc >= 2 && strncmp(argv[1],"{",1) == 0) { | 384 | if (!mode && mode_make) { |
384 | mode = malloc(sizeof*mode); | 385 | mode = malloc(sizeof*mode); |
385 | mode->name = strdup(mode_name); | 386 | mode->name = strdup(mode_name); |
386 | mode->bindings = create_list(); | 387 | mode->bindings = create_list(); |
387 | list_add(config->modes, mode); | 388 | list_add(config->modes, mode); |
388 | } | 389 | } |
389 | if (!mode) { | 390 | if (!mode) { |
390 | sway_log(L_ERROR, "Invalide mode `%s'", mode_name); | 391 | sway_log(L_ERROR, "Unknown mode `%s'", mode_name); |
391 | return false; | 392 | return false; |
392 | } | 393 | } |
393 | sway_log(L_DEBUG, "Switching to mode `%s'",mode->name); | 394 | sway_log(L_DEBUG, "Switching to mode `%s'",mode->name); |
diff --git a/sway/stringop.c b/sway/stringop.c index 7de6eded..270e673a 100644 --- a/sway/stringop.c +++ b/sway/stringop.c | |||
@@ -99,7 +99,7 @@ void free_flat_list(list_t *list) { | |||
99 | char **split_args(const char *start, int *argc) { | 99 | char **split_args(const char *start, int *argc) { |
100 | *argc = 0; | 100 | *argc = 0; |
101 | int alloc = 2; | 101 | int alloc = 2; |
102 | char **parts = malloc(sizeof(char *) * alloc); | 102 | char **argv = malloc(sizeof(char *) * alloc); |
103 | bool in_token = false; | 103 | bool in_token = false; |
104 | bool in_string = false; | 104 | bool in_string = false; |
105 | bool in_char = false; | 105 | bool in_char = false; |
@@ -132,15 +132,16 @@ char **split_args(const char *start, int *argc) { | |||
132 | token[end - start] = '\0'; | 132 | token[end - start] = '\0'; |
133 | strip_quotes(token); | 133 | strip_quotes(token); |
134 | unescape_string(token); | 134 | unescape_string(token); |
135 | parts[*argc] = token; | 135 | argv[*argc] = token; |
136 | if (++*argc == alloc) { | 136 | if (++*argc + 1 == alloc) { |
137 | parts = realloc(parts, (alloc *= 2) * sizeof(char *)); | 137 | argv = realloc(argv, (alloc *= 2) * sizeof(char *)); |
138 | } | 138 | } |
139 | } | 139 | } |
140 | in_token = false; | 140 | in_token = false; |
141 | escaped = false; | 141 | escaped = false; |
142 | } | 142 | } |
143 | return parts; | 143 | argv[*argc] = NULL; |
144 | return argv; | ||
144 | } | 145 | } |
145 | 146 | ||
146 | void free_argv(int argc, char **argv) { | 147 | void free_argv(int argc, char **argv) { |