From 90045d7d04b0b0529f25929ff32136741244dd98 Mon Sep 17 00:00:00 2001 From: Spencer Janssen Date: Sat, 7 Nov 2009 18:38:20 +0100 Subject: Add XMonad.Util.SpawnOnce Ignore-this: 8d4657bbaa8dbeb1d0f9d22293bfef19 darcs-hash:20091107173820-25a6b-8e4628c65594acd51f2fc6f601b0c3092d7316d0.gz --- XMonad/Util/SpawnOnce.hs | 39 +++++++++++++++++++++++++++++++++++++++ xmonad-contrib.cabal | 1 + 2 files changed, 40 insertions(+) create mode 100644 XMonad/Util/SpawnOnce.hs diff --git a/XMonad/Util/SpawnOnce.hs b/XMonad/Util/SpawnOnce.hs new file mode 100644 index 0000000..edb3b5f --- /dev/null +++ b/XMonad/Util/SpawnOnce.hs @@ -0,0 +1,39 @@ +{-# LANGUAGE DeriveDataTypeable #-} + +----------------------------------------------------------------------------- +-- | +-- Module : XMonad.Util.ExtensibleState +-- Copyright : (c) Spencer Janssen 2009 +-- License : BSD3-style (see LICENSE) +-- +-- Maintainer : spencerjanssen@gmail.com +-- Stability : unstable +-- Portability : not portable +-- +-- A module for spawning a command once, and only once. Useful to start +-- status bars and make session settings inside startupHook. +-- +----------------------------------------------------------------------------- + +module XMonad.Util.SpawnOnce (spawnOnce) where + +import XMonad +import Data.Set as Set +import XMonad.Util.ExtensibleState +import Control.Monad + +data SpawnOnce = SpawnOnce { unspawnOnce :: (Set String) } + deriving (Read, Show, Typeable) + +instance ExtensionClass SpawnOnce where + initialValue = SpawnOnce $ Set.empty + extensionType = PersistentExtension + +-- | The first time 'spawnOnce' is executed on a particular command, that +-- command is executed. Subsequent invocations for a command do nothing. +spawnOnce :: String -> X () +spawnOnce xs = do + b <- fmap (Set.member xs . unspawnOnce) $ getState + when (not b) $ do + spawn xs + modifyState (SpawnOnce . Set.insert xs . unspawnOnce) diff --git a/xmonad-contrib.cabal b/xmonad-contrib.cabal index e298042..4f7003f 100644 --- a/xmonad-contrib.cabal +++ b/xmonad-contrib.cabal @@ -232,6 +232,7 @@ library XMonad.Util.StringProp XMonad.Util.Run XMonad.Util.Scratchpad + XMonad.Util.SpawnOnce XMonad.Util.Themes XMonad.Util.Timer XMonad.Util.Types -- cgit v1.2.3