}
CFGFUN(enter_mode, const char *pango_markup, const char *modename) {
- if (strcasecmp(modename, DEFAULT_BINDING_MODE) == 0) {
+ if (strcmp(modename, DEFAULT_BINDING_MODE) == 0) {
ELOG("You cannot use the name %s for your mode\n", DEFAULT_BINDING_MODE);
return;
}
DLOG("Set new focus_on_window_activation mode = %i.\n", config.focus_on_window_activation);
}
+CFGFUN(title_align, const char *alignment) {
+ if (strcmp(alignment, "left") == 0) {
+ config.title_align = ALIGN_LEFT;
+ } else if (strcmp(alignment, "center") == 0) {
+ config.title_align = ALIGN_CENTER;
+ } else if (strcmp(alignment, "right") == 0) {
+ config.title_align = ALIGN_RIGHT;
+ } else {
+ assert(false);
+ }
+}
+
CFGFUN(show_marks, const char *value) {
config.show_marks = eval_boolstr(value);
}
+static char *current_workspace = NULL;
+
CFGFUN(workspace, const char *workspace, const char *output) {
- DLOG("Assigning workspace \"%s\" to output \"%s\"\n", workspace, output);
- /* Check for earlier assignments of the same workspace so that we
- * don’t have assignments of a single workspace to different
- * outputs */
struct Workspace_Assignment *assignment;
- bool duplicate = false;
- TAILQ_FOREACH(assignment, &ws_assignments, ws_assignments) {
- if (strcasecmp(assignment->name, workspace) == 0) {
- ELOG("You have a duplicate workspace assignment for workspace \"%s\"\n",
- workspace);
- assignment->output = sstrdup(output);
- duplicate = true;
+
+ /* When a new workspace line is encountered, for the first output word,
+ * $workspace from the config.spec is non-NULL. Afterwards, the parser calls
+ * clear_stack() because of the call line. Thus, we have to preserve the
+ * workspace string. */
+ if (workspace) {
+ FREE(current_workspace);
+
+ TAILQ_FOREACH(assignment, &ws_assignments, ws_assignments) {
+ if (strcasecmp(assignment->name, workspace) == 0) {
+ ELOG("You have a duplicate workspace assignment for workspace \"%s\"\n",
+ workspace);
+ return;
+ }
}
+
+ current_workspace = sstrdup(workspace);
+ } else {
+ if (!current_workspace) {
+ DLOG("Both workspace and current_workspace are NULL, assuming we had an error before\n");
+ return;
+ }
+ workspace = current_workspace;
}
- if (!duplicate) {
- assignment = scalloc(1, sizeof(struct Workspace_Assignment));
- assignment->name = sstrdup(workspace);
- assignment->output = sstrdup(output);
- TAILQ_INSERT_TAIL(&ws_assignments, assignment, ws_assignments);
- }
+
+ DLOG("Assigning workspace \"%s\" to output \"%s\"\n", workspace, output);
+
+ assignment = scalloc(1, sizeof(struct Workspace_Assignment));
+ assignment->name = sstrdup(workspace);
+ assignment->output = sstrdup(output);
+ TAILQ_INSERT_TAIL(&ws_assignments, assignment, ws_assignments);
}
CFGFUN(ipc_socket, const char *path) {
return;
}
+ if (current_match->window_mode != WM_ANY) {
+ ELOG("Assignments using window mode (floating/tiling) is not supported\n");
+ return;
+ }
+
DLOG("New assignment, using above criteria, to output \"%s\".\n", output);
Assignment *assignment = scalloc(1, sizeof(Assignment));
match_copy(&(assignment->match), current_match);
return;
}
+ if (current_match->window_mode != WM_ANY) {
+ ELOG("Assignments using window mode (floating/tiling) is not supported\n");
+ return;
+ }
+
if (is_number && ws_name_to_number(workspace) == -1) {
ELOG("Could not parse initial part of \"%s\" as a number.\n", workspace);
return;
TAILQ_INSERT_TAIL(&assignments, assignment, assignments);
}
+CFGFUN(ipc_kill_timeout, const long timeout_ms) {
+ ipc_set_kill_timeout(timeout_ms / 1000.0);
+}
+
/*******************************************************************************
* Bar configuration (i3bar)
******************************************************************************/
current_bar->verbose = eval_boolstr(verbose);
}
-CFGFUN(bar_modifier, const char *modifier) {
- if (strcmp(modifier, "Mod1") == 0)
- current_bar->modifier = M_MOD1;
- else if (strcmp(modifier, "Mod2") == 0)
- current_bar->modifier = M_MOD2;
- else if (strcmp(modifier, "Mod3") == 0)
- current_bar->modifier = M_MOD3;
- else if (strcmp(modifier, "Mod4") == 0)
- current_bar->modifier = M_MOD4;
- else if (strcmp(modifier, "Mod5") == 0)
- current_bar->modifier = M_MOD5;
- else if (strcmp(modifier, "Control") == 0 ||
- strcmp(modifier, "Ctrl") == 0)
- current_bar->modifier = M_CONTROL;
- else if (strcmp(modifier, "Shift") == 0)
- current_bar->modifier = M_SHIFT;
- else if (strcmp(modifier, "none") == 0 ||
- strcmp(modifier, "off") == 0)
- current_bar->modifier = M_NONE;
+CFGFUN(bar_modifier, const char *modifiers) {
+ current_bar->modifier = modifiers ? event_state_from_str(modifiers) : XCB_NONE;
}
static void bar_configure_binding(const char *button, const char *release, const char *command) {
TAILQ_INIT(&(current_bar->bar_bindings));
TAILQ_INIT(&(current_bar->tray_outputs));
current_bar->tray_padding = 2;
- current_bar->modifier = M_MOD4;
+ current_bar->modifier = XCB_KEY_BUT_MASK_MOD_4;
}
CFGFUN(bar_finish) {