Releases: dankamongmen/notcurses
v2.3.8—a game where men throw ducks at balloons
a bugfix release.
- stop using Synchronized Update Mode with kitty due to a bug which was rapidly fixed upstream (#1864)
- fix serious issues in the OpenImageIO backend that had gone neglected for too long (#1722, #1723).
ncvisual_blitset_geom()
fixes for several cases, mostly involvingNCVISUAL_OPTION_CHILDPLANE
(#1854 )- fix SM-based Synchronization Mode (#1850)
- clear old glyphs even when under new sixel (#1537). this fixes the [xray] demo in foot and xterm
- mojibake demo: add new emoji from Unicode 14.0β
- fix
cell_extended_p()
for big-endian
v2.3.7—the phrase that pays
- Colorized
notcurses-info
, and move to new scrolling-rendered mode (#1823) ncls
now usesNCBLIT_PIXEL
by default. If usingNCBLIT_PIXEL
, it will default toNCSCALE_NONE_HIRES
(#1835)- Support SM/RM-based Synchronized Updates in addition to DCS-based (#1850/#1845)
- Fix crash when filling in transparent sprixcell with new frame, manifested as crash in
ncplayer -bpixel -a
(#1847) - Stop using
sgr
(#1818) - Identify the Linux framebuffer console, and extract pixel geometry from it (#1369)
- Fix cursor detection in the Linux console (#1837)
- Emit damaged glyphs when hidden by opaque kitty sprixcells. This won't be necessary anymore once we move to the animation protocol for holing out Kitty bitmaps, but it's necessary for now (#1704)
- Fix problems compiling Rust crate on non-x86 architectures (#1339)
- Reject control characters when loading
nccell
s or outputing to anncplane
(#1840)- '\n' is still allowed, for scrolling planes only. '\0' is always allowed to zorch out a cell.
- Added
ncplane_scrolling_p()
(#1841) - Add labels to
interp
PoC - Fix double
free()
in ffmpeg backend when destroying anncvisual
following a resize (#1800) - If
TIOCGWINSZ
fails, checkLINES
/COLUMNS
environment variables, and terminfo database (#1826) - Fine libreadline properly on FreeBSD, and fix up FreeBSD builds prior to FreeBSD 12
- Unified attribute backends for direct and rendered mode, eliminating a bunch of code duplication and some small errors
- Don't install man pages for binaries we haven't built (#1824)
- Added
NCOPTION_PRESERVE_CURSOR
(#1823) - Don't use
C=1
with Kitty unless it's at least version 0.20.0, fixingNCBLIT_PIXEL
on pre-0.20.0 Kitty (#1804) - Fix bouncing effect in XTerm when bitmap hit the last line (#1820)
v2.3.6—split the cigarillo like a lumberjack
The 2.3.5 release had a harmless -Wformat-security
violation, but since it was blowing up -Werror
builds, I went ahead and cut this.
v2.3.5—assisted living dracula
a monster of a minor release
- Terminals not replying with cell-pixel geometry in
TIOCGWINSZ
ioctl()
s, but claiming to support Sixel, could trigger floating-point exceptions. Such terminals will now have Sixel disabled. Contour now returns the geometry (#1805). - Added support for Application Synchronized Updates, and a new stat to track them (#1582).
- New stat for bytes emitted as bitmaps (#1801)
- Terminal versions are now extracted from query replies when available (#1798)
- Repaired bouncing effect when playing fullscreen sixels introduced in 2.3.4 (#1789)
- Submitted a PR to MLterm to invert its handling of DECSDM (#1782)
- Moved to
KDFONTOP
fromGIO_FONTX
/PIO_FONTX
, fixing font reprogramming in the Linux console (#1726) - Add new
ncvisual_from_rgb_{packed,loose}()
(#1767) - Use Kitty's move capability when possible (#1395)
- Quad and sexblitter now honor
NOINTERPOLATIVE
all the way through (#1763) - Query responses identifying terminals can now override
TERM
(#1761) - Added
NCSTYLE_UNDERCURL
(#1758) - Detect the default background at startup and work around Kitty's transparent background weirdness (#1292)
ncplane_rgba()
now works forNCBLIT_BRAILLE
(#1441)- Fixed bug that prevented
notcurses_enable_cursor()
from working (#1812) - Fixed bug that prevented
NCVISUAL_OPTION_ADDALPHA
from working for colors with red or green components - Use the
u7
terminfo capability rather than hardcoding cursor location query - Lots of terminal query fixes
v2.3.4—you can expect a forecast of vengeance
- Added the flag
NCVISUAL_OPTION_NOINTERPOLATE
to use non-interpolative scaling inncvisual_render()
.ncvisual_render()
without a multimedia engine will now use this method for any requested scaling (previously, scaling was not performed without a linked multimedia backend). NCVISUAL_OPTION_BLEND
used withNCBLIT_PIXEL
will now, when the Kitty graphics protocol is in use, cut the alpha of each pixel in half.ncvisual_inflate()
has been rewritten as a wrapper around the new functionncvisual_resize_noninterpolative()
, and deprecated. It will be removed for ABI3. Godspeed,ncvisual_inflate()
; we hardly knew ye.ncdirectf_render()
has been changed to accept ancvisual_options
, replacing and extending its four final arguments. Sorry about the breakage here, butncdirectf_render()
was introduced pretty recently (2.3.1). As a result,ncdirectf_render()
andncdirect_stream()
now honorNCVISUAL_OPTION_BLEND
andNCVISUAL_OPTION_NOINTERPOLATE
. All of this also applies toncdirect_geomf()
.ncplayer
now accepts-n
to force non-interpolative scaling.- A new binary is installed,
notcurses-info
. It prints information about the terminal environment in which it runs. More information is available from its man page,notcurses-info(1)
. - Added
ncdirect_light_box()
,ncdirect_heavy_box()
,nccells_light_box()
, andnccells_heavy_box()
. Publicizednccells_ascii_box()
. All arestatic inline
. - A bug was fixed in
ncplane_move_yx()
: root planes were being moved relatively instead of absolutely. This was never the intended behavior. - It was previously possible to pass
NULL
as the second parameter ofncplane_mergedown_simple()
, and have the standard plane be used as the destination. This is no longer supported, since the source plane could be in another pile. An error will instead be returned. - Fixed a bug in
ncdirect_box()
where default/palette-indexed colors weren't properly used on the top and bottom borders. - Added
notcurses_detected_terminal()
andncdirect_detected_terminal()
.
v2.3.3—this is a legitimate medical van
Don't use this release. It has a broken unit test when run in ASCII mode.
v2.3.2—before i get too deep
A good-sized release, after a more lengthy delay than is typical.
ncplane_at_yx()
now returns the EGC occupying that cell, even if the cell is a secondary column of a wide glyph. Previously, it returned an empty string in this case.ncplane_at_yx_cell()
still replicates the exactnccell
, allowing you to fully distinguish between the primary column of a wide glyph, the secondary column(s) of same, and an empty string. Furthermore,ncplane_at_yx()
now takes the base cell into account; the result is exactly what is fed into rendering logic.- Note that this change cascades, affecting e.g.
ncplane_contents()
.
- Note that this change cascades, affecting e.g.
- Added
notcurses_cursor_yx()
to get the current location of the terminal cursor. - Added
ncdirect_supported_styles()
andncdirect_styles()
to the Direct Mode API. - Closed memory leaks in
ncvisual
API (#1712, #1711) - Support resizing visuals in the absence of a multimedia engine via simple noninterpolative sampling (#1705)
- Explicitly prevent more than one context (
struct notcurses
orstruct ncdirect
) at a time in a process ncplane_as_rgba()
now supportsNCBLIT_2x2
andNCBLIT_3x2
, and requires the desired (inverse-)blitter to be passed explicitly (i.e. noNCBLIT_DEFAULT
) (#1697)- Restore colors properly following
sgr
/sgr0
in direct mode, for both palette and RGB (#1703) - Fix bug in
ncvisual_from_bgra()
that manifested as broad inability to render in Rust, thanks @joseluis (#1703) - Unified much of the storage shared across direct and rendered mode, killing off duplicated code, and packed all escapes into a single, tight, cache-friendly buffer (#1525)
- Always convert visuals to RGBA if not loaded in RGBA, fixing
ncpixel
API for them (#1680) - Rust bindings now use bindgen 0.57, meaning maybe we can build a Fedora package, thanks @joseluis (#1339)
- Emit
rmkx
on exit, thanks @dnkl - Always pad image data suitably for ffmpeg's SIMD-heavy backend (#1675)
- Rebuild auxiliary vectors on a new frame in both Sixel (#1642) and Kitty (#1605)
- Python CFFI fixes, thanks @scauligi
ncplayer
in direct mode (-k
) was printing too many rows (#1673)- Respect
leny
/lenx
fromncvisual_options
when rendering once more (#1661) - Strengthened a lot of unit tests, wrote about a dozen new unit tests.
- Updated a number of man pages.
There's probably other stuff. It's a pretty big release.
v2.3.1—this december is the december of our december
- Fixes the build on FreeBSD, and in the Zig c compiler
- Honors
maxx
andmaxy
when rendering images in direct mode - Robustifies direct mode cursor queries, especially when redirected to a file
- Don't acquire the signal atomic if we're not registering any signal handlers
- Add
ncdirectf_{from_file, geom, render, free}()
, a rather roundabout way of providing efficient access to media information in direct mode - @igo95862 's python updates
- @scauligi 's cffi updates
- Fix
ncvisual_resize()
when enlarging a frame using ffmpeg notcurses-tester
: accept any argument starting with-l
and treat it as-l8
- Always enable 8bpc RGB for foot, kitty, and alacritty, without needing
COLORTERM
- Add artix art to
ncneofetch
(thanks @dknl) - Add spaceships to
box
demo
v2.3.0—triumph
This tremendous release—90 days, 169 issues closed, and 992 commits—is dedicated to the memory of Dan Kaminsky, hacker, genuinely nice guy, and friend. We'll miss you, DanK.
The flagship new feature is of course support for portable terminal bitmaps; both Sixel and Kitty are supported using a single NCBLIT_PIXEL
interface. Extensive work has gone into flicker-free, fast presentation. No other library in the known universe supplies such power, and I can't wait to see what y'all do with it.
There are too many other improvements to really list here. Check the release notes and the 2.3.0 milestone (linked above). I spent close to 700 hours on this release, and poured a great deal of my strength into it. But one must have chaos in oneself to give birth to a dancing star.
Go forth and hack. <3 the dankest a/k/a nick black
Olympic torch flaming, it burn so sweet
The thrill of victory, the agony, defeat
We crush slow, flaming deluxe slow
For judgment day cometh, conquer, it's war
Allow us to escape, hell glow spinning bomb
Pocket full of shells out the sky, Golden Arms
Tune spit the shit, immortal combat sound
The fake false step make the blood stain the ground
v2.2.11—stay lit
2.3.0 is very, very close. Adds ncplane_erase_region()
to erase a subregion of a plane. Adds ncblit_rgb_packed()
and ncblit_rgb_loose()
to blit RGBx and pure RGB. Fixes some flicker when using sixel. Fixes an error in sixel wiping. Relaxes an EGC test to WARN
to pass on musl+s390x. Fixes notcurses-base.pc
so that Requires.private
specifies the proper source of Terminfo on the system, fixing static linking when libtinfo is built into libncurses instead of being a standalone deal.