mirror of
https://github.com/swaywm/sway.git
synced 2025-11-06 13:29:50 -05:00
criteria: reset on semicolon separation
This matches i3's behavior of only retaining criteria across comma separated commands. When separating commands with a semicolon, the criteria is reset and allows for new criteria to be set, if desired.
This commit is contained in:
parent
190546fd31
commit
f0f5de9a9e
2 changed files with 27 additions and 21 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue