Support for tabbed layout on `inet' workspace.

Ilya Portnov [2011-05-03 15:38:04]
Support for tabbed layout on `inet' workspace.
Filename
lib/KeyBindings.hs
lib/Layouts.hs
diff --git a/lib/KeyBindings.hs b/lib/KeyBindings.hs
index 9c37844..31d041e 100644
--- a/lib/KeyBindings.hs
+++ b/lib/KeyBindings.hs
@@ -19,12 +19,16 @@ import XMonad.Actions.DwmPromote
 import XMonad.Actions.GridSelect
 import XMonad.Actions.FindEmptyWorkspace
 import XMonad.Actions.GroupNavigation
+import XMonad.Actions.PerWorkspaceKeys

 import XMonad.Layout.MultiToggle
 import XMonad.Layout.MultiToggle.Instances
 import XMonad.Layout.Maximize
 import XMonad.Layout.Minimize
 import XMonad.Layout.SubLayouts
+import XMonad.Layout.SubLayouts
+import qualified XMonad.Layout.Groups as G
+import qualified XMonad.Layout.Groups.Examples as Ex
 import qualified XMonad.Layout.WindowNavigation as Nav

 import XMonad.Prompt.Window
@@ -88,7 +92,6 @@ addKeys = [("M-s n",         spawn "screenslide start"),
           ("M-o",             chooseLayout "onebig"),
           ("M-w",             chooseLayout "mgrid"),
           ("M-u",             chooseLayout "autogrid"),
---           ("M-S-u",           twoTabs),
           ("M-<Up>",          withFocused (sendMessage . maximizeRestore)),
           ("M-<Down>",        withFocused minimizeWindow),
           ("M-<Right>",       withFocused (sendMessage . RestoreMinimizedWin)),
@@ -114,31 +117,36 @@ addKeys = [("M-s n",         spawn "screenslide start"),

           -- Move focus to the next window
           ("M1-<Tab>",        windows W.focusDown),
-          ("M-j",             windows W.focusDown),
-          ("M-k",             windows W.focusUp),
-
---        ("M-<Left>",        sendMessage $ Nav.Go Nav.L  ),
---        ("M-<Right>",       sendMessage $ Nav.Go Nav.R  ),
---        ("M-<Up>",          sendMessage $ Nav.Go Nav.U  ),
---        ("M-<Down>",        sendMessage $ Nav.Go Nav.D  ),
+          ("M-j",             bindOn [("inet", Ex.focusDown), ("", windows W.focusDown)]),
+          ("M-k",             bindOn [("inet", Ex.focusUp),   ("", windows W.focusUp)]  ),

           -- Rotate windows list
-          ("M-C-j",           rotateWindows ),
-          ("M-C-k",           rotateWindows' ),
+          ("M-C-j",           bindOn [("inet", Ex.focusGroupDown),
+                                      ("",     rotateWindows)] ),
+          ("M-C-k",           bindOn [("inet", Ex.focusGroupUp),
+                                      ("",     rotateWindows')] ),

           -- Swap the focused window and the master window
-          ("M-<Return>",      dwmpromote),
+          ("M-<Return>",      bindOn [("inet", Ex.swapGroupMaster),
+                                      ("",     dwmpromote)]),

           -- Swap the focused window with the next window
-          ("M-S-j",           windows W.swapDown  ),
-          ("M-S-k",           windows W.swapUp    ),
+          ("M-S-j",           bindOn [("inet", Ex.swapDown),
+                                      ("",     windows W.swapDown)]),
+          ("M-S-k",           bindOn [("inet", Ex.swapUp),
+                                      ("",     windows W.swapUp)]),

           -- Tab/Untab
-          ("M-M1-j",          sendMessage $ pushWindow Nav.D),
-          ("M-M1-l",          sendMessage $ pushWindow Nav.R),
+          ("M-M1-j",          bindOn [("inet", Ex.moveToGroupDown False),
+                                      ("",     sendMessage $ pushWindow Nav.D)]),
+          ("M-M1-l",          bindOn [("inet", Ex.moveToGroupUp   False),
+                                      ("",     sendMessage $ pushWindow Nav.R)]),
           ("M-M1-k",          sendMessage $ pushWindow Nav.U),
           ("M-M1-h",          sendMessage $ pushWindow Nav.L),

+          ("M-M1-u",          bindOn [("inet", Ex.splitGroup),
+                                      ("",     withFocused (sendMessage . UnMerge))]),
+
           ("M-M1-u",          withFocused (sendMessage . UnMergeAll)),

           -- Shrink/expand the master area
diff --git a/lib/Layouts.hs b/lib/Layouts.hs
index b3fa6b5..4c74871 100644
--- a/lib/Layouts.hs
+++ b/lib/Layouts.hs
@@ -34,6 +34,7 @@ import XMonad.Layout.Maximize
 import XMonad.Layout.Minimize
 import XMonad.Layout.SubLayouts
 import XMonad.Layout.Simplest
+import XMonad.Layout.Groups

 import qualified XMonad.Layout.WindowNavigation as Nav

@@ -47,6 +48,8 @@ tWithIM = withIM (1%6) ((Role "buddy_list") `Or` (Role "MainWindow") `Or` (Role
 isGfxPanel = (Role "gimp-toolbox") `Or` (Role "Brush selector") `Or` (Role "toolbox_window") `Or` (Role "Layers")

 imlayout = addTabs shrinkText deco $ subLayout [] Simplest (Grid 2)
+tabgrid  = group (tabbed shrinkText deco) (Mirror $ Tall 1 (1/100) (2/3))
+tabfull  = addTabs shrinkText deco Simplest

 grid = named "grid" $ Grid (2)
 vgrid = Grid (1/2)
@@ -97,7 +100,7 @@ myLayout = trackFloating $
            Nav.configurableNavigation (Nav.navigateBrightness 0.0) $
            avoidStruts $
            -- Tab.modify shrinkText deco $
-           onWorkspace "inet" (minimax full ||| minimax autogrid ||| onebig) $
+           onWorkspace "inet" (minimax full ||| minimax tabgrid) $
            onWorkspace "text" (minimax full ||| minimax autogrid2 ||| minimax dwmtile ||| minimax mirrored ||| books ||| autogrid ||| onebig ) $
            onWorkspace "files" (minimax full ||| minimax dwmtile ||| autogrid) $
            onWorkspace "im" forim $
ViewGit