actually displaying it on the screen), you’d need to have to match on Firefox
in this case.
-You can use the special workspace +~+ to specify that matching clients should
-be put into floating mode.
+You can prefix or suffix workspaces with a +~+ to specify that matching clients
+should be put into floating mode. If you specify only a +~+, the client will
+not be put onto any workspace, but will be set floating on the current one.
*Syntax*:
-----------------------------------------------------
-assign ["]window class[/window title]["] [→] workspace
-----------------------------------------------------
+------------------------------------------------------------
+assign ["]window class[/window title]["] [→] [~ | workspace]
+------------------------------------------------------------
*Examples*:
----------------------
assign urxvt → 2
assign "urxvt" → 2
assign "urxvt/VIM" → 3
-assign "gecko" → ~
+assign "gecko" → ~4
+assign "xv/MPlayer" → ~
----------------------
=== Automatically starting applications on startup
/** floating is true if this was an assignment to the special
* workspace "~". Matching clients will be put into floating mode
* automatically. */
- bool floating;
+ enum {
+ ASSIGN_FLOATING_NO, /* don’t float, but put on a workspace */
+ ASSIGN_FLOATING_ONLY, /* float, but don’t assign on a workspace */
+ ASSIGN_FLOATING /* float and put on a workspace */
+ } floating;
+
/** The number of the workspace to assign to. */
int workspace;
TAILQ_ENTRY(Assignment) assignments;
die("Malformed assignment, couldn't find target\n");
target++;
- if (*target != '~' && (atoi(target) < 1 || atoi(target) > 10))
+ if (strchr(target, '~') == NULL && (atoi(target) < 1 || atoi(target) > 10))
die("Malformed assignment, invalid workspace number\n");
LOG("assignment parsed: \"%s\" to \"%s\"\n", class_title, target);
struct Assignment *new = scalloc(sizeof(struct Assignment));
new->windowclass_title = class_title;
- if (*target == '~')
- new->floating = true;
- else new->workspace = atoi(target);
+ if (strchr(target, '~') != NULL)
+ new->floating = ASSIGN_FLOATING_ONLY;
+
+ while (*target == '~')
+ target++;
+
+ if (atoi(target) >= 1 && atoi(target) <= 10) {
+ if (new->floating == ASSIGN_FLOATING_ONLY)
+ new->floating = ASSIGN_FLOATING;
+ new->workspace = atoi(target);
+ }
TAILQ_INSERT_TAIL(&assignments, new, assignments);
+
+ LOG("Assignment loaded: \"%s\":\n", class_title);
+ if (new->floating != ASSIGN_FLOATING_ONLY)
+ LOG(" to workspace %d\n", new->workspace);
+
+ if (new->floating != ASSIGN_FLOATING_NO)
+ LOG(" will be floating\n");
+
continue;
}
if (get_matching_client(conn, assign->windowclass_title, new) == NULL)
continue;
- if (assign->floating) {
+ if (assign->floating == ASSIGN_FLOATING_ONLY ||
+ assign->floating == ASSIGN_FLOATING) {
new->floating = FLOATING_AUTO_ON;
LOG("Assignment matches, putting client into floating mode\n");
- break;
+ if (assign->floating == ASSIGN_FLOATING_ONLY)
+ break;
}
LOG("Assignment \"%s\" matches, so putting it on workspace %d\n",