module GitHUD.Terminal.Base (
tellStringInColor
, applyShellMarkers
, terminalStartCode
, endColorMarker
) where
import Control.Monad.Writer (tell)
import Data.Monoid (mappend)
import GitHUD.Types
import GitHUD.Terminal.Types
tellStringInColor :: Color
-> ColorIntensity
-> String
-> ShellOutput
tellStringInColor color intensity str = do
shell <- askShell
tell $ startColorMarker color intensity shell
tell $ str
tell $ endColorMarker shell
startColorMarker :: Color
-> ColorIntensity
-> Shell
-> String
startColorMarker color intensity shell
| shell == TMUX = tmuxStartCode color intensity
| shell == NONE = ""
| otherwise = applyShellMarkers shell $ terminalStartCode color intensity
endColorMarker :: Shell
-> String
endColorMarker shell
| shell == TMUX = tmuxEndCode
| shell == NONE = ""
| otherwise = applyShellMarkers shell $ terminalEndCode
applyShellMarkers :: Shell
-> String
-> String
applyShellMarkers ZSH = zshMarkZeroWidth
applyShellMarkers BASH = bashMarkZeroWidth
applyShellMarkers _ = id
zshMarkZeroWidth :: String
-> String
zshMarkZeroWidth str = "%{" `mappend` str `mappend` "%}"
bashMarkZeroWidth :: String
-> String
bashMarkZeroWidth str = "\001" `mappend` str `mappend` "\002"
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"
terminalStartCode NoColor _ = terminalEndCode
terminalEndCode :: String
terminalEndCode = "\x1b[0;39m"
tmuxStartCode :: Color
-> ColorIntensity
-> String
tmuxStartCode Black Vivid = "#[fg=brightblack]"
tmuxStartCode Red Vivid = "#[fg=brightred]"
tmuxStartCode Green Vivid = "#[fg=brightgreen]"
tmuxStartCode Yellow Vivid = "#[fg=brightyellow]"
tmuxStartCode Blue Vivid = "#[fg=brightblue]"
tmuxStartCode Magenta Vivid = "#[fg=brightmagenta]"
tmuxStartCode Cyan Vivid = "#[fg=brightcyan]"
tmuxStartCode White Vivid = "#[fg=brightwhite]"
tmuxStartCode Black Dull = "#[fg=black]"
tmuxStartCode Red Dull = "#[fg=red]"
tmuxStartCode Green Dull = "#[fg=green]"
tmuxStartCode Yellow Dull = "#[fg=yellow]"
tmuxStartCode Blue Dull = "#[fg=blue]"
tmuxStartCode Magenta Dull = "#[fg=magenta]"
tmuxStartCode Cyan Dull = "#[fg=cyan]"
tmuxStartCode White Dull = "#[fg=white]"
tmuxStartCode NoColor _ = tmuxEndCode
tmuxEndCode :: String
tmuxEndCode = "#[fg=default]"