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:
Michael Stapelberg
2011-09-11 21:54:13 +01:00
parent d03dffe012
commit e47e100819
2 changed files with 18 additions and 1 deletions

View File

@ -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: