aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Actions/RandomBackground.hs
blob: 71a57448f2f1a17656a1ca6d5b363feab84578f8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
-----------------------------------------------------------------------------
-- |
-- Module      :  XMonad.Actions.RandomBackground
-- Copyright   :  (c) 2009 Anze Slosar
--                translation to Haskell by Adam Vogt
-- License     :  BSD3-style (see LICENSE)
--
-- Maintainer  :  <vogt.adam@gmail.com>
-- Stability   :  unstable
-- Portability :  unportable
--
-- An action to start terminals with a random background color
--
-----------------------------------------------------------------------------

module XMonad.Actions.RandomBackground (randomBg,randomBg') where

import XMonad(X, XConf(config), XConfig(terminal), io, spawn,
              MonadIO, asks)
import System.Random(Random(randomRIO))
import Control.Monad(replicateM)
import Numeric(showHex)

-- | randomHex produces hex values in the form @xxyyzz@, with each of @xx@,
-- @yy@, @zz@ within the range specified. The first parameter determines the
-- the number of such groups.
randomHex ::  Int -> (Int, Int) -> IO String
randomHex n = fmap disp . replicateM n . randomRIO
    where ensure x = reverse . take x . (++repeat '0') . reverse
          disp = concatMap $ ensure 2 . ($ "") . showHex

-- | randomBg' appends the random hex @ -bg '#xxyyzz'@ to the supplied string
randomBg' ::  (MonadIO m) => (Int, Int) -> String -> m String
randomBg' x t = do
  num <- io $ randomHex 3 x
  return $ concat [t," -bg '#",num,"'"]

randomBg :: (Int,Int) -> X ()
randomBg x = spawn =<< randomBg' x =<< asks (terminal . config)