<!-- 
  ****************************************************************************
  * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  * "Software"), to deal in the Software without restriction, including      *
  * without limitation the rights to use, copy, modify, merge, publish,      *
  * distribute, distribute with modifications, sublicense, and/or sell       *
  * copies of the Software, and to permit persons to whom the Software is    *
  * furnished to do so, subject to the following conditions:                 *
  *                                                                          *
  * The above copyright notice and this permission notice shall be included  *
  * in all copies or substantial portions of the Software.                   *
  *                                                                          *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  *                                                                          *
  * Except as contained in this notice, the name(s) of the above copyright   *
  * holders shall not be used in advertising or otherwise to promote the     *
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************
  * Author: Thomas E. Dickey 1997,1999,2000,2005
  * @Id: default_colors.3x,v 1.23 2011/01/03 21:52:27 Tim.van.der.Molen Exp @
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="generator" content="Manpage converted by man2html - see http://invisible-island.net/scripts/readme.html#others_scripts">
<TITLE>default_colors 3x</TITLE>
<link rev=made href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H1 class="no-header">default_colors 3x</H1>
<PRE>
<STRONG><A HREF="default_colors.3x.html">default_colors(3x)</A></STRONG>                                   <STRONG><A HREF="default_colors.3x.html">default_colors(3x)</A></STRONG>




</PRE>
<H2><a name="h2-NAME">NAME</a></H2><PRE>
       <STRONG>use_default_colors</STRONG>, <STRONG>assume_default_colors</STRONG> - use terminal's
       default colors


</PRE>
<H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
       <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>

       <STRONG>int</STRONG> <STRONG>use_default_colors(void);</STRONG>
       <STRONG>int</STRONG> <STRONG>assume_default_colors(int</STRONG> <STRONG>fg,</STRONG> <STRONG>int</STRONG> <STRONG>bg);</STRONG>


</PRE>
<H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
       The <EM>use</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors()</EM> and <EM>assume</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors()</EM> func-
       tions are extensions to the curses library.  They are used
       with terminals that support ISO 6429 color, or equivalent.
       These terminals allow the application to reset color to an
       unspecified default value (e.g., with SGR 39 or SGR 49).

       Applications that paint  a  colored  background  over  the
       whole  screen  do not take advantage of SGR 39 and SGR 49.
       Some applications are designed to work  with  the  default
       background,  using  colors  only  for  text.  For example,
       there are several implementations of the <STRONG>ls</STRONG> program  which
       use  colors to denote different file types or permissions.
       These "color ls" programs do not  necessarily  modify  the
       background  color, typically using only the <EM>setaf</EM> terminfo
       capability  to  set  the  foreground  color.   Full-screen
       applications  that  use default colors can achieve similar
       visual effects.

       The first function, <EM>use</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors()</EM> tells the  curses
       library  to  assign terminal default foreground/background
       colors to color number  -1.  So  init_pair(x,COLOR_RED,-1)
       will  initialize  pair  x as red on default background and
       init_pair(x,-1,COLOR_BLUE)  will  initialize  pair  x   as
       default foreground on blue.

       The  other,  <EM>assume</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors()</EM> is a refinement which
       tells which colors to paint for color pair 0.  This  func-
       tion  recognizes  a special color number -1, which denotes
       the default terminal color.

       The following are equivalent:
              <EM>use</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors();</EM>
              <EM>assume</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors(-1,-1);</EM>

       These are ncurses extensions.  For other curses  implemen-
       tations,  color  number -1 does not mean anything, just as
       for ncurses before a successful call  of  <EM>use</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>col-</EM>
       <EM>ors()</EM> or <EM>assume</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors()</EM>.

       Other  curses  implementations do not allow an application
       to modify color pair 0.  They assume that  the  background
       is COLOR_BLACK, but do not ensure that the color pair 0 is
       painted to match the assumption.  If your application does
       not use either <EM>use</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors()</EM> or <EM>assume</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>col-</EM>
       <EM>ors()</EM> ncurses will paint a white  foreground  (text)  with
       black background for color pair 0.


</PRE>
<H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
       These functions return the integer <STRONG>ERR</STRONG> upon failure and <STRONG>OK</STRONG>
       on success.  They will fail if either  the  terminal  does
       not  support  the <EM>orig</EM><STRONG>_</STRONG><EM>pair</EM> or <EM>orig</EM><STRONG>_</STRONG><EM>colors</EM> capability.  If
       the <EM>initialize</EM><STRONG>_</STRONG><EM>pair</EM> capability is not found,  this  causes
       an error as well.


</PRE>
<H2><a name="h2-NOTES">NOTES</a></H2><PRE>
       Associated  with  this  extension,  the <STRONG>init_pair</STRONG> function
       accepts negative arguments to specify  default  foreground
       or background colors.

       The  <EM>use</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors()</EM>  function  was  added to support
       <EM>ded</EM>.  This is a full-screen application which uses  curses
       to  manage only part of the screen.  The bottom portion of
       the screen, which is of adjustable size, is left uncolored
       to  display the results from shell commands.  The top por-
       tion of the screen colors filenames using  a  scheme  like
       the  "color  ls" programs.  Attempting to manage the back-
       ground color of the screen for this application would give
       unsatisfactory  results  for  a  variety of reasons.  This
       extension was devised after noting that color  xterm  (and
       similar  programs)  provides a background color which does
       not necessarily correspond to  any  of  the  ANSI  colors.
       While  a special terminfo entry could be constructed using
       nine colors, there was no mechanism provided within curses
       to  account for the related <EM>orig</EM><STRONG>_</STRONG><EM>pair</EM> and <EM>back</EM><STRONG>_</STRONG><EM>color</EM><STRONG>_</STRONG><EM>erase</EM>
       capabilities.

       The <EM>assume</EM><STRONG>_</STRONG><EM>default</EM><STRONG>_</STRONG><EM>colors()</EM> function was added to solve  a
       different  problem:  support  for applications which would
       use  environment  variables  and  other  configuration  to
       bypass  curses'  notion  of the terminal's default colors,
       setting specific values.


</PRE>
<H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
       These routines are specific to  ncurses.   They  were  not
       supported  on  Version 7, BSD or System V implementations.
       It is recommended that any code depending on them be  con-
       ditioned using NCURSES_VERSION.


</PRE>
<H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
       <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>, <STRONG>ded(1)</STRONG>.


</PRE>
<H2><a name="h2-AUTHOR">AUTHOR</a></H2><PRE>
       Thomas  Dickey  (from  an analysis of the requirements for
       color xterm for XFree86 3.1.2C, February 1996).



                                                     <STRONG><A HREF="default_colors.3x.html">default_colors(3x)</A></STRONG>
</PRE>
<div class="nav">
<ul>
<li><a href="#h2-NAME">NAME</a></li>
<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#h2-DESCRIPTION">DESCRIPTION</a></li>
<li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
<li><a href="#h2-NOTES">NOTES</a></li>
<li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
<li><a href="#h2-AUTHOR">AUTHOR</a></li>
</ul>
</div>
</BODY>
</HTML>
