Support for tabbed layout for `inet' workspace.

Ilya V. Portnov [2011-05-03 09:36:44]
Support for tabbed layout for `inet' workspace.
Filename
lib/KeyBindings.hs
lib/Layouts.hs
diff --git a/lib/KeyBindings.hs b/lib/KeyBindings.hs
index 4508307..d1e6d61 100644
--- a/lib/KeyBindings.hs
+++ b/lib/KeyBindings.hs
@@ -19,12 +19,15 @@ 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 qualified XMonad.Layout.TabbedModifier as Tab
+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
@@ -84,7 +87,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)),
@@ -103,15 +105,15 @@ addKeys = [("M-s n",          spawn "screenslide start"),

           ("M1-e",            viewEmptyWorkspace),
           ("M1-S-e",          windows $ emptyCurrentWorkspace),
-          ("M-<Backspace>",  nextMatch History (return True)),
+          ("M-<Backspace>",   nextMatch History (return True)),

           -- Resize viewed windows to the correct size
           ("M-n",             refresh),

           -- Move focus to the next window
           ("M1-<Tab>",        windows W.focusDown),
-          ("M-j",             windows W.focusDown),
-          ("M-k",             windows W.focusUp  ),
+          ("M-j",             bindOn [("inet", Ex.focusDown), ("", windows W.focusDown)]),
+          ("M-k",             bindOn [("inet", Ex.focusUp),   ("", windows W.focusUp)]  ),

 --        ("M-<Left>",        sendMessage $ Nav.Go Nav.L  ),
 --        ("M-<Right>",       sendMessage $ Nav.Go Nav.R  ),
@@ -119,23 +121,31 @@ addKeys = [("M-s n",          spawn "screenslide start"),
 --        ("M-<Down>",        sendMessage $ Nav.Go Nav.D  ),

           -- 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 $ Tab.pull Nav.L),
-          ("M-M1-l",          sendMessage $ Tab.pull Nav.R),
-          ("M-M1-k",          sendMessage $ Tab.pull Nav.U),
-          ("M-M1-h",          sendMessage $ Tab.pull Nav.D),
-
-          ("M-M1-u",          withFocused (sendMessage . Tab.UnTab)),
+          ("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))]),

           -- Shrink/expand the master area
           ("M-e",             sendMessage Shrink),
diff --git a/lib/Layouts.hs b/lib/Layouts.hs
index 77c3ea4..43e8064 100644
--- a/lib/Layouts.hs
+++ b/lib/Layouts.hs
@@ -35,8 +35,10 @@ import XMonad.Layout.Tabbed
 import XMonad.Layout.TrackFloating
 import XMonad.Layout.Maximize
 import XMonad.Layout.Minimize
+import XMonad.Layout.SubLayouts
+import XMonad.Layout.Simplest
+import XMonad.Layout.Groups

-import qualified XMonad.Layout.TabbedModifier as Tab
 import qualified XMonad.Layout.WindowNavigation as Nav

 import CommonFunctions
@@ -49,6 +51,9 @@ 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 autogrid2
+tabgrid  = group (tabbed shrinkText deco) (Mirror $ Tall 1 (1/100) (2/3))
+
 grid = named "grid" $ Grid (2)
 vgrid = Grid (1/2)
 tiled = Tall 1 (1/100) (1/2)
@@ -64,7 +69,7 @@ autogrid2 = autoMaster 2 (1/100) grid
 books = named "books" (Tall 1 (1/100) (2/3))
 -- rowtile = Mirror hortile
 mgrid = centerMaster grid
-forim = named "im" (tWithIM (minimax autogrid2 ||| minimax grid ||| zgrid ||| Full))
+forim = named "im" (tWithIM imlayout)
 column = Column 1.8
 forgimp = named "gimp" $ withButtons $ combineTwoP (TwoPane 0.03 0.75) column (reflectVert $ Column 0.4) $ Not isGfxPanel
 onebig = named "onebig" $ (OneBig (3/4) (3/4))
@@ -95,8 +100,7 @@ myLayout = trackFloating $
            smartBorders $
            Nav.configurableNavigation (Nav.navigateBrightness 0.0) $
            avoidStruts $
-           Tab.modify shrinkText deco $
-           onWorkspace "inet" (minimax full ||| autogrid ||| onebig) $
+           onWorkspace "inet" (minimax full ||| tabgrid ||| onebig) $
            onWorkspace "text" (minimax full ||| minimax autogrid2 ||| minimax dwmtile ||| minimax mirrored ||| books ||| autogrid ||| onebig ) $
            onWorkspace "files" (minimax full ||| minimax dwmtile ||| autogrid) $
            onWorkspace "im" forim $
@@ -104,9 +108,3 @@ myLayout = trackFloating $
            onWorkspace "dashboard" (forgimp ||| full ||| grid) $
            onWorkspace "trash" (full ||| autogrid ||| grid) (minimax mirrored ||| full)

-twoTabs = do
-           chooseLayout "autogrid"
-           sendMessage $ IncMasterN 1
-           sendMessage $ Tab.pull Nav.R
-           sendMessage $ IncMasterN (-1)
-
ViewGit