Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Synopsis
- data Color
- 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
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:
- black
- red
- green
- yellow
- blue
- magenta
- cyan
- 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.
Instances
Eq Color Source # | |
Read Color Source # | |
Show Color Source # | |
Generic Color Source # | |
NFData Color Source # | |
Defined in Graphics.Vty.Attributes.Color | |
type Rep Color Source # | |
Defined in Graphics.Vty.Attributes.Color type Rep Color = D1 (MetaData "Color" "Graphics.Vty.Attributes.Color" "vty-5.28.2-Cs606gPf5U9H2a4Y823qy9" 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
brightBlack :: Color Source #
brightGreen :: Color Source #
brightYellow :: Color Source #
brightBlue :: 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