|
|
|
@ -19,6 +19,7 @@
|
|
|
|
|
bool criteria_is_empty(struct criteria *criteria) {
|
|
|
|
|
return !criteria->title
|
|
|
|
|
&& !criteria->shell
|
|
|
|
|
&& !criteria->all
|
|
|
|
|
&& !criteria->app_id
|
|
|
|
|
&& !criteria->con_mark
|
|
|
|
|
&& !criteria->con_id
|
|
|
|
@ -456,6 +457,7 @@ static enum atom_name parse_window_type(const char *type) {
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
enum criteria_token {
|
|
|
|
|
T_ALL,
|
|
|
|
|
T_APP_ID,
|
|
|
|
|
T_CON_ID,
|
|
|
|
|
T_CON_MARK,
|
|
|
|
@ -478,7 +480,9 @@ enum criteria_token {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static enum criteria_token token_from_name(char *name) {
|
|
|
|
|
if (strcmp(name, "app_id") == 0) {
|
|
|
|
|
if (strcmp(name, "all") == 0) {
|
|
|
|
|
return T_ALL;
|
|
|
|
|
} else if (strcmp(name, "app_id") == 0) {
|
|
|
|
|
return T_APP_ID;
|
|
|
|
|
} else if (strcmp(name, "con_id") == 0) {
|
|
|
|
|
return T_CON_ID;
|
|
|
|
@ -524,8 +528,8 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Require value, unless token is floating or tiled
|
|
|
|
|
if (!value && token != T_FLOATING && token != T_TILING) {
|
|
|
|
|
// Require value, unless token is all, floating or tiled
|
|
|
|
|
if (!value && token != T_ALL && token != T_FLOATING && token != T_TILING) {
|
|
|
|
|
const char *fmt = "Token '%s' requires a value";
|
|
|
|
|
int len = strlen(fmt) + strlen(name) - 1;
|
|
|
|
|
error = malloc(len);
|
|
|
|
@ -535,6 +539,9 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
|
|
|
|
|
|
|
|
|
|
char *endptr = NULL;
|
|
|
|
|
switch (token) {
|
|
|
|
|
case T_ALL:
|
|
|
|
|
criteria->all = true;
|
|
|
|
|
break;
|
|
|
|
|
case T_TITLE:
|
|
|
|
|
pattern_create(&criteria->title, value);
|
|
|
|
|
break;
|
|
|
|
|