diff options
| author | Josh Rahm <rahm@google.com> | 2022-11-21 12:05:03 -0700 |
|---|---|---|
| committer | Josh Rahm <rahm@google.com> | 2022-11-21 12:05:03 -0700 |
| commit | ee9be16599f20aef6d1d3fd15666c00452f85aba (patch) | |
| tree | 1aed66c1de2ce201463e3becc2d452d4a8aa2992 /src/Rahm/Desktop/Marking.hs | |
| parent | a1636c65e05d02f7d4fc408137e1d37b412ce890 (diff) | |
| download | rde-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.hs | 112 |
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 |