'\" t
.\"***************************************************************************
.\" Copyright (c) 1998-2013,2015 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.                                                           *
.\"***************************************************************************
.\"
.\" $Id: curs_attr.3x,v 1.40 2015/07/20 23:35:38 tom Exp $
.TH curs_attr 3X ""
.na
.hy 0
.SH NAME
\fBattroff\fR,
\fBwattroff\fR,
\fBattron\fR,
\fBwattron\fR,
\fBattrset\fR,
\fBwattrset\fR,
\fBcolor_set\fR,
\fBwcolor_set\fR,
\fBstandend\fR,
\fBwstandend\fR,
\fBstandout\fR,
\fBwstandout\fR,
\fBattr_get\fR,
\fBwattr_get\fR,
\fBattr_off\fR,
\fBwattr_off\fR,
\fBattr_on\fR,
\fBwattr_on\fR,
\fBattr_set\fR,
\fBwattr_set\fR,
\fBchgat\fR,
\fBwchgat\fR,
\fBmvchgat\fR,
\fBmvwchgat\fR,
\fBPAIR_NUMBER\fR \- \fBcurses\fR character and window attribute control routines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.br
\fBint attroff(int \fP\fIattrs);\fR
.br
\fBint wattroff(WINDOW *\fP\fIwin\fP\fB, int \fP\fIattrs\fP\fB);\fR
.br
\fBint attron(int \fP\fIattrs\fP\fB);\fR
.br
\fBint wattron(WINDOW *\fP\fIwin\fP\fB, int \fP\fIattrs\fP\fB);\fR
.br
\fBint attrset(int \fP\fIattrs\fP\fB);\fR
.br
\fBint wattrset(WINDOW *\fP\fIwin\fP\fB, int \fP\fIattrs\fP\fB);\fR
.br
\fBint color_set(short \fP\fIcolor_pair_number\fP\fB, void* \fP\fIopts\fP\fB);\fR
.br
\fBint wcolor_set(WINDOW *\fP\fIwin\fP\fB, short \fP\fIcolor_pair_number\fP\fB,\fR
      \fBvoid* \fP\fIopts);\fR
.br
\fBint standend(void);\fR
.br
\fBint wstandend(WINDOW *\fP\fIwin\fP\fB);\fR
.br
\fBint standout(void);\fR
.br
\fBint wstandout(WINDOW *\fP\fIwin\fP\fB);\fR
.br
\fBint attr_get(attr_t *\fP\fIattrs\fP\fB, short *\fP\fIpair\fP\fB, void *\fP\fIopts\fP\fB);\fR
.br
\fBint wattr_get(WINDOW *\fP\fIwin\fP\fB, attr_t *\fP\fIattrs\fP\fB, short *\fP\fIpair\fP\fB,\fR
       \fBvoid *\fP\fIopts\fP\fB);\fR
.br
\fBint attr_off(attr_t \fP\fIattrs\fP\fB, void *\fP\fIopts\fP\fB);\fR
.br
\fBint wattr_off(WINDOW *\fP\fIwin\fP\fB, attr_t \fP\fIattrs\fP\fB, void *\fP\fIopts\fP\fB);\fR
.br
\fBint attr_on(attr_t \fP\fIattrs\fP\fB, void *\fP\fIopts\fP\fB);\fR
.br
\fBint wattr_on(WINDOW *\fP\fIwin\fP\fB, attr_t \fP\fIattrs\fP\fB, void *\fP\fIopts\fP\fB);\fR
.br
\fBint attr_set(attr_t \fP\fIattrs\fP\fB, short \fP\fIpair\fP\fB, void *\fP\fIopts\fP\fB);\fR
.br
\fBint wattr_set(WINDOW *\fP\fIwin\fP\fB, attr_t \fP\fIattrs\fP\fB, short \fP\fIpair\fP\fB, void *\fP\fIopts\fP\fB);\fR
.br
\fBint chgat(int \fP\fIn\fP\fB, attr_t \fP\fIattr\fP\fB, short \fP\fIcolor\fP\fB,\fR
      \fBconst void *\fP\fIopts\fP\fB);\fR
.br
\fBint wchgat(WINDOW *\fP\fIwin\fP\fB, int \fP\fIn\fP\fB, attr_t \fP\fIattr\fP\fB,\fR
      \fBshort \fP\fIcolor\fP\fB, const void *\fP\fIopts\fP\fB);\fR
.br
\fBint mvchgat(int \fP\fIy\fP\fB, int \fP\fIx\fP\fB, int \fP\fIn\fP\fB, attr_t \fP\fIattr\fP\fB,\fR
      \fBshort \fP\fIcolor\fP\fB, const void *\fP\fIopts\fP\fB);\fR
.br
\fBint mvwchgat(WINDOW *\fP\fIwin, int \fP\fIy, int \fP\fIx, int \fP\fIn,\fR
      \fBattr_t \fP\fIattr\fP\fB, short \fP\fIcolor\fP\fB, const void *\fP\fIopts\fP\fB);\fR
.br
.SH DESCRIPTION
These routines manipulate the current attributes of the named window.
The
current attributes of a window apply to all characters that are written into
the window with \fBwaddch\fR, \fBwaddstr\fR and \fBwprintw\fR.
Attributes are
a property of the character, and move with the character through any scrolling
and insert/delete line/character operations.
To the extent possible, they are
displayed as appropriate modifications to the graphic rendition of characters
put on the screen.
.SS attrset
.PP
The routine \fBattrset\fR sets the current attributes of the given window to
\fIattrs\fR.
The routine \fBattroff\fR turns off the named attributes without
turning any other attributes on or off.
The routine \fBattron\fR turns on the
named attributes without affecting any others.
The routine \fBstandout\fR is
the same as \fBattron(A_STANDOUT)\fR.
The routine \fBstandend\fR is the same
as \fBattrset(A_NORMAL)\fR or \fBattrset(0)\fR, that is, it turns off all
attributes.
.PP
The \fBattrset\fR and related routines do not affect the attributes used
when erasing portions of the window.
See \fBcurs_bkgd\fR(3X) for functions which modify the attributes used for
erasing and clearing.
.SS attr_set
The \fBattrset\fP routine is actually a legacy feature predating SVr4 curses
but kept in X/Open Curses for the same reason that SVr4 curses kept it:
compatbility.
The routine \fBattr_set\fP provides for passing a color-pair parameter.
.PP
The remaining \fBattr_\fR* functions operate exactly like the corresponding
\fBattr\fR* functions, except that they take arguments of type \fBattr_t\fR
rather than \fBint\fR.
.SS color_set
.PP
The routine \fBcolor_set\fR sets the current color of the given window to the
foreground/background combination described by the color_pair_number.
The
parameter opts is reserved for future use, applications must supply a null
pointer.
.SS attr_get
.PP
The routine \fBwattr_get\fR returns the current attribute and color pair for
the given window; \fBattr_get\fR returns the current attribute and color pair
for \fBstdscr\fR.
.PP
There is no corresponding \fBattrget\fP function as such in X/Open Curses,
although ncurses provides \fBgetattrs\fP (see curs_legacy(3x)).
.SS chgat
.PP
The routine \fBchgat\fR changes the attributes of a given number of characters
starting at the current cursor location of \fBstdscr\fR.
It does not update
the cursor and does not perform wrapping.
A character count of \-1 or greater
than the remaining window width means to change attributes all the way to the
end of the current line.
The \fBwchgat\fR function generalizes this to any
window; the \fBmvwchgat\fR function does a cursor move before acting.
In these
functions, the color argument is a color-pair index (as in the first argument
of \fIinit_pair\fR, see \fBcurs_color\fR(3X)).
The \fBopts\fR argument is not
presently used, but is reserved for the future (leave it \fBNULL\fR).
.SS Attributes
The following video attributes, defined in \fB<curses.h>\fR, can be passed to
the routines \fBattron\fR, \fBattroff\fR, and \fBattrset\fR, or OR'd with the
characters passed to \fBaddch\fR (see curs_addch(3x)).
.PP
.RS
.TS
l l
_ _ _
l l .
\fIName\fR	\fIDescription\fR
\fBA_NORMAL\fR	Normal display (no highlight)
\fBA_STANDOUT\fR	Best highlighting mode of the terminal.
\fBA_UNDERLINE\fR	Underlining
\fBA_REVERSE\fR	Reverse video
\fBA_BLINK\fR	Blinking
\fBA_DIM\fR	Half bright
\fBA_BOLD\fR	Extra bright or bold
\fBA_PROTECT\fR	Protected mode
\fBA_INVIS\fR	Invisible or blank mode
\fBA_ALTCHARSET\fR	Alternate character set
\fBA_ITALIC\fR	Italics (non-X/Open extension)
\fBA_CHARTEXT\fR	Bit-mask to extract a character
\fBCOLOR_PAIR(\fR\fIn\fR\fB)\fR	Color-pair number \fIn\fR
.TE
.RE
.PP
These video attributes are supported by \fBattr_on\fP and related functions
(which also support the attributes recognized by \fBattron\fP, etc.):
.RS
.TS
l l
_ _ _
l l .
\fIName\fR	\fIDescription\fR
\fBWA_HORIZONTAL\fR	Horizontal highlight
\fBWA_LEFT\fR	Left highlight
\fBWA_LOW\fR	Low highlight
\fBWA_RIGHT\fR	Right highlight
\fBWA_TOP\fR	Top highlight
\fBWA_VERTICAL\fR	Vertical highlight
.TE
.RE
.PP
For consistency
.PP
The following macro is the reverse of \fBCOLOR_PAIR(\fR\fIn\fR\fB)\fR:
.PP
.br
\fBPAIR_NUMBER(\fR\fIattrs\fR) Returns the pair number associated
                   with the \fBCOLOR_PAIR(\fR\fIn\fR\fB)\fR attribute.
.br
.PP
The return values of many of these routines are not meaningful (they are
implemented as macro-expanded assignments and simply return their argument).
The SVr4 manual page claims (falsely) that these routines always return \fB1\fR.
.SH NOTES
Note that \fBattroff\fR, \fBwattroff\fR, \fBattron\fR, \fBwattron\fR,
\fBattrset\fR, \fBwattrset\fR, \fBstandend\fR and \fBstandout\fR may be macros.
.PP
\fBCOLOR_PAIR\fP values can only be OR'd with attributes if the pair
number is less than 256.
The alternate functions such as \fBcolor_set\fP can pass a color pair
value directly.
However, ncurses ABI 4 and 5 simply OR this value within the alternate functions.
You must use ncurses ABI 6 to support more than 256 color pairs.
.SH PORTABILITY
These functions are supported in the XSI Curses standard, Issue 4.
The
standard defined the dedicated type for highlights, \fBattr_t\fR, which is not
defined in SVr4 curses.
The functions taking \fBattr_t\fR arguments are
not supported under SVr4.
.PP
The XSI Curses standard states that whether the traditional functions
\fBattron\fR/\fBattroff\fR/\fBattrset\fR can manipulate attributes other than
\fBA_BLINK\fR, \fBA_BOLD\fR, \fBA_DIM\fR, \fBA_REVERSE\fR, \fBA_STANDOUT\fR, or
\fBA_UNDERLINE\fR is "unspecified".
Under this implementation as well as
SVr4 curses, these functions correctly manipulate all other highlights
(specifically, \fBA_ALTCHARSET\fR, \fBA_PROTECT\fR, and \fBA_INVIS\fR).
.PP
This implementation provides the \fBA_ITALIC\fP attribute for terminals
which have the \fIenter_italics_mode\fP (sitm) and \fIexit_italics_mode\fP (ritm) capabilities.
Italics are not mentioned in X/Open Curses.
Unlike the other video attributes, \fBI_ITALIC\fP is unrelated
to the \fIset_attributes\fP capabilities.
This implementation makes the assumption that
\fIexit_attribute_mode\fP may also reset italics.
.PP
XSI Curses added the new entry points, \fBattr_get\fR, \fBattr_on\fR,
\fBattr_off\fR, \fBattr_set\fR, \fBwattr_on\fR, \fBwattr_off\fR,
\fBwattr_get\fR, \fBwattr_set\fR.
These are intended to work with
a new series of highlight macros prefixed with \fBWA_\fR.
The older macros have direct counterparts in the newer set of names:
.PP
.RS
.ne 9
.TS
l l
_ _ _
l l .
\fIName\fR	\fIDescription\fR
\fBWA_NORMAL\fR	Normal display (no highlight)
\fBWA_STANDOUT\fR	Best highlighting mode of the terminal.
\fBWA_UNDERLINE\fR	Underlining
\fBWA_REVERSE\fR	Reverse video
\fBWA_BLINK\fR	Blinking
\fBWA_DIM\fR	Half bright
\fBWA_BOLD\fR	Extra bright or bold
\fBWA_ALTCHARSET\fR	Alternate character set
.TE
.RE
.PP
Very old versions of this library did not force an update of the screen
when changing the attributes.
Use \fBtouchwin\fR to force the screen to match the updated attributes.
.PP
The XSI curses standard specifies that each pair of corresponding \fBA_\fR
and \fBWA_\fR-using functions operates on the same current-highlight
information.
.PP
The XSI standard extended conformance level adds new highlights
\fBA_HORIZONTAL\fR, \fBA_LEFT\fR, \fBA_LOW\fR, \fBA_RIGHT\fR, \fBA_TOP\fR,
\fBA_VERTICAL\fR (and corresponding \fBWA_\fR macros for each).
As of August 2013,
no known terminal provides these highlights
(i.e., via the \fBsgr1\fP capability).
.SH RETURN VALUE
All routines return the integer \fBOK\fR on success, or \fBERR\fP on failure.
.PP
X/Open does not define any error conditions.
.PP
This implementation returns an error
if the window pointer is null.
The \fBwcolor_set\fP function returns an error if the color pair parameter
is outside the range 0..COLOR_PAIRS\-1.
This implementation also provides
\fBgetattrs\fR
for compatibility with older versions of curses.
.PP
Functions with a "mv" prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH SEE ALSO
.na
\fBcurses\fR(3X),
\fBcurs_addch\fR(3X),
\fBcurs_addstr\fR(3X),
\fBcurs_bkgd\fR(3X),
\fBcurs_printw\fR(3X),
\fBcurs_variables\fR(3X)
