vty-5.26: A simple terminal UI library

Safe HaskellSafe
LanguageHaskell2010

Graphics.Vty.Attributes.Color

Contents

Synopsis

Documentation

data Color Source #

Abstract data type representing a color.

Currently the foreground and background color are specified as points in either a:

  • 16 color palette. Where the first 8 colors are equal to the 8 colors of the ISO 6429 (ANSI) 8 color palette and the second 8 colors are bright/vivid versions of the first 8 colors.
  • 240 color palette. This palette is a regular sampling of the full RGB colorspace for the first 224 colors. The remaining 16 colors is a greyscale palette.

The 8 ISO 6429 (ANSI) colors are as follows:

  1. black
  2. red
  3. green
  4. yellow
  5. blue
  6. magenta
  7. cyan
  8. white

The mapping from points in the 240 color palette to colors actually displayable by the terminal depends on the number of colors the terminal claims to support. Which is usually determined by the terminfo "colors" property. If this property is not being accurately reported then the color reproduction will be incorrect.

If the terminal reports <= 16 colors then the 240 color palette points are only mapped to the 8 color pallete. I'm not sure of the RGB points for the "bright" colors which is why they are not addressable via the 240 color palette.

If the terminal reports > 16 colors then the 240 color palette points are mapped to the nearest points in a ("color count" - 16) subsampling of the 240 color palette.

All of this assumes the terminals are behaving similarly to xterm and rxvt when handling colors. And that the individual colors have not been remapped by the user. There may be a way to verify this through terminfo but I don't know it.

Seriously, terminal color support is INSANE.

Constructors

ISOColor !Word8 
Color240 !Word8 
Instances
Eq Color Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

Methods

(==) :: Color -> Color -> Bool #

(/=) :: Color -> Color -> Bool #

Read Color Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

Show Color Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

Methods

showsPrec :: Int -> Color -> ShowS #

show :: Color -> String #

showList :: [Color] -> ShowS #

Generic Color Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

Associated Types

type Rep Color :: Type -> Type #

Methods

from :: Color -> Rep Color x #

to :: Rep Color x -> Color #

NFData Color Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

Methods

rnf :: Color -> () #

type Rep Color Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

type Rep Color = D1 (MetaData "Color" "Graphics.Vty.Attributes.Color" "vty-5.26-kpys2XcgCxFlu91AmO6Jh" False) (C1 (MetaCons "ISOColor" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Word8)) :+: C1 (MetaCons "Color240" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Word8)))

Fixed Colors

Standard 8-color ANSI terminal color codes.

Note that these map to colors in the terminal's custom palette. For instance, white maps to whatever the terminal color theme uses for white.

Use these functions if you want to make apps that fit the terminal theme. If you want access to more/stronger colors use rgbColor

Bright/Vivid variants of the standard 8-color ANSI

Creating Colors From RGB

rgbColor :: Integral i => i -> i -> i -> Color Source #

Create a Vty Color (in the 240 color set) from an RGB triple. This function is lossy in the sense that we only internally support 240 colors but the #RRGGBB format supports 16^3 colors.

rgbColorToColor240 :: Integral i => i -> i -> i -> Word8 Source #

Create a value in the Color240 set from an RGB triple

color240CodeToRGB :: Word8 -> Maybe (Int, Int, Int) Source #

Create a RGB triple from a value in the Color240 set.