Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
notcurses(3)							  notcurses(3)

NAME
       notcurses - TUI library for modern terminal emulators

SYNOPSIS
       #include		 <notcurses/notcurses.h>	  or	      #include
       <notcurses/notcurses-core.h>

       -lnotcurses-core	-lnotcurses or -lnotcurses-core

DESCRIPTION
       Notcurses builds	atop the terminfo(5) abstraction layer to provide rea-
       sonably portable	vivid character	displays.  It is an  intellectual  de-
       scendant	 of  ncurses(3NCURSES),	 but goes beyond that library (and the
       X/Open Curses API it implements).

       A program wishing to use	Notcurses will need to link it,	ideally	 using
       the  output  of pkg-config --libs notcurses (see	pkg-config(1)).	 It is
       advised to compile with the output of  pkg-config  --cflags  notcurses.
       If  using  CMake,  a  support  file is provided,	and can	be accessed as
       Notcurses (see cmake(1)).  If multimedia	capabilities are  not  needed,
       it  is  possible	 to  link against a minimal Notcurses using pkg-config
       --libs notcurses-core.

       notcurses_init(3) can then be used to initialize	a  Notcurses  instance
       for a given FILE* (usually stdout, usually attached to a	terminal).

   The alternate screen
       Many  terminals provide an "alternate screen" with its own contents, no
       scrollback buffer, and no scrolling.  Entering the alternate screen re-
       places the current visible contents wholesale, as does returning	to the
       regular screen.	Notcurses refers to the	alternate  screen's  semantics
       as "TUI mode", and the regular screen's semantics as "CLI mode".	 It is
       possible	  to   swap   between	the   two   modes   at	runtime	 using
       notcurses_leave_alternate_screen(3)     and	notcurses_enter_alter-
       nate_screen(3).	 Notcurses  will enter TUI mode	by default on startup;
       to prevent  this,  use  NCOPTION_NO_ALTERNATE_SCREEN  as	 described  in
       notcurses_init(3).   On	program	 exit, Notcurses will always return to
       the regular screen, independent of the screen  being  used  on  program
       start.

   Construction
       Before calling into Notcurses--and usually as one of the	first calls of
       the program--be sure to call setlocale with an appropriate UTF-8	LC_ALL
       locale.	 It is usually appropriate to use setlocale(LC_ALL, ""), rely-
       ing on  the  user  to  properly	set  the  LANG	environment  variable.
       Notcurses will refuse to	start if nl_langinfo(3)	doesn't	indicate UTF-8
       or  ANSI_X3.4-1968 (aka US-ASCII).  Be aware that capabilities are sub-
       stantially reduced in ASCII.

       notcurses_init(3)   accepts   a	 struct	  notcurses_options   allowing
       fine-grained  control of	Notcurses behavior, including signal handlers,
       alternative screens, and	overriding the TERM environment	 variable.   A
       terminfo	entry appropriate for the actual terminal must be available.

       ncdirect_init(3)	makes available	a restricted subset of Notcurses func-
       tionality.   This subset	is intended to be interleaved with user-gener-
       ated output, and	is limited to coloring and styling.   Direct  mode  is
       documented in notcurses_direct(3).

       Only  one  context can be active	in a process at	a time,	whether	direct
       mode (struct ncdirect) or rendered mode (struct notcurses).

   Output
       All output is performed on struct ncplanes (see Ncplanes	below).	  Out-
       put  is	not visible until explicitly rendered via notcurses_render(3).
       Information on drawing functions	is available at	notcurses_output(3).

   Input
       Notcurses supports input	from keyboards (via stdin)  and	 pointing  de-
       vices (via a broker such	as GPM,	X, or Wayland).	 Input is delivered as
       32-bit  Unicode	code  points.  Synthesized events such as mouse	button
       presses and arrow keys are mapped into Unicode's	Supplementary  Private
       Use  Area-B  <https://unicode.org/charts/PDF/U100000.pdf>.  Information
       on  input  is  available	 at  notcurses_input(3).   The	included  tool
       notcurses-input(1) can be used to test input decoding.

   Ncpiles
       A  given	notcurses context is made up of	one or more piles.  Piles pro-
       vide distinct rendering contexts: a thread can be rendering or mutating
       one pile, while another thread concurrently renders or mutates  another
       pile.   A  pile	is made	up of planes, totally ordered on a z-axis.  In
       addition	to the z-ordering, the planes of a pile	are bound in a	forest
       (a  set of directed, acyclic graphs).  Those planes which are not bound
       to some other plane constitute the root planes of a pile.   A  pile  is
       destroyed  when	all its	planes are destroyed, or moved to other	piles.
       Since the standard plane	(see below) always exists, and cannot be moved
       to another pile,	one pile always	exists,	known as the standard pile.

       Note that rasterizing a pile will replace all content within  its  mar-
       gins.

       For more	information, see notcurses_pile(3).

   Ncplanes
       Following initialization, a single ncplane exists, the "standard	plane"
       (see  notcurses_stdplane(3)).  This plane cannot	be destroyed nor manu-
       ally resized, and is always exactly as large  as	 the  screen  (if  run
       without a TTY, the "screen" is assumed to be 80x24 cells).  Further nc-
       planes  can  be created with ncplane_create(3).	A total	z-ordering al-
       ways exists on the set of ncplanes, and new ncplanes are	placed at  the
       top of the z-buffer.  Ncplanes can be larger, smaller, or the same size
       as  the physical	screen,	and can	be placed anywhere relative to it (in-
       cluding entirely	off-screen).  Ncplanes are made	up of nccells (see Nc-
       Cells   below).	  Information	on   ncplanes	 is    available    at
       notcurses_plane(3).

   NcCells
       nccells make up the framebuffers	backing	each ncplane, one cell per co-
       ordinate,  one extended grapheme	cluster	(see unicode(7)) per cell.  An
       nccell consists of a gcluster (either a	directly-encoded  7-bit	 ASCII
       character  (see	ascii(7)),  or	a  25-bit  index  into	the  ncplane's
       egcpool), a set of attributes, and two  channels	 (one  for  the	 fore-
       ground, and one for the background--see notcurses_channels(3)).	Infor-
       mation on cells is available at notcurses_cell(3).

       It  is  not  usually  necessary for users to interact directly with nc-
       cells.  They are	typically encountered when retrieving  data  from  nc-
       planes  or  the	rendered  scene	 (see  e.g.   ncplane_at_yx(3)), or to
       achieve peak performance	when a particular EGC is heavily reused	within
       a plane.

   Visuals
       Bitmaps can be loaded from disk or memory, or even synthesized from the
       content of existing planes.  These are stored in	ncvisual objects,  de-
       scribed in notcurses_visual(3).	Visuals	can be rendered	to arbitrarily
       many planes using a variety of blitters,	varying	in their aspect	ratios
       and  resolution.	  If  the  terminal  supports a	pixel protocol such as
       Sixel or	Kitty, it is possible to render	bitmaps	at the pixel level (as
       opposed to the cell level, using	geometric glyphs).  Otherwise, various
       Unicode-based blitters are available to render bitmaps in the text par-
       adigm.

   Widgets
       A few high-level	widgets	are included, all built	atop ncplanes:

        notcurses_fds(3) for dumping file descriptors/subprocesses to a plane

        notcurses_menu(3) for menu bars at the	top or bottom of the screen

        notcurses_multiselector(3) for	selecting one or more items from a set

        notcurses_plot(3) for drawing histograms and lineplots

        notcurses_progbar(3) for drawing progress bars

        notcurses_reader(3) for free-form input data

        notcurses_reel(3) for hierarchal display of block-based data

        notcurses_tabbed(3) for tabbed	interfaces

        notcurses_selector(3) for selecting one item from a set

        notcurses_tree(3) for hierarchal display of line-based	data

   Threads
       Notcurses explicitly supports use in multithreaded environments,	but it
       does not	itself perform any locking.

        Only one pile's rendered frame	can be rasterized at a time, and it is
	 not safe to concurrently render that pile.  It	is safe	to rasterize a
	 frame while rendering some other pile.

        It is otherwise always	 safe  to  operate  concurrently  on  distinct
	 piles.

        It  is	 not  safe  to render a	pile while concurrently	modifying that
	 pile.

        It is safe to output to multiple distinct ncplanes at the same	 time,
	 even within the same pile.

        It  is	safe to	output to ncplanes while adding	or deleting some other
	 ncplane.

        It is not safe	for multiple threads to	output to the same ncplane.

        It is not safe	to add,	delete,	or reorder ncplanes  within  a	single
	 pile from multiple threads.

       Only  one  thread  may call notcurses_get(3) or any other input-related
       thread at a time, but it	is safe	to call	for input while	another	thread
       renders.

       Since multiple threads can concurrently manipulate  distinct  ncplanes,
       peak performance	might require dividing the screen into several planes,
       and manipulating	them from multiple threads.

   Destruction
       Before  exiting,	 notcurses_stop(3)  should  be called.	In addition to
       freeing up resources, this is necessary to restore the  terminal	 to  a
       state  useful  for  the	shell.	By default, notcurses_init(3) installs
       signal handlers to catch	all signals which would	normally terminate the
       process.	 The new handlers will try to call notcurses_stop(3), and then
       propagate the received signal to	the previous action.

ENVIRONMENT VARIABLES
       The TERM	environment variable ought be correctly	defined.  It  will  be
       used   to   index   into	  the  terminfo(5)  database  by  way  of  se-
       tupterm(3NCURSES).  Notcurses will  additionally	 use  TERM_PROGRAM  to
       distinguish certain terminals.

       If  the	COLORTERM environment variable is defined as "24bit" or	"true-
       color", Notcurses will assume the terminal capable of 24-bit RGB	color,
       even in the absence of "RGB" or "Tc" capabilities in terminfo.

       If the NOTCURSES_LOGLEVEL environment variable is defined as  a	number
       between -1 and 8, inclusive, that will override any logging level spec-
       ified in	the struct notcurses_options provided to notcurses_init(3).

       The  LOGNAME  environment  variable,  if	 defined,  will	 be  used  for
       notcurses_accountname(3).

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

SEE ALSO
       ncurses(3NCURSES), notcurses-demo(1), notcurses-input(1), notcurses_ca-
       pabilities(3),  notcurses_cell(3), notcurses_channels(3), notcurses_di-
       rect(3),	  notcurses_fade(3),   notcurses_fds(3),    notcurses_init(3),
       notcurses_input(3),	  notcurses_lines(3),	    notcurses_menu(3),
       notcurses_multiselector(3), notcurses_output(3),	 notcurses_palette(3),
       notcurses_pile(3),	 notcurses_plane(3),	    notcurses_plot(3),
       notcurses_progbar(3),	  notcurses_reader(3),	    notcurses_reel(3),
       notcurses_refresh(3),	notcurses_render(3),	notcurses_selector(3),
       notcurses_stats(3),	notcurses_stdplane(3),	    notcurses_stop(3),
       notcurses_tabbed(3),   notcurses_tree(3),   notcurses_visual(3),	  ter-
       minfo(5), ascii(7), utf-8(7), unicode(7)

AUTHORS
       nick black <nickblack@linux.com>

				    v3.0.16			  notcurses(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=notcurses&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help