Provided by: libnotcurses-core-dev_3.0.6+dfsg.1-1_amd64 bug

NAME

       notcurses_init - initialize a Notcurses instance

SYNOPSIS

       #include <notcurses/notcurses.h>

              #define NCOPTION_INHIBIT_SETLOCALE   0x0001ull
              #define NCOPTION_NO_CLEAR_BITMAPS    0x0002ull
              #define NCOPTION_NO_WINCH_SIGHANDLER 0x0004ull
              #define NCOPTION_NO_QUIT_SIGHANDLERS 0x0008ull
              #define NCOPTION_PRESERVE_CURSOR     0x0010ull
              #define NCOPTION_SUPPRESS_BANNERS    0x0020ull
              #define NCOPTION_NO_ALTERNATE_SCREEN 0x0040ull
              #define NCOPTION_NO_FONT_CHANGES     0x0080ull
              #define NCOPTION_DRAIN_INPUT         0x0100ull
              #define NCOPTION_SCROLLING           0x0200ull

              #define NCOPTION_CLI_MODE (NCOPTION_NO_ALTERNATE_SCREEN \
                                         |NCOPTION_NO_CLEAR_BITMAPS \
                                         |NCOPTION_PRESERVE_CURSOR \
                                         |NCOPTION_SCROLLING)

              typedef enum {
                NCLOGLEVEL_SILENT,  // print nothing once fullscreen service begins
                NCLOGLEVEL_PANIC,   // default. print diagnostics before we crash/exit
                NCLOGLEVEL_FATAL,   // we're hanging around, but we've had a horrible fault
                NCLOGLEVEL_ERROR,   // we can't keep doing this, but we can do other things
                NCLOGLEVEL_WARNING, // you probably don't want what's happening to happen
                NCLOGLEVEL_INFO,    // "standard information"
                NCLOGLEVEL_VERBOSE, // "detailed information"
                NCLOGLEVEL_DEBUG,   // this is honestly a bit much
                NCLOGLEVEL_TRACE,   // there's probably a better way to do what you want
              } ncloglevel_e;

              typedef struct notcurses_options {
                const char* termtype;
                ncloglevel_e loglevel;
                unsigned margin_t, margin_r, margin_b, margin_l;
                uint64_t flags; // from NCOPTION_* bits
              } notcurses_options;

       struct notcurses* notcurses_init(const notcurses_options* opts, FILE* fp);

       void notcurses_version_components(int* major, int* minor, int* patch, int* tweak);

       int notcurses_cursor_enable(struct notcurses* nc, int y, int x);

       int notcurses_cursor_disable(struct notcurses* nc);

       int notcurses_cursor_yx(const struct notcurses* nc, int* y, int* x);

       int notcurses_lex_margins(const char* op, notcurses_options* opts);

       int notcurses_default_foreground(const struct notcurses* nc, uint32_t* fg);

       int notcurses_default_background(const struct notcurses* nc, uint32_t* bg);

DESCRIPTION

       notcurses_init  prepares  the terminal for cursor-addressable (multiline) mode, writing to some FILE.  If
       the FILE provided as fp is NULL, stdout will be used.  Whatever FILE is used must be writable, is ideally
       fully  buffered,  and  must  be byte-oriented (see fwide(3)).  If the FILE is not connected to a terminal
       (for example when redirected to a file), /dev/tty will be opened (if possible) for communication with the
       controlling  terminal.   Most  output  (including  all styling and coloring) is written to the FILE; only
       queries need be sent to a true terminal.  If no terminal is available (for  example  when  running  as  a
       daemon), defaults regarding such things as screen size and the palette are assumed.

       The  struct  notcurses_option  passed  as  opts  controls behavior.  Passing a NULL opts is equivalent to
       passing an all-zero (default) opts.  A process can have only one Notcurses  context  active  at  a  time;
       calling  notcurses_init  again  before  calling notcurses_stop will return NULL (this is reliable even if
       called concurrently from two threads).

       On success, a pointer to a valid struct notcurses is returned.  NULL is returned on failure.  Before  the
       process exits, notcurses_stop(3) should be called to reset the terminal and free up resources.

       An  appropriate  terminfo(5) entry must exist for the terminal.  This entry is usually selected using the
       value of the TERM environment variable (see getenv(3)), but a non-NULL value for termtype  will  override
       this  (terminfo  is not used on Microsoft Windows, where it is neither meaningful nor necessary to define
       TERM).  An invalid terminfo specification can lead to reduced performance, reduced display  capabilities,
       and/or  display errors.  Notcurses natively targets 24bpp/8bpc RGB color, and it is thus desirable to use
       a terminal with the rgb capability (e.g.  xterm's xterm-direct).  Colors will otherwise be quantized down
       to whatever the terminal supports.

       If the terminal advertises support for an "alternate screen" via the smcup terminfo capability, Notcurses
       will employ it by default.  This can be  prevented  by  setting  NCOPTION_NO_ALTERNATE_SCREEN  in  flags.
       Users  tend  to  have strong opinions regarding the alternate screen, so it's often useful to expose this
       via a command-line option.  When the alternate screen is not  used,  the  contents  of  the  terminal  at
       startup  remain visible until obliterated, on a cell-by-cell basis (see notcurses_plane(3) for details on
       clearing the screen at startup without using the alternate screen).   If  the  alternate  screen  is  not
       available, the display will still be cleared without NCOPTION_NO_ALTERNATE_SCREEN.

       Notcurses  hides  the  cursor  by  default.   It  can  be  dynamically enabled, moved, or disabled during
       execution via notcurses_cursor_enable and notcurses_cursor_disable.  It will be hidden while updating the
       screen.   The  current  location of the terminal cursor can be acquired with notcurses_cursor_yx, whether
       visible or not.

       notcurses_init typically emits some diagnostics  at  startup,  including  version  information  and  some
       details  of  the  configured  terminal.  This can be inhibited with NCOPTION_SUPPRESS_BANNERS.  This will
       also inhibit the performance summary normally printed by notcurses_stop(3).

       Notcurses can render to a subregion of the terminal by specifying desired margins on all four sides.   By
       default,  all margins are zero, and thus rendering will be performed on the entirety of the viewing area.
       This is orthogonal to use of the alternate screen; using the alternate screen plus margins will  see  the
       full  screen cleared, followed by rendering to a subregion.  Inhibiting the alternate screen plus margins
       will render to a subregion, with the screen outside this region not cleared.   Margins  are  best-effort.
       notcurses_lex_margins provides lexing a margin argument expression in one of two forms:

       • a single number, which will be applied to all sides, or

       • four comma-delimited numbers, applied to top, right, bottom, and left.

       To  allow  future  options  without  requiring  redefinition  of the structure, the flags field is only a
       partially-defined bitfield.  Undefined bits should be zero.  The following flags are defined:

       • NCOPTION_INHIBIT_SETLOCALE: Unless this flag is set, notcurses_init will call setlocale(LC_ALL,  NULL).
         If  the  result  is  either  "C"  or  "POSIX",  it  will  print  a  diagnostic to stderr, and then call
         setlocale(LC_ALL, "").  This will attempt to set the locale based off the  LANG  environment  variable.
         Your program should call setlocale(3) itself, usually as one of the first lines.

       • NCOPTION_NO_CLEAR_BITMAPS:  On  entry,  make no special attempt to clear any preexisting bitmaps.  Note
         that they might still get cleared even if this is set, and they might not get cleared even if  this  is
         not set.

       • NCOPTION_NO_WINCH_SIGHANDLER:  A  signal  handler  will  usually be installed for SIGWINCH and SIGCONT,
         resulting in NCKEY_RESIZE events being generated on input.  With this flag, the  handler  will  not  be
         installed.

       • NCOPTION_NO_QUIT_SIGHANDLERS:  A  signal handler will usually be installed for SIGABRT, SIGBUS, SIGFPE,
         SIGILL, SIGINT, SIGQUIT, SIGSEGV, and SIGTERM, cleaning up the terminal on such exceptions.  With  this
         flag, the handler will not be installed.

       • NCOPTION_PRESERVE_CURSOR:  The  virtual  cursor  is typically placed at the screen's origin at startup.
         With this flag, it is instead placed wherever the cursor was at program launch.

       • NCOPTION_SUPPRESS_BANNERS: Disables the diagnostics and version information printed on startup, and the
         performance summary on exit.

       • NCOPTION_NO_ALTERNATE_SCREEN:  Do  not  use  the  alternate  screen  (see  terminfo(5)),  even if it is
         available.

       • NCOPTION_NO_FONT_CHANGES: Do not touch the font.  Notcurses might otherwise attempt to extend the font,
         especially in the Linux console.

       • NCOPTION_DRAIN_INPUT:  Standard  input may be freely discarded.  If you do not intend to process input,
         pass this flag.  Otherwise, input can buffer up,  and  eventually  prevent  Notcurses  from  processing
         messages from the terminal.  It will furthermore avoid wasting time processing useless input.

       • NCOPTION_SCROLLING:   Enable   scrolling  on  the  standard  plane.   This  is  equivalent  to  calling
         ncplane_set_scrolling(stdn, true) on some standard plane stdn.

       NCOPTION_CLI_MODE   is   provided   as   an   alias   for   the   bitwise   OR   of   NCOPTION_SCROLLING,
       NCOPTION_NO_ALTERNATE_SCREEN, NCOPTION_PRESERVE_CURSOR, and NCOPTION_NO_CLEAR_BITMAPS.  If writing a CLI,
       it is recommended to use NCOPTION_CLI_MODE rather than explicitly listing these options.

       notcurses_default_foreground  returns  the  default  foreground  color,  if   it   could   be   detected.
       notcurses_default_background returns the default background color, if it could be detected.

   Fatal signals
       It  is important to reset the terminal before exiting, whether terminating due to intended operation or a
       received signal.  This is usually accomplished by explicitly calling notcurses_stop(3)  during  shutdown.
       For  convenience, Notcurses by default installs signal handlers for various signals which would typically
       result in process termination (see signal(7)).  These signal handlers  call  notcurses_stop(3)  for  each
       struct  notcurses  in  the  process,  and then propagate the signal to any previously-configured handler.
       These handlers are disabled upon entry to notcurses_stop(3).

       To prevent signal handler registration, provide NCOPTION_NO_QUIT_SIGHANDLERS.  No means  is  provided  to
       selectively  register fatal signal handlers.  If this is done, the caller ought be sure to effect similar
       functionality themselves.

   Resize events
       SIGWINCH (SIGnal WINdow CHange) is delivered to the process when the terminal is  resized.   The  default
       action  is  to  ignore  it  (SIG_IGN).  Notcurses installs a handler for this signal.  The handler causes
       Notcurses to update its idea of the terminal's size using TIOCGWINSZ (see ioctl_tty(2)), and generates an
       NCKEY_RESIZE  input  event  (see  notcurses_input(3).   This  signal  handler can be inhibited by setting
       NCOPTION_NO_WINCH_SIGHANDLER in flags.  If this is done, the caller should probably watch for the signal,
       and invoke notcurses_refresh(3) or notcurses_render(3) upon its receipt.

       A  resize event does not invalidate any references returned earlier by Notcurses.  The content of any new
       screen area is undefined until the next call to notcurses_render(3).  This is true even  if  an  existing
       struct  ncplane  (see  notcurses_plane(3)) overlaps the new area, since the signal could arrive while the
       ncplanes are being modified.  Signal handlers are quite restricted as to what actions they  can  perform,
       so minimal work is performed in the handler proper.

       Thus, in the absence of NCOPTION_NO_WINCH_SIGHANDLER, SIGWINCH results in:

       • interruption of some thread to process the signal

       • a TIOCGWINSZ ioctl to retrieve the new screen size

       • queuing of a NCKEY_RESIZE input event (if there is space in the queue)

       Upon   the   next   call   to  notcurses_render(3)  or  notcurses_refresh(3),  the  standard  plane  (see
       notcurses_stdplane(3)) will be resized to the new screen size.  The next  notcurses_render(3)  call  will
       function as expected across the new screen geometry.

   The hardware cursor
       Most  terminals  provide  a  cursor,  a  visual  indicator of where output will next be placed.  There is
       usually (but not always) some degree of control over what glyph forms this cursor, and  whether  it  e.g.
       blinks.

       By  default,  Notcurses  disables  this  cursor  in  rendered  mode.   It  can  be  turned  back  on with
       notcurses_enable_cursor, which has immediate effect (there is no need to call  notcurses_render(3)).   If
       already visible, this function updates the location.  Each time the physical screen is updated, Notcurses
       will disable the cursor, write the update, move the cursor back to this location, and  finally  make  the
       cursor  visible.   notcurses_cursor_yx  retrieves  the  location  of  the cursor, whether visible or not.
       notcurses_disable_cursor hides the cursor.

       You generally shouldn't need to touch the terminal cursor.  It's only really relevant  with  echoed  user
       input,  and you don't want echoed user input in rendered mode (instead, read the input, and write it to a
       plane yourself).  A subprocess can be streamed to a plane with an ncsubproc, etc.

       If the NCOPTION_PRESERVE_CURSOR flag is provided, the cursor's location will be  determined  at  startup,
       and the standard plane's virtual cursor will be placed to match it (instead of in the upper-left corner).
       Combined with NCOPTION_NO_ALTERNATE_SCREEN and a scrolling standard plane, this allows rendered  mode  to
       be used as a normal scrolling shell application.

RETURN VALUES

       NULL  is  returned on failure.  Otherwise, the return value points at a valid struct notcurses, which can
       be used until it is provided to notcurses_stop(3).

       notcurses_cursor_disable returns -1 if the cursor is already invisible.

       notcurses_default_foreground returns -1 if the default foreground color could not be detected.

       notcurses_default_background returns -1 if the default background color could not be detected.

ENVIRONMENT VARIABLES

       The NOTCURSES_LOGLEVEL environment variable, if defined, ought be an integer between  -1  and  7.   These
       values  correspond  to  NCLOGLEVEL_SILENT  through  NCLOGLEVEL_TRACE,  and override the loglevel field of
       notcurses_options.

       The TERM environment variable will be used by  setupterm(3ncurses)  to  select  an  appropriate  terminfo
       database.

NOTES

       Several command-line options and keybindings are recommended for Notcurses rendered-mode programs:

       • -l[0-8] ought be mapped to the various NCLOGLEVEL values.  Alternatively, map -v to NCLOGLEVEL_WARNING,
         and map -vv to NCLOGLEVEL_INFO.

       • -k ought be mapped to NCOPTION_NO_ALTERNATE_SCREEN.

       • Ctrl+L ought be mapped to notcurses_refresh(3).

BUGS

       The introductory diagnostics are not currently emitted when the alternate screen is used.  They ought  be
       printed  to  the  regular  screen before entering the alternate screen.  They are displayed normally when
       NCOPTION_NO_ALTERNATE_SCREEN is used.

SEE ALSO

       fwide(3), getenv(3),  setlocale(3),  termios(3),  notcurses(3),  notcurses_input(3),  notcurses_plane(3),
       notcurses_refresh(3), notcurses_render(3), notcurses_stop(3), setupterm(3ncurses), terminfo(5), signal(7)

AUTHORS

       nick black <nickblack@linux.com>.

                                                     v3.0.6                                    notcurses_init(3)