@@ -50,6 +50,7 @@ import Data.Word
50import GHC.Generics
50import GHC.Generics
51import Control.DeepSeq
51import Control.DeepSeq
52import Text.Printf (printf)
52import Text.Printf (printf)
53+import System.Environment (lookupEnv)
54import qualified System.Console.Terminfo as Terminfo
55import qualified System.Console.Terminfo as Terminfo
55import Control.Exception (catch)
56import Control.Exception (catch)
@@ -126,12 +127,15 @@ detectColorMode termName' = do
126 (\(_ :: Terminfo.SetupTermError) -> return Nothing)
127 (\(_ :: Terminfo.SetupTermError) -> return Nothing)
127 let getCap cap = term >>= \t -> Terminfo.getCapability t cap
128 let getCap cap = term >>= \t -> Terminfo.getCapability t cap
128 termColors = fromMaybe 0 $ getCap (Terminfo.tiGetNum "colors")
129 termColors = fromMaybe 0 $ getCap (Terminfo.tiGetNum "colors")
130+ colorterm <- lookupEnv "COLORTERM"
129 return $ if
131 return $ if
130− | termColors < 8 -> NoColor
132+ | termColors < 8 -> NoColor
131− | termColors < 16 -> ColorMode8
133+ | termColors < 16 -> ColorMode8
132− | termColors == 16 -> ColorMode16
134+ | termColors == 16 -> ColorMode16
133− | termColors < 256 -> ColorMode240 (fromIntegral termColors - 16)
135+ | termColors < 256 -> ColorMode240 (fromIntegral termColors - 16)
136+ | colorterm == Just "truecolor" -> FullColor
137+ | colorterm == Just "24bit" -> FullColor
134− | otherwise -> ColorMode240 240
138+ | otherwise -> ColorMode240 240
136black, red, green, yellow, blue, magenta, cyan, white :: Color
140black, red, green, yellow, blue, magenta, cyan, white :: Color
137black = ISOColor 0
141black = ISOColor 0