aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2022-04-24 20:34:51 -0600
committerJosh Rahm <joshuarahm@gmail.com>2022-10-09 12:19:46 -0600
commit8e2cb3d0e92dd8c09233705471f87d4d582eedfe (patch)
tree0f2bcdf6074b6a8f696c53efb0a83bdd53460275
parent92deb70d1268317e3b80c8c28e0358f0c9064f3e (diff)
downloadrde-8e2cb3d0e92dd8c09233705471f87d4d582eedfe.tar.gz
rde-8e2cb3d0e92dd8c09233705471f87d4d582eedfe.tar.bz2
rde-8e2cb3d0e92dd8c09233705471f87d4d582eedfe.zip
Add R.D.StackSet as a replacement for StackSet.
-rw-r--r--package.yaml1
-rw-r--r--src/Main.hs5
-rw-r--r--src/Rahm/Desktop/Common.hs31
-rw-r--r--src/Rahm/Desktop/History.hs2
-rw-r--r--src/Rahm/Desktop/Hooks/WindowChange.hs2
-rw-r--r--src/Rahm/Desktop/Keys.hs51
-rw-r--r--src/Rahm/Desktop/Keys/Wml.hs2
-rw-r--r--src/Rahm/Desktop/Layout.hs2
-rw-r--r--src/Rahm/Desktop/Layout/ConsistentMosaic.hs2
-rw-r--r--src/Rahm/Desktop/Layout/CornerLayout.hs2
-rw-r--r--src/Rahm/Desktop/Layout/Draw.hs2
-rw-r--r--src/Rahm/Desktop/Layout/Hole.hs2
-rw-r--r--src/Rahm/Desktop/Layout/List.hs2
-rw-r--r--src/Rahm/Desktop/Layout/Pop.hs2
-rw-r--r--src/Rahm/Desktop/Layout/Redescribe.hs2
-rw-r--r--src/Rahm/Desktop/Marking.hs2
-rw-r--r--src/Rahm/Desktop/ScreenRotate.hs2
-rw-r--r--src/Rahm/Desktop/StackSet.hs51
-rw-r--r--src/Rahm/Desktop/SwapMaster.hs2
-rw-r--r--src/Rahm/Desktop/Windows.hs2
-rw-r--r--src/Rahm/Desktop/Workspaces.hs27
-rw-r--r--src/Rahm/Desktop/XMobarLog.hs15
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> "