summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLibravatar S. Christoffer Eliesen <christoffer@eliesen.no>2015-11-17 19:27:01 +0100
committerLibravatar S. Christoffer Eliesen <christoffer@eliesen.no>2015-11-25 14:34:33 +0100
commita06cb7cd01acfbb5e31dd1aacbbde7887a0509b9 (patch)
tree1474dbed01d4c31318883a3a837e02ce30125bef /include
parentMerge pull request #255 from christophgysin/ninja (diff)
downloadsway-a06cb7cd01acfbb5e31dd1aacbbde7887a0509b9.tar.gz
sway-a06cb7cd01acfbb5e31dd1aacbbde7887a0509b9.tar.zst
sway-a06cb7cd01acfbb5e31dd1aacbbde7887a0509b9.zip
criteria: Add. Learn for_window command.
A criteria is a string in the form of `[class="regex.*" title="str"]`. It is stored in a struct with a list of *tokens* which is a attribute/value pair (stored as a `crit_token` struct). Most tokens will also have a precompiled regex stored that will be used during criteria matching. for_window command: When a new view is created its metadata is tested against all stored criteria, and if a match is found the associated command list is executed. Unfortunately some metadata is not available in sway at the moment (specifically `instance`, `window_role` and `urgent`). Any criteria string that tries to match an unsupported attribute will fail. (Note that while the criteria code can be used to parse any criteria string it is currently only used by the `for_window` command.)
Diffstat (limited to 'include')
-rw-r--r--include/config.h1
-rw-r--r--include/criteria.h36
2 files changed, 37 insertions, 0 deletions
diff --git a/include/config.h b/include/config.h
index 3bdbdb7b..6b48063a 100644
--- a/include/config.h
+++ b/include/config.h
@@ -66,6 +66,7 @@ struct sway_config {
66 list_t *cmd_queue; 66 list_t *cmd_queue;
67 list_t *workspace_outputs; 67 list_t *workspace_outputs;
68 list_t *output_configs; 68 list_t *output_configs;
69 list_t *criteria;
69 struct sway_mode *current_mode; 70 struct sway_mode *current_mode;
70 uint32_t floating_mod; 71 uint32_t floating_mod;
71 enum swayc_layouts default_orientation; 72 enum swayc_layouts default_orientation;
diff --git a/include/criteria.h b/include/criteria.h
new file mode 100644
index 00000000..5c71d172
--- /dev/null
+++ b/include/criteria.h
@@ -0,0 +1,36 @@
1#ifndef _SWAY_CRITERIA_H
2#define _SWAY_CRITERIA_H
3
4#include "container.h"
5#include "list.h"
6
7/**
8 * Maps criteria (as a list of criteria tokens) to a command list.
9 *
10 * A list of tokens together represent a single criteria string (e.g.
11 * '[class="abc" title="xyz"]' becomes two criteria tokens).
12 *
13 * for_window: Views matching all criteria will have the bound command list
14 * executed on them.
15 *
16 * Set via `for_window <criteria> <cmd list>`.
17 */
18struct criteria {
19 list_t *tokens; // struct crit_token, contains compiled regex.
20 char *crit_raw; // entire criteria string (for logging)
21
22 char *cmdlist;
23};
24
25int criteria_cmp(const void *item, const void *data);
26void free_criteria(struct criteria *crit);
27
28// Pouplate list with crit_tokens extracted from criteria string, returns error
29// string or NULL if successful.
30char *extract_crit_tokens(list_t *tokens, const char *criteria);
31
32// Returns list of criteria that match given container. These criteria have
33// been set with `for_window` commands and have an associated cmdlist.
34list_t *criteria_for(swayc_t *cont);
35
36#endif