We use mstreamfp in notcurses_stop_minimal(), so we can't
register that function as a fatal signal handler until
we've opened mstreamfp. Move it before the registration.
Eliminates a coredump when we ctrl+c during init.
when using NCOPTION_PRESERVE_CURSOR, we want to reacquire
the true cursor position after printing the init banner,
rather than trying to figure out how many lines it made
us scroll, and keeping that up to date. this improves the
notcurses-info output on freebsd, where the compiler line
was occupying more than one row. closes#1880.
always get the cursor location from query responses,
so that we load u7 into the escape table even though
it wasn't found in terminfo. this is needed on freebsd,
where termcap doesn't seem to have u7 in it.
fflush(), so far as i can tell, cannot be reliably used
in glibc. after it fails once, subsequent calls return 0
and do not set errno -- only the persistent ferror() serves
to indicate that flushing is not going on. instead, write
into the render state's memstream, and then use reliable
blocking_write() to dump it to stdout. closes#1872.
nccell_width() ought simply consult the nccell's width
field to get a column count (it was written before the
rearrangement of nccell). do so. fix up the macros
CELL_CHAR_INITIALIZER and CELL_INITIALIZER to assign a
width of 1 for non-printing characters, matching the
behavior of utf8_egc_len() on whitespace. instead of
hard-coding the logic in ncplane_put() for multicolumn
glyphs, call nccell_wide_right_p() and wide_left_p().
use nccell_width() in ncplane_putc_yx(), fixing it for
glyphs of more than 2 columns.