38 lines
1.3 KiB
Haskell
38 lines
1.3 KiB
Haskell
-- | Basic color helpers for prettifying console output.
|
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
module Hledger.Utils.Color
|
|
(
|
|
color,
|
|
bgColor,
|
|
colorB,
|
|
bgColorB,
|
|
Color(..),
|
|
ColorIntensity(..)
|
|
)
|
|
where
|
|
|
|
import qualified Data.Text.Lazy.Builder as TB
|
|
import System.Console.ANSI
|
|
import Hledger.Utils.Text (WideBuilder(..))
|
|
|
|
|
|
-- | Wrap a string in ANSI codes to set and reset foreground colour.
|
|
color :: ColorIntensity -> Color -> String -> String
|
|
color int col s = setSGRCode [SetColor Foreground int col] ++ s ++ setSGRCode []
|
|
|
|
-- | Wrap a string in ANSI codes to set and reset background colour.
|
|
bgColor :: ColorIntensity -> Color -> String -> String
|
|
bgColor int col s = setSGRCode [SetColor Background int col] ++ s ++ setSGRCode []
|
|
|
|
-- | Wrap a WideBuilder in ANSI codes to set and reset foreground colour.
|
|
colorB :: ColorIntensity -> Color -> WideBuilder -> WideBuilder
|
|
colorB int col (WideBuilder s w) =
|
|
WideBuilder (TB.fromString (setSGRCode [SetColor Foreground int col]) <> s <> TB.fromString (setSGRCode [])) w
|
|
|
|
-- | Wrap a WideBuilder in ANSI codes to set and reset background colour.
|
|
bgColorB :: ColorIntensity -> Color -> WideBuilder -> WideBuilder
|
|
bgColorB int col (WideBuilder s w) =
|
|
WideBuilder (TB.fromString (setSGRCode [SetColor Background int col]) <> s <> TB.fromString (setSGRCode [])) w
|