<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<!-- 
  ****************************************************************************
  * Copyright (c) 1998-2005,2006 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.20 2006/12/24 15:02:53 tom Exp @
-->
<HTML>
<HEAD>
<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>default_colors 3x</H1>
<HR>
<PRE>
<!-- Manpage converted by man2html 3.0.1 -->
<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>NAME</H2><PRE>
       <STRONG>use_default_colors</STRONG>, <STRONG>assume_default_colors</STRONG> - use terminal's
       default colors


</PRE>
<H2>SYNOPSIS</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>DESCRIPTION</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>RETURN VALUE</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 found,  this  causes  an
       error as well.


</PRE>
<H2>NOTES</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>PORTABILITY</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>SEE ALSO</H2><PRE>
       <STRONG><A HREF="curs_color.3x.html">curs_color(3x)</A></STRONG>, <STRONG><A HREF="ded.1.html">ded(1)</A></STRONG>.


</PRE>
<H2>AUTHOR</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>
<HR>
<ADDRESS>
Man(1) output converted with
<a href="http://www.oac.uci.edu/indiv/ehood/man2html.html">man2html</a>
</ADDRESS>
</BODY>
</HTML>
