module Data.Monoid.Colorful.Term (
Term(..)
, getTerm
, hGetTerm
) where
import Data.List (isPrefixOf, isInfixOf)
import System.Environment (getEnv)
import System.IO (Handle, hIsTerminalDevice, stdout)
import GHC.Generics (Generic)
data Term
= TermDumb
| Term8
| Term256
| TermRGB
| TermWin
deriving (Eq, Ord, Show, Read, Enum, Bounded, Generic)
getTerm :: IO Term
getTerm = hGetTerm stdout
hGetTerm :: Handle -> IO Term
hGetTerm h = do
term <- hIsTerminalDevice h
if term
then envToTerm <$> getEnv "TERM"
else pure TermDumb
envToTerm :: String -> Term
envToTerm "dumb" = TermDumb
envToTerm term | any (`isPrefixOf` term) rgbTerminals = TermRGB
| "256" `isInfixOf` term = Term256
| otherwise = Term8
where rgbTerminals = ["xterm", "konsole", "gnome", "st", "linux"]