diff options
| author | Josh Rahm <joshuarahm@gmail.com> | 2022-04-24 20:34:51 -0600 |
|---|---|---|
| committer | Josh Rahm <joshuarahm@gmail.com> | 2022-04-24 20:34:51 -0600 |
| commit | 72414e1732064079719b1f1021dc4badce654903 (patch) | |
| tree | 0f2bcdf6074b6a8f696c53efb0a83bdd53460275 | |
| parent | 32a394483e5d8f571b27a70f9a7156cae1ed6180 (diff) | |
| download | rde-72414e1732064079719b1f1021dc4badce654903.tar.gz rde-72414e1732064079719b1f1021dc4badce654903.tar.bz2 rde-72414e1732064079719b1f1021dc4badce654903.zip | |
Add R.D.StackSet as a replacement for StackSet.
| -rw-r--r-- | package.yaml | 1 | ||||
| -rw-r--r-- | src/Main.hs | 5 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Common.hs | 31 | ||||
| -rw-r--r-- | src/Rahm/Desktop/History.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Hooks/WindowChange.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Keys.hs | 51 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Keys/Wml.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Layout.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Layout/ConsistentMosaic.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Layout/CornerLayout.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Layout/Draw.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Layout/Hole.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Layout/List.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Layout/Pop.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Layout/Redescribe.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Marking.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/ScreenRotate.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/StackSet.hs | 51 | ||||
| -rw-r--r-- | src/Rahm/Desktop/SwapMaster.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Windows.hs | 2 | ||||
| -rw-r--r-- | src/Rahm/Desktop/Workspaces.hs | 27 | ||||
| -rw-r--r-- | src/Rahm/Desktop/XMobarLog.hs | 15 |
22 files changed, 131 insertions, 80 deletions
diff --git a/package.yaml b/package.yaml index 056b5b0..cd62c0e 100644 --- a/package.yaml +++ b/package.yaml @@ -41,3 +41,4 @@ dependencies: - data-default - linear - time + - prettyprinter diff --git a/src/Main.hs b/src/Main.hs index 17f6207..bb39e14 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -26,7 +26,7 @@ import Rahm.Desktop.Hooks.WindowChange import Rahm.Desktop.History import qualified XMonad as X -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W main = do putStrLn "Welcome To RDE!" @@ -39,6 +39,7 @@ main = do setEnv "ROFI" menuCommandString xmobar <- spawnXMobar + count <- fromIntegral . screenCount <$> openDisplay "" (=<<) X.xmonad $ applyKeys $ withLocationChangeHook historyHook $ ewmh $ docks $ def @@ -68,7 +69,7 @@ main = do -- with something. However, this configuration only supports 36 -- monitors on boot. If you need more than 36 monitors, you'll have to -- configure those ones after starting XMonad. - , workspaces = map return (['0'..'9'] ++ ['a'..'z']) + , workspaces = map return (take count $ ['0'..'9'] ++ ['a'..'z']) , handleEventHook = composeAll [ fullscreenEventHook, diff --git a/src/Rahm/Desktop/Common.hs b/src/Rahm/Desktop/Common.hs index 6d86c0e..273984e 100644 --- a/src/Rahm/Desktop/Common.hs +++ b/src/Rahm/Desktop/Common.hs @@ -4,7 +4,6 @@ import Prelude hiding ((!!)) import Control.Monad (void, when, forM_) import Control.Monad.Trans.Maybe -import XMonad.Actions.DynamicWorkspaces import XMonad.Util.Run import XMonad.Prompt import XMonad.Prompt.Input @@ -19,12 +18,11 @@ import Data.List.Safe ((!!)) import Data.Maybe import Text.Printf import XMonad hiding (workspaces, Screen) -import XMonad.StackSet hiding (filter, focus) import qualified Data.Map as Map import Rahm.Desktop.DMenu import Data.Ord (comparing) -import qualified XMonad.StackSet as S +import qualified Rahm.Desktop.StackSet as S import Rahm.Desktop.Windows -- A location is a workspace and maybe a window with that workspace. @@ -70,7 +68,7 @@ getString = runQuery $ do askWindowId :: X (Maybe [Window]) askWindowId = do windowTitlesToWinId <- withWindowSet $ \ss -> - Map.fromListWith (++) <$> mapM (\wid -> (,) <$> getString wid <*> return [wid]) (allWindows ss) + Map.fromListWith (++) <$> mapM (\wid -> (,) <$> getString wid <*> return [wid]) (S.allWindows ss) runDMenuPromptWithMap "Window" (Just "#f542f5") windowTitlesToWinId @@ -103,15 +101,26 @@ withBorderColor color wins fn = do return ret +withBorderWidth :: Int -> [Window] -> X a -> X a +withBorderWidth width ws fn = do + d <- asks display + + forM_ ws $ \window -> + io $ setWindowBorderWidth d window $ fromIntegral width + + ret <- fn + + forM_ ws $ \window -> + io $ setWindowBorderWidth d window 2 + + return ret + gotoWorkspace :: WorkspaceId -> X () -gotoWorkspace wid = do - addHiddenWorkspace wid - windows $ S.greedyView wid +gotoWorkspace wid = windows $ S.greedyView wid moveLocationToWorkspace :: Location -> WorkspaceId -> X () -moveLocationToWorkspace (Location _ (Just win)) wid = do - addHiddenWorkspace wid - windows $ shiftWin wid win +moveLocationToWorkspace (Location _ (Just win)) wid = + windows $ S.shiftWin wid win moveLocationToWorkspace _ _ = return () getCurrentWorkspace :: X WorkspaceId @@ -122,7 +131,7 @@ getCurrentWorkspace = withWindowSet $ getCurrentLocation :: X Location getCurrentLocation = do ws <- getCurrentWorkspace - win <- withWindowSet (return . peek) + win <- withWindowSet (return . S.peek) return (Location ws win) runMaybeT_ :: (Monad m) => MaybeT m a -> m () diff --git a/src/Rahm/Desktop/History.hs b/src/Rahm/Desktop/History.hs index 9195a92..516cd94 100644 --- a/src/Rahm/Desktop/History.hs +++ b/src/Rahm/Desktop/History.hs @@ -2,7 +2,7 @@ module Rahm.Desktop.History where import XMonad import Text.Printf -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W import Data.IntMap (IntMap) import qualified Data.IntMap as IntMap import Data.Default diff --git a/src/Rahm/Desktop/Hooks/WindowChange.hs b/src/Rahm/Desktop/Hooks/WindowChange.hs index ec8e445..3bc66a4 100644 --- a/src/Rahm/Desktop/Hooks/WindowChange.hs +++ b/src/Rahm/Desktop/Hooks/WindowChange.hs @@ -6,7 +6,7 @@ import qualified XMonad.Util.ExtensibleState as XS import Data.Default import Rahm.Desktop.Common -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W newtype LastLocation = LastLocation (Maybe Location) deriving (Read, Show) diff --git a/src/Rahm/Desktop/Keys.hs b/src/Rahm/Desktop/Keys.hs index 728db52..a8b05a4 100644 --- a/src/Rahm/Desktop/Keys.hs +++ b/src/Rahm/Desktop/Keys.hs @@ -37,9 +37,9 @@ import XMonad.Util.CustomKeys import XMonad.Util.Run (safeSpawn) import XMonad.Util.Scratchpad import XMonad.Util.Ungrab +import Prettyprinter import qualified Data.Map as Map -import qualified XMonad.StackSet as W import Rahm.Desktop.DMenu import Rahm.Desktop.Keys.Dsl @@ -64,6 +64,7 @@ import Rahm.Desktop.Swallow import Rahm.Desktop.SwapMaster (swapMaster) import Rahm.Desktop.Windows import Rahm.Desktop.Workspaces +import qualified Rahm.Desktop.StackSet as W import Rahm.Desktop.History type KeyMap l = XConfig l -> Map (KeyMask, KeySym) (X ()) @@ -280,11 +281,11 @@ keymap = runKeys $ do runMaybeT_ $ (lift . gotoWorkspaceFn) =<< readNextWorkspace shiftMod $ - doc "Move the currently focused window to another workspace" $ + doc "Swap a workspace with another workspace." $ runMaybeT_ $ do - ws <- readNextWorkspace - loc <- lift getCurrentLocation - lift $ moveLocationToWorkspaceFn ws loc + ws1 <- readNextWorkspace + ws2 <- readNextWorkspace + lift $ windows $ W.swapWorkspaces (workspaceName ws1) (workspaceName ws2) controlMod $ doc "Move the current focused window to another workspace and view that workspace" $ @@ -366,12 +367,14 @@ keymap = runKeys $ do justMod $ doc "Mark the current window with the next typed character." $ do locs <- fromMaybe [] <$> runMaybeT readNextLocationSet - withBorderColor "#00ffff" (mapMaybe locationWindow locs) $ do - runMaybeT_ $ do - mapNextString $ \_ str -> lift $ - case str of - [ch] | isAlpha ch -> markAllLocations str locs - _ -> return () + let wins = mapMaybe locationWindow locs + withBorderWidth 4 wins $ + withBorderColor "#00ffff" wins $ do + runMaybeT_ $ do + mapNextString $ \_ str -> lift $ + case str of + [ch] | isAlpha ch -> markAllLocations str locs + _ -> return () bind xK_plus $ do justMod $ @@ -407,17 +410,18 @@ keymap = runKeys $ do locations <- fromMaybe [] <$> runMaybeT readNextLocationSet let locationWindows = mapMaybe locationWindow locations - withBorderColor "#00ffff" locationWindows $ do - runMaybeT_ $ do - workspace <- readNextWorkspace - mapM_ (lift . moveLocationToWorkspaceFn workspace) locations + withBorderWidth 4 locationWindows $ + withBorderColor "#00ffff" locationWindows $ do + runMaybeT_ $ do + workspace <- readNextWorkspace + mapM_ (lift . moveLocationToWorkspaceFn workspace) locations - lift $ setAlternateWindows locationWindows - forM_ locations $ \loc -> - case locationWindow loc of - Nothing -> return () - Just win -> do - lift $ setAlternateWorkspace win (locationWorkspace loc) + lift $ setAlternateWindows locationWindows + forM_ locations $ \loc -> + case locationWindow loc of + Nothing -> return () + Just win -> do + lift $ setAlternateWorkspace win (locationWorkspace loc) altMod $ spawnX "sudo -A systemctl suspend && xsecurelock" @@ -613,6 +617,11 @@ keymap = runKeys $ do setLogLevel next logs next "LogLevel set to %s." (show next) + shiftMod $ do + ss <- withWindowSet return + logs Info "Current Stack Set:%s" + (show $ viaShow $ W.mapLayout (const ()) ss) + bind xF86XK_Calculator $ do noMod $ spawnX $ terminal config ++ " -t Floating\\ Term -e /usr/bin/env python3" diff --git a/src/Rahm/Desktop/Keys/Wml.hs b/src/Rahm/Desktop/Keys/Wml.hs index dd82922..5ce455c 100644 --- a/src/Rahm/Desktop/Keys/Wml.hs +++ b/src/Rahm/Desktop/Keys/Wml.hs @@ -31,7 +31,7 @@ import XMonad.Actions.CopyWindow as CopyWindow import XMonad.Util.Run (safeSpawn) import Prelude hiding (head, last) import Data.List.Safe (head, last) -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W import Rahm.Desktop.Common import Rahm.Desktop.Keys.Dsl diff --git a/src/Rahm/Desktop/Layout.hs b/src/Rahm/Desktop/Layout.hs index f6e714c..ea80ba9 100644 --- a/src/Rahm/Desktop/Layout.hs +++ b/src/Rahm/Desktop/Layout.hs @@ -36,7 +36,7 @@ import Rahm.Desktop.Layout.Hole import Rahm.Desktop.Layout.ConsistentMosaic import qualified Data.Map as M -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W myLayout = fullscreenFull $ diff --git a/src/Rahm/Desktop/Layout/ConsistentMosaic.hs b/src/Rahm/Desktop/Layout/ConsistentMosaic.hs index a84a2f1..0a6215a 100644 --- a/src/Rahm/Desktop/Layout/ConsistentMosaic.hs +++ b/src/Rahm/Desktop/Layout/ConsistentMosaic.hs @@ -6,7 +6,7 @@ module Rahm.Desktop.Layout.ConsistentMosaic where import XMonad -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W import qualified Data.Map as Map import Data.Map (Map) import Data.Maybe (mapMaybe) diff --git a/src/Rahm/Desktop/Layout/CornerLayout.hs b/src/Rahm/Desktop/Layout/CornerLayout.hs index f0952c7..7cf4421 100644 --- a/src/Rahm/Desktop/Layout/CornerLayout.hs +++ b/src/Rahm/Desktop/Layout/CornerLayout.hs @@ -4,7 +4,7 @@ module Rahm.Desktop.Layout.CornerLayout where import Data.Typeable (Typeable) import XMonad (LayoutClass(..), Rectangle(..), Resize(..), fromMessage) -import qualified XMonad.StackSet as S +import qualified Rahm.Desktop.StackSet as S data Corner a = Corner Rational Rational deriving (Show, Typeable, Read) diff --git a/src/Rahm/Desktop/Layout/Draw.hs b/src/Rahm/Desktop/Layout/Draw.hs index 165af75..ff90b9e 100644 --- a/src/Rahm/Desktop/Layout/Draw.hs +++ b/src/Rahm/Desktop/Layout/Draw.hs @@ -27,7 +27,7 @@ import XMonad (X, SomeMessage(..)) import qualified XMonad as X -import qualified XMonad.StackSet as S +import qualified Rahm.Desktop.StackSet as S -- Draws and returns an XPM for the current layout. -- diff --git a/src/Rahm/Desktop/Layout/Hole.hs b/src/Rahm/Desktop/Layout/Hole.hs index 3f7c9b7..f6632d5 100644 --- a/src/Rahm/Desktop/Layout/Hole.hs +++ b/src/Rahm/Desktop/Layout/Hole.hs @@ -3,7 +3,7 @@ -- Delegates to a lower layout, but leaves a hole where the next window will go. module Rahm.Desktop.Layout.Hole (hole, toggleHole) where -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W import XMonad import Data.Maybe (mapMaybe) diff --git a/src/Rahm/Desktop/Layout/List.hs b/src/Rahm/Desktop/Layout/List.hs index 77b53c9..d6ab6ba 100644 --- a/src/Rahm/Desktop/Layout/List.hs +++ b/src/Rahm/Desktop/Layout/List.hs @@ -30,7 +30,7 @@ import Data.Proxy import Data.Void import GHC.TypeLits import XMonad -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W -- Type-level lists. LNil is the final of the list. LCons contains a layout and a -- tail. diff --git a/src/Rahm/Desktop/Layout/Pop.hs b/src/Rahm/Desktop/Layout/Pop.hs index e06ff25..a7e2762 100644 --- a/src/Rahm/Desktop/Layout/Pop.hs +++ b/src/Rahm/Desktop/Layout/Pop.hs @@ -15,7 +15,7 @@ module Rahm.Desktop.Layout.Pop ( import XMonad import XMonad.Layout.LayoutModifier (LayoutModifier(..), ModifiedLayout(..)) import Data.Default (Default(..)) -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W import Rahm.Desktop.Layout.ReinterpretMessage diff --git a/src/Rahm/Desktop/Layout/Redescribe.hs b/src/Rahm/Desktop/Layout/Redescribe.hs index 036bc88..7f955d8 100644 --- a/src/Rahm/Desktop/Layout/Redescribe.hs +++ b/src/Rahm/Desktop/Layout/Redescribe.hs @@ -6,7 +6,7 @@ module Rahm.Desktop.Layout.Redescribe where import XMonad -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W import Data.Typeable (Typeable) -- Type-class to modify the description of a layout. diff --git a/src/Rahm/Desktop/Marking.hs b/src/Rahm/Desktop/Marking.hs index 3b4873d..9bc2cb6 100644 --- a/src/Rahm/Desktop/Marking.hs +++ b/src/Rahm/Desktop/Marking.hs @@ -35,7 +35,7 @@ import System.Environment import System.FilePath import System.IO import XMonad -import XMonad.StackSet hiding (focus) +import Rahm.Desktop.StackSet hiding (focus) import qualified Data.Map as Map import qualified Data.Sequence as Seq import qualified XMonad.Util.ExtensibleState as XS diff --git a/src/Rahm/Desktop/ScreenRotate.hs b/src/Rahm/Desktop/ScreenRotate.hs index 1f238b1..718976d 100644 --- a/src/Rahm/Desktop/ScreenRotate.hs +++ b/src/Rahm/Desktop/ScreenRotate.hs @@ -1,6 +1,6 @@ module Rahm.Desktop.ScreenRotate where -import XMonad.StackSet as W +import Rahm.Desktop.StackSet as W screenRotateBackward :: W.StackSet i l a sid sd -> W.StackSet i l a sid sd screenRotateBackward (W.StackSet current visible others floating) = do diff --git a/src/Rahm/Desktop/StackSet.hs b/src/Rahm/Desktop/StackSet.hs new file mode 100644 index 0000000..251bee3 --- /dev/null +++ b/src/Rahm/Desktop/StackSet.hs @@ -0,0 +1,51 @@ +module Rahm.Desktop.StackSet ( + masterWindow, + findWorkspace, + ensureWorkspace, + swapWorkspaces, + greedyView, + shiftWin, + module W) where + +import Prelude hiding (head, tail) +import Data.List.Safe (head, tail) +import Data.List (find) +import XMonad.StackSet as W hiding (greedyView, shiftWin) +import qualified XMonad.StackSet +import Data.Default +import Data.Maybe (fromMaybe) + +masterWindow :: StackSet i l a s sd -> Maybe a +masterWindow = head . integrate' . stack . workspace . current + +findWorkspace :: (Eq i) => + i -> StackSet i l a s sd -> Maybe (Workspace i l a) +findWorkspace wid = find ((==wid) . tag) . workspaces + +ensureWorkspace :: (Eq i) => + i -> StackSet i l a s sd -> (StackSet i l a s sd, Workspace i l a) +ensureWorkspace t ss = + case findWorkspace t ss of + Nothing -> + let ws = Workspace t (layout . workspace . current $ ss) Nothing in + (ss { hidden = ws : hidden ss }, ws) + Just ws -> (ss, ws) + +swapWorkspaces :: + (Eq i) => + i -> i -> StackSet i l a s sd -> StackSet i l a s sd +swapWorkspaces wid1 wid2 ss = + let (ss', workspace1) = ensureWorkspace wid1 ss + (ss'', workspace2) = ensureWorkspace wid2 ss' + in + mapWorkspace (\w -> + case () of + _ | tag w == wid1 -> workspace2 + _ | tag w == wid2 -> workspace1 + _ -> w) ss'' + +greedyView :: (Eq i) => i -> StackSet i l a s sd -> StackSet i l a s sd +greedyView wid ss = swapWorkspaces (tag . workspace . current $ ss) wid ss + +shiftWin :: (Ord a, Eq s, Eq i) => i -> a -> StackSet i l a s sd -> StackSet i l a s sd +shiftWin wid a = XMonad.StackSet.shiftWin wid a . fst . ensureWorkspace wid diff --git a/src/Rahm/Desktop/SwapMaster.hs b/src/Rahm/Desktop/SwapMaster.hs index b039fdb..fd61a50 100644 --- a/src/Rahm/Desktop/SwapMaster.hs +++ b/src/Rahm/Desktop/SwapMaster.hs @@ -1,7 +1,7 @@ {- Swap window with the master, but save it. -} module Rahm.Desktop.SwapMaster (swapMaster) where -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W import Rahm.Desktop.Windows (mapWindows, getMaster, swapWindows) import Control.Monad.Trans.Maybe diff --git a/src/Rahm/Desktop/Windows.hs b/src/Rahm/Desktop/Windows.hs index d525aac..2aa5995 100644 --- a/src/Rahm/Desktop/Windows.hs +++ b/src/Rahm/Desktop/Windows.hs @@ -3,7 +3,7 @@ module Rahm.Desktop.Windows where import XMonad (windowset, X, Window, get) import Control.Applicative ((<|>)) -import XMonad.StackSet (Stack(..), StackSet(..), Screen(..), Workspace(..), peek, integrate, integrate', allWindows) +import Rahm.Desktop.StackSet (Stack(..), StackSet(..), Screen(..), Workspace(..), peek, integrate, integrate', allWindows) import Data.Maybe (listToMaybe, catMaybes) import qualified Data.Map as Map diff --git a/src/Rahm/Desktop/Workspaces.hs b/src/Rahm/Desktop/Workspaces.hs index f11520a..6c52f01 100644 --- a/src/Rahm/Desktop/Workspaces.hs +++ b/src/Rahm/Desktop/Workspaces.hs @@ -6,14 +6,13 @@ import Prelude hiding ((!!)) import Control.Monad.Trans.Maybe import Control.Arrow (second, (&&&)) -import qualified XMonad.StackSet as W +import qualified Rahm.Desktop.StackSet as W import XMonad import Data.List.Safe ((!!)) import Rahm.Desktop.Common import Rahm.Desktop.History -import XMonad.Actions.DynamicWorkspaces import Data.List (sortOn, sort, sortBy, find) import Data.Maybe (mapMaybe, fromMaybe) import Data.Char (isUpper, toUpper, toLower, isAlphaNum) @@ -75,12 +74,6 @@ getHorizontallyOrderedScreens windowSet = where screens = (True, W.current windowSet) : map (False,) (W.visible windowSet) -shiftToWorkspace :: WorkspaceId -> X () -shiftToWorkspace t = do - addHiddenWorkspace t - windows . W.shift $ t - - accompaningWorkspace :: WorkspaceId -> WorkspaceId accompaningWorkspace [s] = return $ if isUpper s @@ -88,24 +81,6 @@ accompaningWorkspace [s] = return $ else toUpper s accompaningWorkspace s = s -swapWorkspace :: WorkspaceId -> X () -swapWorkspace toWorkspace = do - addHiddenWorkspace toWorkspace - windows $ \ss -> do - let fromWorkspace = W.tag $ W.workspace $ W.current ss in - W.StackSet (swapSc fromWorkspace toWorkspace $ W.current ss) - (map (swapSc fromWorkspace toWorkspace) $ W.visible ss) - (map (swapWs fromWorkspace toWorkspace) $ W.hidden ss) - (W.floating ss) - where - swapSc fromWorkspace toWorkspace (W.Screen ws a b) = - W.Screen (swapWs fromWorkspace toWorkspace ws) a b - - swapWs fromWorkspace toWorkspace ws@(W.Workspace t' l s) - | t' == fromWorkspace = W.Workspace toWorkspace l s - | t' == toWorkspace = W.Workspace fromWorkspace l s - | otherwise = ws - adjacentWorkspaceNotVisible :: Selector -> WorkspaceId -> X WorkspaceId adjacentWorkspaceNotVisible (Selector selector) from = withWindowSet $ \ss -> diff --git a/src/Rahm/Desktop/XMobarLog.hs b/src/Rahm/Desktop/XMobarLog.hs index 629e021..af0a1a1 100644 --- a/src/Rahm/Desktop/XMobarLog.hs +++ b/src/Rahm/Desktop/XMobarLog.hs @@ -17,7 +17,7 @@ import Text.Printf import Rahm.Desktop.Logger import qualified XMonad as X -import qualified XMonad.StackSet as S +import qualified Rahm.Desktop.StackSet as S data XMobarLog = XMobarLog Handle @@ -48,7 +48,7 @@ xMobarLogHook (XMobarLog xmproc) = do let log = trunc 80 $ execWriter $ do tell " " - tell layoutXpm + tell (toChangeLayoutAction layoutXpm) tell " " tell $ logLevelToXMobar loglevel @@ -69,12 +69,17 @@ xMobarLogHook (XMobarLog xmproc) = do X.io $ hPutStrLn xmproc log where - toAction [ch] | (isAsciiUpper ch) || - (isAsciiLower ch) || - (isDigit ch) = + toAction [ch] | isAsciiUpper ch || + isAsciiLower ch || + isDigit ch = printf "<action=`xdotool key 'Hyper_L+g' '%s'` button=1><action=`xdotool key 'Hyper_L+Shift_L+g' '%s'` button=3>%s</action></action>" [ch] [ch] [ch] toAction ch = ch + toChangeLayoutAction :: String -> String + toChangeLayoutAction = + printf "<action=`xdotool key Hyper_L+space n` button=1>\ + \<action=`xdotool key p` button=3>%s</action></action>" + logLevelToXMobar Trace = "<fn=3><fc=#88ffff>[Trace]</fc></fn> " logLevelToXMobar Debug = "<fn=3><fc=#ff88ff>[Debug]</fc></fn> " logLevelToXMobar Warn = "<fn=3><fc=#ffff88>[Warn] </fc></fn> " |