Releases: dankamongmen/notcurses
v2.4.0—hearts alive
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:
- 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
inncuplot
/ncdplot
. Behold beautiful pixel plots:
- 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 usingNCBLIT_PIXEL
.
- Non-interpolative scaling is now available for
ncvisual
s, 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 forNCSTYLE_REVERSE
.
- Added
- 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.
- 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, andnotcurses-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 replacedncvisual_subtitle()
, and now supports all LibAV subtitle types, including Type-1 DVB (bitmap subtitles)ncblit_as_rgba()
/ncvisual_from_plane()
now supportNCBLIT_BRAILLE
- Added
ncvisual_from_rgb_loose()
,ncvisual_from_rgb_packed()
(thanks @kaniini!), andncvisual_from_palindex()
ncls
now defaults to pixel blitting.- Added
ncplane_moverel()
(thanks @tomek-szczesny!).
with <3 from the dankest
v2.3.18—first in flight
mostly bugfixen and windows work.
v2.3.17—i love it
- 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()
andnotcurses_leave_alternate_screen()
- stop honoring the
renderfp
field ofnotcurses_options
. it is left in until ABI3
v2.3.16—can i get a whoop whoop
v2.3.15—we're taking the atm with us to mexico
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 inkmscon
- This fixes
notcurses-tester
now only requires 50 columns to run, down from 80 #2042- Loop on
EBUSY
andEWOULDBLOCK
incontrol_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
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()
infission
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()
andnotcurses_hostname()
#2022
v2.3.12—drop a gem on 'em
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 functionncvisual_subtitle_plane()
, which supersedesncvisual_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 buildncvisual
s 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 thannccell_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 deprecatingnotcurses_getc()
andncdirect_getc()
.notcurses_get()
andncdirect_get()
have been added, which do not take asigset_t
. There was much rejoicing. - We now run CI on macOS (#1933), thanks @michaelsbradleyjr !
ncplayer
now passes a specified loglevel through toncdirect_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 withPRIu64
frominttypes.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 usesNCPLANE_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 withNCPLANE_OPTION_FIXED
, so they no longer scroll off the screen in thewhiteout
demo, heh
Enjoy!
v2.3.11—up against the wall, motherfucker!
- Experimental support for iTerm2 and Linux fbcon bitmaps
SIGFPE
is now handled like other fatal signalsNCALPHA_HIGHCONTRAST
now works properly atop default backgroundsNCPLANE_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.
v2.3.10—uncontrollable
- OS X is now supported, closing our oldest open bug (#195). File bugs, kiddos.
- Fixed brown-bagger segfault on context shutdown.
- XTPOPCOLORS and XTPUSHCOLORS are now emitted on terminals that support them (XTerm, Kitty).
notcurses-info
will now continue after hitting an unsupported Unicode character, rather than truncating the line.
v2.3.9
- Fixed major regressions from 2.3.8: menu highlighting is working once more, as are pointer inputs (mice) and the 8x1 plotter. Sorry about that!
notcurses_detected_terminal()
andncdirect_detected_terminal()
now both return a heap-allocated string, which will contain the terminal version if Notcurses was able to detect it. This result ought be free()d.- Added
ncplane_moverel()
thanks to @tomek-szczesny. - Documented
ncplane_move_yx()
innotcurses_plane.3
, and removed the false comment that "passing -1 as a coordinate will hold that axis constant" fromUSGAE.md
andnotcurses.h
. This has never been true. - Added
ncdirect_putegc()
to perform Unicode segmentation. It returns the number of columns consumed, and makes available the number of bytes used by the EGC. ncmenu
s can now be used with any plane, not just the standard plane.- Added
ncchannels_reverse()
, which reverses the color aspects of the two channels, while keeping other elements constant. CHANNELS_RGB_INITIALIZER
andCHANNEL_RGB_INITIALIZER
have been renamedNCCHANNELS_INITIALIZER
andNCCHANNEL_INITIALIZER
. The former two are now deprecated, and will be removed for ABI3.