aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop/Marking.hs
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2022-11-21 12:05:03 -0700
committerJosh Rahm <rahm@google.com>2022-11-21 12:05:03 -0700
commitee9be16599f20aef6d1d3fd15666c00452f85aba (patch)
tree1aed66c1de2ce201463e3becc2d452d4a8aa2992 /src/Rahm/Desktop/Marking.hs
parenta1636c65e05d02f7d4fc408137e1d37b412ce890 (diff)
downloadrde-ee9be16599f20aef6d1d3fd15666c00452f85aba.tar.gz
rde-ee9be16599f20aef6d1d3fd15666c00452f85aba.tar.bz2
rde-ee9be16599f20aef6d1d3fd15666c00452f85aba.zip
Format with ormolu.
Diffstat (limited to 'src/Rahm/Desktop/Marking.hs')
-rw-r--r--src/Rahm/Desktop/Marking.hs112
1 files changed, 59 insertions, 53 deletions
diff --git a/src/Rahm/Desktop/Marking.hs b/src/Rahm/Desktop/Marking.hs
index f239399..f73193e 100644
--- a/src/Rahm/Desktop/Marking.hs
+++ b/src/Rahm/Desktop/Marking.hs
@@ -1,58 +1,57 @@
-module Rahm.Desktop.Marking (
- markCurrentWindow,
- jumpToMark,
- setAlternateWindows,
- getAlternateWindows,
- setAlternateWorkspace,
- getAlternateWorkspace,
- getMarkedLocations,
- markAllLocations,
- farLeftWindow,
- farRightWindow,
- windowLocation,
- markWindow,
- Mark
- ) where
+module Rahm.Desktop.Marking
+ ( markCurrentWindow,
+ jumpToMark,
+ setAlternateWindows,
+ getAlternateWindows,
+ setAlternateWorkspace,
+ getAlternateWorkspace,
+ getMarkedLocations,
+ markAllLocations,
+ farLeftWindow,
+ farRightWindow,
+ windowLocation,
+ markWindow,
+ Mark,
+ )
+where
-import Prelude hiding (head)
-
-import Data.Maybe ( fromMaybe, catMaybes )
-import Control.Monad.Trans (lift)
-import Data.Ord (Down(..))
import Control.Exception
import Control.Monad (when, (<=<))
+import Control.Monad.Trans (lift)
import Control.Monad.Trans.Maybe
import Data.Char (isAlpha, isDigit, ord)
import Data.IORef
-import Data.List (sortOn, sort, sortBy, find)
+import Data.List (find, sort, sortBy, sortOn)
import Data.List.Safe (head)
import Data.Map (Map)
-import Data.Sequence (Seq(..))
+import qualified Data.Map as Map
+import Data.Maybe (catMaybes, fromMaybe)
+import Data.Ord (Down (..))
+import Data.Sequence (Seq (..))
+import qualified Data.Sequence as Seq
import Rahm.Desktop.Common
-import Rahm.Desktop.Logger
import Rahm.Desktop.History
import Rahm.Desktop.Hooks.WindowChange
+import Rahm.Desktop.Logger
+import Rahm.Desktop.StackSet hiding (focus)
import Rahm.Desktop.Workspaces
import System.Environment
import System.FilePath
import System.IO
import XMonad
-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
+import Prelude hiding (head)
{- Submodule that handles marking windows so they can be jumped back to. -}
type Mark = String
-data MarkState =
- MarkState {
- markStateMap :: Map Mark [Location]
- , alternateWindows :: [Window]
- , alternateWorkspaces :: Map Window WorkspaceId
- } deriving (Read, Show)
-
+data MarkState = MarkState
+ { markStateMap :: Map Mark [Location],
+ alternateWindows :: [Window],
+ alternateWorkspaces :: Map Window WorkspaceId
+ }
+ deriving (Read, Show)
instance ExtensionClass MarkState where
initialValue = MarkState Map.empty [] Map.empty
@@ -68,16 +67,17 @@ instance ExtensionClass MarkState where
setAlternateWorkspace :: Window -> WorkspaceId -> X ()
setAlternateWorkspace win wid =
- XS.modify $ \m -> m {
- alternateWorkspaces = Map.insert win wid (alternateWorkspaces m)
- }
+ XS.modify $ \m ->
+ m
+ { alternateWorkspaces = Map.insert win wid (alternateWorkspaces m)
+ }
getAlternateWorkspace :: Window -> X (Maybe WorkspaceId)
getAlternateWorkspace window =
Map.lookup window . alternateWorkspaces <$> XS.get
setAlternateWindows :: [Window] -> X ()
-setAlternateWindows wins = XS.modify (\m -> m { alternateWindows = wins })
+setAlternateWindows wins = XS.modify (\m -> m {alternateWindows = wins})
getAlternateWindows :: X [Window]
getAlternateWindows = alternateWindows <$> XS.get
@@ -85,14 +85,14 @@ getAlternateWindows = alternateWindows <$> XS.get
withMaybeFocused :: (Maybe Window -> X a) -> X a
withMaybeFocused f = withWindowSet $ f . peek
-markAllLocations :: Mark -> [Location] -> X ()
+markAllLocations :: Mark -> [Location] -> X ()
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)
- }
+ m
+ { markStateMap = Map.insert mark locs (markStateMap m)
+ }
markWindow :: Mark -> Window -> X ()
markWindow mark window = do
@@ -100,8 +100,8 @@ markWindow mark window = do
ws <- getCurrentWorkspace
XS.modify $ \state@MarkState {markStateMap = ms} ->
- state {
- markStateMap = Map.insertWith (++) mark [Location ws $ Just window] ms
+ state
+ { markStateMap = Map.insertWith (++) mark [Location ws $ Just window] ms
}
markCurrentWindow :: Mark -> X ()
@@ -124,28 +124,34 @@ setFocusedWindow
let newStack =
case stack of
Nothing -> Nothing
- Just (Stack _ up down) -> Just (Stack window up down) in
- StackSet (Screen (Workspace t l newStack) a b) vis hid float
+ Just (Stack _ up down) -> Just (Stack window up down)
+ in StackSet (Screen (Workspace t l newStack) a b) vis hid float
swapWithFocused :: (Ord a) => a -> StackSet i l a s sd -> StackSet i l a s sd
swapWithFocused winToSwap stackSet =
case peek stackSet of
Nothing -> stackSet
Just focused -> do
- setFocusedWindow winToSwap $
- mapWindows (
- \w -> if w == winToSwap then focused else w) stackSet
+ setFocusedWindow winToSwap $
+ mapWindows
+ ( \w -> if w == winToSwap then focused else w
+ )
+ stackSet
windowRect :: Window -> X (Maybe Rectangle)
-windowRect win = withDisplay $ \dpy -> (do
- (_, x, y, w, h, bw, _) <- io $ getGeometry dpy win
- return $ Just $ Rectangle x y (w + 2 * bw) (h + 2 * bw))
+windowRect win = withDisplay $ \dpy ->
+ ( do
+ (_, x, y, w, h, bw, _) <- io $ getGeometry dpy win
+ return $ Just $ Rectangle x y (w + 2 * bw) (h + 2 * bw)
+ )
`catchX` return Nothing
getWindowsAndRects :: X [(Window, Rectangle)]
getWindowsAndRects =
- catMaybes <$> (mapM (\w -> fmap (w,) <$> windowRect w)
- =<< withWindowSet (return . allWindows))
+ catMaybes
+ <$> ( mapM (\w -> fmap (w,) <$> windowRect w)
+ =<< withWindowSet (return . allWindows)
+ )
windowLocation :: Window -> MaybeT X Location
windowLocation win = do