summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sway/commands.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/sway/commands.c b/sway/commands.c
index 20e0fc8d..7ddbe17e 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -31,6 +31,7 @@ static struct modifier_key modifiers[] = {
31 31
32enum expected_args { 32enum expected_args {
33 EXPECTED_MORE_THAN, 33 EXPECTED_MORE_THAN,
34 EXPECTED_AT_LEAST,
34 EXPECTED_LESS_THAN, 35 EXPECTED_LESS_THAN,
35 EXPECTED_EQUAL_TO 36 EXPECTED_EQUAL_TO
36}; 37};
@@ -42,7 +43,15 @@ static bool checkarg(int argc, char *name, enum expected_args type, int val) {
42 return true; 43 return true;
43 } 44 }
44 sway_log(L_ERROR, "Invalid %s command." 45 sway_log(L_ERROR, "Invalid %s command."
45 "(expected more then %d argument%s, got %d", 46 "(expected more than %d argument%s, got %d",
47 name, val, (char*[2]){"s", ""}[argc==1], argc);
48 break;
49 case EXPECTED_AT_LEAST:
50 if (argc >= val) {
51 return true;
52 }
53 sway_log(L_ERROR, "Invalid %s command."
54 "(expected at least %d argument%s, got %d",
46 name, val, (char*[2]){"s", ""}[argc==1], argc); 55 name, val, (char*[2]){"s", ""}[argc==1], argc);
47 break; 56 break;
48 case EXPECTED_LESS_THAN: 57 case EXPECTED_LESS_THAN:
@@ -50,7 +59,7 @@ static bool checkarg(int argc, char *name, enum expected_args type, int val) {
50 return true; 59 return true;
51 }; 60 };
52 sway_log(L_ERROR, "Invalid %s command." 61 sway_log(L_ERROR, "Invalid %s command."
53 "(expected less then %d argument%s, got %d", 62 "(expected less than %d argument%s, got %d",
54 name, val, (char*[2]){"s", ""}[argc==1], argc); 63 name, val, (char*[2]){"s", ""}[argc==1], argc);
55 break; 64 break;
56 case EXPECTED_EQUAL_TO: 65 case EXPECTED_EQUAL_TO:
@@ -257,6 +266,21 @@ static bool _do_split(struct sway_config *config, int argc, char **argv, int lay
257 return true; 266 return true;
258} 267}
259 268
269static bool cmd_split(struct sway_config *config, int argc, char **argv) {
270 if (!checkarg(argc, "split", EXPECTED_EQUAL_TO, 1)) {
271 return false;
272 }
273 if (strcasecmp(argv[0], "v") == 0 || strcasecmp(argv[0], "vertical") == 0) {
274 _do_split(config, argc, argv, L_VERT);
275 } else if (strcasecmp(argv[0], "h") == 0 || strcasecmp(argv[0], "horizontal") == 0) {
276 _do_split(config, argc, argv, L_HORIZ);
277 } else {
278 sway_log(L_ERROR, "Invalid split command (expected either horiziontal or vertical).");
279 return false;
280 }
281 return true;
282}
283
260static bool cmd_splitv(struct sway_config *config, int argc, char **argv) { 284static bool cmd_splitv(struct sway_config *config, int argc, char **argv) {
261 return _do_split(config, argc, argv, L_VERT); 285 return _do_split(config, argc, argv, L_VERT);
262} 286}
@@ -279,7 +303,7 @@ static bool cmd_log_colors(struct sway_config *config, int argc, char **argv) {
279} 303}
280 304
281static bool cmd_fullscreen(struct sway_config *config, int argc, char **argv) { 305static bool cmd_fullscreen(struct sway_config *config, int argc, char **argv) {
282 if (!checkarg(argc, "fullscreen", EXPECTED_EQUAL_TO, 0)) { 306 if (!checkarg(argc, "fullscreen", EXPECTED_AT_LEAST, 0)) {
283 return false; 307 return false;
284 } 308 }
285 309
@@ -325,6 +349,7 @@ static struct cmd_handler handlers[] = {
325 { "log_colors", cmd_log_colors }, 349 { "log_colors", cmd_log_colors },
326 { "reload", cmd_reload }, 350 { "reload", cmd_reload },
327 { "set", cmd_set }, 351 { "set", cmd_set },
352 { "split", cmd_split },
328 { "splith", cmd_splith }, 353 { "splith", cmd_splith },
329 { "splitv", cmd_splitv }, 354 { "splitv", cmd_splitv },
330 { "workspace", cmd_workspace } 355 { "workspace", cmd_workspace }