aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2016-01-15 04:51:23 -0500
committerLibravatar Drew DeVault <sir@cmpwn.com>2016-01-15 04:51:23 -0500
commit25973212367848e25c538301985ad2b1fd03ea02 (patch)
treed1f72a37489bfd17beeb7fc6e5ee820c93f541a8
parentStrip quotes from workspace name v2 (diff)
parentcmd_assign (diff)
downloadsway-25973212367848e25c538301985ad2b1fd03ea02.tar.gz
sway-25973212367848e25c538301985ad2b1fd03ea02.tar.zst
sway-25973212367848e25c538301985ad2b1fd03ea02.zip
Merge pull request #445 from crondog/assign
cmd_assign
-rw-r--r--sway/commands.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/sway/commands.c b/sway/commands.c
index 06172ac4..1c7eb962 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -34,6 +34,7 @@ struct cmd_handler {
34 sway_cmd *handle; 34 sway_cmd *handle;
35}; 35};
36 36
37static sway_cmd cmd_assign;
37static sway_cmd cmd_bar; 38static sway_cmd cmd_bar;
38static sway_cmd cmd_bindcode; 39static sway_cmd cmd_bindcode;
39static sway_cmd cmd_bindsym; 40static sway_cmd cmd_bindsym;
@@ -154,6 +155,47 @@ static struct cmd_results *checkarg(int argc, const char *name, enum expected_ar
154 return error; 155 return error;
155} 156}
156 157
158static struct cmd_results *cmd_assign(int argc, char **argv) {
159 struct cmd_results *error = NULL;
160 if ((error = checkarg(argc, "assign", EXPECTED_AT_LEAST, 2))) {
161 return error;
162 }
163
164 char *criteria = *argv++;
165
166 if (strncmp(*argv, "→", 1) == 0) {
167 argv++;
168 }
169
170 char *movecmd = "move container to workspace ";
171 int arglen = strlen(*argv);
172 char *cmdlist = calloc(1, sizeof(movecmd) + arglen);
173
174 sprintf(cmdlist, "%s%s", movecmd, *argv);
175
176 struct criteria *crit = malloc(sizeof(struct criteria));
177 crit->crit_raw = strdup(criteria);
178 crit->cmdlist = cmdlist;
179 crit->tokens = create_list();
180 char *err_str = extract_crit_tokens(crit->tokens, crit->crit_raw);
181
182 if (err_str) {
183 error = cmd_results_new(CMD_INVALID, "assign", err_str);
184 free(err_str);
185 free_criteria(crit);
186 } else if (crit->tokens->length == 0) {
187 error = cmd_results_new(CMD_INVALID, "assign", "Found no name/value pairs in criteria");
188 free_criteria(crit);
189 } else if (list_seq_find(config->criteria, criteria_cmp, crit) != -1) {
190 sway_log(L_DEBUG, "assign: Duplicate, skipping.");
191 free_criteria(crit);
192 } else {
193 sway_log(L_DEBUG, "assign: '%s' -> '%s' added", crit->crit_raw, crit->cmdlist);
194 list_add(config->criteria, crit);
195 }
196 return error ? error : cmd_results_new(CMD_SUCCESS, NULL, NULL);
197}
198
157int binding_order = 0; 199int binding_order = 0;
158 200
159static struct cmd_results *cmd_bindsym(int argc, char **argv) { 201static struct cmd_results *cmd_bindsym(int argc, char **argv) {
@@ -1625,6 +1667,7 @@ static struct cmd_results *cmd_ws_auto_back_and_forth(int argc, char **argv) {
1625 1667
1626/* Keep alphabetized */ 1668/* Keep alphabetized */
1627static struct cmd_handler handlers[] = { 1669static struct cmd_handler handlers[] = {
1670 { "assign", cmd_assign },
1628 { "bar", cmd_bar }, 1671 { "bar", cmd_bar },
1629 { "bindcode", cmd_bindcode }, 1672 { "bindcode", cmd_bindcode },
1630 { "bindsym", cmd_bindsym }, 1673 { "bindsym", cmd_bindsym },