aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm/Desktop/Common.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Rahm/Desktop/Common.hs')
-rw-r--r--src/Rahm/Desktop/Common.hs15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/Rahm/Desktop/Common.hs b/src/Rahm/Desktop/Common.hs
index c10dd64..44587d3 100644
--- a/src/Rahm/Desktop/Common.hs
+++ b/src/Rahm/Desktop/Common.hs
@@ -31,13 +31,14 @@ import Control.Monad.Trans.Identity (IdentityT (..))
import Control.Monad.Trans.Maybe (MaybeT (..))
import Data.Char (toLower)
import Data.Either (either)
-import Data.List (concatMap, head, isInfixOf, map, (++))
+import Data.List (concatMap, isInfixOf, map, (++))
+import Data.List.Safe (head, tail)
import Data.List.Split (splitOn)
import qualified Data.Map as Map (fromListWith)
import Data.Maybe (Maybe (..), maybe)
import Data.Void (Void (..), absurd)
import Data.Word (Word32)
-import Rahm.Desktop.DMenu (runDMenuPromptWithMap)
+import Rahm.Desktop.DMenu (runDMenuPromptWithMap, runDMenuPromptWithMapMulti)
import Rahm.Desktop.Logger
import qualified Rahm.Desktop.StackSet as S
( Screen (Screen, workspace),
@@ -79,6 +80,7 @@ import qualified XMonad.Hooks.ManageHelpers as X
import XMonad.Prompt (XPrompt (commandToComplete, showXPrompt))
import qualified XMonad.Util.Run as X
import XMonad.Util.XUtils (pixelToString, stringToPixel)
+import Prelude hiding (head, tail)
-- A location is a workspace and maybe a window with that workspace.
data Location = Location
@@ -126,15 +128,18 @@ getString = runQuery $ do
then t
else printf "%s - %s" t a
-askWindowId :: X (Maybe [Window])
+askWindowId :: X [Window]
askWindowId = do
windowTitlesToWinId <- withWindowSet $ \ss ->
Map.fromListWith (++) <$> mapM (\wid -> (,) <$> getString wid <*> return [wid]) (S.allWindows ss)
- runDMenuPromptWithMap "Window" (Just "#f542f5") windowTitlesToWinId
+ concat <$> runDMenuPromptWithMapMulti "Window" (Just "#f542f5") windowTitlesToWinId
windowJump :: X ()
-windowJump = mapM_ (focus . head) =<< askWindowId
+windowJump = mapM_ focus . headM =<< askWindowId
+ where
+ headM :: [a] -> Maybe a
+ headM = head
withBorderWidth :: Int -> [Window] -> X a -> X a
withBorderWidth width ws fn = do