AC-Terminal-1.0: System/Terminal/Core.hs
{- |
This module provides the basic features of the package.
-}
module System.Terminal.Core
(
Colour (..), set_colours, set_title
)
where
import System.Console.ANSI as RAW
-- | Possible terminal colours. (D for Dark, L for Light.)
data Colour =
DBlack | DBlue | DGreen | DCyan | DRed | DMagenta | DYellow | DWhite |
LBlack | LBlue | LGreen | LCyan | LRed | LMagenta | LYellow | LWhite
deriving Enum
decodeC :: Colour -> RAW.Color
decodeC c =
[
RAW.Black,
RAW.Blue,
RAW.Green,
RAW.Cyan,
RAW.Red,
RAW.Magenta,
RAW.Yellow,
RAW.White
]
!! (fromEnum c `mod` 8)
decodeI :: Colour -> RAW.ColorIntensity
decodeI c = if fromEnum c <= 7 then RAW.Dull else RAW.Vivid
{- |
Set terminal forground and background colours.
Note that under Windows, the change in colour takes place
immediately. You may need to flush @stdout@ before calling
this function. (This is not necessary under Unix, but it's
probably good practise to do it for portability's sake.)
-}
set_colours :: Colour -> Colour -> IO ()
set_colours f b = RAW.setSGR
[
RAW.SetColor RAW.Foreground (decodeI f) (decodeC f),
RAW.SetColor RAW.Background (decodeI b) (decodeC b)
]
-- | Change the title of the [virtual] terminal.
set_title :: String -> IO ()
set_title = RAW.setTitle