]> git.sur5r.net Git - i3/i3/commitdiff
implement 'move' command in the new parser
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 11 May 2010 20:46:49 +0000 (22:46 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 11 May 2010 20:46:49 +0000 (22:46 +0200)
src/cmdparse.l
src/cmdparse.y
src/tree.c

index f96d55782396f0e353a08ee323c39dfe9d4b8e46..104926dcb2c59b210bb89460b5152b8f38d8c053 100644 (file)
@@ -107,6 +107,8 @@ vertical                        { return TOK_VERTICAL; }
 level                           { return TOK_LEVEL; }
 up                              { return TOK_UP; }
 down                            { return TOK_DOWN; }
+before                          { return TOK_BEFORE; }
+after                           { return TOK_AFTER; }
 
 class                           { BEGIN(WANT_QSTRING); return TOK_CLASS; }
 id                              { BEGIN(WANT_QSTRING); return TOK_ID; }
index f42bd0724481850802d3b730cee131f20a4c2cd4..016f19e2507fb073f82f0e2af0d8c76abb5eba17 100644 (file)
@@ -120,6 +120,8 @@ void parse_cmd(const char *new) {
 %token TOK_LEVEL "level"
 %token TOK_UP "up"
 %token TOK_DOWN "down"
+%token TOK_AFTER "after"
+%token TOK_BEFORE "before"
 
 %token TOK_CLASS "class"
 %token TOK_ID "id"
@@ -249,8 +251,8 @@ operation:
     /*| reload
     | mark
     | layout
-    | border
-    | move*/
+    | border */
+    | move
     | workspace
     | attach
     | focus
@@ -418,3 +420,18 @@ level_direction:
     TOK_UP     { $<chr>$ = 'u'; }
     | TOK_DOWN { $<chr>$ = 'd'; }
     ;
+
+move:
+    TOK_MOVE WHITESPACE before_after WHITESPACE direction
+    {
+        printf("moving: %s and %c\n", ($<number>3 == TOK_BEFORE ? "before" : "after"), $<chr>5);
+        /* TODO: change API for the next call, we need to convert in both directions while ideally
+         * we should not need any of both */
+        tree_move(($<number>3 == TOK_BEFORE ? 'p' : 'n'), ($<chr>5 == 'v' ? VERT : HORIZ));
+    }
+    ;
+
+before_after:
+    TOK_BEFORE { $<number>$ = TOK_BEFORE; }
+    | TOK_AFTER { $<number>$ = TOK_AFTER; }
+    ;
index 72e8645cfae523304911eaa55e905a9f6aad4611..8a3bdf2d789f701b418cbe8b02ea389fcd602050 100644 (file)
@@ -271,6 +271,8 @@ void tree_next(char way, orientation_t orientation) {
 void tree_move(char way, orientation_t orientation) {
     /* 1: get the first parent with the same orientation */
     Con *parent = focused->parent;
+    if (parent->type == CT_OUTPUT)
+        return;
     bool level_changed = false;
     while (parent->orientation != orientation) {
         LOG("need to go one level further up\n");