diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-08-12 00:38:19 +0100 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-08-18 17:25:06 +0100 |
commit | 23601a8771f6e98e04bb4bfb9dd75ed399a20717 (patch) | |
tree | af7f151dfb62412efef27f91c5776ec78602a0b5 /sway/commands/assign.c | |
parent | commands: saner workspace number handling (diff) | |
download | sway-23601a8771f6e98e04bb4bfb9dd75ed399a20717.tar.gz sway-23601a8771f6e98e04bb4bfb9dd75ed399a20717.tar.zst sway-23601a8771f6e98e04bb4bfb9dd75ed399a20717.zip |
commands: complete assign command
Diffstat (limited to 'sway/commands/assign.c')
-rw-r--r-- | sway/commands/assign.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/sway/commands/assign.c b/sway/commands/assign.c index 0bc0929a..04582e88 100644 --- a/sway/commands/assign.c +++ b/sway/commands/assign.c | |||
@@ -22,27 +22,38 @@ struct cmd_results *cmd_assign(int argc, char **argv) { | |||
22 | return error; | 22 | return error; |
23 | } | 23 | } |
24 | 24 | ||
25 | ++argv; | 25 | --argc; ++argv; |
26 | int target_len = argc - 1; | ||
27 | 26 | ||
28 | if (strncmp(*argv, "→", strlen("→")) == 0) { | 27 | if (strncmp(*argv, "→", strlen("→")) == 0) { |
29 | if (argc < 3) { | 28 | if (argc < 2) { |
30 | free(criteria); | 29 | free(criteria); |
31 | return cmd_results_new(CMD_INVALID, "assign", "Missing workspace"); | 30 | return cmd_results_new(CMD_INVALID, "assign", "Missing workspace"); |
32 | } | 31 | } |
32 | --argc; | ||
33 | ++argv; | 33 | ++argv; |
34 | --target_len; | ||
35 | } | 34 | } |
36 | 35 | ||
37 | if (strcmp(*argv, "output") == 0) { | 36 | if (strcmp(*argv, "output") == 0) { |
38 | criteria->type = CT_ASSIGN_OUTPUT; | 37 | criteria->type = CT_ASSIGN_OUTPUT; |
39 | ++argv; | 38 | --argc; ++argv; |
40 | --target_len; | ||
41 | } else { | 39 | } else { |
42 | criteria->type = CT_ASSIGN_WORKSPACE; | 40 | if (strcmp(*argv, "workspace") == 0) { |
41 | --argc; ++argv; | ||
42 | } | ||
43 | if (strcmp(*argv, "number") == 0) { | ||
44 | --argc; ++argv; | ||
45 | if (argv[0][0] < '0' || argv[0][0] > '9') { | ||
46 | free(criteria); | ||
47 | return cmd_results_new(CMD_INVALID, "assign", | ||
48 | "Invalid workspace number '%s'", argv[0]); | ||
49 | } | ||
50 | criteria->type = CT_ASSIGN_WORKSPACE_NUMBER; | ||
51 | } else { | ||
52 | criteria->type = CT_ASSIGN_WORKSPACE; | ||
53 | } | ||
43 | } | 54 | } |
44 | 55 | ||
45 | criteria->target = join_args(argv, target_len); | 56 | criteria->target = join_args(argv, argc); |
46 | 57 | ||
47 | list_add(config->criteria, criteria); | 58 | list_add(config->criteria, criteria); |
48 | wlr_log(WLR_DEBUG, "assign: '%s' -> '%s' added", criteria->raw, | 59 | wlr_log(WLR_DEBUG, "assign: '%s' -> '%s' added", criteria->raw, |