diff options
author | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-05-13 08:16:36 +1000 |
---|---|---|
committer | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-05-14 11:38:09 +1000 |
commit | 1e9aaa54a85e98d6b46ca594b4f50770f71047ea (patch) | |
tree | cb6a2748d1c53dfc80f9faa5da7052790e668400 /include/sway/criteria.h | |
parent | Actually fix swayidle (diff) | |
download | sway-1e9aaa54a85e98d6b46ca594b4f50770f71047ea.tar.gz sway-1e9aaa54a85e98d6b46ca594b4f50770f71047ea.tar.zst sway-1e9aaa54a85e98d6b46ca594b4f50770f71047ea.zip |
Revert "Revert "Merge pull request #1943 from RyanDwyer/criteria-improvements""
This reverts commit 32a572cecfd0f6072a78ce0a381a2f8365f9010a.
This reimplements the criteria overhaul in preparation for fixing a
known bug.
Diffstat (limited to 'include/sway/criteria.h')
-rw-r--r-- | include/sway/criteria.h | 73 |
1 files changed, 46 insertions, 27 deletions
diff --git a/include/sway/criteria.h b/include/sway/criteria.h index ec256ddb..74da132c 100644 --- a/include/sway/criteria.h +++ b/include/sway/criteria.h | |||
@@ -1,42 +1,61 @@ | |||
1 | #ifndef _SWAY_CRITERIA_H | 1 | #ifndef _SWAY_CRITERIA_H |
2 | #define _SWAY_CRITERIA_H | 2 | #define _SWAY_CRITERIA_H |
3 | 3 | ||
4 | #include "tree/container.h" | 4 | #include <pcre.h> |
5 | #include "list.h" | 5 | #include "list.h" |
6 | #include "tree/view.h" | ||
6 | 7 | ||
7 | /** | 8 | enum criteria_type { |
8 | * Maps criteria (as a list of criteria tokens) to a command list. | 9 | CT_COMMAND = 1 << 0, |
9 | * | 10 | CT_ASSIGN_OUTPUT = 1 << 1, |
10 | * A list of tokens together represent a single criteria string (e.g. | 11 | CT_ASSIGN_WORKSPACE = 1 << 2, |
11 | * '[class="abc" title="xyz"]' becomes two criteria tokens). | 12 | }; |
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 | */ | ||
18 | struct criteria { | ||
19 | list_t *tokens; // struct crit_token, contains compiled regex. | ||
20 | char *crit_raw; // entire criteria string (for logging) | ||
21 | 13 | ||
14 | struct criteria { | ||
15 | enum criteria_type type; | ||
16 | char *raw; // entire criteria string (for logging) | ||
22 | char *cmdlist; | 17 | char *cmdlist; |
18 | char *target; // workspace or output name for `assign` criteria | ||
19 | |||
20 | pcre *title; | ||
21 | pcre *app_id; | ||
22 | pcre *class; | ||
23 | pcre *instance; | ||
24 | pcre *con_mark; | ||
25 | uint32_t con_id; // internal ID | ||
26 | uint32_t id; // X11 window ID | ||
27 | pcre *window_role; | ||
28 | uint32_t window_type; | ||
29 | bool floating; | ||
30 | bool tiling; | ||
31 | char urgent; // 'l' for latest or 'o' for oldest | ||
32 | char *workspace; | ||
23 | }; | 33 | }; |
24 | 34 | ||
25 | int criteria_cmp(const void *item, const void *data); | 35 | bool criteria_is_empty(struct criteria *criteria); |
26 | void free_criteria(struct criteria *crit); | ||
27 | 36 | ||
28 | // Pouplate list with crit_tokens extracted from criteria string, returns error | 37 | void criteria_destroy(struct criteria *criteria); |
29 | // string or NULL if successful. | ||
30 | char *extract_crit_tokens(list_t *tokens, const char *criteria); | ||
31 | 38 | ||
32 | // Returns list of criteria that match given container. These criteria have | 39 | /** |
33 | // been set with `for_window` commands and have an associated cmdlist. | 40 | * Generate a criteria struct from a raw criteria string such as |
34 | list_t *criteria_for(struct sway_container *cont); | 41 | * [class="foo" instance="bar"] (brackets inclusive). |
42 | * | ||
43 | * The error argument is expected to be an address of a null pointer. If an | ||
44 | * error is encountered, the function will return NULL and the pointer will be | ||
45 | * changed to point to the error string. This string should be freed afterwards. | ||
46 | */ | ||
47 | struct criteria *criteria_parse(char *raw, char **error); | ||
35 | 48 | ||
36 | // Returns a list of all containers that match the given list of tokens. | 49 | /** |
37 | list_t *container_for_crit_tokens(list_t *tokens); | 50 | * Compile a list of criterias matching the given view. |
51 | * | ||
52 | * Criteria types can be bitwise ORed. | ||
53 | */ | ||
54 | list_t *criteria_for_view(struct sway_view *view, enum criteria_type types); | ||
38 | 55 | ||
39 | // Returns true if any criteria in the given list matches this container | 56 | /** |
40 | bool criteria_any(struct sway_container *cont, list_t *criteria); | 57 | * Compile a list of views matching the given criteria. |
58 | */ | ||
59 | list_t *criteria_get_views(struct criteria *criteria); | ||
41 | 60 | ||
42 | #endif | 61 | #endif |