Introduce a new syntax for the 'assign' command:
Instead of using a quoted string to specify the class / title, the assign command now uses criteria, just like the for_window command or the command scopes. An example comes here: # Assign all Chromium windows (including popups) to workspace 1: www assign [class="^Chromium$"] → 1: www # Make the main browser window borderless for_window [class="^Chromium$" title=" - Chromium$"] border none This gives you more control over the matching process due to various reasons: 1) Criteria work case-sensitive by default. Use the (?i) option if you want a case-insensitive match, like this: assign [class="(?i)^ChroMIUM$"] → 1 2) class and instance of WM_CLASS can now be matched separately. For example, when starting urxvt -name irssi, xprop will report this: WM_CLASS(STRING) = "irssi", "URxvt" The first part of this is the instance ("irssi"), the second part is the class ("URxvt"). An appropriate assignment looks like this: assign [class="^URxvt$" instance="irssi"] → 2 3) You can now freely use a forward slash (/) in all strings since that is no longer used to separate class from title (in-band signaling is bad, mhkay?).
This commit is contained in:
parent
d03dffe012
commit
e47e100819
|
@ -75,6 +75,14 @@ EOL (\r?\n)
|
|||
|
||||
|
||||
<FOR_WINDOW_COND>"]" { yy_pop_state(); return ']'; }
|
||||
<ASSIGN_COND>"[" {
|
||||
/* this is the case for the new assign syntax
|
||||
* that uses criteria */
|
||||
yy_pop_state();
|
||||
yy_push_state(FOR_WINDOW_COND);
|
||||
/* afterwards we will be in ASSIGN_TARGET_COND */
|
||||
return '[';
|
||||
}
|
||||
<EAT_WHITESPACE>[ \t]* { yy_pop_state(); }
|
||||
<WANT_QSTRING>\"[^\"]+\" {
|
||||
yy_pop_state();
|
||||
|
@ -194,7 +202,7 @@ title { yy_push_state(WANT_QSTRING); return TOK_TITLE;
|
|||
yylval.string = copy;
|
||||
return QUOTEDSTRING;
|
||||
}
|
||||
<ASSIGN_COND>[^ \t\"]+ { BEGIN(ASSIGN_TARGET_COND); yylval.string = sstrdup(yytext); return STR_NG; }
|
||||
<ASSIGN_COND>[^ \t\"\[]+ { BEGIN(ASSIGN_TARGET_COND); yylval.string = sstrdup(yytext); return STR_NG; }
|
||||
<BINDSYM_COND>[a-zA-Z0-9_]+ { yylval.string = sstrdup(yytext); return WORD; }
|
||||
[a-zA-Z]+ { yylval.string = sstrdup(yytext); return WORD; }
|
||||
. { return (int)yytext[0]; }
|
||||
|
|
|
@ -1137,6 +1137,15 @@ assign:
|
|||
assignment->dest.workspace = workspace;
|
||||
TAILQ_INSERT_TAIL(&assignments, assignment, assignments);
|
||||
}
|
||||
| TOKASSIGN match STR
|
||||
{
|
||||
printf("new assignment, using above criteria, to workspace %s\n", $3);
|
||||
Assignment *assignment = scalloc(sizeof(Assignment));
|
||||
assignment->match = current_match;
|
||||
assignment->type = A_TO_WORKSPACE;
|
||||
assignment->dest.workspace = $3;
|
||||
TAILQ_INSERT_TAIL(&assignments, assignment, assignments);
|
||||
}
|
||||
;
|
||||
|
||||
window_class:
|
||||
|
|
Loading…
Reference in New Issue