aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2022-08-03 15:27:34 -0600
committerJosh Rahm <joshuarahm@gmail.com>2022-10-09 12:19:46 -0600
commit0b56ef1973acb421c2230819bea811453addba2e (patch)
tree663a429539a3efa343190137f7c9a2c09cef91b8 /src/Rahm/Desktop
parent258acd15d165c5fc4ccedeaa890b04bd421e887c (diff)
downloadrde-0b56ef1973acb421c2230819bea811453addba2e.tar.gz
rde-0b56ef1973acb421c2230819bea811453addba2e.tar.bz2
rde-0b56ef1973acb421c2230819bea811453addba2e.zip
Actually, change the workspace conditional operator.
It was <l₀l₁w₀w₁ to condition on if l₀ is a subset of l₁, but this is redundant, instead add "?" that conditions of if l₀ is empty. So the new syntax is ?lw₀w₁ which is read, if the windowset l is not empty, then workspace w₀ else w₁. This is the same use-case as before. Handy for defining macros to, say, jump to Spotify if it's not on the current workspace, otherwise jump to the prior window. This is now accomplished with (assuming Spotify is marked 's'): <H-g>?&s@.'@s This reads as, if (?) the intersection between the Spotify window and the windows on the current workspace (&s@.) is not empty (if spotify is on the current window), go to the last workspace ('), otherwise go to the workspace Spotify is on (@s).
Diffstat (limited to 'src/Rahm/Desktop')
-rw-r--r--src/Rahm/Desktop/Keys/Wml.hs21
1 files changed, 6 insertions, 15 deletions
diff --git a/src/Rahm/Desktop/Keys/Wml.hs b/src/Rahm/Desktop/Keys/Wml.hs
index 647234c..9074b66 100644
--- a/src/Rahm/Desktop/Keys/Wml.hs
+++ b/src/Rahm/Desktop/Keys/Wml.hs
@@ -291,27 +291,18 @@ readNextWorkspace =
then ws3
else ws4
- (_, _, "<") -> do
- lift . fromX $
- logs Trace "Doing thing"
+ -- ?&s@.'@s
- l1 <- map locationWindow <$> readNextLocationSet
-
- lift . fromX $
- logs Trace "%s" (show l1)
-
- l2 <- map locationWindow <$> readNextLocationSet
+ (_, _, "?") -> do
+ l1 <- 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
+ if null l1
+ then ws2
+ else ws1
(mask, keysym, _) -> do
macro <- (MaybeT . fromX) (Map.lookup (mask, keysym) . workspaceMacros <$> XS.get)