start_color
The start_color
routine requires no arguments. It must be called
if the programmer wants to use colors, and before any other color
manipulation routine is called. It is good practice to call this
routine right after initscr
. start_color
does this:
• It initializes two global variables, COLORS
and COLOR_PAIRS
(respectively defining the maximum number of colors and
color-pairs the terminal can support).
• It initializes the special color pair 0
to the default
foreground and background colors. No other color pairs are
initialized.
• It restores the colors on the terminal to the values they had
when the terminal was just turned on.
• If the terminal supports the initc
(initialize_color
)
capability, start_color
initializes its internal table
representing the red, green, and blue components of the color
palette.
The components depend on whether the terminal uses CGA (aka
'ANSI') or HLS (i.e., the hls
(hue_lightness_saturation
)
capability is set). The table is initialized first for eight
basic colors (black, red, green, yellow, blue, magenta, cyan,
and white), using weights that depend upon the CGA/HLS
choice. For 'ANSI' colors the weights are 680
or 0
depending
on whether the corresponding red, green, or blue component is
used or not. That permits using 1000
to represent
bold/bright colors. After the initial eight colors (if the
terminal supports more than eight colors) the components are
initialized using the same pattern, but with weights of 1000
.
SVr4 uses a similar scheme, but uses 1000
for the components
of the initial eight colors.
start_color
does not attempt to set the terminal's color
palette to match its built-in table. An application may use
init_color
to alter the internal table along with the
terminal's color.
These limits apply to color values and color pairs. Values
outside these limits are not legal, and may result in a runtime
error:
• COLORS
corresponds to the terminal database's max_colors
capability, (see terminfo(5)).
• color values are expected to be in the range 0
to COLORS-1
,
inclusive (including 0
and COLORS-1
).
• a special color value -1
is used in certain extended
functions to denote the default color (see
use_default_colors
(3X)).
• COLOR_PAIRS
corresponds to the terminal database's max_pairs
capability, (see terminfo(5)).
• legal color pair values are in the range 1
to COLOR_PAIRS-1
,
inclusive.
• color pair 0
is special; it denotes 'no color'.
Color pair 0
is assumed to be white on black, but is actually
whatever the terminal implements before color is initialized.
It cannot be modified by the application.
has_colors
The has_colors
routine requires no arguments. It returns TRUE
if
the terminal can manipulate colors; otherwise, it returns FALSE
.
This routine facilitates writing terminal-independent programs.
For example, a programmer can use it to decide whether to use
color or some other video attribute.
can_change_color
The can_change_color
routine requires no arguments. It returns
TRUE
if the terminal supports colors and can change their
definitions; other, it returns FALSE
. This routine facilitates
writing terminal-independent programs.
init_pair
The init_pair
routine changes the definition of a color-pair. It
takes three arguments: the number of the color-pair to be
changed, the foreground color number, and the background color
number. For portable applications:
• The first argument must be a legal color pair value. If
default colors are used (see use_default_colors
(3X)) the
upper limit is adjusted to allow for extra pairs which use a
default color in foreground and/or background.
• The second and third arguments must be legal color values.
If the color-pair was previously initialized, the screen is
refreshed and all occurrences of that color-pair are changed to
the new definition.
As an extension, ncurses allows you to set color pair 0
via the
assume_default_colors
(3X) routine, or to specify the use of
default colors (color number -1
) if you first invoke the
use_default_colors
(3X) routine.
init_extended_pair
Because init_pair
uses signed short
s for its parameters, that
limits color-pairs and color-values to 32767 on modern hardware.
The extension init_extended_pair
uses int
s for the color-pair and
color-value, allowing a larger number of colors to be supported.
init_color
The init_color
routine changes the definition of a color. It
takes four arguments: the number of the color to be changed
followed by three RGB values (for the amounts of red, green, and
blue components).
• The first argument must be a legal color value; default
colors are not allowed here. (See the section Colors
for the
default color index.)
• Each of the last three arguments must be a value in the range
0
through 1000
.
When init_color
is used, all occurrences of that color on the
screen immediately change to the new definition.
init_extended_color
Because init_color
uses signed short
s for its parameters, that
limits color-values and their red, green, and blue components to
32767 on modern hardware. The extension init_extended_color
uses
int
s for the color value and for setting the red, green, and blue
components, allowing a larger number of colors to be supported.
color_content
The color_content
routine gives programmers a way to find the
intensity of the red, green, and blue (RGB) components in a
color. It requires four arguments: the color number, and three
addresses of short
s for storing the information about the amounts
of red, green, and blue components in the given color.
• The first argument must be a legal color value, i.e., 0
through COLORS-1
, inclusive.
• The values that are stored at the addresses pointed to by the
last three arguments are in the range 0
(no component)
through 1000
(maximum amount of component), inclusive.
extended_color_content
Because color_content
uses signed short
s for its parameters, that
limits color-values and their red, green, and blue components to
32767 on modern hardware. The extension extended_color_content
uses int
s for the color value and for returning the red, green,
and blue components, allowing a larger number of colors to be
supported.
pair_content
The pair_content
routine allows programmers to find out what
colors a given color-pair consists of. It requires three
arguments: the color-pair number, and two addresses of short
s for
storing the foreground and the background color numbers.
• The first argument must be a legal color value, i.e., in the
range 1
through COLOR_PAIRS-1
, inclusive.
• The values that are stored at the addresses pointed to by the
second and third arguments are in the range 0
through COLORS
,
inclusive.
extended_pair_content
Because pair_content
uses signed short
s for its parameters, that
limits color-pair and color-values to 32767 on modern hardware.
The extension extended_pair_content
uses int
s for the color pair
and for returning the foreground and background colors, allowing
a larger number of colors to be supported.
reset_color_pairs
The extension reset_color_pairs
tells ncurses to discard all of
the color-pair information which was set with init_pair
. It also
touches the current- and standard-screens, allowing an
application to switch color palettes rapidly.
PAIR_NUMBER
PAIR_NUMBER(
attrs) extracts the color value from its attrs
parameter and returns it as a color pair number.
COLOR_PAIR
Its inverse COLOR_PAIR(
n)
converts a color pair number to an
attribute. Attributes can hold color pairs in the range 0 to
255. If you need a color pair larger than that, you must use
functions such as attr_set
(which pass the color pair as a
separate parameter) rather than the legacy functions such as
attrset
.