diff options
Diffstat (limited to 'sway/commands.c')
-rw-r--r-- | sway/commands.c | 167 |
1 files changed, 74 insertions, 93 deletions
diff --git a/sway/commands.c b/sway/commands.c index 3ed0c8db..e79746ae 100644 --- a/sway/commands.c +++ b/sway/commands.c | |||
@@ -21,35 +21,6 @@ | |||
21 | swayc_t *sp_view; | 21 | swayc_t *sp_view; |
22 | int sp_index = 0; | 22 | int sp_index = 0; |
23 | 23 | ||
24 | // Commands | ||
25 | static sway_cmd cmd_bindsym; | ||
26 | static sway_cmd cmd_orientation; | ||
27 | static sway_cmd cmd_exec; | ||
28 | static sway_cmd cmd_exec_always; | ||
29 | static sway_cmd cmd_exit; | ||
30 | static sway_cmd cmd_floating; | ||
31 | static sway_cmd cmd_floating_mod; | ||
32 | static sway_cmd cmd_focus; | ||
33 | static sway_cmd cmd_focus_follows_mouse; | ||
34 | static sway_cmd cmd_for_window; | ||
35 | static sway_cmd cmd_fullscreen; | ||
36 | static sway_cmd cmd_gaps; | ||
37 | static sway_cmd cmd_kill; | ||
38 | static sway_cmd cmd_layout; | ||
39 | static sway_cmd cmd_log_colors; | ||
40 | static sway_cmd cmd_mode; | ||
41 | static sway_cmd cmd_move; | ||
42 | static sway_cmd cmd_output; | ||
43 | static sway_cmd cmd_reload; | ||
44 | static sway_cmd cmd_resize; | ||
45 | static sway_cmd cmd_scratchpad; | ||
46 | static sway_cmd cmd_set; | ||
47 | static sway_cmd cmd_split; | ||
48 | static sway_cmd cmd_splith; | ||
49 | static sway_cmd cmd_splitv; | ||
50 | static sway_cmd cmd_workspace; | ||
51 | static sway_cmd cmd_ws_auto_back_and_forth; | ||
52 | |||
53 | static struct modifier_key { | 24 | static struct modifier_key { |
54 | char *name; | 25 | char *name; |
55 | uint32_t mod; | 26 | uint32_t mod; |
@@ -123,7 +94,7 @@ static int bindsym_sort(const void *_lbind, const void *_rbind) { | |||
123 | return (rbind->keys->length + rmod) - (lbind->keys->length + lmod); | 94 | return (rbind->keys->length + rmod) - (lbind->keys->length + lmod); |
124 | } | 95 | } |
125 | 96 | ||
126 | enum cmd_status cmd_bindsym(char *criteria, int argc, char **argv) { | 97 | static enum cmd_status cmd_bindsym(int argc, char **argv) { |
127 | if (!checkarg(argc, "bindsym", EXPECTED_MORE_THAN, 1) | 98 | if (!checkarg(argc, "bindsym", EXPECTED_MORE_THAN, 1) |
128 | || !config->reading) { | 99 | || !config->reading) { |
129 | return CMD_FAILURE; | 100 | return CMD_FAILURE; |
@@ -132,7 +103,7 @@ enum cmd_status cmd_bindsym(char *criteria, int argc, char **argv) { | |||
132 | struct sway_binding *binding = malloc(sizeof(struct sway_binding)); | 103 | struct sway_binding *binding = malloc(sizeof(struct sway_binding)); |
133 | binding->keys = create_list(); | 104 | binding->keys = create_list(); |
134 | binding->modifiers = 0; | 105 | binding->modifiers = 0; |
135 | binding->command = join_args(argc - 1, argv + 1); | 106 | binding->command = join_args(argv + 1, argc - 1); |
136 | 107 | ||
137 | list_t *split = split_string(argv[0], "+"); | 108 | list_t *split = split_string(argv[0], "+"); |
138 | int i; | 109 | int i; |
@@ -173,7 +144,7 @@ enum cmd_status cmd_bindsym(char *criteria, int argc, char **argv) { | |||
173 | return CMD_SUCCESS; | 144 | return CMD_SUCCESS; |
174 | } | 145 | } |
175 | 146 | ||
176 | enum cmd_status cmd_exec_always(char *criteria, int argc, char **argv) { | 147 | static enum cmd_status cmd_exec_always(int argc, char **argv) { |
177 | if (!checkarg(argc, "exec_always", EXPECTED_MORE_THAN, 0)) { | 148 | if (!checkarg(argc, "exec_always", EXPECTED_MORE_THAN, 0)) { |
178 | return CMD_FAILURE; | 149 | return CMD_FAILURE; |
179 | } | 150 | } |
@@ -189,7 +160,7 @@ enum cmd_status cmd_exec_always(char *criteria, int argc, char **argv) { | |||
189 | } | 160 | } |
190 | /* Child process */ | 161 | /* Child process */ |
191 | if (pid == 0) { | 162 | if (pid == 0) { |
192 | char *args = join_args(argc, argv); | 163 | char *args = join_args(argv, argc); |
193 | sway_log(L_DEBUG, "Executing %s", args); | 164 | sway_log(L_DEBUG, "Executing %s", args); |
194 | execl("/bin/sh", "sh", "-c", args, (char *)NULL); | 165 | execl("/bin/sh", "sh", "-c", args, (char *)NULL); |
195 | /* Execl doesnt return unless failure */ | 166 | /* Execl doesnt return unless failure */ |
@@ -201,17 +172,17 @@ enum cmd_status cmd_exec_always(char *criteria, int argc, char **argv) { | |||
201 | return CMD_SUCCESS; | 172 | return CMD_SUCCESS; |
202 | } | 173 | } |
203 | 174 | ||
204 | enum cmd_status cmd_exec(char *criteria, int argc, char **argv) { | 175 | static enum cmd_status cmd_exec(int argc, char **argv) { |
205 | if (!config->active) { | 176 | if (!config->active) { |
206 | return CMD_DEFER; | 177 | return CMD_DEFER; |
207 | } | 178 | } |
208 | if (config->reloading) { | 179 | if (config->reloading) { |
209 | char *args = join_args(argc, argv); | 180 | char *args = join_args(argv, argc); |
210 | sway_log(L_DEBUG, "Ignoring 'exec %s' due to reload", args); | 181 | sway_log(L_DEBUG, "Ignoring 'exec %s' due to reload", args); |
211 | free(args); | 182 | free(args); |
212 | return CMD_SUCCESS; | 183 | return CMD_SUCCESS; |
213 | } | 184 | } |
214 | return cmd_exec_always(criteria, argc, argv); | 185 | return cmd_exec_always(argc, argv); |
215 | } | 186 | } |
216 | 187 | ||
217 | static void kill_views(swayc_t *container, void *data) { | 188 | static void kill_views(swayc_t *container, void *data) { |
@@ -220,19 +191,18 @@ static void kill_views(swayc_t *container, void *data) { | |||
220 | } | 191 | } |
221 | } | 192 | } |
222 | 193 | ||
223 | enum cmd_status cmd_exit(char *criteria, int argc, char **argv) { | 194 | static enum cmd_status cmd_exit(int argc, char **argv) { |
224 | (void) argv; | ||
225 | if (!checkarg(argc, "exit", EXPECTED_EQUAL_TO, 0) | 195 | if (!checkarg(argc, "exit", EXPECTED_EQUAL_TO, 0) |
226 | || config->reading || !config->active) { | 196 | || config->reading || !config->active) { |
227 | return CMD_FAILURE; | 197 | return CMD_FAILURE; |
228 | } | 198 | } |
229 | // Close all views | 199 | // Close all views |
230 | swayc_map(kill_views, NULL); | 200 | container_map(&root_container, kill_views, NULL); |
231 | sway_terminate(); | 201 | sway_terminate(); |
232 | return CMD_SUCCESS; | 202 | return CMD_SUCCESS; |
233 | } | 203 | } |
234 | 204 | ||
235 | enum cmd_status cmd_floating(char *criteria, int argc, char **argv) { | 205 | static enum cmd_status cmd_floating(int argc, char **argv) { |
236 | if (!checkarg(argc, "floating", EXPECTED_EQUAL_TO, 1) | 206 | if (!checkarg(argc, "floating", EXPECTED_EQUAL_TO, 1) |
237 | || config->reading || !config->active) { | 207 | || config->reading || !config->active) { |
238 | return CMD_FAILURE; | 208 | return CMD_FAILURE; |
@@ -294,7 +264,7 @@ enum cmd_status cmd_floating(char *criteria, int argc, char **argv) { | |||
294 | return CMD_SUCCESS; | 264 | return CMD_SUCCESS; |
295 | } | 265 | } |
296 | 266 | ||
297 | enum cmd_status cmd_floating_mod(char *criteria, int argc, char **argv) { | 267 | static enum cmd_status cmd_floating_mod(int argc, char **argv) { |
298 | if (!checkarg(argc, "floating_modifier", EXPECTED_EQUAL_TO, 1) | 268 | if (!checkarg(argc, "floating_modifier", EXPECTED_EQUAL_TO, 1) |
299 | || !config->reading) { | 269 | || !config->reading) { |
300 | return CMD_FAILURE; | 270 | return CMD_FAILURE; |
@@ -319,7 +289,7 @@ enum cmd_status cmd_floating_mod(char *criteria, int argc, char **argv) { | |||
319 | return CMD_SUCCESS; | 289 | return CMD_SUCCESS; |
320 | } | 290 | } |
321 | 291 | ||
322 | enum cmd_status cmd_focus(char *criteria, int argc, char **argv) { | 292 | static enum cmd_status cmd_focus(int argc, char **argv) { |
323 | static int floating_toggled_index = 0; | 293 | static int floating_toggled_index = 0; |
324 | static int tiled_toggled_index = 0; | 294 | static int tiled_toggled_index = 0; |
325 | if (!checkarg(argc, "focus", EXPECTED_EQUAL_TO, 1) | 295 | if (!checkarg(argc, "focus", EXPECTED_EQUAL_TO, 1) |
@@ -377,7 +347,7 @@ enum cmd_status cmd_focus(char *criteria, int argc, char **argv) { | |||
377 | return CMD_SUCCESS; | 347 | return CMD_SUCCESS; |
378 | } | 348 | } |
379 | 349 | ||
380 | enum cmd_status cmd_focus_follows_mouse(char *criteria, int argc, char **argv) { | 350 | static enum cmd_status cmd_focus_follows_mouse(int argc, char **argv) { |
381 | if (!checkarg(argc, "focus_follows_mouse", EXPECTED_EQUAL_TO, 1)) { | 351 | if (!checkarg(argc, "focus_follows_mouse", EXPECTED_EQUAL_TO, 1)) { |
382 | return CMD_FAILURE; | 352 | return CMD_FAILURE; |
383 | } | 353 | } |
@@ -386,21 +356,6 @@ enum cmd_status cmd_focus_follows_mouse(char *criteria, int argc, char **argv) { | |||
386 | return CMD_SUCCESS; | 356 | return CMD_SUCCESS; |
387 | } | 357 | } |
388 | 358 | ||
389 | static void debug_for_window(swayc_t *view, void *data) { | ||
390 | layout_log(view, 0); | ||
391 | } | ||
392 | |||
393 | enum cmd_status cmd_for_window(char *criteria, int argc, char **argv) { | ||
394 | if (!checkarg(argc, "for_window", EXPECTED_AT_LEAST, 1)) { | ||
395 | return CMD_FAILURE; | ||
396 | } | ||
397 | //TODO | ||
398 | void *re = compile_regex(argv[0]); | ||
399 | swayc_map_by_test(debug_for_window, test_view_title_regex, NULL, re); | ||
400 | free_regex(re); | ||
401 | return CMD_FAILURE; | ||
402 | } | ||
403 | |||
404 | static void hide_view_in_scratchpad(swayc_t *sp_view) { | 359 | static void hide_view_in_scratchpad(swayc_t *sp_view) { |
405 | if(sp_view == NULL) { | 360 | if(sp_view == NULL) { |
406 | return; | 361 | return; |
@@ -417,7 +372,7 @@ static void hide_view_in_scratchpad(swayc_t *sp_view) { | |||
417 | set_focused_container(container_under_pointer()); | 372 | set_focused_container(container_under_pointer()); |
418 | } | 373 | } |
419 | 374 | ||
420 | enum cmd_status cmd_mode(char *criteria, int argc, char **argv) { | 375 | static enum cmd_status cmd_mode(int argc, char **argv) { |
421 | if (!checkarg(argc, "move", EXPECTED_AT_LEAST, 1)) { | 376 | if (!checkarg(argc, "move", EXPECTED_AT_LEAST, 1)) { |
422 | return CMD_FAILURE; | 377 | return CMD_FAILURE; |
423 | } | 378 | } |
@@ -426,7 +381,7 @@ enum cmd_status cmd_mode(char *criteria, int argc, char **argv) { | |||
426 | return CMD_FAILURE; | 381 | return CMD_FAILURE; |
427 | } | 382 | } |
428 | 383 | ||
429 | char *mode_name = join_args(argc - mode_make, argv); | 384 | char *mode_name = join_args(argv, argc - mode_make); |
430 | struct sway_mode *mode = NULL; | 385 | struct sway_mode *mode = NULL; |
431 | // Find mode | 386 | // Find mode |
432 | int i, len = config->modes->length; | 387 | int i, len = config->modes->length; |
@@ -456,7 +411,7 @@ enum cmd_status cmd_mode(char *criteria, int argc, char **argv) { | |||
456 | return CMD_SUCCESS; | 411 | return CMD_SUCCESS; |
457 | } | 412 | } |
458 | 413 | ||
459 | enum cmd_status cmd_move(char *criteria, int argc, char **argv) { | 414 | static enum cmd_status cmd_move(int argc, char **argv) { |
460 | if (!checkarg(argc, "move", EXPECTED_AT_LEAST, 1) | 415 | if (!checkarg(argc, "move", EXPECTED_AT_LEAST, 1) |
461 | || config->reading || !config->active) { | 416 | || config->reading || !config->active) { |
462 | return CMD_FAILURE; | 417 | return CMD_FAILURE; |
@@ -489,7 +444,11 @@ enum cmd_status cmd_move(char *criteria, int argc, char **argv) { | |||
489 | // move "container to workspace number x" | 444 | // move "container to workspace number x" |
490 | ws_name = argv[4]; | 445 | ws_name = argv[4]; |
491 | } | 446 | } |
492 | swayc_t *ws = new_workspace(NULL, ws_name); | 447 | |
448 | swayc_t *ws = workspace_by_name(ws_name); | ||
449 | if (ws == NULL) { | ||
450 | ws = workspace_create(ws_name); | ||
451 | } | ||
493 | move_container_to(view, get_focused_container(ws)); | 452 | move_container_to(view, get_focused_container(ws)); |
494 | } else if (strcasecmp(argv[0], "scratchpad") == 0) { | 453 | } else if (strcasecmp(argv[0], "scratchpad") == 0) { |
495 | if (view->type != C_CONTAINER && view->type != C_VIEW) { | 454 | if (view->type != C_CONTAINER && view->type != C_VIEW) { |
@@ -523,7 +482,7 @@ enum cmd_status cmd_move(char *criteria, int argc, char **argv) { | |||
523 | return CMD_SUCCESS; | 482 | return CMD_SUCCESS; |
524 | } | 483 | } |
525 | 484 | ||
526 | enum cmd_status cmd_orientation(char *criteria, int argc, char **argv) { | 485 | static enum cmd_status cmd_orientation(int argc, char **argv) { |
527 | if (!checkarg(argc, "orientation", EXPECTED_EQUAL_TO, 1) | 486 | if (!checkarg(argc, "orientation", EXPECTED_EQUAL_TO, 1) |
528 | || !config->reading) { | 487 | || !config->reading) { |
529 | return CMD_FAILURE; | 488 | return CMD_FAILURE; |
@@ -540,7 +499,7 @@ enum cmd_status cmd_orientation(char *criteria, int argc, char **argv) { | |||
540 | return CMD_SUCCESS; | 499 | return CMD_SUCCESS; |
541 | } | 500 | } |
542 | 501 | ||
543 | enum cmd_status cmd_output(char *criteria, int argc, char **argv) { | 502 | static enum cmd_status cmd_output(int argc, char **argv) { |
544 | if (!checkarg(argc, "output", EXPECTED_AT_LEAST, 1)) { | 503 | if (!checkarg(argc, "output", EXPECTED_AT_LEAST, 1)) { |
545 | return CMD_FAILURE; | 504 | return CMD_FAILURE; |
546 | } | 505 | } |
@@ -605,7 +564,7 @@ enum cmd_status cmd_output(char *criteria, int argc, char **argv) { | |||
605 | return CMD_SUCCESS; | 564 | return CMD_SUCCESS; |
606 | } | 565 | } |
607 | 566 | ||
608 | enum cmd_status cmd_gaps(char *criteria, int argc, char **argv) { | 567 | static enum cmd_status cmd_gaps(int argc, char **argv) { |
609 | if (!checkarg(argc, "gaps", EXPECTED_AT_LEAST, 1)) { | 568 | if (!checkarg(argc, "gaps", EXPECTED_AT_LEAST, 1)) { |
610 | return CMD_FAILURE; | 569 | return CMD_FAILURE; |
611 | } | 570 | } |
@@ -739,14 +698,15 @@ enum cmd_status cmd_gaps(char *criteria, int argc, char **argv) { | |||
739 | top = &root_container; | 698 | top = &root_container; |
740 | } | 699 | } |
741 | int top_gap = top->gaps; | 700 | int top_gap = top->gaps; |
742 | swayc_map_r(top, method == SET ? set_gaps : add_gaps, &amount); | 701 | container_map(top, method == SET ? set_gaps : add_gaps, &amount); |
743 | top->gaps = top_gap; | 702 | top->gaps = top_gap; |
744 | arrange_windows(top, -1, -1); | 703 | arrange_windows(top, -1, -1); |
745 | } | 704 | } |
705 | |||
746 | return CMD_SUCCESS; | 706 | return CMD_SUCCESS; |
747 | } | 707 | } |
748 | 708 | ||
749 | enum cmd_status cmd_kill(char *criteria, int argc, char **argv) { | 709 | static enum cmd_status cmd_kill(int argc, char **argv) { |
750 | if (config->reading || !config->active) { | 710 | if (config->reading || !config->active) { |
751 | return CMD_FAILURE; | 711 | return CMD_FAILURE; |
752 | } | 712 | } |
@@ -755,7 +715,7 @@ enum cmd_status cmd_kill(char *criteria, int argc, char **argv) { | |||
755 | return CMD_SUCCESS; | 715 | return CMD_SUCCESS; |
756 | } | 716 | } |
757 | 717 | ||
758 | enum cmd_status cmd_layout(char *criteria, int argc, char **argv) { | 718 | static enum cmd_status cmd_layout(int argc, char **argv) { |
759 | if (!checkarg(argc, "layout", EXPECTED_MORE_THAN, 0) | 719 | if (!checkarg(argc, "layout", EXPECTED_MORE_THAN, 0) |
760 | || config->reading || !config->active) { | 720 | || config->reading || !config->active) { |
761 | return CMD_FAILURE; | 721 | return CMD_FAILURE; |
@@ -781,7 +741,7 @@ enum cmd_status cmd_layout(char *criteria, int argc, char **argv) { | |||
781 | return CMD_SUCCESS; | 741 | return CMD_SUCCESS; |
782 | } | 742 | } |
783 | 743 | ||
784 | enum cmd_status cmd_reload(char *criteria, int argc, char **argv) { | 744 | static enum cmd_status cmd_reload(int argc, char **argv) { |
785 | if (!checkarg(argc, "reload", EXPECTED_EQUAL_TO, 0) | 745 | if (!checkarg(argc, "reload", EXPECTED_EQUAL_TO, 0) |
786 | || config->reading | 746 | || config->reading |
787 | || !load_config(NULL)) { | 747 | || !load_config(NULL)) { |
@@ -791,7 +751,7 @@ enum cmd_status cmd_reload(char *criteria, int argc, char **argv) { | |||
791 | return CMD_SUCCESS; | 751 | return CMD_SUCCESS; |
792 | } | 752 | } |
793 | 753 | ||
794 | enum cmd_status cmd_resize(char *criteria, int argc, char **argv) { | 754 | static enum cmd_status cmd_resize(int argc, char **argv) { |
795 | if (!checkarg(argc, "resize", EXPECTED_AT_LEAST, 3) | 755 | if (!checkarg(argc, "resize", EXPECTED_AT_LEAST, 3) |
796 | || config->reading || !config->active) { | 756 | || config->reading || !config->active) { |
797 | return CMD_FAILURE; | 757 | return CMD_FAILURE; |
@@ -821,7 +781,7 @@ enum cmd_status cmd_resize(char *criteria, int argc, char **argv) { | |||
821 | return CMD_SUCCESS; | 781 | return CMD_SUCCESS; |
822 | } | 782 | } |
823 | 783 | ||
824 | static swayc_t *fetch_view_from_scratchpad(void) { | 784 | static swayc_t *fetch_view_from_scratchpad() { |
825 | if (sp_index >= scratchpad->length) { | 785 | if (sp_index >= scratchpad->length) { |
826 | sp_index = 0; | 786 | sp_index = 0; |
827 | } | 787 | } |
@@ -866,7 +826,7 @@ void remove_view_from_scratchpad(swayc_t *view) { | |||
866 | } | 826 | } |
867 | } | 827 | } |
868 | 828 | ||
869 | enum cmd_status cmd_scratchpad(char *criteria, int argc, char **argv) { | 829 | static enum cmd_status cmd_scratchpad(int argc, char **argv) { |
870 | if (!checkarg(argc, "scratchpad", EXPECTED_EQUAL_TO, 1) | 830 | if (!checkarg(argc, "scratchpad", EXPECTED_EQUAL_TO, 1) |
871 | || config->reading || !config->active) { | 831 | || config->reading || !config->active) { |
872 | return CMD_FAILURE; | 832 | return CMD_FAILURE; |
@@ -900,7 +860,7 @@ static int compare_set(const void *_l, const void *_r) { | |||
900 | return strlen((*r)->name) - strlen((*l)->name); | 860 | return strlen((*r)->name) - strlen((*l)->name); |
901 | } | 861 | } |
902 | 862 | ||
903 | enum cmd_status cmd_set(char *criteria, int argc, char **argv) { | 863 | static enum cmd_status cmd_set(int argc, char **argv) { |
904 | if (!checkarg(argc, "set", EXPECTED_AT_LEAST, 2) | 864 | if (!checkarg(argc, "set", EXPECTED_AT_LEAST, 2) |
905 | || !config->reading) { | 865 | || !config->reading) { |
906 | return CMD_FAILURE; | 866 | return CMD_FAILURE; |
@@ -923,11 +883,11 @@ enum cmd_status cmd_set(char *criteria, int argc, char **argv) { | |||
923 | list_add(config->symbols, var); | 883 | list_add(config->symbols, var); |
924 | list_sort(config->symbols, compare_set); | 884 | list_sort(config->symbols, compare_set); |
925 | } | 885 | } |
926 | var->value = join_args(argc - 1, argv + 1); | 886 | var->value = join_args(argv + 1, argc - 1); |
927 | return CMD_SUCCESS; | 887 | return CMD_SUCCESS; |
928 | } | 888 | } |
929 | 889 | ||
930 | static enum cmd_status _do_split(char *criteria, int argc, char **argv, int layout) { | 890 | static enum cmd_status _do_split(int argc, char **argv, int layout) { |
931 | char *name = layout == L_VERT ? "splitv" : | 891 | char *name = layout == L_VERT ? "splitv" : |
932 | layout == L_HORIZ ? "splith" : "split"; | 892 | layout == L_HORIZ ? "splith" : "split"; |
933 | if (!checkarg(argc, name, EXPECTED_EQUAL_TO, 0) | 893 | if (!checkarg(argc, name, EXPECTED_EQUAL_TO, 0) |
@@ -959,16 +919,16 @@ static enum cmd_status _do_split(char *criteria, int argc, char **argv, int layo | |||
959 | return CMD_SUCCESS; | 919 | return CMD_SUCCESS; |
960 | } | 920 | } |
961 | 921 | ||
962 | enum cmd_status cmd_split(char *criteria, int argc, char **argv) { | 922 | static enum cmd_status cmd_split(int argc, char **argv) { |
963 | if (!checkarg(argc, "split", EXPECTED_EQUAL_TO, 1) | 923 | if (!checkarg(argc, "split", EXPECTED_EQUAL_TO, 1) |
964 | || config->reading || !config->active) { | 924 | || config->reading || !config->active) { |
965 | return CMD_FAILURE; | 925 | return CMD_FAILURE; |
966 | } | 926 | } |
967 | 927 | ||
968 | if (strcasecmp(argv[0], "v") == 0 || strcasecmp(argv[0], "vertical") == 0) { | 928 | if (strcasecmp(argv[0], "v") == 0 || strcasecmp(argv[0], "vertical") == 0) { |
969 | _do_split(criteria, argc - 1, argv + 1, L_VERT); | 929 | _do_split(argc - 1, argv + 1, L_VERT); |
970 | } else if (strcasecmp(argv[0], "h") == 0 || strcasecmp(argv[0], "horizontal") == 0) { | 930 | } else if (strcasecmp(argv[0], "h") == 0 || strcasecmp(argv[0], "horizontal") == 0) { |
971 | _do_split(criteria, argc - 1, argv + 1, L_HORIZ); | 931 | _do_split(argc - 1, argv + 1, L_HORIZ); |
972 | } else { | 932 | } else { |
973 | sway_log(L_ERROR, "Invalid split command (expected either horiziontal or vertical)."); | 933 | sway_log(L_ERROR, "Invalid split command (expected either horiziontal or vertical)."); |
974 | return CMD_FAILURE; | 934 | return CMD_FAILURE; |
@@ -976,15 +936,15 @@ enum cmd_status cmd_split(char *criteria, int argc, char **argv) { | |||
976 | return CMD_SUCCESS; | 936 | return CMD_SUCCESS; |
977 | } | 937 | } |
978 | 938 | ||
979 | enum cmd_status cmd_splitv(char *criteria, int argc, char **argv) { | 939 | static enum cmd_status cmd_splitv(int argc, char **argv) { |
980 | return _do_split(criteria, argc, argv, L_VERT); | 940 | return _do_split(argc, argv, L_VERT); |
981 | } | 941 | } |
982 | 942 | ||
983 | enum cmd_status cmd_splith(char *criteria, int argc, char **argv) { | 943 | static enum cmd_status cmd_splith(int argc, char **argv) { |
984 | return _do_split(criteria, argc, argv, L_HORIZ); | 944 | return _do_split(argc, argv, L_HORIZ); |
985 | } | 945 | } |
986 | 946 | ||
987 | enum cmd_status cmd_log_colors(char *criteria, int argc, char **argv) { | 947 | static enum cmd_status cmd_log_colors(int argc, char **argv) { |
988 | if (!checkarg(argc, "log_colors", EXPECTED_EQUAL_TO, 1) | 948 | if (!checkarg(argc, "log_colors", EXPECTED_EQUAL_TO, 1) |
989 | || !config->reading) { | 949 | || !config->reading) { |
990 | return CMD_FAILURE; | 950 | return CMD_FAILURE; |
@@ -1000,7 +960,7 @@ enum cmd_status cmd_log_colors(char *criteria, int argc, char **argv) { | |||
1000 | return CMD_SUCCESS; | 960 | return CMD_SUCCESS; |
1001 | } | 961 | } |
1002 | 962 | ||
1003 | enum cmd_status cmd_fullscreen(char *criteria, int argc, char **argv) { | 963 | static enum cmd_status cmd_fullscreen(int argc, char **argv) { |
1004 | if (!checkarg(argc, "fullscreen", EXPECTED_AT_LEAST, 0) | 964 | if (!checkarg(argc, "fullscreen", EXPECTED_AT_LEAST, 0) |
1005 | || config->reading || !config->active) { | 965 | || config->reading || !config->active) { |
1006 | return CMD_FAILURE; | 966 | return CMD_FAILURE; |
@@ -1020,7 +980,7 @@ enum cmd_status cmd_fullscreen(char *criteria, int argc, char **argv) { | |||
1020 | return CMD_SUCCESS; | 980 | return CMD_SUCCESS; |
1021 | } | 981 | } |
1022 | 982 | ||
1023 | enum cmd_status cmd_workspace(char *criteria, int argc, char **argv) { | 983 | static enum cmd_status cmd_workspace(int argc, char **argv) { |
1024 | if (!checkarg(argc, "workspace", EXPECTED_AT_LEAST, 1)) { | 984 | if (!checkarg(argc, "workspace", EXPECTED_AT_LEAST, 1)) { |
1025 | return CMD_FAILURE; | 985 | return CMD_FAILURE; |
1026 | } | 986 | } |
@@ -1029,7 +989,28 @@ enum cmd_status cmd_workspace(char *criteria, int argc, char **argv) { | |||
1029 | if (config->reading || !config->active) { | 989 | if (config->reading || !config->active) { |
1030 | return CMD_DEFER; | 990 | return CMD_DEFER; |
1031 | } | 991 | } |
1032 | workspace_switch(new_workspace(NULL, argv[0])); | 992 | // Handle workspace next/prev |
993 | swayc_t *ws = NULL; | ||
994 | if (strcasecmp(argv[0], "next") == 0) { | ||
995 | ws = workspace_next(); | ||
996 | } else if (strcasecmp(argv[0], "prev") == 0) { | ||
997 | ws = workspace_prev(); | ||
998 | } else if (strcasecmp(argv[0], "next_on_output") == 0) { | ||
999 | ws = workspace_output_next(); | ||
1000 | } else if (strcasecmp(argv[0], "prev_on_output") == 0) { | ||
1001 | ws = workspace_output_prev(); | ||
1002 | } else if (strcasecmp(argv[0], "back_and_forth") == 0) { | ||
1003 | if (prev_workspace_name) { | ||
1004 | if (!(ws = workspace_by_name(prev_workspace_name))) { | ||
1005 | ws = workspace_create(prev_workspace_name); | ||
1006 | } | ||
1007 | } | ||
1008 | } else { | ||
1009 | if (!(ws= workspace_by_name(argv[0]))) { | ||
1010 | ws = workspace_create(argv[0]); | ||
1011 | } | ||
1012 | } | ||
1013 | workspace_switch(ws); | ||
1033 | } else { | 1014 | } else { |
1034 | if (strcasecmp(argv[1], "output") == 0) { | 1015 | if (strcasecmp(argv[1], "output") == 0) { |
1035 | if (!checkarg(argc, "workspace", EXPECTED_EQUAL_TO, 3)) { | 1016 | if (!checkarg(argc, "workspace", EXPECTED_EQUAL_TO, 3)) { |
@@ -1040,12 +1021,15 @@ enum cmd_status cmd_workspace(char *criteria, int argc, char **argv) { | |||
1040 | wso->workspace = strdup(argv[0]); | 1021 | wso->workspace = strdup(argv[0]); |
1041 | wso->output = strdup(argv[2]); | 1022 | wso->output = strdup(argv[2]); |
1042 | list_add(config->workspace_outputs, wso); | 1023 | list_add(config->workspace_outputs, wso); |
1024 | if (!config->reading) { | ||
1025 | // TODO: Move workspace to output. (dont do so when reloading) | ||
1026 | } | ||
1043 | } | 1027 | } |
1044 | } | 1028 | } |
1045 | return CMD_SUCCESS; | 1029 | return CMD_SUCCESS; |
1046 | } | 1030 | } |
1047 | 1031 | ||
1048 | enum cmd_status cmd_ws_auto_back_and_forth(char *criteria, int argc, char **argv) { | 1032 | static enum cmd_status cmd_ws_auto_back_and_forth(int argc, char **argv) { |
1049 | if (!checkarg(argc, "workspace_auto_back_and_forth", EXPECTED_EQUAL_TO, 1)) { | 1033 | if (!checkarg(argc, "workspace_auto_back_and_forth", EXPECTED_EQUAL_TO, 1)) { |
1050 | return CMD_FAILURE; | 1034 | return CMD_FAILURE; |
1051 | } | 1035 | } |
@@ -1060,7 +1044,7 @@ enum cmd_status cmd_ws_auto_back_and_forth(char *criteria, int argc, char **argv | |||
1060 | } | 1044 | } |
1061 | 1045 | ||
1062 | /* Keep alphabetized */ | 1046 | /* Keep alphabetized */ |
1063 | static const struct cmd_handler handlers[] = { | 1047 | static struct cmd_handler handlers[] = { |
1064 | { "bindsym", cmd_bindsym }, | 1048 | { "bindsym", cmd_bindsym }, |
1065 | { "default_orientation", cmd_orientation }, | 1049 | { "default_orientation", cmd_orientation }, |
1066 | { "exec", cmd_exec }, | 1050 | { "exec", cmd_exec }, |
@@ -1070,7 +1054,6 @@ static const struct cmd_handler handlers[] = { | |||
1070 | { "floating_modifier", cmd_floating_mod }, | 1054 | { "floating_modifier", cmd_floating_mod }, |
1071 | { "focus", cmd_focus }, | 1055 | { "focus", cmd_focus }, |
1072 | { "focus_follows_mouse", cmd_focus_follows_mouse }, | 1056 | { "focus_follows_mouse", cmd_focus_follows_mouse }, |
1073 | { "for_window", cmd_for_window }, | ||
1074 | { "fullscreen", cmd_fullscreen }, | 1057 | { "fullscreen", cmd_fullscreen }, |
1075 | { "gaps", cmd_gaps }, | 1058 | { "gaps", cmd_gaps }, |
1076 | { "kill", cmd_kill }, | 1059 | { "kill", cmd_kill }, |
@@ -1107,7 +1090,6 @@ static struct cmd_handler *find_handler(char *line) { | |||
1107 | enum cmd_status handle_command(char *exec) { | 1090 | enum cmd_status handle_command(char *exec) { |
1108 | sway_log(L_INFO, "Handling command '%s'", exec); | 1091 | sway_log(L_INFO, "Handling command '%s'", exec); |
1109 | int argc; | 1092 | int argc; |
1110 | char *criteria = NULL; | ||
1111 | char **argv = split_args(exec, &argc); | 1093 | char **argv = split_args(exec, &argc); |
1112 | enum cmd_status status = CMD_FAILURE; | 1094 | enum cmd_status status = CMD_FAILURE; |
1113 | struct cmd_handler *handler; | 1095 | struct cmd_handler *handler; |
@@ -1115,7 +1097,7 @@ enum cmd_status handle_command(char *exec) { | |||
1115 | return status; | 1097 | return status; |
1116 | } | 1098 | } |
1117 | if ((handler = find_handler(argv[0])) == NULL | 1099 | if ((handler = find_handler(argv[0])) == NULL |
1118 | || (status = handler->handle(criteria, argc - 1, argv + 1)) != CMD_SUCCESS) { | 1100 | || (status = handler->handle(argc - 1, argv + 1)) != CMD_SUCCESS) { |
1119 | sway_log(L_ERROR, "Command failed: %s", argv[0]); | 1101 | sway_log(L_ERROR, "Command failed: %s", argv[0]); |
1120 | } | 1102 | } |
1121 | free_argv(argc, argv); | 1103 | free_argv(argc, argv); |
@@ -1126,7 +1108,6 @@ enum cmd_status config_command(char *exec) { | |||
1126 | sway_log(L_INFO, "handling config command '%s'", exec); | 1108 | sway_log(L_INFO, "handling config command '%s'", exec); |
1127 | int argc; | 1109 | int argc; |
1128 | char **argv = split_args(exec, &argc); | 1110 | char **argv = split_args(exec, &argc); |
1129 | char *criteria = NULL; | ||
1130 | enum cmd_status status = CMD_FAILURE; | 1111 | enum cmd_status status = CMD_FAILURE; |
1131 | struct cmd_handler *handler; | 1112 | struct cmd_handler *handler; |
1132 | if (!argc) { | 1113 | if (!argc) { |
@@ -1146,7 +1127,7 @@ enum cmd_status config_command(char *exec) { | |||
1146 | for (; i < e; ++i) { | 1127 | for (; i < e; ++i) { |
1147 | argv[i] = do_var_replacement(argv[i]); | 1128 | argv[i] = do_var_replacement(argv[i]); |
1148 | } | 1129 | } |
1149 | status = handler->handle(criteria, argc - 1, argv + 1); | 1130 | status = handler->handle(argc - 1, argv + 1); |
1150 | if (status == CMD_FAILURE) { | 1131 | if (status == CMD_FAILURE) { |
1151 | sway_log(L_ERROR, "Config load failed for line `%s'", exec); | 1132 | sway_log(L_ERROR, "Config load failed for line `%s'", exec); |
1152 | } else if (status == CMD_DEFER) { | 1133 | } else if (status == CMD_DEFER) { |