aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands/assign.c
diff options
context:
space:
mode:
authorLibravatar Ian Fan <ianfan0@gmail.com>2018-08-12 00:38:19 +0100
committerLibravatar Ian Fan <ianfan0@gmail.com>2018-08-18 17:25:06 +0100
commit23601a8771f6e98e04bb4bfb9dd75ed399a20717 (patch)
treeaf7f151dfb62412efef27f91c5776ec78602a0b5 /sway/commands/assign.c
parentcommands: saner workspace number handling (diff)
downloadsway-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.c27
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,