1notcurses(3)                                                      notcurses(3)
2
3
4

NAME

6       notcurses - TUI library for modern terminal emulators
7

SYNOPSIS

9       #include   <notcurses/notcurses.h>  or  #include  <notcurses/notcurses-
10       core.h>
11
12       -lnotcurses-core -lnotcurses or -lnotcurses-core
13

DESCRIPTION

15       Notcurses builds atop the terminfo(5) abstraction layer to provide rea‐
16       sonably  portable  vivid character displays.  It is an intellectual de‐
17       scendant of ncurses(3NCURSES), but goes beyond that  library  (and  the
18       X/Open Curses API it implements).
19
20       A  program wishing to use Notcurses will need to link it, ideally using
21       the output of pkg-config --libs notcurses (see pkg-config(1)).   It  is
22       advised  to  compile  with the output of pkg-config --cflags notcurses.
23       If using CMake, a support file is provided,  and  can  be  accessed  as
24       Notcurses  (see  cmake(1)).  If multimedia capabilities are not needed,
25       it is possible to link against a  minimal  Notcurses  using  pkg-config
26       --libs notcurses-core.
27
28       notcurses_init(3)  can  then be used to initialize a Notcurses instance
29       for a given FILE (usually stdout, usually attached to a terminal).
30
31   Construction
32       Before calling into Notcurses—and usually as one of the first calls  of
33       the  program—be sure to call setlocale with an appropriate UTF-8 LC_ALL
34       locale.  It is usually appropriate to use setlocale(LC_ALL, ""),  rely‐
35       ing  on  the  user  to  properly  set  the  LANG  environment variable.
36       Notcurses will refuse to start if nl_langinfo(3) doesn't indicate UTF-8
37       or  ANSI_X3.4-1968 (aka US-ASCII).  Be aware that capabilities are sub‐
38       stantially reduced in ASCII.
39
40       notcurses_init(3) accepts a  struct  notcurses_options  allowing  fine-
41       grained  control  of Notcurses behavior, including signal handlers, al‐
42       ternative screens, and overriding the  TERM  environment  variable.   A
43       terminfo entry appropriate for the actual terminal must be available.
44
45       ncdirect_init(3) makes available a restricted subset of Notcurses func‐
46       tionality.  This subset is intended to be interleaved with  user-gener‐
47       ated  output,  and  is limited to coloring and styling.  Direct mode is
48       documented in notcurses_direct(3).
49
50   Output
51       All output is performed on struct ncplanes (see Ncplanes below).   Out‐
52       put  is  not visible until explicitly rendered via notcurses_render(3).
53       It is safe to output from multiple  threads.   Information  on  drawing
54       functions is available at notcurses_output(3).
55
56   Input
57       Notcurses  supports  input  from keyboards (via stdin) and pointing de‐
58       vices (via a broker such as GPM, X, or Wayland).  Input is delivered as
59       32-bit  Unicode  code  points.  Synthesized events such as mouse button
60       presses and arrow keys are mapped into Unicode's Supplementary  Private
61       Use  Area-B  (https://unicode.org/charts/PDF/U100000.pdf).  Information
62       on  input  is  available  at  notcurses_input(3).   The  included  tool
63       notcurses-input(1) can be used to test input decoding.
64
65   Ncpiles
66       A  given notcurses context is made up of one or more piles.  Piles pro‐
67       vide distinct rendering contexts: a thread can be rendering or mutating
68       one  pile, while another thread concurrently renders or mutates another
69       pile.  A pile is made up of planes, totally ordered on  a  z-axis.   In
70       addition  to the z-ordering, the planes of a pile are bound in a forest
71       (a set of directed, acyclic graphs).  Those planes which are not  bound
72       to  some  other  plane constitute the root planes of a pile.  A pile is
73       destroyed when all its planes are destroyed, or moved to  other  piles.
74       Since the standard plane (see below) always exists, and cannot be moved
75       to another pile, one pile always exists, known as the standard pile.
76
77   Ncplanes
78       Following initialization, a single ncplane exists, the "standard plane"
79       (see  notcurses_stdplane(3)).  This plane cannot be destroyed nor manu‐
80       ally resized, and is always exactly as large  as  the  screen  (if  run
81       without a TTY, the "screen" is assumed to be 80x24 cells).  Further nc‐
82       planes can be created with ncplane_new(3).  A total  z-ordering  always
83       exists  on  the set of ncplanes, and new ncplanes are placed at the top
84       of the z-buffer.  Ncplanes can be larger, smaller, or the same size  as
85       the physical screen, and can be placed anywhere relative to it (includ‐
86       ing entirely off-screen).  Ncplanes are made up of nccells (see NcCells
87       below).  Information on ncplanes is available at notcurses_plane(3).
88
89   NcCells
90       nccells make up the framebuffers backing each ncplane, one cell per co‐
91       ordinate, one extended grapheme cluster (see unicode(7)) per cell.   An
92       nccell  consists  of  a gcluster (either a directly-encoded 7-bit ASCII
93       character  (see  ascii(7)),  or  a  25-bit  index  into  the  ncplane's
94       egcpool),  a  set  of  attributes,  and two channels (one for the fore‐
95       ground, and one for the background—see notcurses_channels(3)).   Infor‐
96       mation on cells is available at notcurses_cell(3).
97
98       It  is  not  usually  necessary for users to interact directly with nc‐
99       cells.  They are typically encountered when retrieving  data  from  nc‐
100       planes  or  the  rendered  scene  (see  e.g.   ncplane_at_yx(3)), or to
101       achieve peak performance when a particular EGC is heavily reused within
102       a plane.
103
104   Widgets
105       A few high-level widgets are included, all built atop ncplanes:
106
107       · notcurses_fds(3) for dumping file descriptors/subprocesses to a plane
108
109       · notcurses_menu(3) for menu bars at the top or bottom of the screen
110
111       · notcurses_multiselector(3) for selecting one or more items from a set
112
113       · notcurses_plot(3) for drawing histograms and lineplots
114
115       · notcurses_progbar(3) for drawing progress bars
116
117       · notcurses_reader(3) for free-form input data
118
119       · notcurses_reel(3) for hierarchal display of block-based data
120
121       · notcurses_selector(3) for selecting one item from a set
122
123   Threads
124       Notcurses explicitly supports use in multithreaded environments, but it
125       does not itself perform any locking.
126
127       · Only one pile's rendered frame can be rasterized at a time, and it is
128         not safe to concurrently render that pile.  It is safe to rasterize a
129         frame while rendering some other pile.
130
131       · It is otherwise always  safe  to  operate  concurrently  on  distinct
132         piles.
133
134       · It  is  not  safe  to render a pile while concurrently modifying that
135         pile.
136
137       · It is safe to output to multiple distinct ncplanes at the same  time,
138         even within the same pile.
139
140       · It  is safe to output to ncplanes while adding or deleting some other
141         ncplane.
142
143       · It is not safe for multiple threads to output to the same ncplane.
144
145       · It is not safe to add, delete, or reorder ncplanes  within  a  single
146         pile from multiple threads.
147
148       Only  one  thread  may  call  notcurses_getc or any other input-related
149       thread at a time, but it is safe to call for input while another thread
150       renders.
151
152       Since  multiple  threads can concurrently manipulate distinct ncplanes,
153       peak performance might require dividing the screen into several planes,
154       and manipulating them from multiple threads.
155
156   Destruction
157       Before  exiting,  notcurses_stop(3)  should  be called.  In addition to
158       freeing up resources, this is necessary to restore the  terminal  to  a
159       state  useful  for  the  shell.  By default, notcurses_init(3) installs
160       signal handlers to catch all signals which would normally terminate the
161       process.  The new handlers will try to call notcurses_stop(3), and then
162       propagate the received signal to the previous action.
163

NOTES

165       When using the C++ wrappers, NCPP_EXCEPTIONS_PLEASE can be  defined  in
166       order to turn most error returns into exceptions.
167

SEE ALSO

169       ncurses(3NCURSES), notcurses-demo(1), notcurses-input(1), notcurses_ca‐
170       pabilities(3), notcurses_cell(3), notcurses_channels(3),  notcurses_di‐
171       rect(3),    notcurses_fade(3),   notcurses_fds(3),   notcurses_init(3),
172       notcurses_input(3),  notcurses_lines(3),  notcurses_menu(3),   notcurs‐
173       es_multiselector(3),     notcurses_output(3),     notcurses_palette(3),
174       notcurses_plane(3), notcurses_plot(3),  notcurses_progbar(3),  notcurs‐
175       es_reader(3),  notcurses_reel(3),  notcurses_refresh(3), notcurses_ren‐
176       der(3),   notcurses_selector(3),   notcurses_stats(3),   notcurses_std‐
177       plane(3),    notcurses_stop(3),    notcurses_visual(3),    terminfo(5),
178       ascii(7), utf-8(7), unicode(7)
179

AUTHORS

181       nick black <nickblack@linux.com>.
182
183
184
185                                    v2.2.3                        notcurses(3)
Impressum