bluetile 0.3.1 → 0.4
raw patch · 5 files changed
+121/−68 lines, 5 filesdep ~X11dep ~xmonad-bluetilebranchdep ~xmonad-contrib-bluetilebranch
Dependency ranges changed: X11, xmonad-bluetilebranch, xmonad-contrib-bluetilebranch
Files
- bluetile.cabal +8/−5
- bluetiledock/BluetileDock.hs +18/−18
- src/BluetileDock.hs +41/−0
- src/Config.hs +45/−39
- src/Main.hs +9/−6
bluetile.cabal view
@@ -1,5 +1,5 @@ Name: bluetile-Version: 0.3.1+Version: 0.4 synopsis: A modern tiling window manager with a gentle learning curve description: Bluetile is a tiling window manager for X based on xmonad. Windows are arranged@@ -14,14 +14,15 @@ License-file: LICENSE Author: Jan Vornberger Maintainer: jan.vornberger@informatik.uni-oldenburg.de-extra-source-files: src/Config.hs+extra-source-files: src/Config.hs,+ src/BluetileDock.hs, bluetiledock/Utils.hs, bluetilegreet/Utils.hs data-files: bluetiledock/bluetiledock.glade, bluetiledock/floating.svg, bluetiledock/tiled1.svg, bluetiledock/tiled2.svg,- bluetiledock/fullscreen.svg+ bluetiledock/fullscreen.svg, bluetilegreet/bluetilegreet.glade Build-Type: Simple Cabal-Version: >=1.2@@ -30,11 +31,11 @@ Main-is: Main.hs Hs-Source-Dirs: src Build-Depends: base>=3, base<4, containers, process,- xmonad-bluetilebranch>=0.8.1.3, xmonad-contrib-bluetilebranch>=0.8.1.3,- X11<1.5.0.0+ xmonad-bluetilebranch>=0.9, xmonad-contrib-bluetilebranch>=0.9 Ghc-Options: -Wall Executable bluetiledock+ Buildable: True Hs-Source-Dirs: bluetiledock Main-is: BluetileDock.hs Build-Depends: base>=3, base<4, unix, glade, gtk, X11>=1.4@@ -42,12 +43,14 @@ Ghc-options: -Wall Executable bluetilemockwin+ Buildable: True Hs-Source-Dirs: bluetilemockwin Main-is: BluetileMockWin.hs Build-Depends: base>=3, base<4, gtk Ghc-options: -Wall Executable bluetilegreet+ Buildable: True Hs-Source-Dirs: bluetilegreet Main-is: BluetileGreet.hs Build-Depends: base>=3, base<4, directory, filepath, glade, gtk
bluetiledock/BluetileDock.hs view
@@ -63,30 +63,30 @@ nextScreenCmdOffset = 18 incMasterCmd :: Int-incMasterCmd = 15+incMasterCmd = 16 decMasterCmd :: Int-decMasterCmd = 16+decMasterCmd = 17 quitBluetileCmd :: Int-quitBluetileCmd = 17+quitBluetileCmd = 18 quitBluetileStartMetacityCmd :: Int-quitBluetileStartMetacityCmd = 18+quitBluetileStartMetacityCmd = 19 -- name of widget caption identifier group command to execute tbData :: [(String, String, String, String, ToggleButton -> Int -> IORef Bool -> IO ())]-tbData = [ ("togglebutton1" , "1", "1" , "workspace", sendCommandIfToggled 1)- , ("togglebutton2" , "2", "2" , "workspace", sendCommandIfToggled 2)- , ("togglebutton3" , "3", "3" , "workspace", sendCommandIfToggled 3)- , ("togglebutton4" , "4", "4" , "workspace", sendCommandIfToggled 4)- , ("togglebutton5" , "5", "5" , "workspace", sendCommandIfToggled 5)- , ("togglebutton6" , "6", "6" , "workspace", sendCommandIfToggled 6)- , ("togglebutton7" , "7", "7" , "workspace", sendCommandIfToggled 7)- , ("togglebutton8" , "8", "8" , "workspace", sendCommandIfToggled 8)- , ("togglebutton9" , "9", "9" , "workspace", sendCommandIfToggled 9)- , ("togglebutton0" , "0", "0" , "workspace", sendCommandIfToggled 10)- , ("togglebuttonlayouta", "A", "Floating" , "layout" , sendCommandIfToggled 11)- , ("togglebuttonlayoutb", "S", "Tiled1" , "layout" , sendCommandIfToggled 12)- , ("togglebuttonlayoutc", "D", "Tiled2" , "layout" , sendCommandIfToggled 13)- , ("togglebuttonlayoutd", "F", "Fullscreen", "layout" , sendCommandIfToggled 14)+tbData = [ ("togglebutton1" , "1", "1" , "workspace", sendCommandIfToggled 2)+ , ("togglebutton2" , "2", "2" , "workspace", sendCommandIfToggled 3)+ , ("togglebutton3" , "3", "3" , "workspace", sendCommandIfToggled 4)+ , ("togglebutton4" , "4", "4" , "workspace", sendCommandIfToggled 5)+ , ("togglebutton5" , "5", "5" , "workspace", sendCommandIfToggled 6)+ , ("togglebutton6" , "6", "6" , "workspace", sendCommandIfToggled 7)+ , ("togglebutton7" , "7", "7" , "workspace", sendCommandIfToggled 8)+ , ("togglebutton8" , "8", "8" , "workspace", sendCommandIfToggled 9)+ , ("togglebutton9" , "9", "9" , "workspace", sendCommandIfToggled 10)+ , ("togglebutton0" , "0", "0" , "workspace", sendCommandIfToggled 11)+ , ("togglebuttonlayouta", "A", "Floating" , "layout" , sendCommandIfToggled 12)+ , ("togglebuttonlayoutb", "S", "Tiled1" , "layout" , sendCommandIfToggled 13)+ , ("togglebuttonlayoutc", "D", "Tiled2" , "layout" , sendCommandIfToggled 14)+ , ("togglebuttonlayoutd", "F", "Fullscreen", "layout" , sendCommandIfToggled 15) ] main :: IO ()
+ src/BluetileDock.hs view
@@ -0,0 +1,41 @@+----------------------------------------------------------------------------+-- |+-- Module : BluetileDock+-- Copyright : (c) Jan Vornberger 2009+-- License : BSD3-style (see LICENSE)+--+-- Maintainer : jan.vornberger@informatik.uni-oldenburg.de+-- Stability : unstable+-- Portability : not portable+--+-----------------------------------------------------------------------------++module BluetileDock (bluetileDock) where++import XMonad+import qualified XMonad.StackSet as S+import System.IO+import Control.Monad(forM_)++data DockOutput = DO Int String String deriving (Show, Read)++bluetileDock :: Handle -> X ()+bluetileDock outputHandle = do+ ws <- gets windowset+ let allscreens = S.screens ws+ let outputs = for allscreens $ \s -> DO (getScreenId (S.screen s))+ (getLayoutDesc s)+ (getCurrentWorkspace s)+ forM_ outputs $ \o -> io $ hPutStrLn outputHandle $ show o++getScreenId :: ScreenId -> Int+getScreenId (S sid) = sid++getLayoutDesc :: S.Screen i (Layout Window) a sid sd -> String+getLayoutDesc = description . S.layout . S.workspace++getCurrentWorkspace :: S.Screen i l a sid sd -> i+getCurrentWorkspace = S.tag . S.workspace++for :: [a] -> (a -> b) -> [b]+for = flip map
src/Config.hs view
@@ -9,40 +9,44 @@ -- Stability : unstable -- Portability : not portable ----- The default configuration of bluetile+-- This is the default configuration of Bluetile -- ----------------------------------------------------------------------------- -module Config where+module Config (+ bluetileConfig+ ) where import XMonad hiding ( (|||) ) import XMonad.Layout hiding ( (|||) )-import XMonad.Layout.Maximize-import XMonad.Layout.Minimize-import XMonad.Layout.NoBorders-import XMonad.Layout.LayoutCombinators-import XMonad.Layout.Named+import XMonad.Layout.BorderResize import XMonad.Layout.BoringWindows+import XMonad.Layout.ButtonDecoration import XMonad.Layout.Decoration-import XMonad.Layout.WindowSwitcherDecoration+import XMonad.Layout.DecorationAddons import XMonad.Layout.DraggingVisualizer-import XMonad.Layout.PositionStoreFloat-import XMonad.Layout.BorderResize+import XMonad.Layout.LayoutCombinators+import XMonad.Layout.Maximize+import XMonad.Layout.Minimize import XMonad.Layout.MouseResizableTile-import XMonad.Layout.NoFrillsDecoration+import XMonad.Layout.Named+import XMonad.Layout.NoBorders+import XMonad.Layout.PositionStoreFloat+import XMonad.Layout.WindowSwitcherDecoration -import XMonad.Actions.CycleWS import XMonad.Actions.BluetileCommands+import XMonad.Actions.CycleWS import XMonad.Actions.WindowMenu -import XMonad.Hooks.ManageDocks+import XMonad.Hooks.CurrentWorkspaceOnTop import XMonad.Hooks.EwmhDesktops-import XMonad.Hooks.CustomRestart+import XMonad.Hooks.ManageDocks+import XMonad.Hooks.ManageHelpers+import XMonad.Hooks.PositionStoreHooks import XMonad.Hooks.RestoreMinimized-import XMonad.Hooks.WorkspaceByPos-import XMonad.Hooks.BluetileDock import XMonad.Hooks.ServerMode+import XMonad.Hooks.WorkspaceByPos import XMonad.Config.Gnome @@ -53,11 +57,11 @@ import Data.Monoid import Control.Monad(when) -blueTileWorkspaces :: [String]-blueTileWorkspaces = ["1","2","3","4","5","6","7","8","9","0"]+bluetileWorkspaces :: [String]+bluetileWorkspaces = ["1","2","3","4","5","6","7","8","9","0"] -blueTileKeys :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())-blueTileKeys conf@(XConfig {XMonad.modMask = modMask'}) = M.fromList $+bluetileKeys :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())+bluetileKeys conf@(XConfig {XMonad.modMask = modMask'}) = M.fromList $ -- launching and killing programs [ ((modMask' , xK_Return), spawn $ XMonad.terminal conf) -- %! Launch terminal , ((modMask', xK_p ), gnomeRun) -- %! Launch Gnome "Run application" dialog@@ -134,8 +138,8 @@ | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] -blueTileMouseBindings :: XConfig Layout -> M.Map (KeyMask, Button) (Window -> X ())-blueTileMouseBindings (XConfig {XMonad.modMask = modMask'}) = M.fromList $+bluetileMouseBindings :: XConfig Layout -> M.Map (KeyMask, Button) (Window -> X ())+bluetileMouseBindings (XConfig {XMonad.modMask = modMask'}) = M.fromList $ -- mod-button1 %! Move a floated window by dragging [ ((modMask', button1), (\w -> isFloating w >>= \isF -> when (isF) $ focus w >> mouseMoveWindow w >> windows W.shiftMaster))@@ -152,13 +156,14 @@ ws <- gets windowset return $ M.member w (W.floating ws) -blueTileManageHook :: ManageHook-blueTileManageHook = composeAll- [ workspaceByPos+bluetileManageHook :: ManageHook+bluetileManageHook = composeAll+ [ workspaceByPos, positionStoreManageHook , className =? "MPlayer" --> doFloat+ , isFullscreen --> doFullFloat , manageDocks] -blueTileLayoutHook = avoidStruts $ boringAuto $ minimize $ (+bluetileLayoutHook = avoidStruts $ minimize $ boringWindows $ ( named "Floating" floating ||| named "Tiled1" tiled1 ||| named "Tiled2" tiled2 |||@@ -170,23 +175,24 @@ tiled2 = tilingDeco $ maximize $ mouseResizableTile fullscreen = tilingDeco $ maximize $ smartBorders Full - tilingDeco l = windowSwitcherDecoration shrinkText defaultTheme (draggingVisualizer l)- floatingDeco l = noFrillsDeco shrinkText defaultTheme l+ tilingDeco l = windowSwitcherDecorationWithButtons shrinkText defaultThemeWithButtons (draggingVisualizer l)+ floatingDeco l = buttonDeco shrinkText defaultThemeWithButtons l -blueTileConfig dockHandle =+bluetileConfig = defaultConfig { modMask = mod4Mask, -- logo key- manageHook = blueTileManageHook,- layoutHook = blueTileLayoutHook,- logHook = ewmhDesktopsLogHook >> bluetileDock dockHandle,+ manageHook = bluetileManageHook,+ layoutHook = bluetileLayoutHook,+ logHook = currentWorkspaceOnTop >> ewmhDesktopsLogHook, handleEventHook = ewmhDesktopsEventHook- `mappend` customRestartEventHook "bluetile"+ `mappend` fullscreenEventHook `mappend` restoreMinimizedEventHook- `mappend` serverModeEventHookCustom bluetileCommands,- workspaces = blueTileWorkspaces,- keys = blueTileKeys,- mouseBindings = blueTileMouseBindings,- focusFollowsMouse = False,- focusedBorderColor = "#ff5500",+ `mappend` serverModeEventHook' bluetileCommands+ `mappend` positionStoreEventHook,+ workspaces = bluetileWorkspaces,+ keys = bluetileKeys,+ mouseBindings = bluetileMouseBindings,+ focusFollowsMouse = False,+ focusedBorderColor = "#000000", terminal = "gnome-terminal" }
src/Main.hs view
@@ -8,7 +8,7 @@ -- Stability : unstable -- Portability : not portable ----- bluetile - a modern tiling window manager with a gentle learning curve+-- Bluetile - a modern tiling window manager with a gentle learning curve -- ----------------------------------------------------------------------------- @@ -16,7 +16,9 @@ import XMonad import XMonad.Util.Run (spawnPipe)+import XMonad.Util.Replace +import BluetileDock import Config import System.IO@@ -36,7 +38,7 @@ args <- getArgs case args of [] -> launch- ["--resume", _] -> launch+ ("--resume":_) -> launch ["--help"] -> usage ["--restart"] -> sendRestart >> return () ["--version"] -> putStrLn ("bluetile " ++ showVersion version)@@ -59,10 +61,11 @@ -- check terminal uninstallSignalHandlers -- make sure we can receive SIGCHLD to check terminal- blueTileConfig' <- checkTerminal $ blueTileConfig dockHandle+ bluetileConfig' <- checkTerminal $ bluetileConfig { logHook = logHook bluetileConfig >> bluetileDock dockHandle } installSignalHandlers -- important to ignore SIGCHLD from now on to avoid zombies - xmonad blueTileConfig'+ replace+ xmonad bluetileConfig' usage :: IO () usage = do@@ -79,10 +82,10 @@ sendRestart = do dpy <- openDisplay "" rw <- rootWindow dpy $ defaultScreen dpy- xmonad_restart <- internAtom dpy "XMONAD_CUSTOM_RESTART" False+ a <- internAtom dpy "XMONAD_COMMAND" False allocaXEvent $ \e -> do setEventType e clientMessage- setClientMessageEvent e rw xmonad_restart 32 0 currentTime+ setClientMessageEvent e rw a 32 1 currentTime sendEvent dpy rw False structureNotifyMask e sync dpy False