Skip to content

Releases: dankamongmen/notcurses

v2.4.2—as if she were the last one she thought i'd betray

20 Sep 12:03
v2.4.2
5269e4b
Compare
Choose a tag to compare

ok look, this one has an absolute shitton of churn in it. i'd not have released it yet, except a few bugfixes needed to go out. here's the deal: i completely rewrote the input subsystem, which was already complex as hell. it now spawns its own thread so that i can reliably get terminal messages even if you're not looking for input--i have to have my own execution context involved. it is a great improvement overall, but has deep, subtle, platform-specific effects.

Microsoft Windows definitely regresses a bit with this release; I recommend you stick to 2.4.1 on that platform. otherwise, brave souls are encouraged to beat on this, and report any bugs you find.

  • The Rust bindings are no longer included in the main Notcurses repository. They can instead be found here: dankamongmen/libnotcurses-sys
  • Notcurses now supports Unicode 14 (if the underlying system supports it).
  • The input subsystem has been completely rewritten, making it much more robust.
    • NCOPTION_DRAIN_INPUT and NCDIRECT_OPTION_DRAIN_INPUT have been added. Your program ought use them if it doesn't intend to handle input. Failure to do so will result in unnecessary work, and possibly even dropped messages from the console.
    • A distinct input thread is now spawned, ensuring responsive handling of terminal control sequences even when the user isn't actively looking for input.
    • Notcurses can now distinguish between a key press, a repeat, and a key release for some events. NCKEY_RELEASE has been removed. When a mouse button is released, you'll now get the actual button (plus NCTYPE_RELEASE).
    • When input is redirected from a file, notcurses-input will now exit once the entire file is processed. Not coincidentally, NCKEY_EOF now indicates the end of input.
    • notcurses_getvec() allows batched reads from input.
    • Sequences beginning with an Escape character that aren't recognized control sequences are now returned as input.
    • GPM mouse events now account for margins.
    • Mouse clicks in the margins are no longer returned.
  • SIGWINCH and SIGCONT are now masked in the thread that calls notcurses_init(). This is because the addition of a distinct input thread exacerbated the problem of SIGWINCH being delivered to an unexpected thread. While this change will suffice for otherwise single-threaded programs, it remains your responsibility to ensure all threads have masked SIGWINCH and SIGCONT. See the FAQs!
  • A bug was fixed when moving graphics using the Kitty protocol in the presence of margins.
  • A bug was fixed when using multiframe bitmap graphics using the Kitty protocol, and a graphic was drawn over, then restored.
  • A resize callback can now be set for the standard plane.
  • A bug was fixed when characters were erased in a resize callback, thanks @kevinconley19.
  • Notcurses now supports libavformat 59+.
  • Cell blitting in direct mode is now faster and more robust.
  • ncneofetch no longer attempts to run xrandr on Microsoft Windows.
  • ncneofetch properly centers its logo now, a problem most noticeable on macOS.

v2.4.1—gather all my forces all together rally round

13 Sep 02:14
v2.4.1
f9df8e1
Compare
Choose a tag to compare
  • Fixed up nasty memory leak with NCBLIT_PIXEL. Turns out valgrind doesn't track mmap() by default, a fact of which I was sadly unaware (#2150).
  • Support for second generation kitty animation was determined to break down in the presence of multiframe plus wiping/rebuilding. This was fixed, but it led to unacceptable slowdown. I've instead disabled second generation animation support until this is fixed (#2143, #2161).
  • Properly synthesize SIGINT and SIGQUIT from kitty keyboard protocol.
  • Properly send the kitty keyboard pop directive to the alternate screen when it's being used. Fixes the terminal being left in an unexpected keyboard state on exit on kitty when redirected (#2149).
  • ncneofetch now properly extracts the macOS version (#2158).
  • Some small fixes and tweaks to plots. The summary number now describes the ongoing slot, so it spins up in e.g. notcurses-demo (#2152).
  • Added ncstrwidth_valid() (#2153).

2.4.2 work will hopefully see the new input subsystem completed, plus resolution of some CLI-mode problems seen on macOS.

hack on!

v2.4.0—hearts alive

06 Sep 09:30
v2.4.0
8aa856f
Compare
Choose a tag to compare

120 days, 1581 commits, and 323 issues resolved since 2.3.0.
660 days, 6769 commits, and 1,442 issues resolved since Day 0.
split your lungs with blood and thunder when you see the white whale!
check out this gource video of development!


the 2.4.0 release of Notcurses is dedicated with loving memory to Gregory Allen Black, aka Pa Dank, 1949–2021.
give 'em shit in the afterlife, dad. don't take any guff from those fucking swine.
hearts alive. roll tide roll.


A MASTODONIC RELEASE, primarily focused on bugfixes, portability, and robustness, but with plenty of new features as well. This development cycle saw our first kernel patch land; it will be present in Linux 5.15. I hope to do some further kernel work to enhance the Linux console. Since 2.3.0, changes include (but are not at all limited to):

  • Notcurses now supports macOS and Microsoft Windows. It is included in Homebrew and MacPorts.
    • Big thanks to @michaelsbradleyjr who bought a Mac Mini and made it available to the project, and figured out what the hell MSYS2 and UCRT are, and generally dragged us (for better or worse) into the dread lands of closed source.
    • Here it is running in the lovely new Microsoft Terminal:

2021-09-06-001545_2526x1408_scrot

  • Support for bitmap graphics on the Linux framebuffer console.
  • Support for Linux console mouse events via GPM when built with -DUSE_GPM=on.
  • Support for the kitty keyboard protocol.
    • I encourage its adoption by other terminals!
  • Tremendous improvement in Sixel and especially Kitty graphics, including support for extremely efficient updates using the new Kitty animation protocol, including a feature motivated by Notcurses.
  • Support for NCBLIT_PIXEL in ncuplot/ncdplot. Behold beautiful pixel plots:

2021-09-06-044721_1256x1389_scrot

  • The terminal is now extensively (but efficiently) queried on startup. Some properties are derived from the results.
    • Numerous patches were submitted to upstream terminals to support this functionality.
    • Eventually, this will be expanded to eliminate our reliance on TERM and dependence on terminfo.
    • Eliminated the need to call notcurses_check_pixel_support() before using NCBLIT_PIXEL.
  • Non-interpolative scaling is now available for ncvisuals, suitable for pixel art and other purposes (thanks @joseluis !).
    • ncplayer now supports -n for non-interpolative scaling
  • Removed NCSTYLE_{INVIS, BLINK, STANDOUT, REVERSE}. They remain defined for now, but will be removed for ABI3.
    • Added ncchannels_reverse() to make up for NCSTYLE_REVERSE.
  • Scrolling is now supported on the standard plane.
  • A new binary, notcurses-info, explores Unicode conformance and terminal capabilities in a single screen of output.

2021-09-06-045342_807x625_scrot

  • The new "CLI mode" supports CLI-style (as opposed to fullscreen TUI) applications with the full power of Notcurses, and is intended to replace Direct Mode. Direct Mode will be maintained, but not expanded any further. ncneofetch, notcurses-demo's summary table, and notcurses-info all use CLI mode.
  • Added support for synchronized updates
  • Scrolling a plane now scrolls bound planes with it, unless they're created with NCPLANE_OPTION_FIXED.
  • Added NCOPTION_PRESERVE_CURSOR.
  • ncvisual_subtitle_plane() has replaced ncvisual_subtitle(), and now supports all LibAV subtitle types, including Type-1 DVB (bitmap subtitles)
  • ncblit_as_rgba()/ncvisual_from_plane() now support NCBLIT_BRAILLE
  • Added ncvisual_from_rgb_loose(), ncvisual_from_rgb_packed() (thanks @kaniini!), and ncvisual_from_palindex()
  • ncls now defaults to pixel blitting.
  • Added ncplane_moverel() (thanks @tomek-szczesny!).

with <3 from the dankest

hearts alive

v2.3.18—first in flight

01 Sep 00:07
v2.3.18
e6ce519
Compare
Choose a tag to compare

mostly bugfixen and windows work.

v2.3.17—i love it

22 Aug 20:08
v2.3.17
1915fb4
Compare
Choose a tag to compare
  • fixed major bug on non-Linux platforms, introduced in 2.3.15, that broke all frames >2MB
  • add support for NCBLIT_PIXEL to plots
  • use absolute coordinates for rendering sprixels, resolving placement of bound sprixels
  • add notcurses_enter_alternate_screen() and notcurses_leave_alternate_screen()
  • stop honoring the renderfp field of notcurses_options. it is left in until ABI3

v2.3.16—can i get a whoop whoop

20 Aug 02:15
v2.3.16
5449878
Compare
Choose a tag to compare

this exists because ncdirect_set_*_rgb() was broken on environments with fewer than 8 colors, which hopefully don't exist much outside of Fedora and Alpine's build environments, where the unit tests were failing.

bounce with me

v2.3.15—we're taking the atm with us to mexico

17 Aug 23:18
v2.3.15
c9fbc5d
Compare
Choose a tag to compare

This is the first Notcurses release that builds on Windows, though Windows support is still very experimental.

  • Terminals which invert cursor reports are now detected in all modes, and accounted for #1886
  • Terminals which 0-index cursor reports are now detected in all modes, and accounted for #2044
    • This fixes notcurses-info output in kmscon
  • notcurses-tester now only requires 50 columns to run, down from 80 #2042
  • Loop on EBUSY and EWOULDBLOCK in control_read(), eliminating some initialization failures, thanks @christianparpart !
  • Properly hold fixed subplanes where they are on parent plane scroll #2036
  • Implement terminfo k*n input sequences, so we no longer return error on ctrl/shift+special #2028
  • Improve startup latency and unite direct/rendered mode startup #2023
  • notcurses-info: simplify coloring
  • Detect kitty graphics support via query #1998
  • Merge in portable fbuf replacement for POSIX memstreams, necessary for windows #1977 , #2038
    • We now build and, to a degree, work on Microsoft Windows #463
  • Lots of improvements for Linux framebuffer console graphics #2048
  • Fix ncls path separation #2063

v2.3.13—it was the heat of the moment

05 Aug 03:37
v2.3.13
9fcbf00
Compare
Choose a tag to compare

Primarily a bugfix release, especially for the macOS environment. Most development work this cycle has not yet been merged, and is all about supporting Microsoft Windows and the Microsoft Terminal.

  • Obliterate any query text bled out by the terminal #2019
  • Allow the intro demo to run in any size window #2015
  • Allow the uniblock demo to run in 25 lines #2018
  • Force EGC combinations when U+200D Zero-width-joiner is used #2016
  • Plug memory leak in the composing+reflecting Kitty blitter used with 0.22.1+ #2012
  • Added some emoji to notcurses-info #2005
  • Fix invalid free() in fission demo #2003
  • Fix failure in fission demo #2002
  • Support building on macOS Mojave and other environments lacking C++17 std::filesystem #2001
  • Properly detect pixel geometry when running in Docker #1891
  • New portable functions notcurses_accountname() and notcurses_hostname() #2022

v2.3.12—drop a gem on 'em

29 Jul 04:55
v2.3.12
1e248e4
Compare
Choose a tag to compare

I think this will be a pretty solid one. Did a lot of testing and bugfixing this week.

  • Fix crash/errors on Linux framebuffer graphics when they weren't multiples of the cell geometry (#1996)
  • Scrub Linux framebuffer so multiframe partially-transparent graphics don't combine.
  • Support Type-1 DVB bitmap subtitles with ffmpeg (#1311). ncplayer will now display them when pixel blitting is available, regardless of whether pixel blitting is being used for the main image. They're only available from the new function ncvisual_subtitle_plane(), which supersedes ncvisual_subtitle(). The latter is now deprecated, and will be removed in ABI3.
  • Fix a memory leak on frame decode when a container had subtitles. This leak has been present since ffmpeg support was added, i.e. pre-1.0.
  • Add ncvisual_from_palindex() to build ncvisuals from palette-indexed streams.
  • Add support for Kitty 0.22.0's self-referential composition, though disable it for now due to a presumed bug in Kitty (see kovidgoyal/kitty#3874). When enabled, this allows for much less memory usage/copying when using Kitty graphics #1900. I proposed it; see kovidgoyal/kitty#3809 for more details. Thanks @kovidgoyal for implementing it!
  • In CLI mode, always move to the bottom before attempting to scroll #1994. This fixes notcurses-info when launched close to, but not at, the bottom of the screen.
  • Propagate out the error when we abort in intro; it was always reporting FAILURE rather than ABORTED.
  • Handle arbitrary glyph widths #1873. wcwidth() doesn't report any widths greater than 2 currently, but it might in the future, and should we ever use mosaics, we'll need this.
  • Added static inline nccell_cols(), which is faster than nccell_width(), which has been deprecated and will be removed for ABI 3.
  • Implement wipes and restores in Linux framebuffer graphics #1954.
  • Many changes necessary for supporting Windows, which is coming very soon
  • Removed sigset_t from the API by deprecating notcurses_getc() and ncdirect_getc(). notcurses_get() and ncdirect_get() have been added, which do not take a sigset_t. There was much rejoicing.
  • We now run CI on macOS (#1933), thanks @michaelsbradleyjr !
  • ncplayer now passes a specified loglevel through to ncdirect_core_init() #1981
  • Get Linux framebuffer graphics working in direct mode #1959
  • Fix terrible bug where we returned error instead of special keys from input
  • Replace %ju + uintmax_t casts everywhere with PRIu64 from inttypes.h
  • We now deflate Kitty bitmaps, reducing bandwidth at the cost of some latency #1695
  • Fix NCVISUAL_ADD_ALPHA when restoring cells in Kitty graphics
  • Flush before deciding whether to use Synchronized Update mode, to get the true length
  • ncmenu now uses NCPLANE_OPTION_FIXED so it doesn't move on scrolling planes #1958
  • Recognize Terminology based off DA3
  • Invert DECSDM on foot 1.8.2+ (thanks @dknl!)
  • notcurses-demo now creates the HUD and FPS graph with NCPLANE_OPTION_FIXED, so they no longer scroll off the screen in the whiteout demo, heh

Enjoy!

laughin' at bassheads

v2.3.11—up against the wall, motherfucker!

20 Jul 18:10
v2.3.11
30d71ab
Compare
Choose a tag to compare
  • Experimental support for iTerm2 and Linux fbcon bitmaps
  • SIGFPE is now handled like other fatal signals
  • NCALPHA_HIGHCONTRAST now works properly atop default backgrounds
  • NCPLANE_OPTION_FIXED has been added to change default behavior of bound planes, which now scroll alongside the parent plane.
  • Notcurses now requires libz to build.