github dankamongmen/notcurses v1.6.0
v1.6.0—aquemini

latest releases: v3.0.9, v3.0.8, v3.0.7...
3 years ago

notcurses 1.6.0 “aquemini”


I wouldn't name a release after my favorite Outkast album if it wasn't fresh off the dank, but this is definitely the finest Notcurses release ever. I am no longer aware of any truly outstanding bugs or omissions. Hail Eris, All Hail Discordia!

API change has decelerated tremendously, with far fewer user-visible changes between 1.5.0 and 1.6.0 than any other 1.x transition. This will ideally be the last 1.x.0 release. As declared since 1.0, we will begin using semantic versioning with 2.0, at which point incompatible API changes will be very infrequent.

This development cycle added the new binary ncneofetch, an homage to/parody of neofetch. Ours typically runs in less than half a second, whereas the latter (a bash script) tends to require at least five seconds. ncneofetch uses the Quadblitter to provide vivid graphics even in the (common) absence of Sixel. I hope to see it all over r/unixporn and places of such ilk; make me proud. The dragon demo (a dragon curve via method of Lindenmeyer system) has been added, and the normal demo (a Mandelbrot fractal) has been jazzed up.

The semantics of rendering have changed slightly. Previously, if a cell had no EGC, that cell was replaced (for purposes of rendering) entirely by its plane's base cell. An upshot of this was that it was not possible to use a plane to set varying translucent color without being opaque to glyphs. The cell is now applied in a tripartite fashion; its EGC is used if the EGC is set, its foreground is used if its foreground is set, and its background is used if its background is set (attributes continue to go with the EGC). See #395 for more information.

The Quadblitter aka NCBLIT_2x2 has replaced NCBLIT_2x1 as the default blitter when NCSCALE_STRETCH is used. NCBLIT_2x2 is not the general default because it changes aspect ratio, but anyone using NCSCALE_STRETCH has indicated that they don't care about aspect ratios or interpolations. They will thus benefit from the additional resolution. Additionally, several small bugs in the Quadblitter were identified and fixed; it is now AFAIK the absolute state of the art.

Both full mode and direct mode have always accepted a FILE*, which is interpreted to be stdout when NULL. Before, all input and output went through this FILE* (or a file descriptor extracted from it). Both full and direct mode will now inspect this FILE* to see if it is a tty, and if not, attempt to open the controlling terminal. Things which need go to an actual terminal will be sent to one (ioctl()s, cursor lookup escapes, etc.), and things which needn't go there will go to the supplied FILE*. With this change, the vast majority of Notcurses programs will now run sanely when input and/or output is redirected to a file or pipe. If there is no controlling tty, and a FILE* corresponding to a tty is not provided, Notcurses will fake a 80x24 geometry when client code inquires. This should only happen if e.g. the process runs as a true daemon. An upshot of all this is that the full test suite is now run on my Drone autobuilder (well, it would be).

Speaking of ncdirect, it's been augmented with several new features, most particularly ncdirect_render_image(). ncneofetch was rewritten this week to use ncdirect mode, thus more closely following the behavior of neofetch.

All in all, 57 issues were closed this development cycle, across ~210 commits. The 1.5.2 demo is still fairly representative. We've added Alpine Edge to our COVID-like spread through the herd of distros. We now successfully build with musl libc. The ncplane_puttext() free layout engine has been rigourized and is ready for general use, which it'll see in colloquy soon enough. ncplane_qrcode() and ncvisual_geometry() were modified to accept an ncblitter_e and ncvisual_opts, respectively. The former can now use any blitter; the latter now takes NCVISUAL_OPTION_MAYDEGRADE and scaling into account for its calculations.

Everything else is pretty much subtle bugfixes and optimizations, of which there were a good many. Widget support for ASCII mode, for those marginalized souls in desperate need of like an emergency airlift of Unicode Data Files and POSIX locales, some of them unable to scrape together the necessary kopeks to buy a LANG environment variable, has been significantly improved.

hack on! —dank

I met a gypsy and she hipped me to some life game
To stimulate then activate the left and right brain
Said "baby boy, you only funky as your last cut—
you focus on the past, your ass'll be a has-what."
That's one to live by, or either that one to die to,
I try to just throw it at you; determine your own adventure. —Rosa Parks

2020-07-04-070010_936x936_scrot

Don't miss a new notcurses release

NewReleases is sending notifications on new releases.