add_wch, wadd_wch, mvadd_wch, mvwadd_wch, echo_wchar, wecho_wchar − add a complex character and rendition to a curses window, then advance the cursor


#include <ncurses/curses.h>

int add_wch( const cchar_t *wch );
int wadd_wch( WINDOW *
win, const cchar_t *wch );
int mvadd_wch( int
y, int x, const cchar_t *wch );
int mvwadd_wch( WINDOW *
win, int y, int x, const cchar_t *wch );
int echo_wchar( const cchar_t *
wch );
int wecho_wchar( WINDOW *
win, const cchar_t *wch );


The add_wch, wadd_wch, mvadd_wch, and mvwadd_wch functions put the complex character wch into the given window at its current position, which is then advanced. These functions perform wrapping and special-character processing as follows:

If wch refers to a spacing character, then any previous character at that location is removed. A new character specified by wch is placed at that location with rendition specified by wch. The cursor then advances to the next spacing character on the screen.

If wch refers to a non-spacing character, all previous characters at that location are preserved. The non-spacing characters of wch are added to the spacing complex character, and the rendition specified by wch is ignored.

If the character part of wch is a tab, newline, backspace or other control character, the window is updated and the cursor moves as if addch were called.

The echo_wchar function is functionally equivalent to a call to add_wch followed by a call to refresh. Similarly, the wecho_wchar is functionally equivalent to a call to wadd_wch followed by a call to wrefresh. The knowledge that only a single character is being output is taken into consideration and, for non-control characters, a considerable performance gain might be seen by using the *echo* functions instead of their equivalents.

Line Graphics
Like addch(3X), addch_wch accepts symbols which make it simple to draw lines and other frequently used special characters. These symbols correspond to the same VT100 line-drawing set as addch(3X).

The wide-character configuration of ncurses also defines symbols for thick- and double-lines:


All routines return the integer ERR upon failure and OK on success.

Functions with a "mv" prefix first perform a cursor movement using wmove, and return an error if the position is outside the window, or if the window pointer is null.


Note that add_wch, mvadd_wch, mvwadd_wch, and echo_wchar may be macros.


All of these functions are described in the XSI Curses standard, Issue 4. The defaults specified for line-drawing characters apply in the POSIX locale.

X/Open Curses makes it clear that the WACS_ symbols should be defined as a pointer to cchar_t data, e.g., in the discussion of border_set. A few implementations are problematic:

NetBSD curses defines the symbols as a wchar_t within a cchar_t.

HPUX curses equates some of the ACS_ symbols to the analogous WACS_ symbols as if the ACS_ symbols were wide characters. The misdefined symbols are the arrows and other symbols which are not used for line-drawing.

X/Open Curses does not define symbols for thick- or double-lines. SVr4 curses implementations defined their line-drawing symbols in terms of intermediate symbols. This implementation extends those symbols, providing new definitions which are not in the SVr4 implementations.


ncurses(3NCURSES), addch(3NCURSES), attr(3NCURSES), clear(3NCURSES), outopts(3NCURSES), refresh(3NCURSES), putwc(3)

More Linux Commands

pvchange(8) - change attributes of a physical volume........
pvchange allows you to change the allocation permissions of one or more physical volumes. OPTIONS See lvm(8) for common options. -a, --all If PhysicalVolumePath

Tk_NameOfCapStyle(3) - translate between strings and cap sty
Tk_GetCapStyle places in *capPtr the X cap style corresponding to string. This will be one of the values CapButt, CapProjecting, or CapRound. Cap styles are typ

recno(3) - record number database access method (Man Page)
recno.3 - Note well: This page documents interfaces provided in glibc up until version 2.1. Since version 2.2, glibc no longer provides these interfaces. Probab

glPrioritizeTextures(3gl) - set texture residence priority
glPrioritizeTextures assigns the n texture priorities given in priorities to the n textures named in textures. The GL establishes a working set of textures that

XDrawLines(3) - draw lines, polygons, and line structure....
The XDrawLine function uses the components of the specified GC to draw a line between the specified set of points (x1, y1) and (x2, y2). It does not perform joi

pnmcut(1) - replaced by pamcut (Commands - Linux man page)
This program is part of Netpbm(1) pnmcut was obsoleted by pamcut(1) , introduced with Netpbm 9.20 (May 2001). pamcut is backward compatible with pnmcut, plus ad

resetty_sp(3ncurses) - curses screen-pointer extension......
This implementation can be configured to provide a set of functions which improve the ability to manage multiple screens. This feature can be added to any of th

menu_attributes(3menu) - color and attribute control for men
The function set_menu_fore sets the foreground attribute of menu. This is the highlight used for selected menu items. menu_fore returns the foreground attribute

attrset(3ncurses) - curses character and window attribute co
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 windo

git-diff-tree(1) - Compares the content and mode of blobs fo
Compares the content and mode of the blobs found via two tree objects. If there is only one &lt;tree-ish&gt; given, the commit is compared with its parents (see --std

global(n) - Access global variables - Linux manual page.....
This command has no effect unless executed in the context of a proc body. If the global command is executed in the context of a proc body, it creates local vari

snmpbulkget(1) - communicates with a network entity using SN
snmpbulkget is an SNMP application that uses the SNMP GETBULK request to query a network entity efficiently for information. One or more object identifiers (OID

We can't live, work or learn in freedom unless the software we use is free.