mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-20 02:37:12 +03:00
36 lines
1.3 KiB
Haskell
36 lines
1.3 KiB
Haskell
-- | Basic color helpers for prettifying console output.
|
|
|
|
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
|