Skip to content

Releases: dankamongmen/notcurses

v2.0.0—stankonia

12 Oct 16:33
v2.0.0
65974ae
Compare
Choose a tag to compare

Reading two pages apiece of seven books every night, eh? I was young. You bowed to yourself in the mirror, stepping forward to applause earnestly, striking face. Hurray for the Goddamned idiot! Hray! No-one saw: tell no-one. Books you were going to write with letters for titles. Have you read his F? O yes, but I prefer Q. Yes, but W is wonderful. O yes, W. Remember your epiphanies on green oval leaves, deeply deep, copies to be sent if you died to all the great libraries of the world, including Alexandria? Someone was to read them there after a few thousand years, a mahamanvantara.
—James Joyce, Ulysses

On this twentieth anniversary of the release of Outkast's sublime Stankonia, I am pleased to announce the 2.0 release of Notcurses, a blingful library for character graphics and TUIs. The 2.0 release marks the first stable Notcurses API, following almost a year of intense development. Subsequent releases will follow the rules of semantic versioning, and maintain backwards compatibility. In addition to the demo included with Notcurses, two large applications have been successfully ported from NCURSES to Notcurses:

Notcurses supports both RGB and palette-indexed color natively throughout its APIs, color blending, a z-axis and planes of arbitrary area, Unicode EGCs as primary visual entities, image and video support via FFmpeg or OIIO, and a number of widgets for quickly constructing TUIs. Additionally, it provides sane and well-specified support for multithreaded use. It is built atop terminfo, and thus supports all manner of older terminals while making full use of modern implementations. On the Linux virtual console, it reprograms the font tables for improved output.

Notcurses was built in the spirit of NCURSES, but is not a source-compatible implementation of X/Open Curses (I believe the Notcurses API to be a great improvement). With that said, porting the two applications above took less than two days each, resulting in a net cut of thousands of lines. Widgets include single-item selectors, combination boxes, menus, scrolling input text areas, file and subprocess displays, and the powerful "reel" abstraction used by both Growlight and Omphalos.

Close attention has been paid to efficiency during Notcurses development, and indeed the notcurses-demo program provides a fine benchmarking platform for terminal emulators. Notcurses can render and write out tens of thousands of frames per second, far outpacing any known display technology. Notcurses supports both full-screen mode and "direct mode", the latter allowing output to be freely intermixed with other standard I/O.

With the guarantee of a stable, proven API, I believe Notcurses to be among the best platforms for new C/C++/Rust TUI programs. Python wrappers are not yet complete, and Go wrappers are nascent, but they'll be coming soon (help wanted!). Try out notcurses-view (an image/video viewer, much more efficient than mpv's TCT mode despite producing higher-quality output), notcurses-demo, or even notcurses-tetris from the source distribution. Use ncneofetch for low-effort posts to r/unixporn. Or just watch the demo, which is well-known for blowing minds.

is your terminal ready for this?!?

This is MCin right here! This is hip-hop!
—Wu-Tang Clan, Intro

60 issues were closed during the 2.0 milestone.

—Atlanta, 2020-10-12

v1.7.6—let the ocean swell dissolve away my past

10 Oct 00:07
v1.7.6
8c9611d
Compare
Choose a tag to compare

v1.7.5—no wife no whores no mustache

29 Sep 17:12
v1.7.5
20a49d0
Compare
Choose a tag to compare

v1.7.4—calm like a bomb

20 Sep 21:31
v1.7.4
f02263e
Compare
Choose a tag to compare

v1.7.3—made in america

20 Sep 01:27
v1.7.3
4459efa
Compare
Choose a tag to compare

Big API changes pursuant to committing to backwards-compatibility in the 2.0 release, which is likely coming before the end of September. Please consult NEWS.md.

v1.7.2—even better than the real thing

10 Sep 08:23
v1.7.2
bc097a5
Compare
Choose a tag to compare

v1.7.1—from the slums of shaolin

01 Sep 01:49
v1.7.1
70f062a
Compare
Choose a tag to compare

v1.7.0—don't pull the bang out unless you plan to bang

30 Aug 23:12
v1.7.0
64fe8f6
Compare
Choose a tag to compare

1.7.0 is the last major release before 2.0.0. It represents 143 closed issues, 634 commits, and almost exactly two months' development work. It was released one day ahead of schedule (original target: 2020-09-01). GNU libunistring is now necessary for building or linking Notcurses.

2020-08-30-220232_3434x857_scrot

Release Notes

  • Manipulation of the Linux kernel font tables to vastly improve appearance on the Linux console
    • This can be disabled with new option NCOPTION_NO_FONT_CHANGES to notcurses_init()
  • Significantly developed out the ncdirect mode:
    • Added ncdirect_flush()
    • Added ncdirect_getc(), ncdirect_getc_blocking(), ncdirect_inputready_fd() and ncdirect_getc_nblock()
    • ncdirect now puts the terminal into cbreak mode for immediate access to input
    • Added ncdirect_hline_interp() and ncdirect_vline_interp()
    • Added ncdirect_double_box(), ncdirect_rounded_box(), and the ridiculously flexible ncdirect_box()
  • Add new zoo demo
  • ncplane_puttext() now observes Unicode word/line breaks and preserves whitespace
  • EGCs are now inlined into cells whenever they encode to four UTF8 bytes are fewer, for significant perf/mem wins
    • cell_simple_p() has been removed, as it is no longer a meaningful concept
    • cell_egc_idx() is no longer exported (it was never meant for users)
  • channels_blend() is no longer exported (it was never meant for users)
  • NCOPTION_RETAIN_CURSOR has been removed
    • notcurses_cursor_enable() now accepts a coordinate to place the terminal cursor
  • ncreader now supports horizontal scrolling via NCREADER_OPTION_HORSCROLL
  • Convenience functions ncreader_move_{left, right, up, down}() and ncreader_write_egc() have been added
  • The egc member of ncreader_options is now const
  • Added ncplane_above() and notcurses_bottom() to match ncplane_below() and notcurses_top()
  • Rust wrappers have been significantly improved by @joseluis
  • New notcurses-direct-pydemo uses Python ncdirect wrappers
  • ncdirect now attempts to set the locale, ala regular notcurses
  • ncneofetch works in all tested terminal geometries
  • Several subtle bugs regarding interaction of wide glyphs with narrow glyphs on higher planes were fixed
  • Menu items can now be selected with the mouse. Add ncmenu_mouse_selection()
  • PageDown/PageUp now work on ncselector and ncmultiselector
  • Plots can now be titled
  • When the alternative screen is desired, but unavailable, clear the screen in notcurses_init()
  • ncselector can now have items added/removed at runtime
  • Channel coloring is no longer inverted on plots
  • notcurses-view now prints the active blitter in the summary bar
  • We now work properly on fbterm and vt100
  • Added ncplane_parent() and ncplane_parent_const()
  • We now support musl as an alternative libc
  • Planes can now be named, though these names are only used in notcurses_debug()
    • Added ncplane_new_named(), ncplane_bound_named(), and ncplane_aligned_named()
  • ncdirect_init() now takes a third uint64_t flags parameter. No flags have been defined as of yet.
  • New convenience functions ncplane_y() and ncplane_x()
  • ncreel_*() now call ncreel_redraw() themselves. Users only need call it when desiring a refresh of tablet data.
  • The tabletfxn used by ncreel for each nctablet has been greatly simplified.
  • Many elements of ncreel_options have been removed; they are taken from the containing ncplane
  • Many bug fixes in ncreel
  • Add cell_set_fg_palindex() and cell_set_bg_palindex()
  • Added ncplane_set_fchannel() and ncplane_set_bchannel()
  • Add iprefix() between bprefix() and qprefix()
  • ncplane_mergedown() has been generalized to accept arbitrary planes and subregions.
    • The old behavior and signature are available as ncplane_mergedown_simple()
  • Our CMake module has been renamed Notcurses from notcurses to better conform to CMake conventions
  • Added notcurses_lex_blitter(), notcurses_str_blitter(), and notcurses_str_scalemode()
  • Added notcurses_version_components()
  • Added notcurses_render_file() to dump last rendered frame to a FILE*

Make a business for yourself, boy, set some goals / Make a fat diamond out of dusty coals / Record number four, but we on a roll / Hold up, slow up, stop, "Control!" / Like Janet, Planet Stankonia's on ya / Moving like Floyd, comin' straight to Florida / Lock all your windows, then block the corridors / Pullin' off my belt 'cause a whipping's in order / Like a three-piece fish before I cut your daughter / Yo quiero Taco Bell, then I hit the border / Pity pat rappers trying to get to 5 / I'm a microphone fiend tryin' to stay alive / When you come to ATL, boy, you better not hide / 'Cause the Dungeon Family gon' ride, high!

v1.6.20—you kept me closer to god

30 Aug 05:25
v1.6.20
c93243f
Compare
Choose a tag to compare

v1.6.19—bitch, you have no future

27 Aug 16:43
v1.6.19
e92b7fd
Compare
Choose a tag to compare

among other things, fixes numerous subtle bugs on big-endian architectures resulting from EGC inlining.