module GitHUD.Terminal.Base (
showStrInColor
) where
import Control.Monad.Reader
import GitHUD.Terminal.Types
showStrInColor :: Color
-> ColorIntensity
-> String
-> ShellOutput
showStrInColor color intensity str = do
shell <- ask
liftIO $ outputStrInColor color intensity str shell
outputStrInColor :: Color
-> ColorIntensity
-> String
-> Shell
-> IO()
outputStrInColor color intensity str shell = do
let startCode = terminalStartCode color intensity
if (shell == ZSH)
then putStr $ zshMarkZeroWidth startCode
else putStr $ startCode
putStr str
if (shell == ZSH)
then putStr $ zshMarkZeroWidth terminalEndCode
else putStr $ terminalEndCode
zshMarkZeroWidth :: String
-> String
zshMarkZeroWidth str = "%{" `mappend` str `mappend` "%}"
terminalStartCode :: Color
-> ColorIntensity
-> String
terminalStartCode Black Vivid = "\x1b[1;30m"
terminalStartCode Red Vivid = "\x1b[1;31m"
terminalStartCode Green Vivid = "\x1b[1;32m"
terminalStartCode Yellow Vivid = "\x1b[1;33m"
terminalStartCode Blue Vivid = "\x1b[1;34m"
terminalStartCode Magenta Vivid = "\x1b[1;35m"
terminalStartCode Cyan Vivid = "\x1b[1;36m"
terminalStartCode White Vivid = "\x1b[1;37m"
terminalStartCode Black Dull = "\x1b[30m"
terminalStartCode Red Dull = "\x1b[31m"
terminalStartCode Green Dull = "\x1b[32m"
terminalStartCode Yellow Dull = "\x1b[33m"
terminalStartCode Blue Dull = "\x1b[34m"
terminalStartCode Magenta Dull = "\x1b[35m"
terminalStartCode Cyan Dull = "\x1b[36m"
terminalStartCode White Dull = "\x1b[37m"
terminalEndCode :: String
terminalEndCode = "\x1b[0m"