*/
__attribute__((pure)) bool name_is_digits(const char *name);
+/**
+ * Set 'out' to the layout_t value for the given layout. The function
+ * returns true on success or false if the passed string is not a valid
+ * layout name.
+ *
+ */
+bool layout_from_name(const char *layout_str, layout_t *out);
+
/**
* Parses the workspace name as a number. Returns -1 if the workspace should be
* interpreted as a "named workspace".
void cmd_layout(I3_CMD, const char *layout_str) {
HANDLE_EMPTY_MATCH;
- if (strcmp(layout_str, "stacking") == 0)
- layout_str = "stacked";
layout_t layout;
- /* default is a special case which will be handled in con_set_layout(). */
- if (strcmp(layout_str, "default") == 0)
- layout = L_DEFAULT;
- else if (strcmp(layout_str, "stacked") == 0)
- layout = L_STACKED;
- else if (strcmp(layout_str, "tabbed") == 0)
- layout = L_TABBED;
- else if (strcmp(layout_str, "splitv") == 0)
- layout = L_SPLITV;
- else if (strcmp(layout_str, "splith") == 0)
- layout = L_SPLITH;
- else {
+ if (!layout_from_name(layout_str, &layout)) {
ELOG("Unknown layout \"%s\", this is a mismatch between code and parser spec.\n", layout_str);
return;
}
return true;
}
+/**
+ * Set 'out' to the layout_t value for the given layout. The function
+ * returns true on success or false if the passed string is not a valid
+ * layout name.
+ *
+ */
+bool layout_from_name(const char *layout_str, layout_t *out) {
+ if (strcmp(layout_str, "default") == 0) {
+ *out = L_DEFAULT;
+ } else if (strcasecmp(layout_str, "stacked") == 0 ||
+ strcasecmp(layout_str, "stacking") == 0) {
+ *out = L_STACKED;
+ } else if (strcasecmp(layout_str, "tabbed") == 0) {
+ *out = L_TABBED;
+ } else if (strcasecmp(layout_str, "splitv") == 0) {
+ *out = L_SPLITV;
+ } else if (strcasecmp(layout_str, "splith") == 0) {
+ *out = L_SPLITH;
+ } else {
+ return false;
+ }
+
+ return true;
+}
+
/*
* Parses the workspace name as a number. Returns -1 if the workspace should be
* interpreted as a "named workspace".