vty-5.28.2: A simple terminal UI library

Safe Haskell | Safe
Language | Haskell2010

Graphics.Vty.Attributes.Color

Contents

- Fixed Colors
- Creating Colors From RGB

Synopsis

- data Color
  - = ISOColor !Word8
  - | Color240 !Word8
- black :: Color
- red :: Color
- green :: Color
- yellow :: Color
- blue :: Color
- magenta :: Color
- cyan :: Color
- white :: Color
- brightBlack :: Color
- brightRed :: Color
- brightGreen :: Color
- brightYellow :: Color
- brightBlue :: Color
- brightMagenta :: Color
- brightCyan :: Color
- brightWhite :: Color
- rgbColor :: Integral i => i -> i -> i -> Color
- rgbColorToColor240 :: Integral i => i -> i -> i -> Word8
- color240CodeToRGB :: Word8 -> Maybe (Int, Int, Int)

# 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

Instances details

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 Methods readsPrec :: Int -> ReadS Color readList :: ReadS [Color] readPrec :: ReadPrec Color readListPrec :: ReadPrec [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.28.2-K5xrYKzeEcUHLiBeBsDjps" '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`

black :: Color Source #

red :: Color Source #

green :: Color Source #

yellow :: Color Source #

blue :: Color Source #

magenta :: Color Source #

cyan :: Color Source #

white :: Color Source #

Bright/Vivid variants of the standard 8-color ANSI

brightBlack :: Color Source #

brightRed :: Color Source #

brightGreen :: Color Source #

brightYellow :: Color Source #

brightBlue :: Color Source #

brightMagenta :: Color Source #

brightCyan :: Color Source #

brightWhite :: Color Source #

## 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.