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       Only one context can be active in a process at a time,  whether  direct
51       mode (struct ncdirect) or rendered mode (struct notcurses).
52
53   Output
54       All  output is performed on struct ncplanes (see Ncplanes below).  Out‐
55       put is not visible until explicitly rendered  via  notcurses_render(3).
56       It  is  safe  to  output from multiple threads.  Information on drawing
57       functions is available at notcurses_output(3).
58
59   Input
60       Notcurses supports input from keyboards (via stdin)  and  pointing  de‐
61       vices (via a broker such as GPM, X, or Wayland).  Input is delivered as
62       32-bit Unicode code points.  Synthesized events such  as  mouse  button
63       presses  and arrow keys are mapped into Unicode's Supplementary Private
64       Use Area-B  (https://unicode.org/charts/PDF/U100000.pdf).   Information
65       on  input  is  available  at  notcurses_input(3).   The  included  tool
66       notcurses-input(1) can be used to test input decoding.
67
68   Ncpiles
69       A given notcurses context is made up of one or more piles.  Piles  pro‐
70       vide distinct rendering contexts: a thread can be rendering or mutating
71       one pile, while another thread concurrently renders or mutates  another
72       pile.   A  pile  is made up of planes, totally ordered on a z-axis.  In
73       addition to the z-ordering, the planes of a pile are bound in a  forest
74       (a  set of directed, acyclic graphs).  Those planes which are not bound
75       to some other plane constitute the root planes of a pile.   A  pile  is
76       destroyed  when  all its planes are destroyed, or moved to other piles.
77       Since the standard plane (see below) always exists, and cannot be moved
78       to another pile, one pile always exists, known as the standard pile.
79
80       Note  that  rasterizing a pile will replace all content within its mar‐
81       gins.
82
83   Ncplanes
84       Following initialization, a single ncplane exists, the "standard plane"
85       (see  notcurses_stdplane(3)).  This plane cannot be destroyed nor manu‐
86       ally resized, and is always exactly as large  as  the  screen  (if  run
87       without a TTY, the "screen" is assumed to be 80x24 cells).  Further nc‐
88       planes can be created with ncplane_create(3).  A total  z-ordering  al‐
89       ways  exists on the set of ncplanes, and new ncplanes are placed at the
90       top of the z-buffer.  Ncplanes can be larger, smaller, or the same size
91       as  the physical screen, and can be placed anywhere relative to it (in‐
92       cluding entirely off-screen).  Ncplanes are made up of nccells (see Nc‐
93       Cells  below).   Information  on  ncplanes  is  available  at  notcurs‐
94       es_plane(3).
95
96   NcCells
97       nccells make up the framebuffers backing each ncplane, one cell per co‐
98       ordinate,  one extended grapheme cluster (see unicode(7)) per cell.  An
99       nccell consists of a gcluster (either a  directly-encoded  7-bit  ASCII
100       character  (see  ascii(7)),  or  a  25-bit  index  into  the  ncplane's
101       egcpool), a set of attributes, and two  channels  (one  for  the  fore‐
102       ground,  and one for the background—see notcurses_channels(3)).  Infor‐
103       mation on cells is available at notcurses_cell(3).
104
105       It is not usually necessary for users to  interact  directly  with  nc‐
106       cells.   They  are  typically encountered when retrieving data from nc‐
107       planes or the  rendered  scene  (see  e.g.   ncplane_at_yx(3)),  or  to
108       achieve peak performance when a particular EGC is heavily reused within
109       a plane.
110
111   Visuals
112       Bitmaps can be loaded from disk or memory, or even synthesized from the
113       content  of existing planes.  These are stored in ncvisual objects, de‐
114       scribed in notcurses_visual(3).  Visuals can be rendered to arbitrarily
115       many planes using a variety of blitters, varying in their aspect ratios
116       and resolution.  If the terminal supports a pixel protocol such as Six‐
117       el  or  Kitty,  it is possible to render bitmaps at the pixel level (as
118       opposed to the cell level, using geometric glyphs).  Otherwise, various
119       Unicode-based blitters are available to render bitmaps in the text par‐
120       adigm.
121
122   Widgets
123       A few high-level widgets are included, all built atop ncplanes:
124
125notcurses_fds(3) for dumping file descriptors/subprocesses to a plane
126
127notcurses_menu(3) for menu bars at the top or bottom of the screen
128
129notcurses_multiselector(3) for selecting one or more items from a set
130
131notcurses_plot(3) for drawing histograms and lineplots
132
133notcurses_progbar(3) for drawing progress bars
134
135notcurses_reader(3) for free-form input data
136
137notcurses_reel(3) for hierarchal display of block-based data
138
139notcurses_tabbed(3) for tabbed interfaces
140
141notcurses_selector(3) for selecting one item from a set
142
143notcurses_tree(3) for hierarchal display of line-based data
144
145   Threads
146       Notcurses explicitly supports use in multithreaded environments, but it
147       does not itself perform any locking.
148
149       • Only one pile's rendered frame can be rasterized at a time, and it is
150         not safe to concurrently render that pile.  It is safe to rasterize a
151         frame while rendering some other pile.
152
153       • It  is  otherwise  always  safe  to  operate concurrently on distinct
154         piles.
155
156       • It is not safe to render a pile  while  concurrently  modifying  that
157         pile.
158
159       • It  is safe to output to multiple distinct ncplanes at the same time,
160         even within the same pile.
161
162       • It is safe to output to ncplanes while adding or deleting some  other
163         ncplane.
164
165       • It is not safe for multiple threads to output to the same ncplane.
166
167       • It  is  not  safe to add, delete, or reorder ncplanes within a single
168         pile from multiple threads.
169
170       Only one thread may call notcurses_get(3) or  any  other  input-related
171       thread at a time, but it is safe to call for input while another thread
172       renders.
173
174       Since multiple threads can concurrently manipulate  distinct  ncplanes,
175       peak performance might require dividing the screen into several planes,
176       and manipulating them from multiple threads.
177
178   Destruction
179       Before exiting, notcurses_stop(3) should be  called.   In  addition  to
180       freeing  up  resources,  this is necessary to restore the terminal to a
181       state useful for the shell.   By  default,  notcurses_init(3)  installs
182       signal handlers to catch all signals which would normally terminate the
183       process.  The new handlers will try to call notcurses_stop(3), and then
184       propagate the received signal to the previous action.
185

NOTES

187       When  using  the C++ wrappers, NCPP_EXCEPTIONS_PLEASE can be defined in
188       order to turn most error returns into exceptions.
189

SEE ALSO

191       ncurses(3NCURSES), notcurses-demo(1), notcurses-input(1), notcurses_ca‐
192       pabilities(3),  notcurses_cell(3), notcurses_channels(3), notcurses_di‐
193       rect(3),   notcurses_fade(3),   notcurses_fds(3),    notcurses_init(3),
194       notcurses_input(3),   notcurses_lines(3),  notcurses_menu(3),  notcurs‐
195       es_multiselector(3),     notcurses_output(3),     notcurses_palette(3),
196       notcurses_plane(3),  notcurses_plot(3),  notcurses_progbar(3), notcurs‐
197       es_reader(3), notcurses_reel(3),  notcurses_refresh(3),  notcurses_ren‐
198       der(3),   notcurses_selector(3),   notcurses_stats(3),   notcurses_std‐
199       plane(3),  notcurses_stop(3),  notcurses_tabbed(3),  notcurses_tree(3),
200       notcurses_visual(3), terminfo(5), ascii(7), utf-8(7), unicode(7)
201

AUTHORS

203       nick black <nickblack@linux.com>.
204
205
206
207                                    v2.4.9                        notcurses(3)
Impressum