{-# LANGUAGE RecordWildCards, CPP #-}
module Graphics.Vty.Platform.Windows.Output
( buildOutput
)
where
import Graphics.Vty.Config
import Graphics.Vty.Platform.Windows.Settings
import Graphics.Vty.Platform.Windows.Output.Color (detectColorMode)
import Graphics.Vty.Platform.Windows.Output.XTermColor as XTermColor
import Graphics.Vty.Platform.Windows.Output.TerminfoBased as TerminfoBased
import Graphics.Vty.Output
import Data.List (isPrefixOf)
buildOutput :: VtyUserConfig -> WindowsSettings -> IO Output
buildOutput :: VtyUserConfig -> WindowsSettings -> IO Output
buildOutput VtyUserConfig
config WindowsSettings
settings = do
let outHandle :: Handle
outHandle = WindowsSettings -> Handle
settingOutputFd WindowsSettings
settings
termName :: String
termName = WindowsSettings -> String
settingTermName WindowsSettings
settings
ColorMode
colorMode <- case VtyUserConfig -> Maybe ColorMode
configPreferredColorMode VtyUserConfig
config of
Maybe ColorMode
Nothing -> String -> IO ColorMode
detectColorMode String
termName
Just ColorMode
m -> ColorMode -> IO ColorMode
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ColorMode
m
if String -> Bool
isXtermLike String
termName
then String -> Handle -> ColorMode -> IO Output
forall (m :: * -> *).
(Applicative m, MonadIO m) =>
String -> Handle -> ColorMode -> m Output
XTermColor.reserveTerminal String
termName Handle
outHandle ColorMode
colorMode
else String -> Handle -> ColorMode -> IO Output
TerminfoBased.reserveTerminal String
termName Handle
outHandle ColorMode
colorMode
isXtermLike :: String -> Bool
isXtermLike :: String -> Bool
isXtermLike String
termName =
(String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
`isPrefixOf` String
termName) [String]
xtermLikeTerminalNamePrefixes
xtermLikeTerminalNamePrefixes :: [String]
xtermLikeTerminalNamePrefixes :: [String]
xtermLikeTerminalNamePrefixes =
[ String
"xterm"
, String
"screen"
, String
"tmux"
, String
"rxvt"
]