aboutsummaryrefslogtreecommitdiffstats
path: root/sway/criteria.c
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2019-10-02 17:36:52 +1000
committerLibravatar Drew DeVault <sir@cmpwn.com>2020-02-27 14:03:22 +0100
commit2045ac3472196d6839569bccd436cde45ef6ca61 (patch)
tree999ec63750a37f18a67f35307dc1d72c9ca2a87e /sway/criteria.c
parentAdd support for wlr-output-power-management-unstable-v1 (diff)
downloadsway-2045ac3472196d6839569bccd436cde45ef6ca61.tar.gz
sway-2045ac3472196d6839569bccd436cde45ef6ca61.tar.zst
sway-2045ac3472196d6839569bccd436cde45ef6ca61.zip
Introduce pid criteria token
This can be used as a workaround to flag terminal windows as urgent when commands are completed, until urgency is introduced in the Wayland protocol. Configure your shell to run `swaymsg "[pid=$PPID] urgent enable"` when commands are completed, and use a terminal which uses one process per window.
Diffstat (limited to 'sway/criteria.c')
-rw-r--r--sway/criteria.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/sway/criteria.c b/sway/criteria.c
index 2c8e1644..02b04fc8 100644
--- a/sway/criteria.c
+++ b/sway/criteria.c
@@ -31,7 +31,8 @@ bool criteria_is_empty(struct criteria *criteria) {
31 && !criteria->floating 31 && !criteria->floating
32 && !criteria->tiling 32 && !criteria->tiling
33 && !criteria->urgent 33 && !criteria->urgent
34 && !criteria->workspace; 34 && !criteria->workspace
35 && !criteria->pid;
35} 36}
36 37
37// The error pointer is used for parsing functions, and saves having to pass it 38// The error pointer is used for parsing functions, and saves having to pass it
@@ -370,6 +371,12 @@ static bool criteria_matches_view(struct criteria *criteria,
370 } 371 }
371 } 372 }
372 373
374 if (criteria->pid) {
375 if (criteria->pid != view->pid) {
376 return false;
377 }
378 }
379
373 return true; 380 return true;
374} 381}
375 382
@@ -458,6 +465,7 @@ enum criteria_token {
458 T_TITLE, 465 T_TITLE,
459 T_URGENT, 466 T_URGENT,
460 T_WORKSPACE, 467 T_WORKSPACE,
468 T_PID,
461 469
462 T_INVALID, 470 T_INVALID,
463}; 471};
@@ -493,6 +501,8 @@ static enum criteria_token token_from_name(char *name) {
493 return T_TILING; 501 return T_TILING;
494 } else if (strcmp(name, "floating") == 0) { 502 } else if (strcmp(name, "floating") == 0) {
495 return T_FLOATING; 503 return T_FLOATING;
504 } else if (strcmp(name, "pid") == 0) {
505 return T_PID;
496 } 506 }
497 return T_INVALID; 507 return T_INVALID;
498} 508}
@@ -587,6 +597,12 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
587 case T_WORKSPACE: 597 case T_WORKSPACE:
588 pattern_create(&criteria->workspace, value); 598 pattern_create(&criteria->workspace, value);
589 break; 599 break;
600 case T_PID:
601 criteria->pid = strtoul(value, &endptr, 10);
602 if (*endptr != 0) {
603 error = strdup("The value for 'pid' should be numeric");
604 }
605 break;
590 case T_INVALID: 606 case T_INVALID:
591 break; 607 break;
592 } 608 }