diff options
Diffstat (limited to 'man/curs_addch.3x')
| -rw-r--r-- | man/curs_addch.3x | 529 |
1 files changed, 369 insertions, 160 deletions
diff --git a/man/curs_addch.3x b/man/curs_addch.3x index ad548520ce84..4fc248015698 100644 --- a/man/curs_addch.3x +++ b/man/curs_addch.3x @@ -1,6 +1,6 @@ '\" t .\"*************************************************************************** -.\" Copyright 2018-2023,2024 Thomas E. Dickey * +.\" Copyright 2018-2024,2025 Thomas E. Dickey * .\" Copyright 1998-2015,2017 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * @@ -28,8 +28,8 @@ .\" authorization. * .\"*************************************************************************** .\" -.\" $Id: curs_addch.3x,v 1.85 2024/04/20 19:03:47 tom Exp $ -.TH curs_addch 3X 2024-04-20 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls" +.\" $Id: curs_addch.3x,v 1.144 2025/11/12 01:04:12 tom Exp $ +.TH curs_addch 3X 2025-11-11 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls" .ie \n(.g \{\ .ds `` \(lq .ds '' \(rq @@ -64,33 +64,91 @@ add a \fIcurses\fP character to a window and advance the cursor \fB#include <curses.h> .PP \fBint addch(const chtype \fIch\fP); -\fBint waddch(WINDOW *\fIwin\fP, const chtype \fIch\fP); +\fBint waddch(WINDOW * \fIwin\fP, const chtype \fIch\fP); \fBint mvaddch(int \fIy\fP, int \fIx\fP, const chtype \fIch\fP); -\fBint mvwaddch(WINDOW *\fIwin\fP, int \fIy\fP, int \fIx\fP, const chtype \fIch\fP); +\fBint mvwaddch(WINDOW * \fIwin\fP, int \fIy\fP, int \fIx\fP, const chtype \fIch\fP); .PP \fBint echochar(const chtype \fIch\fP); -\fBint wechochar(WINDOW *\fIwin\fP, const chtype \fIch\fP); +\fBint wechochar(WINDOW * \fIwin\fP, const chtype \fIch\fP); +.PP +\fI/* (integer) constants */\fP +/*\fI .\|.\|. */ \fBACS_BLOCK;\fR +/*\fI .\|.\|. */ \fBACS_BOARD;\fR +/*\fI .\|.\|. */ \fBACS_BTEE;\fR +/*\fI .\|.\|. */ \fBACS_BULLET;\fR +/*\fI .\|.\|. */ \fBACS_CKBOARD;\fR +/*\fI .\|.\|. */ \fBACS_DARROW;\fR +/*\fI .\|.\|. */ \fBACS_DEGREE;\fR +/*\fI .\|.\|. */ \fBACS_DIAMOND;\fR +/*\fI .\|.\|. */ \fBACS_HLINE;\fR +/*\fI .\|.\|. */ \fBACS_LANTERN;\fR +/*\fI .\|.\|. */ \fBACS_LARROW;\fR +/*\fI .\|.\|. */ \fBACS_LLCORNER;\fR +/*\fI .\|.\|. */ \fBACS_LRCORNER;\fR +/*\fI .\|.\|. */ \fBACS_LTEE;\fR +/*\fI .\|.\|. */ \fBACS_PLMINUS;\fR +/*\fI .\|.\|. */ \fBACS_PLUS;\fR +/*\fI .\|.\|. */ \fBACS_RARROW;\fR +/*\fI .\|.\|. */ \fBACS_RTEE;\fR +/*\fI .\|.\|. */ \fBACS_S1;\fR +/*\fI .\|.\|. */ \fBACS_S9;\fR +/*\fI .\|.\|. */ \fBACS_TTEE;\fR +/*\fI .\|.\|. */ \fBACS_UARROW;\fR +/*\fI .\|.\|. */ \fBACS_ULCORNER;\fR +/*\fI .\|.\|. */ \fBACS_URCORNER;\fR +/*\fI .\|.\|. */ \fBACS_VLINE;\fR +\fI/* extensions */\fP +/*\fI .\|.\|. */ \fBACS_GEQUAL;\fR +/*\fI .\|.\|. */ \fBACS_LEQUAL;\fR +/*\fI .\|.\|. */ \fBACS_NEQUAL;\fR +/*\fI .\|.\|. */ \fBACS_PI;\fR +/*\fI .\|.\|. */ \fBACS_S3;\fR +/*\fI .\|.\|. */ \fBACS_S7;\fR +/*\fI .\|.\|. */ \fBACS_STERLING;\fR .fi .SH DESCRIPTION -.SS "Adding Characters" +.SS waddch .B \%waddch -puts the character +writes the +.I curses +character .I ch -at the cursor position of window -.IR win , +to the window +.IR win "," then advances the cursor position, analogously to the standard C library's \fI\%putchar\fP(3). \fB\%ncurses\fP(3X) describes the variants of this function. .PP -If advancement occurs at the right margin, -.bP -the cursor automatically wraps to the beginning of the next line; -and -.bP -at the bottom of the current scrolling region, -and if \fB\%scrollok\fP(3X) is enabled for -.IR win , -the scrolling region scrolls up one line. +Construct a +.I curses +character +from a +.I char +by assignment or typecast. +Subsection \*(``Video Attributes\*('' of \fB\%attron\fP(3X) describes +how to manipulate its attributes and color pair. +(A color pair selection is not honored unless initialized; +see \fB\%start_color\fP(3X).) +.PP +The object or expression +.I ch +may contain attributes and/or a color pair identifier. +(A +.I \%chtype +can be copied from place to place using \fB\%winch\fP(3X) and +.BR \%waddch .) +.I curses +defines constants to aid the manipulation of character attributes; +see \fB\%curs_attr\fP(3X). +A +.I ch +whose character component is a space, +and whose only attribute is +.BR \%A_NORMAL , +is a +.IR "blank character" "," +and therefore combines with the window's background character; +see \fB\%curs_bkgd\fP(3X). .PP If .I ch @@ -106,18 +164,16 @@ Backspace moves the cursor one character left; at the left margin of a window, it does nothing. .bP -Carriage return moves the cursor to the left margin on the current line -of the window. +Carriage return moves the cursor to the left margin on the same line of +the window. .bP Line feed does a \fB\%clrtoeol\fP(3X), -then moves the cursor to the left margin on the next line of the window, -and if \fB\%scrollok\fP(3X) is enabled for -.IR win , -scrolls the window if the cursor was already on the last line. +then advances as if from the right margin. .bP Tab advances the cursor to the next tab stop (possibly on the next line); these are placed at every eighth column by default. +.IP Alter the tab interval with the .B \%TABSIZE extension; @@ -126,33 +182,74 @@ see \fB\%curs_variables\fP(3X). If .I ch is any other nonprintable character, -it is drawn in printable form, -using the same convention as \fB\%unctrl\fP(3X). -.PP +.I curses +draws it in printable form using the same convention as +\fB\%unctrl\fP(3X). Calling \fB\%winch\fP(3X) on the location of a nonprintable character does not return the character itself, but its \fB\%unctrl\fP(3X) representation. .PP -.I ch -may contain rendering and/or color attributes, -and others can be combined with the parameter -by logically \*(``or\*(''ing with it. -(A character with its attributes can be copied from place to place -using \fB\%winch\fP(3X) and -.BR \%waddch .) -See \fB\%curs_attr\fP(3X) for values of predefined video attribute -constants that can be usefully \*(``or\*(''ed with characters. -.SS "Echoing Characters" +Adding printable characters with \fB\%waddch\fP +causes it to wrap at the right margin of the window: +.bP +If the cursor is not at the bottom of the scrolling region +and advancement occurs at the right margin, +the cursor automatically wraps to the beginning of the next line. +.bP +If the cursor is at the bottom of the scrolling region +when advancement occurs at the right margin, +and \fB\%scrollok\fP(3X) is enabled for +.IR win , +the scrolling region scrolls up one line +and the cursor wraps as above. +Otherwise, +advancement and scrolling do not occur, +and +.B \%waddch +returns +.BR ERR "." +.PP +A window's margins may coincide with the screen boundaries. +This may be a problem when +.I \%ncurses +updates the screen to match the curses window. +When their right and bottom margins coincide, +.I \%ncurses +uses different strategies to handle the variations of scrolling and wrapping +at the lower-right corner +by depending on the terminal capabilities: +.bP +If the terminal does not automatically wrap as characters +are added at the right margin +(i.e., auto right margins), +.I \%ncurses +writes the character directly. +.bP +If the terminal has auto right margins, +but also has capabilities for turning auto margins off and on, +.I \%ncurses +turns the auto margin feature off temporarily +when writing to the lower-right corner. +.bP +If the terminal has an insertion mode which can be turned off and on, +.I \%ncurses +writes the character just before the lower-right corner, +and then inserts a character to push the update into the corner. +.SS wechochar .B \%echochar and .B \%wechochar are equivalent to calling .RB \%( w ) addch followed by -.RB \%( w ) refresh . +.RB \%( w ) refresh +on +.B \%stdscr +or the specified window. .I curses -interprets these functions as a hint that only a single character is -being output; +interprets these functions as a hint to its optimizer +that only a single character cell in the window +is being altered between refreshes; for non-control characters, a considerable performance gain may be enjoyed by employing them. .\" TODO: Combine the following with the "Line Drawing" subsection of @@ -163,26 +260,31 @@ defines macros starting with .B \%ACS_ that can be used with .B \%waddch -to write line-drawing and other special characters to the screen. +to write line-drawing and other symbols to the screen. .I \%ncurses terms these .I "forms-drawing characters." -The ACS default listed below is used if the +.I curses +uses the ACS default listed below if the terminal type lacks the .B \%acs_chars -.RB ( \%acsc ) -.I \%term\%info -capability does not define a terminal-specific replacement for it, -or if the terminal and locale configuration requires Unicode to access -these characters but the library is unable to use Unicode. +.RB \%( acsc ) +capability; +that capability does not define a replacement for the character; +or if the terminal type and locale configuration +require Unicode to access these characters, +but the library is unable to use Unicode. The \*(``acsc char\*('' column corresponds to how the characters are specified in the .B \%acs_chars +.RB \%( acsc ) string capability, -and the characters in it may appear on the screen if the terminal's +and the characters in it may appear on the screen if the terminal type's database entry incorrectly advertises ACS support. The name \*(``ACS\*('' originates in the Alternate Character Set feature of the DEC VT100 terminal. .PP +.ie t .ne 4v +.el .ne 5v .TS Lb Lb Lb Lb Lb Lb Lb Lb @@ -232,26 +334,40 @@ on failure. .PP In .IR \%ncurses , -.B \%waddch -returns -.B ERR -if it is not possible to add a complete character at the cursor -position, -as when conversion of a multibyte character to a byte sequence fails, -or at least one of the resulting bytes cannot be added to the window. -See section \*(``PORTABILITY\*('' below regarding the use of -.B \%waddch -with multibyte characters. +these functions fail if +.bP +the +.I curses +screen has not been initialized, +.bP +(for functions taking a +.I \%WINDOW +pointer argument) +.I win +is a null pointer, +.bP +wrapping to a new line is impossible because \fB\%scrollok\fP(3X) has +not been called on +.I win +(or +.BR \%stdscr "," +as applicable) +when a write to its bottom right location is attempted, +or +.bP +it is not possible to add a complete character at the cursor position. .PP +The last may be due to different causes: +.bP +conversion of a wide character to a multibyte character sequence can +fail, +or +.bP +at least one of the bytes resulting from wide character conversion to a +multibyte character sequence cannot be added to the window. +See section \*(``PORTABILITY\*('' below regarding the use of .B \%waddch -can successfully write a character at the bottom right location of the -window. -However, -.I \%ncurses -returns -.B ERR -if \fB\%scrollok\fP(3X) is not enabled in that event, -because it is not possible to wrap to a new line. +with wide characters. .PP Functions prefixed with \*(``mv\*('' first perform cursor movement and fail if the position @@ -259,69 +375,163 @@ fail if the position .IR x ) is outside the window boundaries. .SH NOTES -.BR \%addch , -.BR \%mvaddch , -.BR \%mvwaddch , +.BR \%addch "," +.BR \%mvaddch "," +.BR \%mvwaddch "," and .B \%echochar may be implemented as macros. +.SH EXTENSIONS +The symbols +.IR \%ACS_S3 "," +.IR \%ACS_S7 "," +.IR \%ACS_LEQUAL "," +.IR \%ACS_GEQUAL "," +.IR \%ACS_PI "," +.IR \%ACS_NEQUAL "," +and +.I \%ACS_STERLING +were not documented in any publicly released System\ V +.\" And did not exist yet as late as SVr4. +.\" https://github.com/ryanwoodsmall/oldsysv/blob/master/\ +.\" sysvr4/svr4/lib/xlibcurses/screen/curses.ed +and are not standard. +However, +many publicly available +.I \%term\%info +entries include +.B \%acs_chars +.RB \%( acsc ) +capabilities in which their key characters +.RB ( pryz{|} ) +are embedded, +and a second-hand list of their character descriptions has come to light, +which identifies them as VT100 special characters. +.PP +The DEC Special Character and Line Drawing Set (VT100) is indexed by +an ASCII character in the range 96 (`) to 126 (~). +That index character is part of the definition for the curses +.B \%ACS_ +symbols. +The VT100 special characters can be categorized in three groups: +.bP +useful graphic symbols with a standard +.B \%ACS_ +symbol, +(e.g., the line-drawing symbols), +.bP +possibly useful characters (these non-standard symbols), +.bP +representations of control characters (e.g., newline and vertical tabulation). +.PP +A few +.B \%ACS_ +symbols do not fit into DEC's VT100 scheme. +The AT&T Teletype 5410v1 arrow symbols and +.B \%ACS_BLOCK +use indices outside the range 96 to 126. +Two of the Teletype symbols use indices in that range, +with different meaning versus the VT100: +.bP +.B \%ACS_BOARD +corresponds to the VT100 symbol for newline +.bP +.B \%ACS_LANTERN +corresponds to the VT100 symbol for vertical tabulation +.PP +AT&T defined +.B \%ACS_ +names for the most useful graphic symbols, +as well as for its own. +Its header file commented: +.PP +.EX +.nf +.\" Fill at 65 columns in your editor. +/* + * Standard alternate character set. The current ACS world is + * evolving, so we support only a widely available subset: the + * line drawing characters from the VT100, plus a few from the + * Teletype 5410v1. Eventually there may be support of more + * sophisticated ACS line drawing, such as that in the Teletype + * 5410, the HP line drawing set, and the like. There may be + * support for some non line oriented characters as well. + * + * Line drawing ACS names are of the form ACS_trbl, where t is + * the top, r is the right, b is the bottom, and l is the left. + * t, r, b, and l might be B (blank), S (single), D (double), or + * T (thick). The subset defined here only uses B and S. + */ +.fi +.EE +.PP +Although these less-useful graphic symbols were not given names, +they were used in +.I \%terminfo +entries. +The +.I \%ncurses +developers invented ACS-prefixed names for them. +.\" in v1_9_5_950928_e227 .SH PORTABILITY -X/Open Curses, -Issue 4 describes these functions. +Applications employing +.I \%ncurses +extensions should condition their use on the visibility of the +.B \%NCURSES_VERSION +preprocessor macro. +.PP +X/Open Curses Issue\ 4 describes these functions. It specifies no error conditions for them. .PP -SVr4 -.I curses -describes a successful return value only as +SVr4 describes a successful return value only as \*(``an integer value other than -.BR ERR \*(''. +.IR ERR \*(''. \" Courier roman in source; SVID 4, vol. 3, p. 472 .PP The defaults specified for forms-drawing characters apply in the POSIX locale. .SS "ACS Symbols" X/Open Curses states that the -.B \%ACS_ +.I \%ACS_ definitions are .I char constants. -.PP Some implementations are problematic. .bP Solaris .IR curses , for example, -define the ACS symbols as constants; +defines the ACS symbols as constants; others define them as elements of an array. .IP -This implementation uses an array, -.BR \%acs_map , -as did SVr4 -.IR curses . -NetBSD also uses an array, +SVr4 used an array, +.IR \%acs_map , +as does +.IR \%ncurses "." +NetBSD +.I curses +also uses an array, actually named -.BR \%_acs_char , -with a -.B \%#define -for compatibility. +.IR \%_acs_char , +with a \%\*(``#define\*('' for compatibility. .bP HP-UX .I curses equates some of the -.B \%ACS_ +.I \%ACS_ symbols to the analogous -.B \%WACS_ +.I \%WACS_ symbols as if the -.B \%ACS_ +.I \%ACS_ symbols were wide characters (see \fB\%curs_add_wch\fP(3X)). The misdefined symbols are the arrows and others that are not used for line drawing. .bP X/Open Curses -(Issues 2 through 7) +(Issues\ 2 through 7) has a typographical error for the -.B \%ACS_LANTERN +.I \%ACS_LANTERN symbol, equating its \*(``VT100+ Character\*('' to \*(``I\*('' (capital I), while the header files for SVr4 @@ -341,39 +551,16 @@ its (AT&T PC6300 with EMOTS Terminal Emulator) description uses lowercase i. .PP -Some ACS symbols -.RB ( \%ACS_S3 , -.BR \%ACS_S7 , -.BR \%ACS_LEQUAL , -.BR \%ACS_GEQUAL , -.BR \%ACS_PI , -.BR \%ACS_NEQUAL , -and -.BR \%ACS_STERLING ) -were not documented in any publicly released System\ V. -However, -many publicly available -.I \%term\%info -entries include -.B \%acsc -strings in which their key characters -.BR ( pryz{|} ) -are embedded, -and a second-hand list of their character descriptions has come to -light. -The -.I \%ncurses -developers invented ACS-prefixed names for them. -.PP The .I displayed values of -.B \%ACS_ +.I \%ACS_ constants depend on .bP the .I \%ncurses -ABI\(emfor example, +ABI \(em +for example, wide-character versus non-wide-character configurations (the former is capable of displaying Unicode while the latter is not), and @@ -386,89 +573,111 @@ the terminal is unable to display forms-drawing characters by using UTF-8; see the discussion of the .I \%NCURSES_NO_UTF8_ACS -environment variable in \fB\%ncurses\fP(3X)). +environment variable in \fB\%ncurses\fP(3X). .SS "Character Set" X/Open Curses assumes that the parameter passed to -.B \%waddch +.I \%waddch contains a single character. -As discussed in \fB\%curs_attr\fP(3X), -that character may have been more than eight bits wide in an SVr3 or +That character may have been more than eight bits wide in an SVr3 or SVr4 implementation, -but in the X/Open Curses model, -the details are not given. -The important distinction between SVr4 -.I curses -and X/Open Curses is that the latter separates non-character information -(attributes and color) -from the character code, -which SVr4 packs into a +but X/Open Curses leaves the width of a non-wide character code +unspecified. +The standard further does not specify the internal structure of a +.IR chtype "," +though the use of bitwise operators to combine the character code with +attributes and a color pair identifier into a .I \%chtype for passage to -.BR \%waddch . +.I \%waddch +is common. +A portable application uses only the macros discussed in +\fB\%curs_attr\fP(3X) to manipulate a +.IR \%chtype "." .PP In .IR \%ncurses , .I \%chtype -holds an eight-bit character. -But the library allows a multibyte character to be passed in a +holds an eight-bit character, +but the library allows a multibyte character sequence to be passed via a succession of calls to -.BR \%waddch . +.IR \%waddch "." Other implementations do not; a -.B \%waddch +.I \%waddch call transmits exactly one character, which may be rendered in one or more screen locations depending on -whether it is printable. -.PP -Depending on the locale settings, +whether it is printable +(see \fB\%unctrl\fP(3X)). +Depending on the locale, .I \%ncurses inspects the byte passed in each -.B \%waddch -call, -and checks whether the latest call continues a multibyte sequence. +.I \%waddch +call and checks whether the latest call continues a multibyte character. When a character is -.IR complete , +.IR complete "," .I \%ncurses displays the character and advances the cursor. -.PP If the calling application interrupts the succession of bytes in -a multibyte character sequence by changing the current location\(emfor -example, -with \fB\%wmove\fP(3X)\(em\c +a multibyte character sequence by changing the current location \(em +for example, +with \fB\%wmove\fP(3X) \(em .I \%ncurses discards the incomplete character. .PP For portability to other implementations, -do not rely upon this behavior. +do not rely upon the foregoing behavior. Check whether a character can be represented as a single byte in the current locale. .bP If it can, call either -.B \%waddch -or \fB\%wadd_wch\fP(3X). +.I \%waddch +or +.IR \%wadd_wch "." .bP If it cannot, use only -\fB\%wadd_wch\fP(3X). -.SS TABSIZE -SVr4 and other versions of -.I curses -implement the -.B \%TABSIZE -variable, -but X/Open Curses does not specify it -(see \fB\%curs_variables\fP(3X)). +.IR \%wadd_wch "." +.SH HISTORY +4BSD (1980) +introduced +.I \%waddch +and its variants. +.PP +SVr3 (1987) +added the +.I \%echochar +and +.I \%wechochar +functions and most of the +.I ACS_ +constants, +except for +.IR \%ACS_GEQUAL "," +.IR \%ACS_LEQUAL "," +.IR \%ACS_NEQUAL "," +.IR \%ACS_PI "," +.IR \%ACS_S3 "," +.IR \%ACS_S7 "," +and +.IR \%ACS_STERLING "." +.PP +.I \%ncurses +1.9.6 (1995) +furnished the remaining +.I ACS_ +constants. .SH SEE ALSO \fB\%curs_add_wch\fP(3X) describes comparable functions of the .I \%ncurses library in its wide-character configuration -.RI ( \%ncursesw ). +.RI \%( ncursesw ). .PP \fB\%curses\fP(3X), \fB\%curs_addchstr\fP(3X), \fB\%curs_addstr\fP(3X), \fB\%curs_attr\fP(3X), +\fB\%curs_bkgd\fP(3X), \fB\%curs_clear\fP(3X), \fB\%curs_inch\fP(3X), \fB\%curs_outopts\fP(3X), |
