]> git.sur5r.net Git - i3/i3/commitdiff
CONFIG BREAK: kick the 'next'/'prev' commands, introduce 'focus left' etc.
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 8 Jun 2011 18:49:49 +0000 (20:49 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 8 Jun 2011 18:49:49 +0000 (20:49 +0200)
Instead of the cryptic next/prev commands, we now provide an argument to the
focus command. Userguide and default config is updated.

docs/userguide
i3.config
src/cmdparse.l
src/cmdparse.y
testcases/t/06-focus.t
testcases/t/11-goto.t
testcases/t/21-next-prev.t
testcases/t/24-move.t
testcases/t/29-focus-after-close.t
testcases/t/31-stacking-order.t
testcases/t/40-focus-lost.t

index aea0e760a3a387df219d80be91449d48ae5cce88..b7a8ff09887a52f860aba5c17858561d9c774694 100644 (file)
@@ -629,23 +629,22 @@ bindsym Mod1+t mode toggle
 
 === Focusing/Moving containers
 
-To change the focus, use one of the +prev h+, +next v+, +prev v+ and +next h+
-commands, meaning left, down, up, right (respectively).
+To change the focus, use the focus command: +focus left+, +focus right+, +focus down+ and +focus up+.
 
 For moving, use +move left+, +move right+, +move down+ and +move up+.
 
 *Examples*:
 ----------------------
 # Focus clients on the left, bottom, top, right:
-bindsym Mod1+j prev h
-bindsym Mod1+k next v
-bindsym Mod1+j prev v
-bindsym Mod1+semicolon next h
+bindsym Mod1+j focus left
+bindsym Mod1+k focus down
+bindsym Mod1+l focus up
+bindsym Mod1+semicolon focus right
 
 # Move client to the left, bottom, top, right:
 bindsym Mod1+j move left
 bindsym Mod1+k move down
-bindsym Mod1+j move up
+bindsym Mod1+l move up
 bindsym Mod1+semicolon move right
 ----------------------
 
index b0cbc92687ba1647ff872a868912509ceec76396..847c4b14a109959c280e06458f9191fb2b5a7f56 100644 (file)
--- a/i3.config
+++ b/i3.config
@@ -57,16 +57,16 @@ bindsym Mod1+Shift+j reload
 bindsym Mod1+Shift+l exit
 
 # Focus (Mod1+n/r/t/d)
-bindsym Mod1+n prev h
-bindsym Mod1+r next v
-bindsym Mod1+t prev v
-bindsym Mod1+d next h
+bindsym Mod1+n focus left
+bindsym Mod1+r focus down
+bindsym Mod1+t focus up
+bindsym Mod1+d focus right
 
 # alternatively, you can use the cursor keys:
-bindsym Mod1+Left prev h
-bindsym Mod1+Right next h
-bindsym Mod1+Down next v
-bindsym Mod1+Up prev v
+bindsym Mod1+Left focus left
+bindsym Mod1+Down focus down
+bindsym Mod1+Up focus up
+bindsym Mod1+Right focus right
 
 # Move
 bindsym Mod1+Shift+n move left
index b366e48b43ef60b137aa390870513c3c73d503d9..91aed5e349da5b9f74eb8c4e19a260d543d6dad0 100644 (file)
@@ -120,7 +120,6 @@ workspace                       { WS_STRING; return TOK_WORKSPACE; }
 focus                           { return TOK_FOCUS; }
 move                            { return TOK_MOVE; }
 open                            { return TOK_OPEN; }
-next                            { return TOK_NEXT; }
 prev                            { return TOK_PREV; }
 split                           { return TOK_SPLIT; }
 horizontal                      { return TOK_HORIZONTAL; }
index f3475d9def12d38cb6b615e02786777b3877b586..08f02c615b8cb52483926b617d0c8eb19ae8a5af 100644 (file)
@@ -140,7 +140,6 @@ char *parse_cmd(const char *new) {
 %token              TOK_FOCUS           "focus"
 %token              TOK_MOVE            "move"
 %token              TOK_OPEN            "open"
-%token              TOK_NEXT            "next"
 %token              TOK_PREV            "prev"
 %token              TOK_SPLIT           "split"
 %token              TOK_HORIZONTAL      "horizontal"
@@ -333,8 +332,6 @@ operation:
     | kill
     | open
     | fullscreen
-    | next
-    | prev
     | split
     | mode
     | level
@@ -400,6 +397,33 @@ focus:
 
         tree_render();
     }
+    | TOK_FOCUS direction
+    {
+        int direction = $2;
+        switch (direction) {
+            case TOK_LEFT:
+                LOG("Focusing left\n");
+                tree_next('p', HORIZ);
+                break;
+            case TOK_RIGHT:
+                LOG("Focusing right\n");
+                tree_next('n', HORIZ);
+                break;
+            case TOK_UP:
+                LOG("Focusing up\n");
+                tree_next('p', VERT);
+                break;
+            case TOK_DOWN:
+                LOG("Focusing down\n");
+                tree_next('n', VERT);
+                break;
+            default:
+                ELOG("Invalid focus direction (%d)\n", direction);
+                break;
+        }
+
+        tree_render();
+    }
     ;
 
 kill:
@@ -469,28 +493,6 @@ fullscreen:
     }
     ;
 
-next:
-    TOK_NEXT direction
-    {
-        /* TODO: use matches */
-        printf("should select next window in direction %c\n", $2);
-        tree_next('n', ($2 == 'v' ? VERT : HORIZ));
-
-        tree_render();
-    }
-    ;
-
-prev:
-    TOK_PREV direction
-    {
-        /* TODO: use matches */
-        printf("should select prev window in direction %c\n", $2);
-        tree_next('p', ($2 == 'v' ? VERT : HORIZ));
-
-        tree_render();
-    }
-    ;
-
 split:
     TOK_SPLIT direction
     {
index 798a5e6999010c2f9f1c9ea93df26cdb3c708dda..826588d50c65bbc59dac90feecafcf8d46d39b4d 100644 (file)
@@ -44,20 +44,20 @@ sub focus_after {
 $focus = $x->input_focus;
 is($focus, $bottom->id, "Latest window focused");
 
-$focus = focus_after("prev v");
+$focus = focus_after('focus up');
 is($focus, $mid->id, "Middle window focused");
 
-$focus = focus_after("prev v");
+$focus = focus_after('focus up');
 is($focus, $top->id, "Top window focused");
 
 #####################################################################
 # Test focus wrapping
 #####################################################################
 
-$focus = focus_after("prev v");
+$focus = focus_after('focus up');
 is($focus, $bottom->id, "Bottom window focused (wrapping to the top works)");
 
-$focus = focus_after("next v");
+$focus = focus_after('focus down');
 is($focus, $top->id, "Top window focused (wrapping to the bottom works)");
 
 ###############################################
index 929af5c2a9f7f6502d48be5d9267d2a51f8c2b14..7aebc880bb31ee97b478ed12439d0f66ad9e136b 100644 (file)
@@ -45,7 +45,7 @@ sub focus_after {
 $focus = $x->input_focus;
 is($focus, $bottom->id, "Latest window focused");
 
-$focus = focus_after("prev h");
+$focus = focus_after('focus left');
 is($focus, $mid->id, "Middle window focused");
 
 #####################################################################
@@ -59,7 +59,7 @@ is($focus, $mid->id, "focus unchanged");
 
 $i3->command("mark $random_mark")->recv;
 
-$focus = focus_after("prev h");
+$focus = focus_after('focus left');
 is($focus, $top->id, "Top window focused");
 
 $focus = focus_after(qq|[con_mark="$random_mark"] focus|);
index 042573a47dedee83b18a42284cb8a35aabc18078..447be31569ff190c827e458688c736a1e78b0fc2 100644 (file)
@@ -8,23 +8,23 @@ use i3test;
 my $tmp = fresh_workspace;
 
 ######################################################################
-# Open one container, verify that 'next v' and 'next h' do nothing
+# Open one container, verify that 'focus down' and 'focus right' do nothing
 ######################################################################
 cmd 'open';
 
 my ($nodes, $focus) = get_ws_content($tmp);
 my $old_focused = $focus->[0];
 
-cmd 'next v';
+cmd 'focus down';
 ($nodes, $focus) = get_ws_content($tmp);
 is($focus->[0], $old_focused, 'focus did not change with only one con');
 
-cmd 'next h';
+cmd 'focus right';
 ($nodes, $focus) = get_ws_content($tmp);
 is($focus->[0], $old_focused, 'focus did not change with only one con');
 
 ######################################################################
-# Open another container, verify that 'next h' switches
+# Open another container, verify that 'focus right' switches
 ######################################################################
 my $left = $old_focused;
 
@@ -38,44 +38,32 @@ cmd 'open';
 isnt($old_focused, $focus->[0], 'new container is focused');
 my $right = $focus->[0];
 
-cmd 'next h';
+cmd 'focus right';
 ($nodes, $focus) = get_ws_content($tmp);
 isnt($focus->[0], $right, 'focus did change');
 is($focus->[0], $left, 'left container focused (wrapping)');
 
-cmd 'next h';
+cmd 'focus right';
 ($nodes, $focus) = get_ws_content($tmp);
 is($focus->[0], $mid, 'middle container focused');
 
-cmd 'next h';
+cmd 'focus right';
 ($nodes, $focus) = get_ws_content($tmp);
 is($focus->[0], $right, 'right container focused');
 
-cmd 'prev h';
+cmd 'focus left';
 ($nodes, $focus) = get_ws_content($tmp);
 is($focus->[0], $mid, 'middle container focused');
 
-cmd 'prev h';
+cmd 'focus left';
 ($nodes, $focus) = get_ws_content($tmp);
 is($focus->[0], $left, 'left container focused');
 
-cmd 'prev h';
+cmd 'focus left';
 ($nodes, $focus) = get_ws_content($tmp);
 is($focus->[0], $right, 'right container focused');
 
 
-######################################################################
-# Test synonyms (horizontal/vertical instead of h/v)
-######################################################################
-
-cmd 'prev horizontal';
-($nodes, $focus) = get_ws_content($tmp);
-is($focus->[0], $mid, 'middle container focused');
-
-cmd 'next horizontal';
-($nodes, $focus) = get_ws_content($tmp);
-is($focus->[0], $right, 'right container focused');
-
 ######################################################################
 # Test focus command
 ######################################################################
index ebb7dc66c69449a7feb35ec94314917d29d060ee..9d200aa9d518b8ec405aa8db8a067f06131593eb 100644 (file)
@@ -121,11 +121,11 @@ cmd "open";
 cmd "open";
 cmd "split v";
 cmd "open";
-cmd "prev h";
+cmd 'focus left';
 cmd "split v";
 cmd "open";
 cmd "move right";
-cmd "prev h";
+cmd 'focus left';
 cmd "move right";
 
 $content = get_ws_content($otmp);
index b34e668618d0cbc0c2873cdab1a7c6f65c4b3fba..dec9bb92c8b1474b437b8e351b01a2a68fd5fc77 100644 (file)
@@ -64,11 +64,11 @@ cmd 'split v';
 $first = open_empty_con($i3);
 my $bottom = open_empty_con($i3);
 
-cmd 'prev v';
+cmd 'focus up';
 cmd 'split h';
 my $middle = open_empty_con($i3);
 my $right = open_empty_con($i3);
-cmd 'next v';
+cmd 'focus down';
 
 # We have the following layout now (second is focused):
 # .----------------------------.
index 78a35cce3e780475e6d940e77f814fcb17cffd2a..4ffafa17139f30f2ea64590227ccb0c2250a74c3 100644 (file)
@@ -28,10 +28,10 @@ isnt($first, $second, 'two different containers opened');
 cmd 'layout stacking';
 is(get_focused($tmp), $second, 'second container still focused');
 
-cmd 'next v';
+cmd 'focus down';
 is(get_focused($tmp), $first, 'first container focused');
 
-cmd 'prev v';
+cmd 'focus up';
 is(get_focused($tmp), $second, 'second container focused again');
 
 ##############################################################
@@ -42,10 +42,10 @@ cmd 'level up';
 cmd 'split h';
 cmd 'level down';
 
-cmd 'next v';
+cmd 'focus down';
 is(get_focused($tmp), $first, 'first container focused');
 
-cmd 'prev v';
+cmd 'focus up';
 is(get_focused($tmp), $second, 'second container focused again');
 
 
index 4158d1f92e2766198aac4ea26eec9af37892811a..a39d74ca144f9cb1a4509e37c9fbe0b5e2477357 100644 (file)
@@ -36,7 +36,7 @@ diag("left = " . $left->id . ", mid = " . $mid->id . ", right = " . $right->id);
 
 is($x->input_focus, $right->id, 'Right window focused');
 
-cmd 'prev h';
+cmd 'focus left';
 
 is($x->input_focus, $mid->id, 'Mid window focused');