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