diff options
-rw-r--r-- | sway/commands.c | 31 |
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 | ||
32 | enum expected_args { | 32 | enum 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 | ||
269 | static 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 | |||
260 | static bool cmd_splitv(struct sway_config *config, int argc, char **argv) { | 284 | static 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 | ||
281 | static bool cmd_fullscreen(struct sway_config *config, int argc, char **argv) { | 305 | static 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 } |