github dankamongmen/notcurses v2.4.4
v2.4.4—no scrubs

latest releases: v3.0.11, v3.0.10, v3.10.0...
3 years ago

haxorec47

Qui si convien lasciare ogne sospetto; ogne viltà convien che qui sia morta.
—Dante Alighieri, The Inferno, Canto III, 14-15

I am dankamongmen, wrangler of automata! Look upon my works, ye Mighty, and despair! This release sees the much-heralded unification of input automata, and the most complex bit of coding since at least the initial pixel blitter work, and very possibly the most complex code in the project. Essentially, we have two sources of input escape sequences we need match: simple strings dynamically loaded from terminfo, and regex-like sequences statically hardcoded into the library. Previously, we had two distinct automata: a dataflow-based one for the (acquired at runtime) terminfo sequences, and a controlflow-based one for the (known ahead of time, but more complex) response sequences. Being a man of taste and means, this was completely aesthetically unacceptable. We now build a single, wholly dynamic, dataflow-based automaton encompassing all possible control sequence inputs. Being much too cool/stupid/autistic to simply string together some ɛ-transitions (are we remembering our Sipser, or perhaps our Hopcroft+Ullman, friends?), spool out a GNFA, take the power set, apply Glushkov/Thompson and reduce that fucker (the idea of using some other jabronie's DFA library was of course never considered), we build the reduced DFA on the fly, which is probably way more difficult than you think.

i am not left-handed, either

I've tested it in my standard set of testing terminals, and held off from release until it seemed perfect in all. I'm sure you'l find some small (or larger) issues, though, so please file bugs and have a little patience. It's been a long week.

Besides that...

  • Notcurses no longer uses libreadline, as it was realized to be incompatible with the new input system. ncdirect_readline() has been rewritten to work without libreadline, which means it's now always available (readline was an optional dependency). NCDIRECT_OPTION_INHIBIT_CBREAK should not be used with ncdirect_readline(), or else it can't implement line-editing keybindings. Packagers, please stop supplying -DUSE_READLINE to CMake, and drop libreadline from Notcurses dependencies.
  • ncwcsrtombs() has been added to convert a wchar_t* to a heap-allocated, UTF8-encoded char*.
  • For those of you paying by the electron, -DUSE_CPP=off can now avoid any need for a C++ compiler. This cannot be used with -DUSE_MULTIMEDIA=oiio, since OpenImageIO is fundamentally C++. You also won't be able to build the NCPP C++ wrappers, natch, nor notcurses-tester, notcurses-input, ncplayer, nor even humble nctetris.

So. Not the most exciting release for y'all, but very exciting for me. Next time, more cool shit you can use!

Don't miss a new notcurses release

NewReleases is sending notifications on new releases.