ncurses 6.0 - patch 20170128
[ncurses.git] / doc / html / man / curs_color.3x.html
1 <!-- 
2   ****************************************************************************
3   * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc.              *
4   *                                                                          *
5   * Permission is hereby granted, free of charge, to any person obtaining a  *
6   * copy of this software and associated documentation files (the            *
7   * "Software"), to deal in the Software without restriction, including      *
8   * without limitation the rights to use, copy, modify, merge, publish,      *
9   * distribute, distribute with modifications, sublicense, and/or sell       *
10   * copies of the Software, and to permit persons to whom the Software is    *
11   * furnished to do so, subject to the following conditions:                 *
12   *                                                                          *
13   * The above copyright notice and this permission notice shall be included  *
14   * in all copies or substantial portions of the Software.                   *
15   *                                                                          *
16   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
17   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
18   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
19   * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
20   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
21   * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
22   * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
23   *                                                                          *
24   * Except as contained in this notice, the name(s) of the above copyright   *
25   * holders shall not be used in advertising or otherwise to promote the     *
26   * sale, use or other dealings in this Software without prior written       *
27   * authorization.                                                           *
28   ****************************************************************************
29   * @Id: curs_color.3x,v 1.46 2017/01/07 19:57:48 tom Exp @
30   * .br
31   * .br
32   * .br
33 -->
34 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
35 <HTML>
36 <HEAD>
37 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
38 <meta name="generator" content="Manpage converted by man2html - see http://invisible-island.net/scripts/readme.html#others_scripts">
39 <TITLE>curs_color 3x</TITLE>
40 <link rev=made href="mailto:bug-ncurses@gnu.org">
41 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
42 </HEAD>
43 <BODY>
44 <H1 class="no-header">curs_color 3x</H1>
45 <PRE>
46 <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>                                           <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>
47
48
49
50
51 </PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
52        <STRONG>start_color</STRONG>, <STRONG>init_pair</STRONG>, <STRONG>init_color</STRONG>, <STRONG>has_colors</STRONG>,
53        <STRONG>can_change_color</STRONG>, <STRONG>color_content</STRONG>, <STRONG>pair_content</STRONG>, <STRONG>COLOR_PAIR</STRONG>,
54        <STRONG>PAIR_NUMBER</STRONG> - <STRONG>curses</STRONG> color manipulation routines
55
56
57 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
58        <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>
59
60        <STRONG>int</STRONG> <STRONG>start_color(void);</STRONG>
61        <STRONG>int</STRONG> <STRONG>init_pair(short</STRONG> <STRONG>pair,</STRONG> <STRONG>short</STRONG> <STRONG>f,</STRONG> <STRONG>short</STRONG> <STRONG>b);</STRONG>
62        <STRONG>int</STRONG> <STRONG>init_color(short</STRONG> <STRONG>color,</STRONG> <STRONG>short</STRONG> <STRONG>r,</STRONG> <STRONG>short</STRONG> <STRONG>g,</STRONG> <STRONG>short</STRONG> <STRONG>b);</STRONG>
63
64        <STRONG>bool</STRONG> <STRONG>has_colors(void);</STRONG>
65        <STRONG>bool</STRONG> <STRONG>can_change_color(void);</STRONG>
66
67        <STRONG>int</STRONG>  <STRONG>color_content(short</STRONG>  <STRONG>color,</STRONG> <STRONG>short</STRONG> <STRONG>*r,</STRONG> <STRONG>short</STRONG> <STRONG>*g,</STRONG> <STRONG>short</STRONG>
68        <STRONG>*b);</STRONG>
69        <STRONG>int</STRONG> <STRONG>pair_content(short</STRONG> <STRONG>pair,</STRONG> <STRONG>short</STRONG> <STRONG>*f,</STRONG> <STRONG>short</STRONG> <STRONG>*b);</STRONG>
70
71        <STRONG>int</STRONG> <STRONG>COLOR_PAIR(int</STRONG> <STRONG>n);</STRONG>
72        <STRONG>PAIR_NUMBER(</STRONG><EM>attrs</EM><STRONG>);</STRONG>
73
74
75 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
76
77 </PRE><H3><a name="h3-Overview">Overview</a></H3><PRE>
78        <STRONG>curses</STRONG> supports color attributes on  terminals  with  that
79        capability.   To  use  these  routines <STRONG>start_color</STRONG> must be
80        called, usually right after <STRONG>initscr</STRONG>.   Colors  are  always
81        used  in pairs (referred to as color-pairs).  A color-pair
82        consists of a foreground  color  (for  characters)  and  a
83        background color (for the blank field on which the charac-
84        ters are displayed).  A programmer  initializes  a  color-
85        pair  with  the routine <STRONG>init_pair</STRONG>.  After it has been ini-
86        tialized, <STRONG>COLOR_PAIR</STRONG>(<EM>n</EM>) can be used to convert the pair to
87        a video attribute.
88
89        If  a  terminal  is capable of redefining colors, the pro-
90        grammer can use the routine <STRONG>init_color</STRONG> to change the defi-
91        nition   of   a   color.    The  routines  <STRONG>has_colors</STRONG>  and
92        <STRONG>can_change_color</STRONG>  return  <STRONG>TRUE</STRONG>  or  <STRONG>FALSE</STRONG>,  depending   on
93        whether  the  terminal  has color capabilities and whether
94        the programmer can change the colors.   The  routine  <STRONG>col-</STRONG>
95        <STRONG>or_content</STRONG>  allows  a programmer to extract the amounts of
96        red, green, and blue components in an  initialized  color.
97        The  routine  <STRONG>pair_content</STRONG> allows a programmer to find out
98        how a given color-pair is currently defined.
99
100
101 </PRE><H3><a name="h3-Color-Rendering">Color Rendering</a></H3><PRE>
102        The <STRONG>curses</STRONG> library combines these inputs  to  produce  the
103        actual  foreground  and  background  colors  shown  on the
104        screen:
105
106        <STRONG>o</STRONG>   per-character video attributes (e.g., via <STRONG>waddch</STRONG>),
107
108        <STRONG>o</STRONG>   the window attribute (e.g., by <STRONG>wattrset</STRONG>), and
109
110        <STRONG>o</STRONG>   the background character (e.g., <STRONG>wbkgdset</STRONG>).
111
112        Per-character and window attributes are usually set  by  a
113        parameter  containing  video  attributes including a color
114        pair value.  Some functions such as <STRONG>wattr_set</STRONG> use a  sepa-
115        rate parameter which is the color pair number.
116
117        The  background character is a special case: it includes a
118        character value, just as if it were passed to <STRONG>waddch</STRONG>.
119
120        The <STRONG>curses</STRONG> library does the actual work of combining these
121        color pairs in an internal function called from <STRONG>waddch</STRONG>:
122
123        <STRONG>o</STRONG>   If the parameter passed to <STRONG>waddch</STRONG> is <EM>blank</EM>, and it us-
124            es the special color pair 0,
125
126            <STRONG>o</STRONG>   <STRONG>curses</STRONG> next checks the window attribute.
127
128            <STRONG>o</STRONG>   If the window attribute does not use color pair 0,
129                <STRONG>curses</STRONG>  uses  the  color  pair from the window at-
130                tribute.
131
132            <STRONG>o</STRONG>   Otherwise, <STRONG>curses</STRONG> uses the background character.
133
134        <STRONG>o</STRONG>   If the parameter passed to <STRONG>waddch</STRONG> is <EM>not</EM> <EM>blank</EM>, or  it
135            does  not use the special color pair 0, <STRONG>curses</STRONG> prefers
136            the color pair from the parameter, if it  is  nonzero.
137            Otherwise, it tries the window attribute next, and fi-
138            nally the background character.
139
140        Some <STRONG>curses</STRONG> functions such as <STRONG>wprintw</STRONG> call <STRONG>waddch</STRONG>.   Those
141        do  not  combine  its parameter with a color pair.  Conse-
142        quently those calls use only the window attribute  or  the
143        background character.
144
145
146 </PRE><H3><a name="h3-Routine-Descriptions">Routine Descriptions</a></H3><PRE>
147        The <STRONG>start_color</STRONG> routine requires no arguments.  It must be
148        called if the programmer wants to use colors,  and  before
149        any  other  color  manipulation  routine is called.  It is
150        good practice to call this routine  right  after  <STRONG>initscr</STRONG>.
151        <STRONG>start_color</STRONG> does this:
152
153        <STRONG>o</STRONG>   It  initializes  two global variables, <STRONG>COLORS</STRONG> and <STRONG>COL-</STRONG>
154            <STRONG>OR_PAIRS</STRONG> (respectively defining the maximum number  of
155            colors and color-pairs the terminal can support).
156
157        <STRONG>o</STRONG>   It initializes the special color pair <STRONG>0</STRONG> to the default
158            foreground and  background  colors.   No  other  color
159            pairs are initialized.
160
161        <STRONG>o</STRONG>   It  restores  the colors on the terminal to the values
162            they had when the terminal was just turned on.
163
164        <STRONG>o</STRONG>   If the terminal supports the <STRONG>initc</STRONG>  (<STRONG>initialize_color</STRONG>)
165            capability, <STRONG>start_color</STRONG> initializes its internal table
166            representing the red, green and blue components of the
167            color palette.
168
169            The components depend on whether the terminal uses CGA
170            (aka "ANSI") or HLS (i.e., the <STRONG>hls</STRONG> (<STRONG>hue_lightness_sat-</STRONG>
171            <STRONG>uration</STRONG>) capability is set).  The table is initialized
172            first for eight basic colors (black, red, green,  yel-
173            low,  blue,  magenta, cyan, and white), and after that
174            (if the terminal supports more than eight colors)  the
175            components are initialized to <STRONG>1000</STRONG>.
176
177            <STRONG>start_color</STRONG>  does  not  attempt  to set the terminal's
178            color palette to match its built-in table.  An  appli-
179            cation  may use <STRONG>init_color</STRONG> to alter the internal table
180            along with the terminal's color.
181
182        These limits apply to color values and color pairs.   Val-
183        ues  outside these limits are not legal, and may result in
184        a runtime error:
185
186        <STRONG>o</STRONG>   <STRONG>COLORS</STRONG> corresponds to the terminal database's <STRONG>max_col-</STRONG>
187            <STRONG>ors</STRONG> capability, which is typically a signed 16-bit in-
188            teger (see <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>).
189
190        <STRONG>o</STRONG>   color values are expected to be in the range <STRONG>0</STRONG> to <STRONG>COL-</STRONG>
191            <STRONG>ORS-1</STRONG>, inclusive (including <STRONG>0</STRONG> and <STRONG>COLORS-1</STRONG>).
192
193        <STRONG>o</STRONG>   a  special  color value <STRONG>-1</STRONG> is used in certain extended
194            functions to denote the  <EM>default</EM>  <EM>color</EM>  (see  <STRONG>use_de-</STRONG>
195            <STRONG>fault_colors</STRONG>).
196
197        <STRONG>o</STRONG>   <STRONG>COLOR_PAIRS</STRONG>  corresponds  to  the  terminal database's
198            <STRONG>max_pairs</STRONG> capability,  which  is  typically  a  signed
199            16-bit integer (see <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>).
200
201        <STRONG>o</STRONG>   legal  color  pair  values  are in the range <STRONG>1</STRONG> to <STRONG>COL-</STRONG>
202            <STRONG>OR_PAIRS-1</STRONG>, inclusive.
203
204        <STRONG>o</STRONG>   color pair <STRONG>0</STRONG> is special; it denotes "no color".
205
206            Color pair <STRONG>0</STRONG> is assumed to be white on black,  but  is
207            actually whatever the terminal implements before color
208            is initialized.  It cannot be modified by the applica-
209            tion.
210
211        The  <STRONG>init_pair</STRONG>  routine changes the definition of a color-
212        pair.  It takes three arguments: the number of the  color-
213        pair  to  be changed, the foreground color number, and the
214        background color number.  For portable applications:
215
216        <STRONG>o</STRONG>   The first argument must be a legal color  pair  value.
217            If  default  colors  are used (see <STRONG>use_default_colors</STRONG>)
218            the upper limit is adjusted to allow for  extra  pairs
219            which  use  a default color in foreground and/or back-
220            ground.
221
222        <STRONG>o</STRONG>   The second and third arguments  must  be  legal  color
223            values.
224
225        If  the  color-pair was previously initialized, the screen
226        is refreshed and all occurrences of  that  color-pair  are
227        changed to the new definition.
228
229        As  an  extension,  ncurses allows you to set color pair <STRONG>0</STRONG>
230        via the <STRONG>assume_default_colors</STRONG> routine, or to  specify  the
231        use  of  default colors (color number <STRONG>-1</STRONG>) if you first in-
232        voke the <STRONG>use_default_colors</STRONG> routine.
233
234        The <STRONG>init_color</STRONG> routine changes the definition of a  color.
235        It  takes  four  arguments:  the number of the color to be
236        changed followed by three RGB values (for the  amounts  of
237        red, green, and blue components).  The first argument must
238        be a legal color value; default  colors  are  not  allowed
239        here.   (See  the section <STRONG>Colors</STRONG> for the default color in-
240        dex.)  Each of the last three arguments must be a value in
241        the  range  <STRONG>0</STRONG>  through <STRONG>1000</STRONG>.  When <STRONG>init_color</STRONG> is used, all
242        occurrences of that color on the screen immediately change
243        to the new definition.
244
245        The  <STRONG>has_colors</STRONG> routine requires no arguments.  It returns
246        <STRONG>TRUE</STRONG> if the terminal can manipulate colors; otherwise,  it
247        returns <STRONG>FALSE</STRONG>.  This routine facilitates writing terminal-
248        independent programs.  For example, a programmer  can  use
249        it  to decide whether to use color or some other video at-
250        tribute.
251
252        The <STRONG>can_change_color</STRONG> routine requires  no  arguments.   It
253        returns  <STRONG>TRUE</STRONG>  if  the  terminal  supports  colors and can
254        change their definitions; other, it returns  <STRONG>FALSE</STRONG>.   This
255        routine facilitates writing terminal-independent programs.
256
257        The  <STRONG>color_content</STRONG> routine gives programmers a way to find
258        the intensity of the red, green, and blue (RGB) components
259        in a color.  It requires four arguments: the color number,
260        and three addresses of <STRONG>short</STRONG>s for storing the  information
261        about  the  amounts  of red, green, and blue components in
262        the given color.  The first argument must be a legal color
263        value,  i.e.,  <STRONG>0</STRONG>  through <STRONG>COLORS-1</STRONG>, inclusive.  The values
264        that are stored at the addresses pointed to  by  the  last
265        three  arguments are in the range <STRONG>0</STRONG> (no component) through
266        <STRONG>1000</STRONG> (maximum amount of component), inclusive.
267
268        The <STRONG>pair_content</STRONG> routine allows programmers  to  find  out
269        what  colors  a given color-pair consists of.  It requires
270        three arguments: the color-pair number, and two  addresses
271        of  <STRONG>short</STRONG>s  for  storing the foreground and the background
272        color numbers.  The first argument must be a  legal  color
273        value,  i.e., in the range <STRONG>1</STRONG> through <STRONG>COLOR_PAIRS-1</STRONG>, inclu-
274        sive.  The values that are stored at the addresses pointed
275        to  by  the  second and third arguments are in the range <STRONG>0</STRONG>
276        through <STRONG>COLORS</STRONG>, inclusive.
277
278        <STRONG>PAIR_NUMBER(</STRONG><EM>attrs</EM>) extracts the color value from its <EM>attrs</EM>
279        parameter  and returns it as a color pair number.  Its in-
280        verse <STRONG>COLOR_PAIR(</STRONG><EM>n</EM><STRONG>)</STRONG> converts a color pair number to an at-
281        tribute.   Attributes  can hold color pairs in the range 0
282        to 255.  If you need a color pair larger  than  that,  you
283        must  use functions such as <STRONG>attr_set</STRONG> (which pass the color
284        pair as a separate parameter) rather than the legacy func-
285        tions such as <STRONG>attrset</STRONG>.
286
287
288 </PRE><H3><a name="h3-Colors">Colors</a></H3><PRE>
289        In <STRONG>&lt;curses.h&gt;</STRONG> the following macros are defined.  These are
290        the standard colors (ISO-6429).  <STRONG>curses</STRONG> also assumes  that
291        <STRONG>COLOR_BLACK</STRONG> is the default background color for all termi-
292        nals.
293
294              <STRONG>COLOR_BLACK</STRONG>
295              <STRONG>COLOR_RED</STRONG>
296              <STRONG>COLOR_GREEN</STRONG>
297              <STRONG>COLOR_YELLOW</STRONG>
298              <STRONG>COLOR_BLUE</STRONG>
299              <STRONG>COLOR_MAGENTA</STRONG>
300              <STRONG>COLOR_CYAN</STRONG>
301              <STRONG>COLOR_WHITE</STRONG>
302
303
304 </PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
305        The routines <STRONG>can_change_color</STRONG> and <STRONG>has_colors</STRONG>  return  <STRONG>TRUE</STRONG>
306        or <STRONG>FALSE</STRONG>.
307
308        All other routines return the integer <STRONG>ERR</STRONG> upon failure and
309        an <STRONG>OK</STRONG> (SVr4 specifies only "an integer  value  other  than
310        <STRONG>ERR</STRONG>") upon successful completion.
311
312        X/Open  defines  no error conditions.  This implementation
313        will return <STRONG>ERR</STRONG> on attempts to use  color  values  outside
314        the range <STRONG>0</STRONG> to COLORS-1 (except for the default colors ex-
315        tension), or use color pairs outside the range <STRONG>0</STRONG>  to  <STRONG>COL-</STRONG>
316        <STRONG>OR_PAIRS-1</STRONG>.   Color  values  used in <STRONG>init_color</STRONG> must be in
317        the range <STRONG>0</STRONG> to <STRONG>1000</STRONG>.  An error is returned from all  func-
318        tions  if the terminal has not been initialized.  An error
319        is returned from secondary functions such as <STRONG>init_pair</STRONG>  if
320        <STRONG>start_color</STRONG> was not called.
321
322           <STRONG>init_color</STRONG>
323                returns  an error if the terminal does not support
324                this feature, e.g., if the <STRONG>initialize_color</STRONG>  capa-
325                bility is absent from the terminal description.
326
327           <STRONG>start_color</STRONG>
328                returns  an error if the color table cannot be al-
329                located.
330
331
332 </PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
333        In the <STRONG>ncurses</STRONG> implementation, there is a  separate  color
334        activation flag, color palette, color pairs table, and as-
335        sociated COLORS and COLOR_PAIRS counts  for  each  screen;
336        the  <STRONG>start_color</STRONG> function only affects the current screen.
337        The SVr4/XSI interface is not really designed with this in
338        mind,  and  historical  implementations  may  use a single
339        shared color palette.
340
341        Note that setting an implicit background color via a color
342        pair  affects  only character cells that a character write
343        operation explicitly touches.  To  change  the  background
344        color  used  when parts of a window are blanked by erasing
345        or scrolling operations, see <STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3x)</A></STRONG>.
346
347        Several caveats apply on 386 and 486  machines  with  VGA-
348        compatible graphics:
349
350        <STRONG>o</STRONG>   COLOR_YELLOW  is  actually  brown.  To get yellow, use
351            COLOR_YELLOW combined with the <STRONG>A_BOLD</STRONG> attribute.
352
353        <STRONG>o</STRONG>   The A_BLINK attribute should in theory cause the back-
354            ground  to  go  bright.  This often fails to work, and
355            even some cards for which it mostly works (such as the
356            Paradise  and compatibles) do the wrong thing when you
357            try to set a bright "yellow"  background  (you  get  a
358            blinking yellow foreground instead).
359
360        <STRONG>o</STRONG>   Color RGB values are not settable.
361
362
363 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
364        This  implementation  satisfies XSI Curses's minimum maxi-
365        mums for <STRONG>COLORS</STRONG> and <STRONG>COLOR_PAIRS</STRONG>.
366
367        The <STRONG>init_pair</STRONG> routine accepts  negative  values  of  fore-
368        ground   and  background  color  to  support  the  <STRONG>use_de-</STRONG>
369        <STRONG>fault_colors</STRONG> extension, but only if that routine has  been
370        first invoked.
371
372        The  assumption that <STRONG>COLOR_BLACK</STRONG> is the default background
373        color for all terminals can  be  modified  using  the  <STRONG>as-</STRONG>
374        <STRONG>sume_default_colors</STRONG> extension.
375
376        This  implementation  checks  the  pointers, e.g., for the
377        values returned by  <STRONG>color_content</STRONG>  and  <STRONG>pair_content</STRONG>,  and
378        will treat those as optional parameters when null.
379
380
381 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
382        <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>,  <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>,  <STRONG><A HREF="curs_attr.3x.html">curs_attr(3x)</A></STRONG>,  <STRONG>curs_vari-</STRONG>
383        <STRONG><A HREF="curs_variables.3x.html">ables(3x)</A></STRONG>, <STRONG><A HREF="default_colors.3x.html">default_colors(3x)</A></STRONG>
384
385
386
387                                                          <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>
388 </PRE>
389 <div class="nav">
390 <ul>
391 <li><a href="#h2-NAME">NAME</a></li>
392 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
393 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
394 <ul>
395 <li><a href="#h3-Overview">Overview</a></li>
396 <li><a href="#h3-Color-Rendering">Color Rendering</a></li>
397 <li><a href="#h3-Routine-Descriptions">Routine Descriptions</a></li>
398 <li><a href="#h3-Colors">Colors</a></li>
399 </ul>
400 </li>
401 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
402 <li><a href="#h2-NOTES">NOTES</a></li>
403 <li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
404 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
405 </ul>
406 </div>
407 </BODY>
408 </HTML>