vty-5.38: A simple terminal UI library
Safe HaskellSafe-Inferred
LanguageHaskell2010

Graphics.Vty.Attributes.Color

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

Instances

Instances details
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 #

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 #

NFData Color Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

Methods

rnf :: Color -> () #

Eq Color Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

Methods

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

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

type Rep Color Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

data ColorMode Source #

Instances

Instances details
Show ColorMode Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

Eq ColorMode Source # 
Instance details

Defined in Graphics.Vty.Attributes.Color

Detecting Terminal Color Support

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

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

Create a color value from RGB values in the 0..255 range inclusive. No transformation of the input values is done; a color is created directly from the RGB values specified, unlike the srgbColor and color240 functions.

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

Given RGB values in the range 0..255 inclusive, create a color using the sRGB transformation described at

https://en.wikipedia.org/wiki/SRGB#The_reverse_transformation

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

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

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