aboutsummaryrefslogtreecommitdiff
path: root/sway/commands.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/commands.c')
-rw-r--r--sway/commands.c41
1 files changed, 22 insertions, 19 deletions
diff --git a/sway/commands.c b/sway/commands.c
index 237bfc28..377f2d01 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -227,28 +227,31 @@ list_t *execute_command(char *_exec, struct sway_seat *seat,
head = exec;
do {
- // Extract criteria (valid for this command list only).
- config->handler_context.using_criteria = false;
- if (*head == '[') {
- char *error = NULL;
- struct criteria *criteria = criteria_parse(head, &error);
- if (!criteria) {
- list_add(res_list, cmd_results_new(CMD_INVALID, "%s", error));
- free(error);
- goto cleanup;
- }
- views = criteria_get_views(criteria);
- head += strlen(criteria->raw);
- criteria_destroy(criteria);
- config->handler_context.using_criteria = true;
- // Skip leading whitespace
- for (; isspace(*head); ++head) {}
- }
// Split command list
cmdlist = argsep(&head, ";");
- for (; isspace(*cmdlist); ++cmdlist) {}
do {
- // Split commands
+ // Skip leading whitespace
+ for (; isspace(*cmdlist); ++cmdlist) {}
+ // Extract criteria (valid for this command chain only).
+ config->handler_context.using_criteria = false;
+ if (*cmdlist == '[') {
+ char *error = NULL;
+ struct criteria *criteria = criteria_parse(cmdlist, &error);
+ if (!criteria) {
+ list_add(res_list,
+ cmd_results_new(CMD_INVALID, "%s", error));
+ free(error);
+ goto cleanup;
+ }
+ list_free(views);
+ views = criteria_get_views(criteria);
+ cmdlist += strlen(criteria->raw);
+ criteria_destroy(criteria);
+ config->handler_context.using_criteria = true;
+ // Skip leading whitespace
+ for (; isspace(*cmdlist); ++cmdlist) {}
+ }
+ // Split command chain into commands
cmd = argsep(&cmdlist, ",");
for (; isspace(*cmd); ++cmd) {}
if (strcmp(cmd, "") == 0) {