]> git.sur5r.net Git - i3/i3/commitdiff
Implement mapping from string to layout as extra function
authors3rb31 <s3rb31@mail.ru>
Tue, 21 Feb 2017 01:12:39 +0000 (02:12 +0100)
committers3rb31 <s3rb31@mail.ru>
Thu, 23 Feb 2017 20:49:48 +0000 (21:49 +0100)
include/util.h
src/commands.c
src/util.c

index e5ba3341336e0ce6531bd5139b60e9091903bdd1..cbe9778cf98169f469659b5719e0f4ce5f1cd3a8 100644 (file)
@@ -69,6 +69,14 @@ Rect rect_sub(Rect a, Rect b);
  */
 __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".
index 2387ddd7fd06615e6e0070075e4d7a33f99d6900..44a5d8a441732b76cb7318abceaf6cd47630e457 100644 (file)
@@ -1489,21 +1489,8 @@ void cmd_move_direction(I3_CMD, const char *direction, long move_px) {
 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;
     }
index cfe4c953db029c1333e4f9ed90396cb8d79c58a6..b6f45fdef56ff710f1f96d60222d12a47eaca223 100644 (file)
@@ -66,6 +66,31 @@ __attribute__((pure)) bool name_is_digits(const char *name) {
     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".