2 ****************************************************************************
3 * Copyright 2018-2022,2023 Thomas E. Dickey *
4 * Copyright 1998-2016,2017 Free Software Foundation, Inc. *
6 * Permission is hereby granted, free of charge, to any person obtaining a *
7 * copy of this software and associated documentation files (the *
8 * "Software"), to deal in the Software without restriction, including *
9 * without limitation the rights to use, copy, modify, merge, publish, *
10 * distribute, distribute with modifications, sublicense, and/or sell *
11 * copies of the Software, and to permit persons to whom the Software is *
12 * furnished to do so, subject to the following conditions: *
14 * The above copyright notice and this permission notice shall be included *
15 * in all copies or substantial portions of the Software. *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
20 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
21 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
22 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
23 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
25 * Except as contained in this notice, the name(s) of the above copyright *
26 * holders shall not be used in advertising or otherwise to promote the *
27 * sale, use or other dealings in this Software without prior written *
29 ****************************************************************************
30 * @Id: curs_color.3x,v 1.93 2023/12/16 21:07:24 tom Exp @
32 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
35 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
36 <meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
37 <TITLE>curs_color 3x 2023-12-16 ncurses 6.4 Library calls</TITLE>
38 <link rel="author" href="mailto:bug-ncurses@gnu.org">
42 <H1 class="no-header">curs_color 3x 2023-12-16 ncurses 6.4 Library calls</H1>
44 <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG> Library calls <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>
49 </PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
50 <STRONG>start_color</STRONG>, <STRONG>has_colors</STRONG>, <STRONG>can_change_color</STRONG>, <STRONG>init_pair</STRONG>, <STRONG>init_color</STRONG>,
51 <STRONG>init_extended_pair</STRONG>, <STRONG>init_extended_color</STRONG>, <STRONG>color_content</STRONG>, <STRONG>pair_content</STRONG>,
52 <STRONG>extended_color_content</STRONG>, <STRONG>extended_pair_content</STRONG>, <STRONG>reset_color_pairs</STRONG>,
53 <STRONG>COLOR_PAIR</STRONG>, <STRONG>PAIR_NUMBER</STRONG>, <STRONG>COLORS</STRONG>, <STRONG>COLOR_PAIRS</STRONG>, <STRONG>COLOR_BLACK</STRONG>, <STRONG>COLOR_RED</STRONG>,
54 <STRONG>COLOR_GREEN</STRONG>, <STRONG>COLOR_YELLOW</STRONG>, <STRONG>COLOR_BLUE</STRONG>, <STRONG>COLOR_MAGENTA</STRONG>, <STRONG>COLOR_CYAN</STRONG>,
55 <STRONG>COLOR_WHITE</STRONG> - manipulate terminal colors with <EM>curses</EM>
58 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
59 <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
61 <STRONG>int</STRONG> <STRONG>start_color(void);</STRONG>
63 <STRONG>bool</STRONG> <STRONG>has_colors(void);</STRONG>
64 <STRONG>bool</STRONG> <STRONG>can_change_color(void);</STRONG>
66 <STRONG>int</STRONG> <STRONG>init_pair(short</STRONG> <EM>pair</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <EM>f</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <EM>b</EM><STRONG>);</STRONG>
67 <STRONG>int</STRONG> <STRONG>init_color(short</STRONG> <EM>color</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <EM>r</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <EM>g</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <EM>b</EM><STRONG>);</STRONG>
68 <EM>/*</EM> <EM>extensions</EM> <EM>*/</EM>
69 <STRONG>int</STRONG> <STRONG>init_extended_pair(int</STRONG> <EM>pair</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>f</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>b</EM><STRONG>);</STRONG>
70 <STRONG>int</STRONG> <STRONG>init_extended_color(int</STRONG> <EM>color</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>r</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>g</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>b</EM><STRONG>);</STRONG>
72 <STRONG>int</STRONG> <STRONG>color_content(short</STRONG> <EM>color</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <STRONG>*</STRONG><EM>r</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <STRONG>*</STRONG><EM>g</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <STRONG>*</STRONG><EM>b</EM><STRONG>);</STRONG>
73 <STRONG>int</STRONG> <STRONG>pair_content(short</STRONG> <EM>pair</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <STRONG>*</STRONG><EM>f</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <STRONG>*</STRONG><EM>b</EM><STRONG>);</STRONG>
74 <EM>/*</EM> <EM>extensions</EM> <EM>*/</EM>
75 <STRONG>int</STRONG> <STRONG>extended_color_content(int</STRONG> <EM>color</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>r</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>g</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>b</EM><STRONG>);</STRONG>
76 <STRONG>int</STRONG> <STRONG>extended_pair_content(int</STRONG> <EM>pair</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>f</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>b</EM><STRONG>);</STRONG>
78 <EM>/*</EM> <EM>extension</EM> <EM>*/</EM>
79 <STRONG>void</STRONG> <STRONG>reset_color_pairs(void);</STRONG>
81 <STRONG>int</STRONG> <STRONG>COLOR_PAIR(int</STRONG> <EM>n</EM><STRONG>);</STRONG>
82 <STRONG>PAIR_NUMBER(int</STRONG> <EM>attr</EM><STRONG>);</STRONG>
85 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
87 </PRE><H3><a name="h3-Overview">Overview</a></H3><PRE>
88 <EM>curses</EM> supports color attributes on terminals with that capability. To
89 use these routines <STRONG>start_color</STRONG> must be called, usually right after
90 <STRONG>initscr</STRONG>. Colors are always used in pairs (referred to as color pairs).
91 A color pair consists of a foreground color (for characters) and a
92 background color (for the blank field on which the characters are
93 displayed). A programmer initializes a color pair with the routine
94 <STRONG>init_pair</STRONG>. After it has been initialized, <STRONG>COLOR_PAIR</STRONG>(<EM>n</EM>) can be used to
95 convert the pair to a video attribute.
97 If a terminal is capable of redefining colors, the programmer can use
98 the routine <STRONG>init_color</STRONG> to change the definition of a color. The
99 routines <STRONG>has_colors</STRONG> and <STRONG>can_change_color</STRONG> return <STRONG>TRUE</STRONG> or <STRONG>FALSE</STRONG>,
100 depending on whether the terminal has color capabilities and whether
101 the programmer can change the colors. The routine <STRONG>color_content</STRONG> allows
102 a programmer to extract the amounts of red, green, and blue components
103 in an initialized color. The routine <STRONG>pair_content</STRONG> allows a programmer
104 to find out how a given color pair is currently defined.
107 </PRE><H3><a name="h3-Color-Rendering">Color Rendering</a></H3><PRE>
108 The <EM>curses</EM> library combines these inputs to produce the actual
109 foreground and background colors shown on the screen:
111 <STRONG>o</STRONG> per-character video attributes (e.g., via <STRONG>waddch</STRONG>),
113 <STRONG>o</STRONG> the window attribute (e.g., by <STRONG>wattrset</STRONG>), and
115 <STRONG>o</STRONG> the background character (e.g., <STRONG>wbkgdset</STRONG>).
117 Per-character and window attributes are usually set by a parameter
118 containing video attributes including a color pair value. Some
119 functions such as <STRONG>wattr_set</STRONG> use a separate parameter which is the color
122 The background character is a special case: it includes a character
123 value, just as if it were passed to <STRONG>waddch</STRONG>.
125 The <EM>curses</EM> library does the actual work of combining these color pairs
126 in an internal function called from <STRONG>waddch</STRONG>:
128 <STRONG>o</STRONG> If the parameter passed to <STRONG>waddch</STRONG> is <EM>blank</EM>, and it uses the special
131 <STRONG>o</STRONG> <EM>curses</EM> next checks the window attribute.
133 <STRONG>o</STRONG> If the window attribute does not use color pair 0, <EM>curses</EM> uses
134 the color pair from the window attribute.
136 <STRONG>o</STRONG> Otherwise, <EM>curses</EM> uses the background character.
138 <STRONG>o</STRONG> If the parameter passed to <STRONG>waddch</STRONG> is <EM>not</EM> <EM>blank</EM>, or it does not use
139 the special color pair 0, <EM>curses</EM> prefers the color pair from the
140 parameter, if it is nonzero. Otherwise, it tries the window
141 attribute next, and finally the background character.
143 Some <EM>curses</EM> functions such as <STRONG>wprintw</STRONG> call <STRONG>waddch</STRONG>. Those do not
144 combine its parameter with a color pair. Consequently those calls use
145 only the window attribute or the background character.
148 </PRE><H2><a name="h2-CONSTANTS">CONSTANTS</a></H2><PRE>
149 In <STRONG><curses.h></STRONG> the following macros are defined. These are the standard
150 colors (ISO-6429). <EM>curses</EM> also assumes that <STRONG>COLOR_BLACK</STRONG> is the default
151 background color for all terminals.
153 <STRONG>COLOR_BLACK</STRONG>
154 <STRONG>COLOR_RED</STRONG>
155 <STRONG>COLOR_GREEN</STRONG>
156 <STRONG>COLOR_YELLOW</STRONG>
157 <STRONG>COLOR_BLUE</STRONG>
158 <STRONG>COLOR_MAGENTA</STRONG>
159 <STRONG>COLOR_CYAN</STRONG>
160 <STRONG>COLOR_WHITE</STRONG>
162 Some terminals support more than the eight (8) "ANSI" colors. There
163 are no standard names for those additional colors.
166 </PRE><H2><a name="h2-VARIABLES">VARIABLES</a></H2><PRE>
168 </PRE><H3><a name="h3-COLORS">COLORS</a></H3><PRE>
169 is initialized by <STRONG>start_color</STRONG> to the maximum number of colors the
170 terminal can support.
173 </PRE><H3><a name="h3-COLOR_PAIRS">COLOR_PAIRS</a></H3><PRE>
174 is initialized by <STRONG>start_color</STRONG> to the maximum number of color pairs the
175 terminal can support.
178 </PRE><H2><a name="h2-FUNCTIONS">FUNCTIONS</a></H2><PRE>
180 </PRE><H3><a name="h3-start_color">start_color</a></H3><PRE>
181 The <STRONG>start_color</STRONG> routine requires no arguments. It must be called if
182 the programmer wants to use colors, and before any other color
183 manipulation routine is called. It is good practice to call this
184 routine right after <STRONG>initscr</STRONG>. <STRONG>start_color</STRONG> does this:
186 <STRONG>o</STRONG> It initializes two global variables, <STRONG>COLORS</STRONG> and <STRONG>COLOR_PAIRS</STRONG>
187 (respectively defining the maximum number of colors and color pairs
188 the terminal can support).
190 <STRONG>o</STRONG> It initializes the special color pair <STRONG>0</STRONG> to the default foreground
191 and background colors. No other color pairs are initialized.
193 <STRONG>o</STRONG> It restores the colors on the terminal to the values they had when
194 the terminal was just turned on.
196 <STRONG>o</STRONG> If the terminal supports the <STRONG>initc</STRONG> (<STRONG>initialize_color</STRONG>) capability,
197 <STRONG>start_color</STRONG> initializes its internal table representing the red,
198 green, and blue components of the color palette.
200 The components depend on whether the terminal uses CGA (aka "ANSI")
201 or HLS (i.e., the <STRONG>hls</STRONG> (<STRONG>hue_lightness_saturation</STRONG>) capability is
202 set). The table is initialized first for eight basic colors
203 (black, red, green, yellow, blue, magenta, cyan, and white), using
204 weights that depend upon the CGA/HLS choice. For "ANSI" colors the
205 weights are <STRONG>680</STRONG> or <STRONG>0</STRONG> depending on whether the corresponding red,
206 green, or blue component is used or not. That permits using <STRONG>1000</STRONG>
207 to represent bold/bright colors. After the initial eight colors
208 (if the terminal supports more than eight colors) the components
209 are initialized using the same pattern, but with weights of <STRONG>1000</STRONG>.
210 SVr4 uses a similar scheme, but uses <STRONG>1000</STRONG> for the components of the
211 initial eight colors.
213 <STRONG>start_color</STRONG> does not attempt to set the terminal's color palette to
214 match its built-in table. An application may use <STRONG>init_color</STRONG> to
215 alter the internal table along with the terminal's color.
217 These limits apply to color values and color pairs. Values outside
218 these limits are not valid, and may result in a runtime error:
220 <STRONG>o</STRONG> <STRONG>COLORS</STRONG> corresponds to the terminal database's <STRONG>max_colors</STRONG>
221 capability, (see <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>).
223 <STRONG>o</STRONG> color values are expected to be in the range <STRONG>0</STRONG> to <STRONG>COLORS-1</STRONG>,
224 inclusive (including <STRONG>0</STRONG> and <STRONG>COLORS-1</STRONG>).
226 <STRONG>o</STRONG> a special color value <STRONG>-1</STRONG> is used in certain extended functions to
227 denote the <EM>default</EM> <EM>color</EM> (see <STRONG><A HREF="default_colors.3x.html">use_default_colors(3x)</A></STRONG>).
229 <STRONG>o</STRONG> <STRONG>COLOR_PAIRS</STRONG> corresponds to the terminal database's <STRONG>max_pairs</STRONG>
230 capability, (see <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>).
232 <STRONG>o</STRONG> valid color pair values are in the range <STRONG>1</STRONG> to <STRONG>COLOR_PAIRS-1</STRONG>,
235 <STRONG>o</STRONG> color pair <STRONG>0</STRONG> is special; it denotes "no color".
237 Color pair <STRONG>0</STRONG> is assumed to be white on black, but is actually
238 whatever the terminal implements before color is initialized. It
239 cannot be modified by the application.
242 </PRE><H3><a name="h3-has_colors">has_colors</a></H3><PRE>
243 The <STRONG>has_colors</STRONG> routine requires no arguments. It returns <STRONG>TRUE</STRONG> if the
244 terminal can manipulate colors; otherwise, it returns <STRONG>FALSE</STRONG>. This
245 routine facilitates writing terminal-independent programs. For
246 example, a programmer can use it to decide whether to use color or some
247 other video attribute.
250 </PRE><H3><a name="h3-can_change_color">can_change_color</a></H3><PRE>
251 The <STRONG>can_change_color</STRONG> routine requires no arguments. It returns <STRONG>TRUE</STRONG> if
252 the terminal supports colors and can change their definitions; other,
253 it returns <STRONG>FALSE</STRONG>. This routine facilitates writing terminal-
254 independent programs.
257 </PRE><H3><a name="h3-init_pair">init_pair</a></H3><PRE>
258 The <STRONG>init_pair</STRONG> routine changes the definition of a color pair. It takes
259 three arguments: the number of the color pair to be changed, the
260 foreground color number, and the background color number. For portable
263 <STRONG>o</STRONG> The first argument must be a valid color pair value. If default
264 colors are used (see <STRONG><A HREF="default_colors.3x.html">use_default_colors(3x)</A></STRONG>) the upper limit is
265 adjusted to allow for extra pairs which use a default color in
266 foreground and/or background.
268 <STRONG>o</STRONG> The second and third arguments must be valid color values.
270 If the color pair was previously initialized, the screen is refreshed
271 and all occurrences of that color pair are changed to the new
274 As an extension, <EM>ncurses</EM> allows you to set color pair <STRONG>0</STRONG> via the
275 <STRONG><A HREF="default_colors.3x.html">assume_default_colors(3x)</A></STRONG> routine, or to specify the use of default
276 colors (color number <STRONG>-1</STRONG>) if you first invoke the <STRONG><A HREF="default_colors.3x.html">use_default_colors(3x)</A></STRONG>
280 </PRE><H3><a name="h3-init_extended_pair">init_extended_pair</a></H3><PRE>
281 Because <STRONG>init_pair</STRONG> uses signed <STRONG>short</STRONG>s for its parameters, that limits
282 color pairs and color-values to 32767 on modern hardware. The
283 extension <STRONG>init_extended_pair</STRONG> uses <STRONG>int</STRONG>s for the color pair and color-
284 value, allowing a larger number of colors to be supported.
287 </PRE><H3><a name="h3-init_color">init_color</a></H3><PRE>
288 The <STRONG>init_color</STRONG> routine changes the definition of a color. It takes
289 four arguments: the number of the color to be changed followed by three
290 RGB values (for the amounts of red, green, and blue components).
292 <STRONG>o</STRONG> The first argument must be a valid color value; default colors are
293 not allowed here. (See the section <STRONG>Colors</STRONG> for the default color
296 <STRONG>o</STRONG> Each of the last three arguments must be a value in the range <STRONG>0</STRONG>
297 through <STRONG>1000</STRONG>.
299 When <STRONG>init_color</STRONG> is used, all occurrences of that color on the screen
300 immediately change to the new definition.
303 </PRE><H3><a name="h3-init_extended_color">init_extended_color</a></H3><PRE>
304 Because <STRONG>init_color</STRONG> uses signed <STRONG>short</STRONG>s for its parameters, that limits
305 color-values and their red, green, and blue components to 32767 on
306 modern hardware. The extension <STRONG>init_extended_color</STRONG> uses <STRONG>int</STRONG>s for the
307 color value and for setting the red, green, and blue components,
308 allowing a larger number of colors to be supported.
311 </PRE><H3><a name="h3-color_content">color_content</a></H3><PRE>
312 The <STRONG>color_content</STRONG> routine gives programmers a way to find the intensity
313 of the red, green, and blue (RGB) components in a color. It requires
314 four arguments: the color number, and three addresses of <STRONG>short</STRONG>s for
315 storing the information about the amounts of red, green, and blue
316 components in the given color.
318 <STRONG>o</STRONG> The first argument must be a valid color value, i.e., <STRONG>0</STRONG> through
319 <STRONG>COLORS-1</STRONG>, inclusive.
321 <STRONG>o</STRONG> The values that are stored at the addresses pointed to by the last
322 three arguments are in the range <STRONG>0</STRONG> (no component) through <STRONG>1000</STRONG>
323 (maximum amount of component), inclusive.
326 </PRE><H3><a name="h3-extended_color_content">extended_color_content</a></H3><PRE>
327 Because <STRONG>color_content</STRONG> uses signed <STRONG>short</STRONG>s for its parameters, that
328 limits color-values and their red, green, and blue components to 32767
329 on modern hardware. The extension <STRONG>extended_color_content</STRONG> uses <STRONG>int</STRONG>s for
330 the color value and for returning the red, green, and blue components,
331 allowing a larger number of colors to be supported.
334 </PRE><H3><a name="h3-pair_content">pair_content</a></H3><PRE>
335 The <STRONG>pair_content</STRONG> routine allows programmers to find out what colors a
336 given color pair consists of. It requires three arguments: the color
337 pair number, and two addresses of <STRONG>short</STRONG>s for storing the foreground and
338 the background color numbers.
340 <STRONG>o</STRONG> The first argument must be a valid color value, i.e., in the range
341 <STRONG>1</STRONG> through <STRONG>COLOR_PAIRS-1</STRONG>, inclusive.
343 <STRONG>o</STRONG> The values that are stored at the addresses pointed to by the
344 second and third arguments are in the range <STRONG>0</STRONG> through <STRONG>COLORS</STRONG>,
348 </PRE><H3><a name="h3-extended_pair_content">extended_pair_content</a></H3><PRE>
349 Because <STRONG>pair_content</STRONG> uses signed <STRONG>short</STRONG>s for its parameters, that limits
350 color pair and color-values to 32767 on modern hardware. The extension
351 <STRONG>extended_pair_content</STRONG> uses <STRONG>int</STRONG>s for the color pair and for returning
352 the foreground and background colors, allowing a larger number of
353 colors to be supported.
356 </PRE><H3><a name="h3-reset_color_pairs">reset_color_pairs</a></H3><PRE>
357 The extension <STRONG>reset_color_pairs</STRONG> tells <EM>ncurses</EM> to discard all of the
358 color pair information which was set with <STRONG>init_pair</STRONG>. It also touches
359 the current- and standard-screens, allowing an application to switch
360 color palettes rapidly.
363 </PRE><H3><a name="h3-COLOR_PAIR">COLOR_PAIR</a></H3><PRE>
364 <STRONG>COLOR_PAIR(</STRONG><EM>n</EM><STRONG>)</STRONG> converts a color pair number to an attribute. Attributes
365 can hold color pairs in the range 0 to 255. If you need a color pair
366 larger than that, you must use functions such as <STRONG>attr_set</STRONG> (which pass
367 the color pair as a separate parameter) rather than the legacy
368 functions such as <STRONG>attrset</STRONG>.
371 </PRE><H3><a name="h3-PAIR_NUMBER">PAIR_NUMBER</a></H3><PRE>
372 <STRONG>PAIR_NUMBER(</STRONG><EM>attr</EM>) extracts the color information from its <EM>attr</EM>
373 parameter and returns it as a color pair number; it is the inverse
374 operation of <STRONG>COLOR_PAIR</STRONG>.
377 </PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
378 The routines <STRONG>can_change_color</STRONG> and <STRONG>has_colors</STRONG> return <STRONG>TRUE</STRONG> or <STRONG>FALSE</STRONG>.
380 All other routines return the integer <STRONG>ERR</STRONG> upon failure and an <STRONG>OK</STRONG> (SVr4
381 specifies only "an integer value other than <STRONG>ERR</STRONG>") upon successful
384 X/Open defines no error conditions. SVr4 does document some error
385 conditions which apply in general:
387 <STRONG>o</STRONG> This implementation will return <STRONG>ERR</STRONG> on attempts to use color values
388 outside the range <STRONG>0</STRONG> to <STRONG>COLORS</STRONG>-1 (except for the default colors
389 extension), or use color pairs outside the range <STRONG>0</STRONG> to
390 <STRONG>COLOR_PAIRS-1</STRONG>.
392 Color values used in <STRONG>init_color</STRONG> must be in the range <STRONG>0</STRONG> to <STRONG>1000</STRONG>.
394 An error is returned from all functions if the terminal has not
397 An error is returned from secondary functions such as <STRONG>init_pair</STRONG> if
398 <STRONG>start_color</STRONG> was not called.
400 <STRONG>o</STRONG> SVr4 does much the same, except that it returns <STRONG>ERR</STRONG> from
401 <STRONG>pair_content</STRONG> if the pair was not initialized using <STRONG>init_pairs</STRONG> and
402 it returns <STRONG>ERR</STRONG> from <STRONG>color_content</STRONG> if the terminal does not support
405 This implementation does not return <STRONG>ERR</STRONG> for either case.
407 Specific functions make additional checks:
409 <STRONG>init_color</STRONG>
410 returns an error if the terminal does not support this feature,
411 e.g., if the <STRONG>initialize_color</STRONG> capability is absent from the
412 terminal description.
414 <STRONG>start_color</STRONG>
415 returns an error if the color table cannot be allocated.
418 </PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
419 In the <EM>ncurses</EM> implementation, there is a separate color activation
420 flag, color palette, color pairs table, and associated <STRONG>COLORS</STRONG> and
421 <STRONG>COLOR_PAIRS</STRONG> counts for each screen; the <STRONG>start_color</STRONG> function only
422 affects the current screen. The SVr4/XSI interface is not really
423 designed with this in mind, and historical implementations may use a
424 single shared color palette.
426 Setting an implicit background color via a color pair affects only
427 character cells that a character write operation explicitly touches.
428 To change the background color used when parts of a window are blanked
429 by erasing or scrolling operations, see <STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3x)</A></STRONG>.
431 Several caveats apply on older x86 machines (e.g., i386, i486) with
432 VGA-compatible graphics:
434 <STRONG>o</STRONG> COLOR_YELLOW is actually brown. To get yellow, use COLOR_YELLOW
435 combined with the <STRONG>A_BOLD</STRONG> attribute.
437 <STRONG>o</STRONG> The A_BLINK attribute should in theory cause the background to go
438 bright. This often fails to work, and even some cards for which it
439 mostly works (such as the Paradise and compatibles) do the wrong
440 thing when you try to set a bright "yellow" background (you get a
441 blinking yellow foreground instead).
443 <STRONG>o</STRONG> Color RGB values are not settable.
446 </PRE><H2><a name="h2-EXTENSIONS">EXTENSIONS</a></H2><PRE>
447 The functions marked as extensions were designed for <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG>, and
448 are not found in SVr4 curses, 4.4BSD curses, or any other previous
452 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
453 This implementation satisfies XSI Curses's minimum maximums for <STRONG>COLORS</STRONG>
454 and <STRONG>COLOR_PAIRS</STRONG>.
456 The <STRONG>init_pair</STRONG> routine accepts negative values of foreground and
457 background color to support the <STRONG><A HREF="default_colors.3x.html">use_default_colors(3x)</A></STRONG> extension, but
458 only if that routine has been first invoked.
460 The assumption that <STRONG>COLOR_BLACK</STRONG> is the default background color for all
461 terminals can be modified using the <STRONG><A HREF="default_colors.3x.html">assume_default_colors(3x)</A></STRONG>
464 This implementation checks the pointers, e.g., for the values returned
465 by <STRONG>color_content</STRONG> and <STRONG>pair_content</STRONG>, and will treat those as optional
466 parameters when null.
468 X/Open Curses does not specify a limit for the number of colors and
469 color pairs which a terminal can support. However, in its use of <STRONG>short</STRONG>
470 for the parameters, it carries over SVr4's implementation detail for
471 the compiled terminfo database, which uses signed 16-bit numbers. This
472 implementation provides extended versions of those functions which use
473 <STRONG>short</STRONG> parameters, allowing applications to use larger color- and pair-
476 The <STRONG>reset_color_pairs</STRONG> function is an extension of <EM>ncurses</EM>.
479 </PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
480 SVr3.2 introduced color support to curses in 1987.
482 SVr4 made internal changes, e.g., moving the storage for the color
483 state from <STRONG>SP</STRONG> (the <STRONG>SCREEN</STRONG> structure) to <STRONG>cur_term</STRONG> (the <STRONG>TERMINAL</STRONG>
484 structure), but provided the same set of library functions.
486 SVr4 curses limits the number of color pairs to 64, reserving color
487 pair zero (0) as the terminal's initial uncolored state. This limit
488 arises because the color pair information is a bitfield in the <STRONG>chtype</STRONG>
489 data type (denoted by <STRONG>A_COLOR</STRONG>).
491 Other implementations of curses had different limits:
493 <STRONG>o</STRONG> PCCurses (1987-1990) provided for only eight (8) colors.
495 <STRONG>o</STRONG> PDCurses (1992-present) inherited the 8-color limitation from
496 PCCurses, but changed this to 256 in version 2.5 (2001), along with
497 changing <STRONG>chtype</STRONG> from 16-bits to 32-bits.
499 <STRONG>o</STRONG> X/Open Curses (1992-present) added a new structure <STRONG>cchar_t</STRONG> to store
500 the character, attributes and color pair values, allowing increased
501 range of color pairs. Both color pairs and color-values used a
502 signed <STRONG>short</STRONG>, limiting values to 15 bits.
504 <STRONG>o</STRONG> <EM>ncurses</EM> (1992-present) uses eight bits for <STRONG>A_COLOR</STRONG> in <STRONG>chtype</STRONG>
507 Version 5.3 provided a wide-character interface (2002), but left
508 color pairs as part of the attributes-field.
510 Since version 6 (2015), ncurses uses a separate <STRONG>int</STRONG> for color pairs
511 in the <STRONG>cchar_t</STRONG> values. When those color pair values fit in 8 bits,
512 ncurses allows color pairs to be manipulated via the functions
513 using <STRONG>chtype</STRONG> values.
515 <STRONG>o</STRONG> NetBSD curses used 6 bits from 2000 (when colors were first
516 supported) until 2004. At that point, NetBSD changed to use 10
517 bits. As of 2021, that size is unchanged. Like <EM>ncurses</EM> before
518 version 6, the NetBSD color pair information is stored in the
519 attributes field of <STRONG>cchar_t</STRONG>, limiting the number of color pairs by
520 the size of the bitfield.
523 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
524 <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="curs_attr.3x.html">curs_attr(3x)</A></STRONG>, <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>, <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>,
525 <STRONG><A HREF="default_colors.3x.html">default_colors(3x)</A></STRONG>
529 ncurses 6.4 2023-12-16 <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>
533 <li><a href="#h2-NAME">NAME</a></li>
534 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
535 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
537 <li><a href="#h3-Overview">Overview</a></li>
538 <li><a href="#h3-Color-Rendering">Color Rendering</a></li>
541 <li><a href="#h2-CONSTANTS">CONSTANTS</a></li>
542 <li><a href="#h2-VARIABLES">VARIABLES</a>
544 <li><a href="#h3-COLORS">COLORS</a></li>
545 <li><a href="#h3-COLOR_PAIRS">COLOR_PAIRS</a></li>
548 <li><a href="#h2-FUNCTIONS">FUNCTIONS</a>
550 <li><a href="#h3-start_color">start_color</a></li>
551 <li><a href="#h3-has_colors">has_colors</a></li>
552 <li><a href="#h3-can_change_color">can_change_color</a></li>
553 <li><a href="#h3-init_pair">init_pair</a></li>
554 <li><a href="#h3-init_extended_pair">init_extended_pair</a></li>
555 <li><a href="#h3-init_color">init_color</a></li>
556 <li><a href="#h3-init_extended_color">init_extended_color</a></li>
557 <li><a href="#h3-color_content">color_content</a></li>
558 <li><a href="#h3-extended_color_content">extended_color_content</a></li>
559 <li><a href="#h3-pair_content">pair_content</a></li>
560 <li><a href="#h3-extended_pair_content">extended_pair_content</a></li>
561 <li><a href="#h3-reset_color_pairs">reset_color_pairs</a></li>
562 <li><a href="#h3-COLOR_PAIR">COLOR_PAIR</a></li>
563 <li><a href="#h3-PAIR_NUMBER">PAIR_NUMBER</a></li>
566 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
567 <li><a href="#h2-NOTES">NOTES</a></li>
568 <li><a href="#h2-EXTENSIONS">EXTENSIONS</a></li>
569 <li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
570 <li><a href="#h2-HISTORY">HISTORY</a></li>
571 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>