-- |
-- Maintainer  : judah.jacobson@gmail.com
-- Stability   : experimental
-- Portability : portable (FFI)
module System.Console.Terminfo.Effects(
                    -- * Bell alerts
                    bell,visualBell,
                    -- * text effects
                    withStandout,withUnderline,
                    enterStandoutMode,
                    exitStandoutMode,
                    enterUnderlineMode,
                    exitUnderlineMode
                    ) where

import System.Console.Terminfo.Base

wrapWith :: Capability TermOutput -> Capability TermOutput 
                -> Capability (TermOutput -> TermOutput)
wrapWith start end = do
    s <- start
    e <- end
    return (\t -> s <#> t <#> e)

withStandout, withUnderline :: Capability (TermOutput -> TermOutput)
withStandout = wrapWith enterStandoutMode exitStandoutMode
withUnderline = wrapWith enterUnderlineMode exitUnderlineMode

enterStandoutMode, exitStandoutMode :: Capability TermOutput
enterStandoutMode = tiGetOutput1 "smso"
exitStandoutMode = tiGetOutput1 "rmso"

enterUnderlineMode, exitUnderlineMode :: Capability TermOutput
enterUnderlineMode = tiGetOutput1 "smul"
exitUnderlineMode = tiGetOutput1 "rmul"


bell, visualBell :: Capability TermOutput
bell = tiGetOutput1 "bel"
visualBell = tiGetOutput1 "flash"