aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop
diff options
context:
space:
mode:
Diffstat (limited to 'src/Rahm/Desktop')
-rw-r--r--src/Rahm/Desktop/Keys/Wml.hs33
-rw-r--r--src/Rahm/Desktop/Marking.hs26
2 files changed, 43 insertions, 16 deletions
diff --git a/src/Rahm/Desktop/Keys/Wml.hs b/src/Rahm/Desktop/Keys/Wml.hs
index adb1d9f..647234c 100644
--- a/src/Rahm/Desktop/Keys/Wml.hs
+++ b/src/Rahm/Desktop/Keys/Wml.hs
@@ -267,18 +267,15 @@ readNextWorkspace =
(_, _, "@") -> do
loc <- readNextLocationSet
- MaybeT (return $ justWorkspace . locationWorkspace <$> head loc)
+ MaybeT $ fromX $ withWindowSet $ \ws -> return $ do
+ win <- locationWindow =<< head loc
+ winLocation <- W.findWindow ws win
+ (justWorkspace . W.tag) <$> W.getLocationWorkspace winLocation
(_, _, "~") ->
justWorkspace . accompaningWorkspace <$> readNextWorkspaceName
(_, _, " ") -> mt $
justWorkspace . accompaningWorkspace <$> getCurrentWorkspace
- (_, _, "~") -> do
- ws <- readNextWorkspace
- case workspaceName ws of
- Just [a] | isAlphaNum a ->
- return (justWorkspace $ accompaningWorkspace [a])
- _ -> MaybeT (return Nothing)
(_, _, "_") -> return blackHoleWorkspace
(_, _, "-") -> return alternateWorkspace
@@ -294,6 +291,28 @@ readNextWorkspace =
then ws3
else ws4
+ (_, _, "<") -> do
+ lift . fromX $
+ logs Trace "Doing thing"
+
+ l1 <- map locationWindow <$> readNextLocationSet
+
+ lift . fromX $
+ logs Trace "%s" (show l1)
+
+ l2 <- map locationWindow <$> readNextLocationSet
+
+ ws1 <- readNextWorkspace
+ ws2 <- readNextWorkspace
+
+ (lift . fromX) $ (logs Trace "%s < %s? %s" (show l1) (show l2) (show $ all (`elem`l2) l1) :: X ())
+ (lift . fromX) $ (logs Trace "%s %s" (show $ workspaceName ws1) (show $ workspaceName ws2))
+
+ return $
+ if all (`elem`l2) l1
+ then ws1
+ else ws2
+
(mask, keysym, _) -> do
macro <- (MaybeT . fromX) (Map.lookup (mask, keysym) . workspaceMacros <$> XS.get)
fromMaybeTX $ workspaceForKeysT macro
diff --git a/src/Rahm/Desktop/Marking.hs b/src/Rahm/Desktop/Marking.hs
index 4da2a46..f239399 100644
--- a/src/Rahm/Desktop/Marking.hs
+++ b/src/Rahm/Desktop/Marking.hs
@@ -9,7 +9,9 @@ module Rahm.Desktop.Marking (
markAllLocations,
farLeftWindow,
farRightWindow,
- windowLocation
+ windowLocation,
+ markWindow,
+ Mark
) where
import Prelude hiding (head)
@@ -27,6 +29,7 @@ import Data.List.Safe (head)
import Data.Map (Map)
import Data.Sequence (Seq(..))
import Rahm.Desktop.Common
+import Rahm.Desktop.Logger
import Rahm.Desktop.History
import Rahm.Desktop.Hooks.WindowChange
import Rahm.Desktop.Workspaces
@@ -83,21 +86,26 @@ withMaybeFocused :: (Maybe Window -> X a) -> X a
withMaybeFocused f = withWindowSet $ f . peek
markAllLocations :: Mark -> [Location] -> X ()
-markAllLocations mark locs =
+markAllLocations mark locs = do
+ logs Debug "Marking locations %s as \"%s\"" (show locs) (show mark)
+
XS.modify $ \m ->
m {
markStateMap = Map.insert mark locs (markStateMap m)
}
-markCurrentWindow :: Mark -> X ()
-markCurrentWindow mark = do
+markWindow :: Mark -> Window -> X ()
+markWindow mark window = do
+ logs Debug "Marking window %s as \"%s\"" (show window) (show mark)
+
ws <- getCurrentWorkspace
+ XS.modify $ \state@MarkState {markStateMap = ms} ->
+ state {
+ markStateMap = Map.insertWith (++) mark [Location ws $ Just window] ms
+ }
- withFocused $ \win ->
- XS.modify $ \state@MarkState {markStateMap = ms} ->
- state {
- markStateMap = Map.insertWith (++) mark [Location ws $ Just win] ms
- }
+markCurrentWindow :: Mark -> X ()
+markCurrentWindow = withFocused . markWindow
jumpToMark :: Mark -> X ()
jumpToMark mark = do